pub struct ParserRegistry { /* private fields */ }Expand description
Registry of all full-AST parsers, keyed by protocol name.
Provides language detection by file extension and dispatches parse/emit operations to the appropriate language parser.
Implementations§
Source§impl ParserRegistry
impl ParserRegistry
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new registry populated with all enabled language parsers.
With the grammars feature (default), this populates the registry from
panproto-grammars, which provides up to 259 tree-sitter languages.
Without the grammars feature, this returns an empty registry; call
register to add parsers manually using individual
grammar crates.
Sourcepub fn register_external_grammar(
&mut self,
name: &'static str,
extensions: Vec<&'static str>,
language: Language,
node_types_json: &'static [u8],
tags_query: Option<&'static str>,
grammar_json: Option<&'static [u8]>,
) -> Result<(), ParseError>
pub fn register_external_grammar( &mut self, name: &'static str, extensions: Vec<&'static str>, language: Language, node_types_json: &'static [u8], tags_query: Option<&'static str>, grammar_json: Option<&'static [u8]>, ) -> Result<(), ParseError>
Register a tree-sitter language as a full-AST parser.
Used by panproto-grammars-* companion crates that ship grammars
outside the default panproto-grammars build. The byte-slice
arguments must outlive this registry; the canonical pattern is
for the companion to bake the data into &'static rodata at
compile time and pass references that are valid for the process
lifetime.
walker_config is looked up by name from the bundled per-language
configuration table. Languages without a tailored configuration
fall back to the default walker config.
§Errors
Returns ParseError if theory extraction from node_types_json
fails or if the tags query rejects compilation.
Sourcepub fn register_external_grammar_owned(
&mut self,
name: String,
extensions: Vec<String>,
language: Language,
node_types_json: Vec<u8>,
tags_query: Option<String>,
grammar_json: Option<Vec<u8>>,
) -> Result<(), ParseError>
pub fn register_external_grammar_owned( &mut self, name: String, extensions: Vec<String>, language: Language, node_types_json: Vec<u8>, tags_query: Option<String>, grammar_json: Option<Vec<u8>>, ) -> Result<(), ParseError>
Owned-data variant of register_external_grammar.
Accepts String / Vec<u8> rather than &'static references. The
caller is presumed not to have process-lifetime rodata available
(typical dev-time use: bytes read from disk via the Python binding’s
override hook). To match the trait’s 'static lifetime requirement
the inputs are leaked into the heap; the leak is one-time per
override.
This is the registration primitive for grammar-author workflows
where a grammar’s parser.c / grammar.json / node-types.json
are evolving outside the panproto release cadence. Production
builds should continue to use register_external_grammar with
'static data baked into the binary at compile time.
§Errors
Returns ParseError if theory extraction or tags-query
compilation fails.
Sourcepub fn unregister(&mut self, name: &str) -> bool
pub fn unregister(&mut self, name: &str) -> bool
Remove a registration by protocol name.
Drops the parser and any extension mappings that pointed at it.
Returns true if a parser was removed, false if no such
registration existed. Primarily intended for grammar-author
workflows where a registered grammar is being replaced by a
freshly-compiled version mid-process.
Sourcepub fn override_grammar(
&mut self,
name: String,
extensions: Vec<String>,
language: Language,
node_types_json: Vec<u8>,
tags_query: Option<String>,
grammar_json: Option<Vec<u8>>,
) -> Result<(), ParseError>
pub fn override_grammar( &mut self, name: String, extensions: Vec<String>, language: Language, node_types_json: Vec<u8>, tags_query: Option<String>, grammar_json: Option<Vec<u8>>, ) -> Result<(), ParseError>
Override a registered grammar with new owned data.
Equivalent to unregister followed by
register_external_grammar_owned,
and intended for the same grammar-author dev workflow. Any
extension mappings previously bound to name are replaced by
the new extensions.
§Errors
Returns ParseError if theory extraction or tags-query
compilation fails on the new grammar; in that case the prior
registration is already gone.
Sourcepub fn detect_language(&self, path: &Path) -> Option<&str>
pub fn detect_language(&self, path: &Path) -> Option<&str>
Detect the language protocol for a file path by its extension.
Returns None if the extension is not recognized (caller should
fall back to the raw_file protocol).
Sourcepub fn parse_file(
&self,
path: &Path,
content: &[u8],
) -> Result<Schema, ParseError>
pub fn parse_file( &self, path: &Path, content: &[u8], ) -> Result<Schema, ParseError>
Parse a file by detecting its language from the file path.
§Errors
Returns ParseError::UnknownLanguage if the file extension is not recognized.
Returns other ParseError variants if parsing fails.
Sourcepub fn parse_with_protocol(
&self,
protocol: &str,
content: &[u8],
file_path: &str,
) -> Result<Schema, ParseError>
pub fn parse_with_protocol( &self, protocol: &str, content: &[u8], file_path: &str, ) -> Result<Schema, ParseError>
Parse source code with a specific protocol name.
§Errors
Returns ParseError::UnknownLanguage if the protocol is not registered.
Sourcepub fn emit_with_protocol(
&self,
protocol: &str,
schema: &Schema,
) -> Result<Vec<u8>, ParseError>
pub fn emit_with_protocol( &self, protocol: &str, schema: &Schema, ) -> Result<Vec<u8>, ParseError>
Emit a schema back to source code bytes using the specified protocol.
§Errors
Returns ParseError::UnknownLanguage if the protocol is not registered.
Sourcepub fn emit_pretty_with_protocol(
&self,
protocol: &str,
schema: &Schema,
) -> Result<Vec<u8>, ParseError>
pub fn emit_pretty_with_protocol( &self, protocol: &str, schema: &Schema, ) -> Result<Vec<u8>, ParseError>
Render a by-construction schema using the named protocol.
§Errors
Returns ParseError::UnknownLanguage if the protocol is not
registered, or ParseError::EmitFailed from the underlying
parser’s emit_pretty.
Sourcepub fn theory_meta(&self, protocol: &str) -> Option<&ExtractedTheoryMeta>
pub fn theory_meta(&self, protocol: &str) -> Option<&ExtractedTheoryMeta>
Get the theory metadata for a specific protocol.
Sourcepub fn protocol_names(&self) -> impl Iterator<Item = &str>
pub fn protocol_names(&self) -> impl Iterator<Item = &str>
List all registered protocol names.
Sourcepub fn has_parser(&self, protocol: &str) -> bool
pub fn has_parser(&self, protocol: &str) -> bool
O(1) lookup: is a parser already registered for protocol?
Useful for dedup at the registration boundary. The umbrella
panproto-grammars-all companion pack overlaps with both the
built-in core grammars and every per-group pack; callers can
short-circuit before re-registering rather than scanning
protocol_names() linearly.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ParserRegistry
impl !RefUnwindSafe for ParserRegistry
impl Send for ParserRegistry
impl Sync for ParserRegistry
impl Unpin for ParserRegistry
impl UnsafeUnpin for ParserRegistry
impl !UnwindSafe for ParserRegistry
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more