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 moresource§impl Debug for IdentifierType
impl Debug for IdentifierType
source§impl Default for IdentifierType
impl Default for IdentifierType
source§impl FromStr for IdentifierType
impl FromStr for IdentifierType
source§impl Hash for IdentifierType
impl Hash for IdentifierType
source§impl Ord for IdentifierType
impl Ord for IdentifierType
source§fn cmp(&self, other: &IdentifierType) -> Ordering
fn cmp(&self, other: &IdentifierType) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq for IdentifierType
impl PartialEq for IdentifierType
source§impl PartialOrd for IdentifierType
impl PartialOrd for IdentifierType
source§impl TryFrom<&[u8]> for IdentifierType
impl TryFrom<&[u8]> for IdentifierType
source§impl TryFrom<&str> for IdentifierType
impl TryFrom<&str> for IdentifierType
impl Copy for IdentifierType
impl Eq for IdentifierType
impl StructuralPartialEq for IdentifierType
Auto Trait Implementations§
impl Freeze for IdentifierType
impl RefUnwindSafe for IdentifierType
impl Send for IdentifierType
impl Sync for IdentifierType
impl Unpin for IdentifierType
impl UnwindSafe for IdentifierType
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)