Skip to main content

Matcher

Struct Matcher 

Source
struct Matcher<'db, 'sema> {
    sema: &'sema Semantics<'db, RootDatabase>,
    restrict_range: Option<FileRange>,
    rule: &'sema ResolvedRule<'db>,
}
Expand description

Checks if our search pattern matches a particular node of the AST.

Fields§

§sema: &'sema Semantics<'db, RootDatabase>§restrict_range: Option<FileRange>

If any placeholders come from anywhere outside of this range, then the match will be rejected.

§rule: &'sema ResolvedRule<'db>

Implementations§

Source§

impl<'db, 'sema> Matcher<'db, 'sema>

Source

fn try_match( rule: &ResolvedRule<'db>, code: &SyntaxNode, restrict_range: &Option<FileRange>, sema: &'sema Semantics<'db, RootDatabase>, ) -> Result<Match, MatchFailed>

Source

fn validate_range(&self, range: &FileRange) -> Result<(), MatchFailed>

Checks that range is within the permitted range if any. This is applicable when we’re processing a macro expansion and we want to fail the match if we’re working with a node that didn’t originate from the token tree of the macro call.

Source

fn attempt_match_node( &self, phase: &mut Phase<'_>, pattern: &SyntaxNode, code: &SyntaxNode, ) -> Result<(), MatchFailed>

Source

fn attempt_match_node_children( &self, phase: &mut Phase<'_>, pattern: &SyntaxNode, code: &SyntaxNode, ) -> Result<(), MatchFailed>

Source

fn attempt_match_sequences( &self, phase: &mut Phase<'_>, pattern_it: PatternIterator, code_it: SyntaxElementChildren, ) -> Result<(), MatchFailed>

Source

fn attempt_match_token( &self, phase: &mut Phase<'_>, pattern: &mut Peekable<PatternIterator>, code: &SyntaxToken, ) -> Result<(), MatchFailed>

Source

fn check_constraint( &self, constraint: &Constraint, code: &SyntaxNode, ) -> Result<(), MatchFailed>

Source

fn attempt_match_path( &self, phase: &mut Phase<'_>, pattern: &SyntaxNode, code: &SyntaxNode, ) -> Result<(), MatchFailed>

Paths are matched based on whether they refer to the same thing, even if they’re written differently.

Source

fn attempt_match_opt<T: AstNode>( &self, phase: &mut Phase<'_>, pattern: Option<T>, code: Option<T>, ) -> Result<(), MatchFailed>

Source

fn attempt_match_record_field_list( &self, phase: &mut Phase<'_>, pattern: &SyntaxNode, code: &SyntaxNode, ) -> Result<(), MatchFailed>

We want to allow the records to match in any order, so we have special matching logic for them.

Source

fn attempt_match_token_tree( &self, phase: &mut Phase<'_>, pattern: &SyntaxNode, code: &SyntaxNode, ) -> Result<(), MatchFailed>

Outside of token trees, a placeholder can only match a single AST node, whereas in a token tree it can match a sequence of tokens. Note, that this code will only be used when the pattern matches the macro invocation. For matches within the macro call, we’ll already have expanded the macro.

Source

fn attempt_match_ufcs_to_method_call( &self, phase: &mut Phase<'_>, pattern_ufcs: &UfcsCallInfo<'db>, code: &MethodCallExpr, ) -> Result<(), MatchFailed>

Source

fn attempt_match_ufcs_to_ufcs( &self, phase: &mut Phase<'_>, pattern_ufcs: &UfcsCallInfo<'db>, code: &CallExpr, ) -> Result<(), MatchFailed>

Source

fn check_expr_type( &self, pattern_type: &Type<'db>, expr: &Expr, ) -> Result<usize, MatchFailed>

Verifies that expr matches pattern_type, possibly after dereferencing some number of times. Returns the number of times it needed to be dereferenced.

Source

fn get_placeholder_for_node(&self, node: &SyntaxNode) -> Option<&Placeholder>

Source

fn get_placeholder(&self, element: &SyntaxElement) -> Option<&Placeholder>

Auto Trait Implementations§

§

impl<'db, 'sema> Freeze for Matcher<'db, 'sema>

§

impl<'db, 'sema> !RefUnwindSafe for Matcher<'db, 'sema>

§

impl<'db, 'sema> !Send for Matcher<'db, 'sema>

§

impl<'db, 'sema> !Sync for Matcher<'db, 'sema>

§

impl<'db, 'sema> Unpin for Matcher<'db, 'sema>

§

impl<'db, 'sema> UnsafeUnpin for Matcher<'db, 'sema>

§

impl<'db, 'sema> !UnwindSafe for Matcher<'db, 'sema>

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, R> CollectAndApply<T, R> for T

§

fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

§

type Output = R

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
§

impl<T> Lookup<T> for T

§

fn into_owned(self) -> T

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

§

fn upcast(self, interner: I) -> U

§

impl<I, T> UpcastFrom<I, T> for T

§

fn upcast_from(from: T, _tcx: I) -> T

§

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