Struct js_source_scopes::ScopeIndex
source · pub struct ScopeIndex { /* private fields */ }
Expand description
An indexed structure of scopes that allows quick lookup by byte offset.
Construction of the index will validate that the scopes are well nested and
parents fully contain their children. A list of scopes that are not well
nested will result in an Err
on construction.
Examples
use js_source_scopes::{ScopeIndex, ScopeLookupResult};
let scopes = vec![
(5..25, Some(String::from("parent"))),
(10..15, Some(String::from("child"))),
(20..25, Some(String::from("child2"))),
(30..50, None),
];
let idx = ScopeIndex::new(scopes).unwrap();
assert_eq!(idx.lookup(3), ScopeLookupResult::Unknown);
assert_eq!(idx.lookup(12), ScopeLookupResult::NamedScope("child"));
assert_eq!(idx.lookup(40), ScopeLookupResult::AnonymousScope);
Implementations§
source§impl ScopeIndex
impl ScopeIndex
sourcepub fn new(
scopes: Vec<(Range<u32>, Option<String>)>
) -> Result<Self, ScopeIndexError>
pub fn new(
scopes: Vec<(Range<u32>, Option<String>)>
) -> Result<Self, ScopeIndexError>
Creates a new Scope index from the given list of Scopes.
sourcepub fn lookup(&self, offset: u32) -> ScopeLookupResult<'_>
pub fn lookup(&self, offset: u32) -> ScopeLookupResult<'_>
Looks up the scope corresponding to the given offset
.
sourcepub fn iter(&self) -> impl Iterator<Item = (u32, ScopeLookupResult<'_>)>
pub fn iter(&self) -> impl Iterator<Item = (u32, ScopeLookupResult<'_>)>
Returns an iterator over the scopes in this index and their starting offsets.
Scopes are returned in order of their starting offsets.