pub struct Namer {
unique: FastHashMap<String, u32>,
keywords: FastHashSet<&'static str>,
keywords_case_insensitive: FastHashSet<AsciiUniCase<&'static str>>,
reserved_prefixes: Vec<&'static str>,
}
Expand description
This processor assigns names to all the things in a module that may need identifiers in a textual backend.
Fields§
§unique: FastHashMap<String, u32>
The last numeric suffix used for each base name. Zero means “no suffix”.
keywords: FastHashSet<&'static str>
§keywords_case_insensitive: FastHashSet<AsciiUniCase<&'static str>>
§reserved_prefixes: Vec<&'static str>
Implementations§
source§impl Namer
impl Namer
sourcefn sanitize<'s>(&self, string: &'s str) -> Cow<'s, str>
fn sanitize<'s>(&self, string: &'s str) -> Cow<'s, str>
Return a form of string
suitable for use as the base of an identifier.
- Drop leading digits.
- Retain only alphanumeric and
_
characters. - Avoid prefixes in
Namer::reserved_prefixes
. - Replace consecutive
_
characters with a single_
character.
The return value is a valid identifier prefix in all of Naga’s output languages,
and it never ends with a SEPARATOR
character.
It is used as a key into the unique table.
sourcepub fn call(&mut self, label_raw: &str) -> String
pub fn call(&mut self, label_raw: &str) -> String
Return a new identifier based on label_raw
.
The result:
- is a valid identifier even if
label_raw
is not - conflicts with no keywords listed in
Namer::keywords
, and - is different from any identifier previously constructed by this
Namer
.
Guarantee uniqueness by applying a numeric suffix when necessary. If label_raw
itself ends with digits, separate them from the suffix with an underscore.
pub fn call_or(&mut self, label: &Option<String>, fallback: &str) -> String
sourcefn namespace(&mut self, capacity: usize, body: impl FnOnce(&mut Self))
fn namespace(&mut self, capacity: usize, body: impl FnOnce(&mut Self))
Enter a local namespace for things like structs.
Struct member names only need to be unique amongst themselves, not
globally. This function temporarily establishes a fresh, empty naming
context for the duration of the call to body
.