Trait Language

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

    // Provided methods
    fn from_path<P>(_path: P) -> Option<Self>
       where P: AsRef<Path> { ... }
    fn ast_grep<S>(&self, source: S) -> AstGrep<StrDoc<Self>>
       where S: AsRef<str> { ... }
    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>(
        &self,
        _root: Node<'_, D>,
    ) -> HashMap<String, Vec<Range>>
       where D: Doc { ... }
}
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) -> Language

tree sitter language to parse the source

Provided Methods§

Source

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

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

Source

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

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>( &self, _root: Node<'_, D>, ) -> HashMap<String, Vec<Range>>
where D: Doc,

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.

Implementations on Foreign Types§

Source§

impl Language for Language

Implementors§