Trait ast_grep_core::language::Language

source ·
pub trait Language: Clone {
    // Required method
    fn get_ts_language(&self) -> TSLanguage;

    // Provided methods
    fn from_path<P: AsRef<Path>>(_path: P) -> Option<Self> { ... }
    fn ast_grep<S: AsRef<str>>(&self, source: S) -> AstGrep<StrDoc<Self>> { ... }
    fn skippable_kind_ids(&self) -> &'static [u16] { ... }
    fn pre_process_pattern<'q>(&self, query: &'q str) -> Cow<'q, str> { ... }
    fn meta_var_char(&self) -> char { ... }
    fn expando_char(&self) -> char { ... }
    fn extract_meta_var(&self, source: &str) -> Option<MetaVariable> { ... }
}
Expand description

Trait to abstract ts-language usage in ast-grep, which includes:

  • which character is used for meta variable.
  • if we need to use other char in meta var for parser at runtime
  • pre process the Pattern code.

Required Methods§

source

fn get_ts_language(&self) -> TSLanguage

tree sitter language to parse the source

Provided Methods§

source

fn from_path<P: AsRef<Path>>(_path: P) -> Option<Self>

Return the file language from path. Return None if the file type is not supported.

source

fn ast_grep<S: AsRef<str>>(&self, source: S) -> AstGrep<StrDoc<Self>>

Create an AstGrep instance for the language

source

fn skippable_kind_ids(&self) -> &'static [u16]

ignore trivial tokens in language matching

source

fn pre_process_pattern<'q>(&self, query: &'q str) -> Cow<'q, str>

normalize pattern code before matching e.g. remove expression_statement, or prefer parsing {} to object over block

source

fn meta_var_char(&self) -> char

Configure meta variable special character By default $ is the metavar char, but in PHP it can be #

source

fn expando_char(&self) -> char

Some language does not accept $ as the leading char for identifiers. We need to change $ to other char at run-time to make parser happy, thus the name expando. By default this is the same as meta_var char so replacement is done at runtime.

source

fn extract_meta_var(&self, source: &str) -> Option<MetaVariable>

extract MetaVariable from a given source string At runtime we need to use expand_char

Object Safety§

This trait is not object safe.

Implementors§