pub trait Language:
Clone
+ Debug
+ Send
+ Sync
+ 'static {
// Required methods
fn kind_to_id(&self, kind: &str) -> u16;
fn field_to_id(&self, field: &str) -> Option<u16>;
fn build_pattern(
&self,
builder: &PatternBuilder<'_>,
) -> Result<Pattern, PatternError>;
// Provided methods
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 from_path<P>(_path: P) -> Option<Self>
where P: AsRef<Path> { ... }
}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§
fn kind_to_id(&self, kind: &str) -> u16
fn field_to_id(&self, field: &str) -> Option<u16>
fn build_pattern( &self, builder: &PatternBuilder<'_>, ) -> Result<Pattern, PatternError>
Provided Methods§
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
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
impl Language for Bash
impl Language for C
impl Language for CSharp
impl Language for Cpp
impl Language for Css
impl Language for Elixir
impl Language for Go
impl Language for Haskell
impl Language for Hcl
impl Language for Html
impl Language for Java
impl Language for JavaScript
impl Language for Json
impl Language for Kotlin
impl Language for Lua
impl Language for Nix
impl Language for Php
impl Language for Python
impl Language for Ruby
impl Language for Rust
impl Language for Scala
impl Language for Solidity
impl Language for SupportLang
Available on crate feature
matching and (crate features all-parsers or bash or c or cpp or csharp or css or elixir or go or haskell or hcl or html or java or javascript or json or kotlin or lua or napi-compatible or napi-environment or nix or php or python or ruby or rust or scala or solidity or swift or tsx or typescript or yaml) only.