lspkit_treesitter/parser.rs
1//! `LanguageParser` trait.
2//!
3//! A `LanguageParser` knows how to obtain a [`tree_sitter::Language`] and to
4//! map a file extension to that language. Concrete grammars are supplied by
5//! the consumer; this crate bundles none.
6
7use tree_sitter::Language;
8
9/// A language-specific parser plug-in.
10pub trait LanguageParser: Send + Sync + 'static {
11 /// Short identifier (e.g. `"rust"`, `"python"`).
12 fn name(&self) -> &str;
13
14 /// File extensions (lower-case, without the leading dot) handled by this parser.
15 fn extensions(&self) -> &[&str];
16
17 /// The tree-sitter language definition.
18 fn language(&self) -> Language;
19}
20
21/// Errors emitted by parser registry lookups.
22#[non_exhaustive]
23#[derive(Debug, thiserror::Error)]
24pub enum ParserError {
25 /// No parser registered for the given extension.
26 #[error("no parser registered for extension: {0}")]
27 UnknownExtension(String),
28}