hir

Struct SemanticsImpl

source
pub struct SemanticsImpl<'db> {
    pub db: &'db dyn HirDatabase,
    /* private fields */
}

Fields§

§db: &'db dyn HirDatabase

Implementations§

source§

impl<'db> SemanticsImpl<'db>

source

pub fn parse(&self, file_id: EditionedFileId) -> SourceFile

source

pub fn attach_first_edition(&self, file: FileId) -> Option<EditionedFileId>

source

pub fn parse_guess_edition(&self, file_id: FileId) -> SourceFile

source

pub fn find_parent_file(&self, file_id: HirFileId) -> Option<InFile<SyntaxNode>>

source

pub fn module_definition_node(&self, module: Module) -> InFile<SyntaxNode>

Returns the SyntaxNode of the module. If this is a file module, returns the SyntaxNode of the definition file, not of the declaration.

source

pub fn parse_or_expand(&self, file_id: HirFileId) -> SyntaxNode

source

pub fn expand(&self, file_id: MacroFileId) -> ExpandResult<SyntaxNode>

source

pub fn expand_macro_call(&self, macro_call: &MacroCall) -> Option<SyntaxNode>

source

pub fn check_cfg_attr(&self, attr: &TokenTree) -> Option<bool>

source

pub fn expand_allowed_builtins( &self, macro_call: &MacroCall, ) -> Option<ExpandResult<SyntaxNode>>

Expands the macro if it isn’t one of the built-in ones that expand to custom syntax or dummy expansions.

source

pub fn expand_attr_macro(&self, item: &Item) -> Option<ExpandResult<SyntaxNode>>

If item has an attribute macro attached to it, expands it.

source

pub fn expand_derive_as_pseudo_attr_macro( &self, attr: &Attr, ) -> Option<SyntaxNode>

source

pub fn resolve_derive_macro(&self, attr: &Attr) -> Option<Vec<Option<Macro>>>

source

pub fn expand_derive_macro( &self, attr: &Attr, ) -> Option<Vec<ExpandResult<SyntaxNode>>>

source

pub fn is_derive_annotated(&self, adt: &Adt) -> bool

source

pub fn derive_helpers_in_scope( &self, adt: &Adt, ) -> Option<Vec<(Symbol, Symbol)>>

source

pub fn derive_helper(&self, attr: &Attr) -> Option<Vec<(Macro, MacroFileId)>>

source

pub fn is_attr_macro_call(&self, item: &Item) -> bool

source

pub fn speculative_expand_macro_call( &self, actual_macro_call: &MacroCall, speculative_args: &TokenTree, token_to_map: SyntaxToken, ) -> Option<(SyntaxNode, SyntaxToken)>

Expand the macro call with a different token tree, mapping the token_to_map down into the expansion. token_to_map should be a token from the speculative args node.

source

pub fn speculative_expand_raw( &self, macro_file: MacroFileId, speculative_args: &SyntaxNode, token_to_map: SyntaxToken, ) -> Option<(SyntaxNode, SyntaxToken)>

source

pub fn speculative_expand_attr_macro( &self, actual_macro_call: &Item, speculative_args: &Item, token_to_map: SyntaxToken, ) -> Option<(SyntaxNode, SyntaxToken)>

Expand the macro call with a different item as the input, mapping the token_to_map down into the expansion. token_to_map should be a token from the speculative args node.

source

pub fn speculative_expand_derive_as_pseudo_attr_macro( &self, actual_macro_call: &Attr, speculative_args: &Attr, token_to_map: SyntaxToken, ) -> Option<(SyntaxNode, SyntaxToken)>

source

pub fn as_format_args_parts( &self, string: &String, ) -> Option<Vec<(TextRange, Option<Either<PathResolution, InlineAsmOperand>>)>>

Retrieves all the formatting parts of the format_args! (or asm!) template string.

source

pub fn check_for_format_args_template( &self, original_token: SyntaxToken, offset: TextSize, ) -> Option<(TextRange, Option<Either<PathResolution, InlineAsmOperand>>)>

Retrieves the formatting part of the format_args! template string at the given offset.

source

pub fn descend_node_into_attributes<N: AstNode>( &self, node: N, ) -> SmallVec<[N; 1]>

Maps a node down by mapping its first and last token down.

source

pub fn might_be_inside_macro_call(&self, token: &SyntaxToken) -> bool

Does a syntactic traversal to check whether this token might be inside a macro call

source

pub fn descend_into_macros_cb( &self, token: SyntaxToken, cb: impl FnMut(InFile<SyntaxToken>, SyntaxContextId), )

source

pub fn descend_into_macros( &self, token: SyntaxToken, ) -> SmallVec<[SyntaxToken; 1]>

source

pub fn descend_into_macros_no_opaque( &self, token: SyntaxToken, ) -> SmallVec<[SyntaxToken; 1]>

source

pub fn descend_into_macros_breakable<T>( &self, token: InRealFile<SyntaxToken>, cb: impl FnMut(InFile<SyntaxToken>, SyntaxContextId) -> ControlFlow<T>, ) -> Option<T>

source

pub fn descend_into_macros_exact( &self, token: SyntaxToken, ) -> SmallVec<[SyntaxToken; 1]>

Descends the token into expansions, returning the tokens that matches the input token’s [SyntaxKind] and text.

source

pub fn descend_into_macros_single_exact( &self, token: SyntaxToken, ) -> SyntaxToken

Descends the token into expansions, returning the first token that matches the input token’s [SyntaxKind] and text.

source

pub fn original_range(&self, node: &SyntaxNode) -> FileRange

Attempts to map the node out of macro expanded files returning the original file range. If upmapping is not possible, this will fall back to the range of the macro call of the macro file the node resides in.

source

pub fn original_range_opt(&self, node: &SyntaxNode) -> Option<FileRange>

Attempts to map the node out of macro expanded files returning the original file range.

source

pub fn original_ast_node<N: AstNode>(&self, node: N) -> Option<N>

Attempts to map the node out of macro expanded files. This only work for attribute expansions, as other ones do not have nodes as input.

source

pub fn original_syntax_node_rooted( &self, node: &SyntaxNode, ) -> Option<SyntaxNode>

Attempts to map the node out of macro expanded files. This only work for attribute expansions, as other ones do not have nodes as input.

source

pub fn diagnostics_display_range(&self, src: InFile<SyntaxNodePtr>) -> FileRange

source

pub fn ancestors_with_macros( &self, node: SyntaxNode, ) -> impl Iterator<Item = SyntaxNode> + Clone + '_

Iterates the ancestors of the given node, climbing up macro expansions while doing so.

source

pub fn ancestors_at_offset_with_macros( &self, node: &SyntaxNode, offset: TextSize, ) -> impl Iterator<Item = SyntaxNode> + '_

source

pub fn resolve_lifetime_param( &self, lifetime: &Lifetime, ) -> Option<LifetimeParam>

source

pub fn resolve_label(&self, label: &Lifetime) -> Option<Label>

source

pub fn resolve_type(&self, ty: &Type) -> Option<Type>

source

pub fn resolve_trait(&self, path: &Path) -> Option<Trait>

source

pub fn expr_adjustments(&self, expr: &Expr) -> Option<Vec<Adjustment>>

source

pub fn type_of_expr(&self, expr: &Expr) -> Option<TypeInfo>

source

pub fn type_of_pat(&self, pat: &Pat) -> Option<TypeInfo>

source

pub fn type_of_binding_in_pat(&self, pat: &IdentPat) -> Option<Type>

It also includes the changes that binding mode makes in the type. For example in let ref x @ Some(_) = None the result of type_of_pat is Option<T> but the result of this function is &mut Option<T>

source

pub fn type_of_self(&self, param: &SelfParam) -> Option<Type>

source

pub fn pattern_adjustments(&self, pat: &Pat) -> SmallVec<[Type; 1]>

source

pub fn binding_mode_of_pat(&self, pat: &IdentPat) -> Option<BindingMode>

source

pub fn resolve_expr_as_callable(&self, call: &Expr) -> Option<Callable>

source

pub fn resolve_method_call(&self, call: &MethodCallExpr) -> Option<Function>

source

pub fn resolve_method_call_fallback( &self, call: &MethodCallExpr, ) -> Option<Either<Function, Field>>

Attempts to resolve this call expression as a method call falling back to resolving it as a field.

source

pub fn resolve_method_call_as_callable( &self, call: &MethodCallExpr, ) -> Option<Callable>

source

pub fn resolve_field( &self, field: &FieldExpr, ) -> Option<Either<Field, TupleField>>

source

pub fn resolve_field_fallback( &self, field: &FieldExpr, ) -> Option<Either<Either<Field, TupleField>, Function>>

source

pub fn resolve_record_field( &self, field: &RecordExprField, ) -> Option<(Field, Option<Local>, Type)>

source

pub fn resolve_record_pat_field( &self, field: &RecordPatField, ) -> Option<(Field, Type)>

source

pub fn resolve_macro_call(&self, macro_call: &MacroCall) -> Option<Macro>

source

pub fn is_proc_macro_call(&self, macro_call: &MacroCall) -> bool

source

pub fn resolve_macro_call_arm(&self, macro_call: &MacroCall) -> Option<u32>

source

pub fn is_unsafe_macro_call(&self, macro_call: &MacroCall) -> bool

source

pub fn resolve_attr_macro_call(&self, item: &Item) -> Option<Macro>

source

pub fn resolve_path(&self, path: &Path) -> Option<PathResolution>

source

pub fn resolve_use_type_arg(&self, name: &NameRef) -> Option<TypeParam>

source

pub fn resolve_mod_path( &self, scope: &SyntaxNode, path: &ModPath, ) -> Option<impl Iterator<Item = ItemInNs>>

source

pub fn resolve_mod_path_relative( &self, to: Module, segments: impl IntoIterator<Item = SmolStr>, ) -> Option<impl Iterator<Item = ItemInNs>>

source

pub fn resolve_bind_pat_to_const(&self, pat: &IdentPat) -> Option<ModuleDef>

source

pub fn record_literal_missing_fields( &self, literal: &RecordExpr, ) -> Vec<(Field, Type)>

source

pub fn record_pattern_missing_fields( &self, pattern: &RecordPat, ) -> Vec<(Field, Type)>

source

pub fn to_def<T: ToDef>(&self, src: &T) -> Option<T::Def>

source

pub fn scope(&self, node: &SyntaxNode) -> Option<SemanticsScope<'db>>

source

pub fn scope_at_offset( &self, node: &SyntaxNode, offset: TextSize, ) -> Option<SemanticsScope<'db>>

source

pub fn source<Def: HasSource>(&self, def: Def) -> Option<InFile<Def::Ast>>
where Def::Ast: AstNode,

Search for a definition’s source and cache its syntax tree

source

pub fn assert_contains_node(&self, node: &SyntaxNode)

source

pub fn is_unsafe_method_call(&self, method_call_expr: &MethodCallExpr) -> bool

source

pub fn is_unsafe_ref_expr(&self, ref_expr: &RefExpr) -> bool

source

pub fn is_unsafe_ident_pat(&self, ident_pat: &IdentPat) -> bool

source

pub fn is_inside_unsafe(&self, expr: &Expr) -> bool

Returns true if the node is inside an unsafe context.

Auto Trait Implementations§

§

impl<'db> !Freeze for SemanticsImpl<'db>

§

impl<'db> !RefUnwindSafe for SemanticsImpl<'db>

§

impl<'db> !Send for SemanticsImpl<'db>

§

impl<'db> !Sync for SemanticsImpl<'db>

§

impl<'db> Unpin for SemanticsImpl<'db>

§

impl<'db> !UnwindSafe for SemanticsImpl<'db>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Cast for T

§

fn cast<U>(self, interner: <U as HasInterner>::Interner) -> U
where Self: CastTo<U>, U: HasInterner,

Cast a value to type U using CastTo.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> IntoBox<dyn Any> for T
where T: Any,

§

fn into_box(self) -> Box<dyn Any>

Convert self into the appropriate boxed form.
source§

impl<T> IntoEither for T

source§

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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<'a, T> Captures<'a> for T
where T: ?Sized,