pub trait Language: Clone + '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", so this trait is not object safe.