pub enum IdentifierType {
Junk,
Global,
Instance,
Class,
AttrSet,
Constant,
Local,
}
Expand description
Valid types for Ruby identifiers.
Spinoso symbol parses byte strings to determine if they are valid idents for
the Inspect
iterator (which requires the inspect Cargo feature to be
enabled). Symbols that are valid idents do not get wrapped in "
when
generating their debug output.
See variant documentation for the set of ident types.
IdentifierType
’s primary interface is through the TryFrom
and
FromStr
conversion traits. Parsing &str
and &[u8]
is supported.
§Examples – local variable
assert_eq!(
"spinoso".parse::<IdentifierType>(),
Ok(IdentifierType::Local)
);
assert_eq!(
"spinoso_symbol_features".parse::<IdentifierType>(),
Ok(IdentifierType::Local)
);
§Examples – constant
assert_eq!(
"Spinoso".parse::<IdentifierType>(),
Ok(IdentifierType::Constant)
);
assert_eq!(
"SpinosoSymbol".parse::<IdentifierType>(),
Ok(IdentifierType::Constant)
);
assert_eq!(
"SPINOSO_SYMBOL_FEATURES".parse::<IdentifierType>(),
Ok(IdentifierType::Constant)
);
§Examples – global
assert_eq!(
"$use_spinoso_symbol".parse::<IdentifierType>(),
Ok(IdentifierType::Global)
);
assert_eq!(
"$USE_SPINOSO_SYMBOL".parse::<IdentifierType>(),
Ok(IdentifierType::Global)
);
§Examples – instance and class variables
assert_eq!(
"@artichoke".parse::<IdentifierType>(),
Ok(IdentifierType::Instance)
);
assert_eq!(
"@@rumble".parse::<IdentifierType>(),
Ok(IdentifierType::Class)
);
§Example – attribute setter
Attribute setters are local idents that end in =
.
assert_eq!(
"artichoke=".parse::<IdentifierType>(),
Ok(IdentifierType::AttrSet)
);
assert_eq!(
"spinoso_symbol=".parse::<IdentifierType>(),
Ok(IdentifierType::AttrSet)
);
Variants§
Junk
Identifier that contains “junk”.
Junk mostly equates to non-sigil ASCII symbols. Identifiers like
empty?
and flatten!
are junk idents. All special symbolic Ruby
methods like <=>
and !~
are junk identifiers.
§Examples
assert_eq!("empty?".parse::<IdentifierType>(), Ok(IdentifierType::Junk));
assert_eq!(
"flatten!".parse::<IdentifierType>(),
Ok(IdentifierType::Junk)
);
assert_eq!("<=>".parse::<IdentifierType>(), Ok(IdentifierType::Junk));
assert_eq!("!~".parse::<IdentifierType>(), Ok(IdentifierType::Junk));
assert_eq!("[]".parse::<IdentifierType>(), Ok(IdentifierType::Junk));
assert_eq!("[]=".parse::<IdentifierType>(), Ok(IdentifierType::Junk));
assert_eq!("=~".parse::<IdentifierType>(), Ok(IdentifierType::Junk));
assert_eq!("==".parse::<IdentifierType>(), Ok(IdentifierType::Junk));
assert_eq!("===".parse::<IdentifierType>(), Ok(IdentifierType::Junk));
Global
Identifier that is a global variable name.
Global variables are prefixed with the sigil $
. There are two types of
global variables:
$
followed by aIdentifierType::Ident
sequence.- Special global variables, which include
Regexp
globals ($1
..$9
) and$-w
type globals.
§Examples
assert_eq!(
"$".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!("$foo".parse::<IdentifierType>(), Ok(IdentifierType::Global));
assert_eq!(
"$@foo".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!("$0".parse::<IdentifierType>(), Ok(IdentifierType::Global));
assert_eq!("$1".parse::<IdentifierType>(), Ok(IdentifierType::Global));
assert_eq!("$9".parse::<IdentifierType>(), Ok(IdentifierType::Global));
assert_eq!("$-w".parse::<IdentifierType>(), Ok(IdentifierType::Global));
assert_eq!(
"$-www".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
Instance
Identifier that is an instance variable name.
Instance variables are prefixed with a single @
sigil. The remaining
bytes must be a valid Constant
or Local
ident.
§Examples
assert_eq!(
"@".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!(
"@foo".parse::<IdentifierType>(),
Ok(IdentifierType::Instance)
);
assert_eq!(
"@Foo".parse::<IdentifierType>(),
Ok(IdentifierType::Instance)
);
assert_eq!(
"@FOO".parse::<IdentifierType>(),
Ok(IdentifierType::Instance)
);
assert_eq!(
"@foo_bar".parse::<IdentifierType>(),
Ok(IdentifierType::Instance)
);
assert_eq!(
"@FooBar".parse::<IdentifierType>(),
Ok(IdentifierType::Instance)
);
assert_eq!(
"@FOO_BAR".parse::<IdentifierType>(),
Ok(IdentifierType::Instance)
);
assert_eq!(
"@$foo".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!(
"@0".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!(
"@1".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!(
"@9".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
Class
Identifier that is a class variable name.
Class variables are prefixed with a double @@
sigil. The remaining
bytes must be a valid Constant
or Local
ident.
§Examples
assert_eq!(
"@@".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!("@@foo".parse::<IdentifierType>(), Ok(IdentifierType::Class));
assert_eq!("@@Foo".parse::<IdentifierType>(), Ok(IdentifierType::Class));
assert_eq!("@@FOO".parse::<IdentifierType>(), Ok(IdentifierType::Class));
assert_eq!(
"@@foo_bar".parse::<IdentifierType>(),
Ok(IdentifierType::Class)
);
assert_eq!(
"@@FooBar".parse::<IdentifierType>(),
Ok(IdentifierType::Class)
);
assert_eq!(
"@@FOO_BAR".parse::<IdentifierType>(),
Ok(IdentifierType::Class)
);
assert_eq!(
"@@$foo".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!(
"@@0".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!(
"@@1".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!(
"@@9".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
AttrSet
Identifier that is an “attribute setter” method name.
AttrSet
idents end in the =
sigil and are otherwise valid Local
or Constant
idents. AttrSet
idents cannot have any other “junk”
symbols.
§Examples
assert_eq!(
"Foo=".parse::<IdentifierType>(),
Ok(IdentifierType::AttrSet)
);
assert_eq!(
"foo=".parse::<IdentifierType>(),
Ok(IdentifierType::AttrSet)
);
assert_eq!(
"foo_bar=".parse::<IdentifierType>(),
Ok(IdentifierType::AttrSet)
);
assert_eq!(
"foo_bar?=".parse::<IdentifierType>(),
Err(ParseIdentifierError::new())
);
assert_eq!("ω=".parse::<IdentifierType>(), Ok(IdentifierType::AttrSet));
Constant
Identifier that is a constant name.
Constant names can be either ASCII or Unicode and must start with a uppercase character.
§Examples
assert_eq!(
"Foo".parse::<IdentifierType>(),
Ok(IdentifierType::Constant)
);
assert_eq!(
"FOO".parse::<IdentifierType>(),
Ok(IdentifierType::Constant)
);
assert_eq!(
"FooBar".parse::<IdentifierType>(),
Ok(IdentifierType::Constant)
);
assert_eq!(
"FOO_BAR".parse::<IdentifierType>(),
Ok(IdentifierType::Constant)
);
assert_eq!("Ω".parse::<IdentifierType>(), Ok(IdentifierType::Constant));
Local
Identifier that is a local variable or method name.
Local names can be either ASCII or Unicode and must start with a lowercase character.
§Examples
assert_eq!("foo".parse::<IdentifierType>(), Ok(IdentifierType::Local));
assert_eq!("fOO".parse::<IdentifierType>(), Ok(IdentifierType::Local));
assert_eq!(
"fooBar".parse::<IdentifierType>(),
Ok(IdentifierType::Local)
);
assert_eq!(
"foo_bar".parse::<IdentifierType>(),
Ok(IdentifierType::Local)
);
assert_eq!("ω".parse::<IdentifierType>(), Ok(IdentifierType::Local));
Implementations§
Trait Implementations§
Source§impl Clone for IdentifierType
impl Clone for IdentifierType
Source§fn clone(&self) -> IdentifierType
fn clone(&self) -> IdentifierType
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more