pub struct Scope { /* private fields */ }
Expand description
A hierarchy of atoms with semi-standardized names used to accord semantic information to a specific piece of text.
These are generally written with the atoms separated by dots, and - by convention - atoms are all lowercase alphanumeric.
Example scopes: text.plain
, punctuation.definition.string.begin.ruby
,
meta.function.parameters.rust
syntect
uses an optimized format for storing these that allows super fast comparison and
determining if one scope is a prefix of another. It also always takes 16 bytes of space. It
accomplishes this by using a global repository to store string values and using bit-packed 16
bit numbers to represent and compare atoms. Like “atoms” or “symbols” in other languages. This
means that while comparing and prefix are fast, extracting a string is relatively slower but
ideally should be very rare.
Implementations§
source§impl Scope
impl Scope
sourcepub fn new(s: &str) -> Result<Scope, ParseScopeError>
pub fn new(s: &str) -> Result<Scope, ParseScopeError>
Parses a Scope
from a series of atoms separated by dot (.
) characters
Example: Scope::new("meta.rails.controller")
sourcepub fn atom_at(self, index: usize) -> u16
pub fn atom_at(self, index: usize) -> u16
Gets the atom number at a given index.
I can’t think of any reason you’d find this useful. It is used internally for turning a scope back into a string.
pub fn is_empty(self) -> bool
sourcepub fn build_string(self) -> String
pub fn build_string(self) -> String
Returns a string representation of this scope
This requires locking a global repo and shouldn’t be done frequently.
sourcepub fn is_prefix_of(self, s: Scope) -> bool
pub fn is_prefix_of(self, s: Scope) -> bool
Tests if this scope is a prefix of another scope. Note that the empty scope is always a prefix.
This operation uses bitwise operations and is very fast
Examples
use syntect::parsing::Scope;
assert!( Scope::new("string").unwrap()
.is_prefix_of(Scope::new("string.quoted").unwrap()));
assert!( Scope::new("string.quoted").unwrap()
.is_prefix_of(Scope::new("string.quoted").unwrap()));
assert!( Scope::new("").unwrap()
.is_prefix_of(Scope::new("meta.rails.controller").unwrap()));
assert!(!Scope::new("source.php").unwrap()
.is_prefix_of(Scope::new("source").unwrap()));
assert!(!Scope::new("source.php").unwrap()
.is_prefix_of(Scope::new("source.ruby").unwrap()));
assert!(!Scope::new("meta.php").unwrap()
.is_prefix_of(Scope::new("source.php").unwrap()));
assert!(!Scope::new("meta.php").unwrap()
.is_prefix_of(Scope::new("source.php.wow").unwrap()));
Trait Implementations§
source§impl<'de> Deserialize<'de> for Scope
impl<'de> Deserialize<'de> for Scope
source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where D: Deserializer<'de>,
source§impl Ord for Scope
impl Ord for Scope
source§impl PartialEq<Scope> for Scope
impl PartialEq<Scope> for Scope
source§impl PartialOrd<Scope> for Scope
impl PartialOrd<Scope> for Scope
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moreimpl Copy for Scope
impl Eq for Scope
impl StructuralEq for Scope
impl StructuralPartialEq for Scope
Auto Trait Implementations§
impl RefUnwindSafe for Scope
impl Send for Scope
impl Sync for Scope
impl Unpin for Scope
impl UnwindSafe for Scope
Blanket Implementations§
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.