Trait Language

Source
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§

Source

fn kind_to_id(&self, kind: &str) -> u16

Source

fn field_to_id(&self, field: &str) -> Option<u16>

Source

fn build_pattern( &self, builder: &PatternBuilder<'_>, ) -> Result<Pattern, PatternError>

Provided Methods§

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 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.

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§