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§
Sourcefn get_ts_language(&self) -> TSLanguage
fn get_ts_language(&self) -> TSLanguage
tree sitter language to parse the source
Provided Methods§
Sourcefn from_path<P: AsRef<Path>>(_path: P) -> Option<Self>
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.
Sourcefn ast_grep<S: AsRef<str>>(&self, source: S) -> AstGrep<StrDoc<Self>>
fn ast_grep<S: AsRef<str>>(&self, source: S) -> AstGrep<StrDoc<Self>>
Create an AstGrep
instance for the language
Sourcefn skippable_kind_ids(&self) -> &'static [u16]
fn skippable_kind_ids(&self) -> &'static [u16]
ignore trivial tokens in language matching
Sourcefn pre_process_pattern<'q>(&self, query: &'q str) -> Cow<'q, str>
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
Sourcefn meta_var_char(&self) -> char
fn meta_var_char(&self) -> char
Configure meta variable special character By default $ is the metavar char, but in PHP it can be #
Sourcefn expando_char(&self) -> char
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.
Sourcefn extract_meta_var(&self, source: &str) -> Option<MetaVariable>
fn extract_meta_var(&self, source: &str) -> Option<MetaVariable>
extract MetaVariable from a given source string At runtime we need to use expand_char
fn injectable_languages(&self) -> Option<&'static [&'static str]>
Sourcefn extract_injections<D: Doc>(
&self,
_root: Node<'_, D>,
) -> HashMap<String, Vec<TSRange>>
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.