1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//! String types for oxc.
//!
//! This crate provides [`Str`], [`Ident`], and [`CompactStr`] for UTF-8 strings, and
//! [`JSStr`], [`JSChar`], and [`JSStrBuilder`] for JavaScript strings, including lone surrogates.
//!
//! # Naming
//!
//! Types are named for what a value means in JavaScript, as with [`JSStr`]
//! and [`JSChar`]. Storage, encoding, and ownership stay out of public names:
//! WTF-8 is an implementation detail, and whether a name borrows or owns its
//! text is the type's concern rather than the caller's.
//!
//! # Consuming `JSStr`
//!
//! A consumer that would otherwise need `str` decides what a lone surrogate
//! means for its check:
//!
//! - Comparisons with fixed names use `JSStr`'s `PartialEq<&str>` directly and
//! need no conversion. A value with a lone surrogate never equals one.
//! - Searches for fixed text, such as a prefix or a substring, use the
//! [`JSStrPattern`] methods ([`JSStr::contains`], [`JSStr::starts_with`],
//! [`JSStr::find`], and others), which search the value without converting it.
//! - User-configured patterns, such as regexes and globs, take UTF-8 text, so
//! they match only [`JSStr::as_str`]. A value with a lone surrogate matches no
//! pattern.
//! - A value shown to a person uses [`JSStr::display`] or the `Debug` form,
//! which escape the surrogate instead of replacing it.
//!
//! Declining when [`JSStr::as_str`] returns `None` is only safe where skipping
//! the work is conservative, as for an optional optimization or a lookup that
//! cannot match. Code that decides whether a program is valid, whether a
//! rewrite is safe, or what code to emit must handle the value instead of
//! skipping it.
pub use ;
pub use ;
pub use ;
pub use JSChar;
pub use ;
pub use JSStrBuilder;
pub use str::;