Trait 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> { ... }
    fn injectable_languages(&self) -> Option<&'static [&'static str]> { ... }
    fn extract_injections<D: Doc>(
        &self,
        _root: Node<'_, D>,
    ) -> HashMap<String, Vec<TSRange>> { ... }
}
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

Source

fn injectable_languages(&self) -> Option<&'static [&'static str]>

Source

fn extract_injections<D: Doc>( &self, _root: Node<'_, D>, ) -> HashMap<String, Vec<TSRange>>

get injected language regions in the root document. e.g. get JavaScripts in HTML it will return a list of tuples of (language, regions). The first item is the embedded region language, e.g. javascript The second item is a list of regions in tree_sitter. also see https://tree-sitter.github.io/tree-sitter/using-parsers#multi-language-documents

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§