Struct uvls::core::ast::AstDocument
source · pub struct AstDocument {
ast: Ast,
pub source: Rope,
pub tree: Tree,
pub timestamp: Instant,
pub errors: Vec<ErrorInfo>,
pub path: Vec<Ustr>,
pub uri: Url,
pub id: FileID,
}
Expand description
Combines the AST with metadata, this is also a public interface to the AST.
Fields§
§ast: Ast
§source: Rope
§tree: Tree
§timestamp: Instant
§errors: Vec<ErrorInfo>
§path: Vec<Ustr>
§uri: Url
§id: FileID
Implementations§
source§impl AstDocument
impl AstDocument
pub fn parent(&self, sym: Symbol, merge_root_features: bool) -> Option<Symbol>
pub fn name(&self, sym: Symbol) -> Option<Ustr>
sourcepub fn all_lang_lvls(&self) -> impl Iterator<Item = Symbol>
pub fn all_lang_lvls(&self) -> impl Iterator<Item = Symbol>
iterators over diffrent symbole types in the tree
pub fn all_imports(&self) -> impl Iterator<Item = Symbol> + DoubleEndedIterator
pub fn get_import(&self, index: usize) -> Option<&Import>
pub fn all_features(&self) -> impl Iterator<Item = Symbol>
pub fn get_feature(&self, index: usize) -> Option<&Feature>
pub fn containe_feature(&self, name: Ustr) -> bool
pub fn get_attribute(&self, index: usize) -> Option<&Attribute>
pub fn all_attributes(&self) -> impl Iterator<Item = Symbol>
pub fn containe_attribute(&self, name: Ustr) -> bool
pub fn all_references(&self) -> impl Iterator<Item = Symbol>
pub fn all_constraints(&self) -> impl Iterator<Item = Symbol>
pub fn lang_lvl(&self, sym: Symbol) -> Option<&LanguageLevel>
pub fn group_mode(&self, sym: Symbol) -> Option<GroupMode>
pub fn constraint(&self, sym: Symbol) -> Option<&ConstraintDecl>
pub fn constraints(&self) -> &[ConstraintDecl]
pub fn imports(&self) -> &[Import]
pub fn value(&self, sym: Symbol) -> Option<&Value>
pub fn direct_children( &self, sym: Symbol, ) -> impl Iterator<Item = Symbol> + DoubleEndedIterator + '_
pub fn get_reference(&self, index: usize) -> Option<&Reference>
pub fn lsp_range(&self, sym: Symbol) -> Option<Range>
pub fn span(&self, sym: Symbol) -> Option<Range<usize>>
pub fn namespace(&self) -> Option<&Path>
pub fn path(&self, sym: Symbol) -> &[Ustr]
pub fn import_prefix(&self, sym: Symbol) -> &[Ustr]
pub fn depth(&self, sym: Symbol) -> u32
sourcepub fn lookup<'a, F: Fn(Symbol) -> bool + 'a>(
&'a self,
root: Symbol,
path: &'a [Ustr],
filter: F,
) -> impl Iterator<Item = Symbol> + 'a
pub fn lookup<'a, F: Fn(Symbol) -> bool + 'a>( &'a self, root: Symbol, path: &'a [Ustr], filter: F, ) -> impl Iterator<Item = Symbol> + 'a
Find all symboles under root with prefix path. Search branches can be aborted with a filter
sourcepub fn lookup_import<'a>(
&'a self,
path: &'a [Ustr],
) -> impl Iterator<Item = (Symbol, &'a [Ustr])>
pub fn lookup_import<'a>( &'a self, path: &'a [Ustr], ) -> impl Iterator<Item = (Symbol, &'a [Ustr])>
Find imports for any prefix of path
sourcepub fn lookup_with_binding<'a, F: Fn(Symbol) -> bool + 'a>(
&'a self,
root: Symbol,
path: &'a [Ustr],
filter: F,
) -> impl Iterator<Item = Vec<Symbol>> + 'a
pub fn lookup_with_binding<'a, F: Fn(Symbol) -> bool + 'a>( &'a self, root: Symbol, path: &'a [Ustr], filter: F, ) -> impl Iterator<Item = Vec<Symbol>> + 'a
Also track the binding for path, each segment of path has some symbole bound to it
sourcepub fn get_all_entities(&self, path: &[Ustr]) -> Vec<Symbol>
pub fn get_all_entities(&self, path: &[Ustr]) -> Vec<Symbol>
returns all Symbols with same name, used for cardinality resolving
pub fn get_symbols(&self, path: Ustr) -> Vec<Symbol>
pub fn type_of(&self, sym: Symbol) -> Option<Type>
pub fn find(&self, offset: usize) -> Option<Symbol>
sourcepub fn visit_named_children<F: FnMut(Symbol, &[Ustr]) -> bool>(
&self,
root: Symbol,
merge_root_features: bool,
f: F,
)
pub fn visit_named_children<F: FnMut(Symbol, &[Ustr]) -> bool>( &self, root: Symbol, merge_root_features: bool, f: F, )
All children under root, when merge_root_features sub features are ignored
sourcepub fn visit_named_children_depth<F: FnMut(Symbol, &[Ustr], usize) -> bool>(
&self,
root: Symbol,
merge_root_features: bool,
f: F,
)
pub fn visit_named_children_depth<F: FnMut(Symbol, &[Ustr], usize) -> bool>( &self, root: Symbol, merge_root_features: bool, f: F, )
Iterate all named symbole under root and track their prefix from root
pub fn visit_children<F: FnMut(Symbol) -> bool>( &self, root: Symbol, merge_root_features: bool, f: F, )
pub fn find_all_of(&self, name: Ustr) -> Vec<Symbol>
sourcepub fn visit_children_depth<F: FnMut(Symbol, u32) -> bool>(
&self,
root: Symbol,
merge_root_features: bool,
f: F,
)
pub fn visit_children_depth<F: FnMut(Symbol, u32) -> bool>( &self, root: Symbol, merge_root_features: bool, f: F, )
Iterate all named symbole under root
sourcepub fn visit_attributes<'a, F: FnMut(Symbol, Symbol, &[Ustr])>(
&self,
root: Symbol,
f: F,
)
pub fn visit_attributes<'a, F: FnMut(Symbol, Symbol, &[Ustr])>( &self, root: Symbol, f: F, )
Iterate all attributes under root, and track theire associated feature
pub fn new(source: Rope, tree: Tree, uri: Url, timestamp: Instant) -> Self
Trait Implementations§
source§impl Clone for AstDocument
impl Clone for AstDocument
source§fn clone(&self) -> AstDocument
fn clone(&self) -> AstDocument
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl Freeze for AstDocument
impl RefUnwindSafe for AstDocument
impl Send for AstDocument
impl Sync for AstDocument
impl Unpin for AstDocument
impl UnwindSafe for AstDocument
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
Mutably borrows from an owned value. Read more
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)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more