diff --git a/.changeset/many-forks-hope.md b/.changeset/many-forks-hope.md new file mode 100644 index 0000000000..0ac500ee80 --- /dev/null +++ b/.changeset/many-forks-hope.md @@ -0,0 +1,5 @@ +--- +"@nomicfoundation/slang": minor +--- + +merge `language`, `parse_error`, `parse_output` namespaces into the `parser` namespace. diff --git a/crates/codegen/runtime/cargo/src/runtime/cli/commands/parse.rs b/crates/codegen/runtime/cargo/src/runtime/cli/commands/parse.rs index 6b2b2beef3..21d56d64c2 100644 --- a/crates/codegen/runtime/cargo/src/runtime/cli/commands/parse.rs +++ b/crates/codegen/runtime/cargo/src/runtime/cli/commands/parse.rs @@ -5,7 +5,7 @@ use clap::Parser; use semver::Version; use crate::diagnostic; -use crate::language::Language; +use crate::parser::Language; #[derive(Parser, Debug)] pub struct ParseCommand { diff --git a/crates/codegen/runtime/cargo/src/runtime/language/mod.rs b/crates/codegen/runtime/cargo/src/runtime/language/mod.rs deleted file mode 100644 index 84d1f11253..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/language/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -mod generated; -mod lexer; -mod parser_support; -mod scanner_macros; - -pub use generated::*; diff --git a/crates/codegen/runtime/cargo/src/runtime/mod.rs b/crates/codegen/runtime/cargo/src/runtime/mod.rs index 932a0d75af..77d1b9e967 100644 --- a/crates/codegen/runtime/cargo/src/runtime/mod.rs +++ b/crates/codegen/runtime/cargo/src/runtime/mod.rs @@ -1,8 +1,6 @@ pub mod cst; pub mod diagnostic; -pub mod language; -pub mod parse_error; -pub mod parse_output; +pub mod parser; #[cfg(feature = "__experimental_bindings_api")] pub mod bindings; diff --git a/crates/codegen/runtime/cargo/src/runtime/napi_interface/mod.rs b/crates/codegen/runtime/cargo/src/runtime/napi_interface/mod.rs index 6dda8b8c88..2bb075eb0d 100644 --- a/crates/codegen/runtime/cargo/src/runtime/napi_interface/mod.rs +++ b/crates/codegen/runtime/cargo/src/runtime/napi_interface/mod.rs @@ -1,7 +1,6 @@ pub mod cst; pub mod diagnostic; -pub mod parse_error; -pub mod parse_output; +pub mod parser; #[path = "generated/ast_selectors.rs"] pub mod ast_selectors; @@ -9,8 +8,8 @@ pub mod ast_selectors; type RustCursor = crate::cst::Cursor; type RustEdge = crate::cst::Edge; type RustNode = crate::cst::Node; -type RustParseError = crate::parse_error::ParseError; -type RustParseOutput = crate::parse_output::ParseOutput; +type RustParseError = crate::parser::ParseError; +type RustParseOutput = crate::parser::ParseOutput; type RustQuery = crate::cst::Query; type RustQueryMatch = crate::cst::QueryMatch; type RustQueryMatchIterator = crate::cst::QueryMatchIterator; diff --git a/crates/codegen/runtime/cargo/src/runtime/napi_interface/parser/mod.rs b/crates/codegen/runtime/cargo/src/runtime/napi_interface/parser/mod.rs new file mode 100644 index 0000000000..1b96dbc043 --- /dev/null +++ b/crates/codegen/runtime/cargo/src/runtime/napi_interface/parser/mod.rs @@ -0,0 +1,5 @@ +mod parse_error; +mod parse_output; + +pub use parse_error::ParseError; +pub use parse_output::ParseOutput; diff --git a/crates/codegen/runtime/cargo/src/runtime/napi_interface/parse_error.rs b/crates/codegen/runtime/cargo/src/runtime/napi_interface/parser/parse_error.rs similarity index 80% rename from crates/codegen/runtime/cargo/src/runtime/napi_interface/parse_error.rs rename to crates/codegen/runtime/cargo/src/runtime/napi_interface/parser/parse_error.rs index fc6c69e36c..f0a74e5b63 100644 --- a/crates/codegen/runtime/cargo/src/runtime/napi_interface/parse_error.rs +++ b/crates/codegen/runtime/cargo/src/runtime/napi_interface/parser/parse_error.rs @@ -6,7 +6,7 @@ use napi_derive::napi; use crate::expose_diagnostic_trait_interface; use crate::napi_interface::RustParseError; -#[napi(namespace = "parse_error")] +#[napi(namespace = "parser")] #[derive(PartialEq, Clone)] pub struct ParseError(RustParseError); @@ -16,4 +16,4 @@ impl From for ParseError { } } -expose_diagnostic_trait_interface!("parse_error", ParseError); +expose_diagnostic_trait_interface!("parser", ParseError); diff --git a/crates/codegen/runtime/cargo/src/runtime/napi_interface/parse_output.rs b/crates/codegen/runtime/cargo/src/runtime/napi_interface/parser/parse_output.rs similarity index 76% rename from crates/codegen/runtime/cargo/src/runtime/napi_interface/parse_output.rs rename to crates/codegen/runtime/cargo/src/runtime/napi_interface/parser/parse_output.rs index 735e56c32d..56ce7a6c96 100644 --- a/crates/codegen/runtime/cargo/src/runtime/napi_interface/parse_output.rs +++ b/crates/codegen/runtime/cargo/src/runtime/napi_interface/parser/parse_output.rs @@ -2,9 +2,10 @@ use napi::Either; use napi_derive::napi; use crate::napi_interface::cst::{Cursor, NAPINodeExtensions, NonterminalNode, TerminalNode}; -use crate::napi_interface::{parse_error, RustParseOutput}; +use crate::napi_interface::parser::ParseError; +use crate::napi_interface::RustParseOutput; -#[napi(namespace = "parse_output")] +#[napi(namespace = "parser")] pub struct ParseOutput(RustParseOutput); impl From for ParseOutput { @@ -13,15 +14,15 @@ impl From for ParseOutput { } } -#[napi(namespace = "parse_output")] +#[napi(namespace = "parser")] impl ParseOutput { #[napi(ts_return_type = "cst.Node", catch_unwind)] pub fn tree(&self) -> Either { self.0.tree().into_js_either_node() } - #[napi(ts_return_type = "Array", catch_unwind)] - pub fn errors(&self) -> Vec { + #[napi(ts_return_type = "Array", catch_unwind)] + pub fn errors(&self) -> Vec { self.0.errors().iter().map(|x| x.clone().into()).collect() } diff --git a/crates/codegen/runtime/cargo/src/runtime/language/generated/mod.rs b/crates/codegen/runtime/cargo/src/runtime/parser/generated/language.rs similarity index 81% rename from crates/codegen/runtime/cargo/src/runtime/language/generated/mod.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/generated/language.rs index 0223c1e276..adaf655668 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/generated/mod.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/generated/language.rs @@ -18,28 +18,28 @@ use crate::cst; use crate::cst::{ EdgeLabel, IsLexicalContext, LexicalContext, LexicalContextType, NonterminalKind, TerminalKind, }; -use crate::language::lexer::{KeywordScan, Lexer, ScannedTerminal}; -use crate::language::parser_support::{ +#[cfg(feature = "__private_napi_interfaces")] +use crate::napi_interface::parser::ParseOutput as NAPIParseOutput; +use crate::parser::lexer::{KeywordScan, Lexer, ScannedTerminal}; +use crate::parser::parser_support::{ ChoiceHelper, OneOrMoreHelper, OptionalHelper, ParserContext, ParserFunction, ParserResult, PrecedenceHelper, SeparatedHelper, SequenceHelper, TerminalAcceptanceThreshold, ZeroOrMoreHelper, }; -use crate::language::scanner_macros::{ +use crate::parser::scanner_macros::{ scan_char_range, scan_chars, scan_choice, scan_keyword_choice, scan_none_of, scan_not_followed_by, scan_one_or_more, scan_optional, scan_sequence, scan_zero_or_more, }; -#[cfg(feature = "__private_napi_interfaces")] -use crate::napi_interface::parse_output::ParseOutput as NAPIParseOutput; -use crate::parse_output::ParseOutput; +use crate::parser::ParseOutput; #[derive(Debug)] -#[cfg_attr(feature = "__private_napi_interfaces", napi(namespace = "language"))] +#[cfg_attr(feature = "__private_napi_interfaces", napi(namespace = "parser"))] pub struct Language { pub(crate) version: Version, } #[derive(thiserror::Error, Debug)] -pub enum Error { +pub enum LanguageInitializationError { #[error("Unsupported language version '{0}'.")] UnsupportedLanguageVersion(Version), @@ -49,8 +49,8 @@ pub enum Error { } #[cfg(feature = "__private_napi_interfaces")] -impl From for napi::Error { - fn from(value: Error) -> Self { +impl From for napi::Error { + fn from(value: LanguageInitializationError) -> Self { napi::Error::from_reason(value.to_string()) } } @@ -60,11 +60,13 @@ impl Language { pub const ROOT_KIND: NonterminalKind = NonterminalKind::Stub1; - pub fn new(version: Version) -> std::result::Result { + pub fn new(version: Version) -> std::result::Result { if Self::SUPPORTED_VERSIONS.binary_search(&version).is_ok() { Ok(Self { version }) } else { - Err(Error::UnsupportedLanguageVersion(version)) + Err(LanguageInitializationError::UnsupportedLanguageVersion( + version, + )) } } @@ -101,12 +103,12 @@ impl Lexer for Language { #[cfg(feature = "__private_napi_interfaces")] // NAPI-exposed functions have to accept owned values. #[allow(clippy::needless_pass_by_value)] -#[napi(namespace = "language")] +#[napi(namespace = "parser")] impl Language { #[napi(constructor, catch_unwind)] pub fn new_napi(version: String) -> std::result::Result { - let version = - Version::parse(&version).map_err(|_| Error::InvalidSemanticVersion(version))?; + let version = Version::parse(&version) + .map_err(|_| LanguageInitializationError::InvalidSemanticVersion(version))?; Self::new(version).map_err(|e| e.into()) } @@ -132,11 +134,7 @@ impl Language { Self::ROOT_KIND } - #[napi( - js_name = "parse", - ts_return_type = "parse_output.ParseOutput", - catch_unwind - )] + #[napi(js_name = "parse", ts_return_type = "parser.ParseOutput", catch_unwind)] pub fn parse_napi( &self, #[napi(ts_arg_type = "cst.NonterminalKind")] kind: NonterminalKind, diff --git a/crates/codegen/runtime/cargo/src/runtime/language/mod.rs.jinja2 b/crates/codegen/runtime/cargo/src/runtime/parser/language.rs.jinja2 similarity index 93% rename from crates/codegen/runtime/cargo/src/runtime/language/mod.rs.jinja2 rename to crates/codegen/runtime/cargo/src/runtime/parser/language.rs.jinja2 index 164b62b73c..34673701fc 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/mod.rs.jinja2 +++ b/crates/codegen/runtime/cargo/src/runtime/parser/language.rs.jinja2 @@ -16,22 +16,22 @@ use crate::cst; use crate::cst::{ EdgeLabel, IsLexicalContext, LexicalContext, LexicalContextType, NonterminalKind, TerminalKind, }; -use crate::language::lexer::{KeywordScan, Lexer, ScannedTerminal}; -use crate::language::parser_support::{ +use crate::parser::lexer::{KeywordScan, Lexer, ScannedTerminal}; +use crate::parser::parser_support::{ ChoiceHelper, OneOrMoreHelper, OptionalHelper, ParserContext, ParserFunction, ParserResult, PrecedenceHelper, SeparatedHelper, SequenceHelper, TerminalAcceptanceThreshold, ZeroOrMoreHelper, }; -use crate::language::scanner_macros::{ +use crate::parser::scanner_macros::{ scan_char_range, scan_chars, scan_choice, scan_keyword_choice, scan_none_of, scan_not_followed_by, scan_one_or_more, scan_optional, scan_sequence, scan_zero_or_more, }; #[cfg(feature = "__private_napi_interfaces")] -use crate::napi_interface::parse_output::ParseOutput as NAPIParseOutput; -use crate::parse_output::ParseOutput; +use crate::napi_interface::parser::ParseOutput as NAPIParseOutput; +use crate::parser::ParseOutput; #[derive(Debug)] -#[cfg_attr(feature = "__private_napi_interfaces", napi(namespace = "language"))] +#[cfg_attr(feature = "__private_napi_interfaces", napi(namespace = "parser"))] pub struct Language { {%- if not rendering_in_stubs -%} {%- for version in model.breaking_language_versions -%} @@ -46,7 +46,7 @@ pub struct Language { } #[derive(thiserror::Error, Debug)] -pub enum Error { +pub enum LanguageInitializationError { #[error("Unsupported language version '{0}'.")] UnsupportedLanguageVersion(Version), @@ -56,8 +56,8 @@ pub enum Error { } #[cfg(feature = "__private_napi_interfaces")] -impl From for napi::Error { - fn from(value: Error) -> Self { +impl From for napi::Error { + fn from(value: LanguageInitializationError) -> Self { napi::Error::from_reason(value.to_string()) } } @@ -73,7 +73,7 @@ impl Language { pub const ROOT_KIND: NonterminalKind = NonterminalKind::{{ model.kinds.root_kind }}; - pub fn new(version: Version) -> std::result::Result { + pub fn new(version: Version) -> std::result::Result { if Self::SUPPORTED_VERSIONS.binary_search(&version).is_ok() { Ok(Self { {%- if not rendering_in_stubs -%} @@ -85,7 +85,7 @@ impl Language { version, }) } else { - Err(Error::UnsupportedLanguageVersion(version)) + Err(LanguageInitializationError::UnsupportedLanguageVersion(version)) } } @@ -282,12 +282,12 @@ impl Lexer for Language { #[cfg(feature = "__private_napi_interfaces")] // NAPI-exposed functions have to accept owned values. #[allow(clippy::needless_pass_by_value)] -#[napi(namespace = "language")] +#[napi(namespace = "parser")] impl Language { #[napi(constructor, catch_unwind)] pub fn new_napi(version: String) -> std::result::Result { - let version = Version::parse(&version).map_err(|_| Error::InvalidSemanticVersion(version))?; + let version = Version::parse(&version).map_err(|_| LanguageInitializationError::InvalidSemanticVersion(version))?; Self::new(version).map_err(|e| e.into()) } @@ -306,7 +306,7 @@ impl Language { Self::ROOT_KIND } - #[napi(js_name = "parse", ts_return_type = "parse_output.ParseOutput", catch_unwind)] + #[napi(js_name = "parse", ts_return_type = "parser.ParseOutput", catch_unwind)] pub fn parse_napi( &self, #[napi(ts_arg_type = "cst.NonterminalKind")] kind: NonterminalKind, diff --git a/crates/codegen/runtime/cargo/src/runtime/language/lexer/mod.rs b/crates/codegen/runtime/cargo/src/runtime/parser/lexer/mod.rs similarity index 98% rename from crates/codegen/runtime/cargo/src/runtime/language/lexer/mod.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/lexer/mod.rs index 4d0bc60146..d461fb4d8b 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/lexer/mod.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/lexer/mod.rs @@ -1,5 +1,5 @@ use crate::cst::{Edge, IsLexicalContext, Node, TerminalKind}; -use crate::language::parser_support::{ParserContext, ParserResult}; +use crate::parser::parser_support::{ParserContext, ParserResult}; /// Whether a keyword has been scanned and if so, whether it is reserved (unusable as an identifier) /// or not. diff --git a/crates/codegen/runtime/cargo/src/runtime/parser/mod.rs b/crates/codegen/runtime/cargo/src/runtime/parser/mod.rs new file mode 100644 index 0000000000..fdda01f668 --- /dev/null +++ b/crates/codegen/runtime/cargo/src/runtime/parser/mod.rs @@ -0,0 +1,11 @@ +#[path = "generated/language.rs"] +mod language; +mod lexer; +mod parse_error; +mod parse_output; +mod parser_support; +mod scanner_macros; + +pub use language::{Language, LanguageInitializationError}; +pub use parse_error::ParseError; +pub use parse_output::ParseOutput; diff --git a/crates/codegen/runtime/cargo/src/runtime/parse_error/mod.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parse_error.rs similarity index 100% rename from crates/codegen/runtime/cargo/src/runtime/parse_error/mod.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parse_error.rs diff --git a/crates/codegen/runtime/cargo/src/runtime/parse_output/mod.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parse_output.rs similarity index 94% rename from crates/codegen/runtime/cargo/src/runtime/parse_output/mod.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parse_output.rs index 2daaae275b..03201f0a6c 100644 --- a/crates/codegen/runtime/cargo/src/runtime/parse_output/mod.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parse_output.rs @@ -1,5 +1,5 @@ use crate::cst::{Cursor, Node, TextIndex}; -use crate::parse_error::ParseError; +use crate::parser::ParseError; #[derive(Debug, PartialEq)] pub struct ParseOutput { diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/choice_helper.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/choice_helper.rs similarity index 97% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/choice_helper.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/choice_helper.rs index f1a33809eb..2b5186168a 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/choice_helper.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/choice_helper.rs @@ -2,9 +2,9 @@ use std::mem; use std::ops::ControlFlow; use crate::cst::{Node, TerminalKindExtensions, TextIndex}; -use crate::language::parser_support::context::{Marker, ParserContext}; -use crate::language::parser_support::ParserResult; -use crate::parse_error::ParseError; +use crate::parser::parser_support::context::{Marker, ParserContext}; +use crate::parser::parser_support::ParserResult; +use crate::parser::ParseError; /// Starting from a given position in the input, this helper will try to pick (and remember) a best match. Settles on /// a first full match if possible, otherwise on the best incomplete match. diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/context.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/context.rs similarity index 98% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/context.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/context.rs index 65a0f014bf..0343ec8780 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/context.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/context.rs @@ -2,7 +2,7 @@ use std::mem; use std::ops::Range; use crate::cst::{TerminalKind, TextIndex}; -use crate::parse_error::ParseError; +use crate::parser::ParseError; #[derive(Debug)] pub struct ParserContext<'s> { diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/mod.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/mod.rs similarity index 100% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/mod.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/mod.rs diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/optional_helper.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/optional_helper.rs similarity index 91% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/optional_helper.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/optional_helper.rs index 884f419749..9ef5430056 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/optional_helper.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/optional_helper.rs @@ -1,4 +1,4 @@ -use crate::language::parser_support::parser_result::ParserResult; +use crate::parser::parser_support::parser_result::ParserResult; pub struct OptionalHelper; diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/parser_function.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/parser_function.rs similarity index 96% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/parser_function.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/parser_function.rs index cc1ddc62ad..058a2395cf 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/parser_function.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/parser_function.rs @@ -1,13 +1,12 @@ use std::rc::Rc; use crate::cst::{Edge, Node, TerminalKind, TerminalKindExtensions, TextIndex}; -use crate::language::lexer::Lexer; -use crate::language::parser_support::context::ParserContext; -use crate::language::parser_support::parser_result::{ +use crate::parser::lexer::Lexer; +use crate::parser::parser_support::context::ParserContext; +use crate::parser::parser_support::parser_result::{ IncompleteMatch, Match, ParserResult, SkippedUntil, }; -use crate::parse_error::ParseError; -use crate::parse_output::ParseOutput; +use crate::parser::{ParseError, ParseOutput}; pub trait ParserFunction where diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/parser_result.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/parser_result.rs similarity index 100% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/parser_result.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/parser_result.rs diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/precedence_helper.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/precedence_helper.rs similarity index 98% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/precedence_helper.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/precedence_helper.rs index f9a00f2ff6..db73ca6519 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/precedence_helper.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/precedence_helper.rs @@ -1,8 +1,8 @@ use crate::cst::{Edge, EdgeLabel, Node, NonterminalKind}; -use crate::language::parser_support::parser_result::PrattElement::{ +use crate::parser::parser_support::parser_result::PrattElement::{ self, Binary, Expression, Postfix, Prefix, }; -use crate::language::parser_support::parser_result::{ParserResult, PrattOperatorMatch}; +use crate::parser::parser_support::parser_result::{ParserResult, PrattOperatorMatch}; pub struct PrecedenceHelper; diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/recovery.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/recovery.rs similarity index 95% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/recovery.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/recovery.rs index 1a4e2248d2..185c3b622e 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/recovery.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/recovery.rs @@ -1,9 +1,9 @@ use crate::cst::{Edge, IsLexicalContext, TerminalKind, TextRange, TextRangeExtensions}; -use crate::language::lexer::{Lexer, ScannedTerminal}; -use crate::language::parser_support::context::ParserContext; -use crate::language::parser_support::parser_result::SkippedUntil; -use crate::language::parser_support::ParserResult; -use crate::parse_error::ParseError; +use crate::parser::lexer::{Lexer, ScannedTerminal}; +use crate::parser::parser_support::context::ParserContext; +use crate::parser::parser_support::parser_result::SkippedUntil; +use crate::parser::parser_support::ParserResult; +use crate::parser::ParseError; /// How many terminals have to be matched to trigger the error recovery. /// For ambiguous syntaxes this needs to be set to at least N, where N diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/repetition_helper.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/repetition_helper.rs similarity index 97% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/repetition_helper.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/repetition_helper.rs index c7671e7d7d..e4bcf1433d 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/repetition_helper.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/repetition_helper.rs @@ -1,5 +1,5 @@ -use crate::language::parser_support::context::ParserContext; -use crate::language::parser_support::parser_result::{ +use crate::parser::parser_support::context::ParserContext; +use crate::parser::parser_support::parser_result::{ IncompleteMatch, NoMatch, ParserResult, PrattElement, }; diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/separated_helper.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/separated_helper.rs similarity index 94% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/separated_helper.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/separated_helper.rs index 429b7b00f1..e1455a8155 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/separated_helper.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/separated_helper.rs @@ -1,9 +1,9 @@ use crate::cst::{Edge, EdgeLabel, IsLexicalContext, Node, TerminalKind, TextRangeExtensions}; -use crate::language::lexer::Lexer; -use crate::language::parser_support::parser_result::{ParserResult, SkippedUntil}; -use crate::language::parser_support::recovery::skip_until_with_nested_delims; -use crate::language::parser_support::ParserContext; -use crate::parse_error::ParseError; +use crate::parser::lexer::Lexer; +use crate::parser::parser_support::parser_result::{ParserResult, SkippedUntil}; +use crate::parser::parser_support::recovery::skip_until_with_nested_delims; +use crate::parser::parser_support::ParserContext; +use crate::parser::ParseError; pub struct SeparatedHelper; diff --git a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/sequence_helper.rs b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/sequence_helper.rs similarity index 99% rename from crates/codegen/runtime/cargo/src/runtime/language/parser_support/sequence_helper.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/parser_support/sequence_helper.rs index 1a456563f5..7b3dc5fc45 100644 --- a/crates/codegen/runtime/cargo/src/runtime/language/parser_support/sequence_helper.rs +++ b/crates/codegen/runtime/cargo/src/runtime/parser/parser_support/sequence_helper.rs @@ -1,7 +1,7 @@ use std::ops::ControlFlow; use crate::cst::{Edge, EdgeLabel, Node, TerminalKind, TerminalKindExtensions}; -use crate::language::parser_support::parser_result::{ +use crate::parser::parser_support::parser_result::{ Match, ParserResult, PrattElement, SkippedUntil, }; diff --git a/crates/codegen/runtime/cargo/src/runtime/language/scanner_macros/mod.rs b/crates/codegen/runtime/cargo/src/runtime/parser/scanner_macros/mod.rs similarity index 100% rename from crates/codegen/runtime/cargo/src/runtime/language/scanner_macros/mod.rs rename to crates/codegen/runtime/cargo/src/runtime/parser/scanner_macros/mod.rs diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/_world.wit.jinja2 b/crates/codegen/runtime/cargo/src/runtime/wit/interface/_world.wit.jinja2 index 0d1d5cc014..6e6259b042 100644 --- a/crates/codegen/runtime/cargo/src/runtime/wit/interface/_world.wit.jinja2 +++ b/crates/codegen/runtime/cargo/src/runtime/wit/interface/_world.wit.jinja2 @@ -3,7 +3,5 @@ package nomic-foundation:slang; world slang { export cst; export diagnostic; - export language; - export parse-error; - export parse-output; + export parser; } diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/_world.wit b/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/_world.wit index b01e361068..7f826767f4 100644 --- a/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/_world.wit +++ b/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/_world.wit @@ -5,7 +5,5 @@ package nomic-foundation:slang; world slang { export cst; export diagnostic; - export language; - export parse-error; - export parse-output; + export parser; } diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/language.wit b/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/language.wit deleted file mode 100644 index 677d5337f9..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/language.wit +++ /dev/null @@ -1,13 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -interface language { - use cst.{nonterminal-kind}; - use parse-output.{parse-output}; - - resource language { - supported-versions: static func() -> list; - new: static func(version: string) -> result; - version: func() -> string; - parse: func(kind: nonterminal-kind, input: string) -> parse-output; - } -} diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/parse-error.wit b/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/parse-error.wit deleted file mode 100644 index ff2790c3d7..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/parse-error.wit +++ /dev/null @@ -1,12 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -interface parse-error { - use cst.{text-range}; - use diagnostic.{severity}; - - resource parse-error { - severity: func() -> severity; - text-range: func() -> text-range; - message: func() -> string; - } -} diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/parse-output.wit b/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/parse-output.wit deleted file mode 100644 index 7651e6a32e..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/parse-output.wit +++ /dev/null @@ -1,13 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -interface parse-output { - use cst.{cursor, node}; - use parse-error.{parse-error}; - - resource parse-output { - tree: func() -> node; - errors: func() -> list; - is-valid: func() -> bool; - create-tree-cursor: func() -> cursor; - } -} diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/parser.wit b/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/parser.wit new file mode 100644 index 0000000000..8e8875efea --- /dev/null +++ b/crates/codegen/runtime/cargo/src/runtime/wit/interface/generated/parser.wit @@ -0,0 +1,26 @@ +// This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +interface parser { + use cst.{cursor, node, nonterminal-kind, text-range}; + use diagnostic.{severity}; + + resource language { + supported-versions: static func() -> list; + new: static func(version: string) -> result; + version: func() -> string; + parse: func(kind: nonterminal-kind, input: string) -> parse-output; + } + + resource parse-error { + severity: func() -> severity; + text-range: func() -> text-range; + message: func() -> string; + } + + resource parse-output { + tree: func() -> node; + errors: func() -> list; + is-valid: func() -> bool; + create-tree-cursor: func() -> cursor; + } +} diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/language.wit.jinja2 b/crates/codegen/runtime/cargo/src/runtime/wit/interface/language.wit.jinja2 deleted file mode 100644 index e9f7ca384a..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/wit/interface/language.wit.jinja2 +++ /dev/null @@ -1,11 +0,0 @@ -interface language { - use cst.{nonterminal-kind}; - use parse-output.{parse-output}; - - resource language { - supported-versions: static func() -> list; - new: static func(version: string) -> result; - version: func() -> string; - parse: func(kind: nonterminal-kind, input: string) -> parse-output; - } -} diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/parse-error.wit.jinja2 b/crates/codegen/runtime/cargo/src/runtime/wit/interface/parse-error.wit.jinja2 deleted file mode 100644 index 98082747bd..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/wit/interface/parse-error.wit.jinja2 +++ /dev/null @@ -1,10 +0,0 @@ -interface parse-error { - use cst.{text-range}; - use diagnostic.{severity}; - - resource parse-error { - severity: func() -> severity; - text-range: func() -> text-range; - message: func() -> string; - } -} diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/parse-output.wit.jinja2 b/crates/codegen/runtime/cargo/src/runtime/wit/interface/parse-output.wit.jinja2 deleted file mode 100644 index 6e17f97e0e..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/wit/interface/parse-output.wit.jinja2 +++ /dev/null @@ -1,11 +0,0 @@ -interface parse-output { - use cst.{cursor, node}; - use parse-error.{parse-error}; - - resource parse-output { - tree: func() -> node; - errors: func() -> list; - is-valid: func() -> bool; - create-tree-cursor: func() -> cursor; - } -} diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/interface/parser.wit.jinja2 b/crates/codegen/runtime/cargo/src/runtime/wit/interface/parser.wit.jinja2 new file mode 100644 index 0000000000..52c8cb13f3 --- /dev/null +++ b/crates/codegen/runtime/cargo/src/runtime/wit/interface/parser.wit.jinja2 @@ -0,0 +1,24 @@ +interface parser { + use cst.{cursor, node, nonterminal-kind, text-range}; + use diagnostic.{severity}; + + resource language { + supported-versions: static func() -> list; + new: static func(version: string) -> result; + version: func() -> string; + parse: func(kind: nonterminal-kind, input: string) -> parse-output; + } + + resource parse-error { + severity: func() -> severity; + text-range: func() -> text-range; + message: func() -> string; + } + + resource parse-output { + tree: func() -> node; + errors: func() -> list; + is-valid: func() -> bool; + create-tree-cursor: func() -> cursor; + } +} diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/language.rs b/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/language.rs deleted file mode 100644 index 0a7d4bfd4b..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/language.rs +++ /dev/null @@ -1,46 +0,0 @@ -use crate::wit::utils::{define_wrapper, FromFFI, IntoFFI}; - -mod ffi { - pub use crate::wit::interface::exports::nomic_foundation::slang::language::{ - Guest, GuestLanguage, Language, LanguageBorrow, NonterminalKind, - }; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_output::ParseOutput; -} - -mod rust { - pub use crate::language::Language; -} - -impl ffi::Guest for crate::wit::World { - type Language = LanguageWrapper; -} - -//================================================ -// -// resource language -// -//================================================ - -define_wrapper! { Language { - fn new(version: String) -> Result { - semver::Version::parse(&version) - .map_err(|_| format!("Invalid version: {version}")) - .and_then(|version| rust::Language::new(version).map_err(|e| e.to_string())) - .map(IntoFFI::_into_ffi) - } - - fn version(&self) -> String { - self._borrow_ffi().version.to_string() - } - - fn supported_versions() -> Vec { - rust::Language::SUPPORTED_VERSIONS - .iter() - .map(|v| v.to_string()) - .collect() - } - - fn parse(&self, kind: ffi::NonterminalKind, input: String) -> ffi::ParseOutput { - self._borrow_ffi().parse(kind._from_ffi(), &input)._into_ffi() - } -} } diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/mod.rs b/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/mod.rs index 866de10e48..55ba2199ca 100644 --- a/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/mod.rs +++ b/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/mod.rs @@ -1,5 +1,3 @@ mod cst; mod diagnostic; -mod language; -mod parse_error; -mod parse_output; +mod parser; diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/parse_error.rs b/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/parse_error.rs deleted file mode 100644 index 5ea810d38e..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/parse_error.rs +++ /dev/null @@ -1,41 +0,0 @@ -use crate::diagnostic::Diagnostic; -use crate::wit::utils::{define_wrapper, IntoFFI}; - -mod ffi { - pub use crate::wit::interface::exports::nomic_foundation::slang::cst::TextRange; - pub use crate::wit::interface::exports::nomic_foundation::slang::diagnostic::Severity; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_error::{ - Guest, GuestParseError, - }; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_output::{ - ParseError, ParseErrorBorrow, - }; -} - -mod rust { - pub use crate::parse_error::ParseError; -} - -impl ffi::Guest for crate::wit::World { - type ParseError = ParseErrorWrapper; -} - -//================================================ -// -// resource parse-error -// -//================================================ - -define_wrapper! { ParseError { - fn severity(&self) -> ffi::Severity { - self._borrow_ffi().severity()._into_ffi() - } - - fn text_range(&self) -> ffi::TextRange { - self._borrow_ffi().text_range()._into_ffi() - } - - fn message(&self) -> String { - self._borrow_ffi().message() - } -} } diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/parse_output.rs b/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/parse_output.rs deleted file mode 100644 index 68b80ce25e..0000000000 --- a/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/parse_output.rs +++ /dev/null @@ -1,41 +0,0 @@ -use crate::wit::utils::{define_wrapper, IntoFFI}; - -mod ffi { - pub use crate::wit::interface::exports::nomic_foundation::slang::cst::{Cursor, Node}; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_error::ParseError; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_output::{ - Guest, GuestParseOutput, ParseOutput, ParseOutputBorrow, - }; -} - -mod rust { - pub use crate::parse_output::ParseOutput; -} - -impl ffi::Guest for crate::wit::World { - type ParseOutput = ParseOutputWrapper; -} - -//================================================ -// -// resource parse-output -// -//================================================ - -define_wrapper! { ParseOutput { - fn tree(&self) -> ffi::Node { - self._borrow_ffi().tree()._into_ffi() - } - - fn errors(&self) -> Vec { - self._borrow_ffi().errors().iter().map(|e| e.clone()._into_ffi()).collect() - } - - fn is_valid(&self) -> bool { - self._borrow_ffi().is_valid() - } - - fn create_tree_cursor(&self) -> ffi::Cursor { - self._borrow_ffi().create_tree_cursor()._into_ffi() - } -} } diff --git a/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/parser.rs b/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/parser.rs new file mode 100644 index 0000000000..d7eb2ef541 --- /dev/null +++ b/crates/codegen/runtime/cargo/src/runtime/wit/wrappers/parser.rs @@ -0,0 +1,97 @@ +use crate::diagnostic::Diagnostic; +use crate::wit::utils::{define_wrapper, FromFFI, IntoFFI}; + +mod ffi { + pub use crate::wit::interface::exports::nomic_foundation::slang::cst::{ + Cursor, Node, TextRange, + }; + pub use crate::wit::interface::exports::nomic_foundation::slang::diagnostic::Severity; + pub use crate::wit::interface::exports::nomic_foundation::slang::parser::{ + Guest, GuestLanguage, GuestParseError, GuestParseOutput, Language, LanguageBorrow, + NonterminalKind, ParseError, ParseErrorBorrow, ParseOutput, ParseOutputBorrow, + }; +} + +mod rust { + pub use crate::parser::{Language, ParseError, ParseOutput}; +} + +impl ffi::Guest for crate::wit::World { + type Language = LanguageWrapper; + type ParseError = ParseErrorWrapper; + type ParseOutput = ParseOutputWrapper; +} + +//================================================ +// +// resource language +// +//================================================ + +define_wrapper! { Language { + fn new(version: String) -> Result { + semver::Version::parse(&version) + .map_err(|_| format!("Invalid version: {version}")) + .and_then(|version| rust::Language::new(version).map_err(|e| e.to_string())) + .map(IntoFFI::_into_ffi) + } + + fn version(&self) -> String { + self._borrow_ffi().version.to_string() + } + + fn supported_versions() -> Vec { + rust::Language::SUPPORTED_VERSIONS + .iter() + .map(|v| v.to_string()) + .collect() + } + + fn parse(&self, kind: ffi::NonterminalKind, input: String) -> ffi::ParseOutput { + self._borrow_ffi().parse(kind._from_ffi(), &input)._into_ffi() + } +} } + +//================================================ +// +// resource parse-error +// +//================================================ + +define_wrapper! { ParseError { + fn severity(&self) -> ffi::Severity { + self._borrow_ffi().severity()._into_ffi() + } + + fn text_range(&self) -> ffi::TextRange { + self._borrow_ffi().text_range()._into_ffi() + } + + fn message(&self) -> String { + self._borrow_ffi().message() + } +} } + +//================================================ +// +// resource parse-output +// +//================================================ + +define_wrapper! { ParseOutput { + fn tree(&self) -> ffi::Node { + self._borrow_ffi().tree()._into_ffi() + } + + fn errors(&self) -> Vec { + self._borrow_ffi().errors().iter().map(|e| e.clone()._into_ffi()).collect() + } + + fn is_valid(&self) -> bool { + self._borrow_ffi().is_valid() + } + + fn create_tree_cursor(&self) -> ffi::Cursor { + self._borrow_ffi().create_tree_cursor()._into_ffi() + } +} } diff --git a/crates/codegen/runtime/npm/src/runtime/index.ts b/crates/codegen/runtime/npm/src/runtime/index.ts index 8197aa26de..2b6cee6cf3 100644 --- a/crates/codegen/runtime/npm/src/runtime/index.ts +++ b/crates/codegen/runtime/npm/src/runtime/index.ts @@ -1,5 +1,3 @@ export * as ast from "./ast"; export * as cst from "./cst"; -export * as language from "./language"; -export * as parse_error from "./parse_error"; -export * as parse_output from "./parse_output"; +export * as parser from "./parser"; diff --git a/crates/codegen/runtime/npm/src/runtime/language/index.ts b/crates/codegen/runtime/npm/src/runtime/language/index.ts deleted file mode 100644 index fab1a1d18a..0000000000 --- a/crates/codegen/runtime/npm/src/runtime/language/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as generated from "../napi-bindings/generated"; - -export const Language = generated.language.Language; -export type Language = generated.language.Language; diff --git a/crates/codegen/runtime/npm/src/runtime/napi-bindings/generated/index.d.ts b/crates/codegen/runtime/npm/src/runtime/napi-bindings/generated/index.d.ts index 16619c1dde..d15dd8a73e 100644 --- a/crates/codegen/runtime/npm/src/runtime/napi-bindings/generated/index.d.ts +++ b/crates/codegen/runtime/npm/src/runtime/napi-bindings/generated/index.d.ts @@ -107,13 +107,25 @@ export declare namespace cst { next(): QueryMatch | null; } } -export declare namespace language { +export declare namespace parser { export class Language { constructor(version: string); get version(): string; static supportedVersions(): Array; static rootKind(): cst.NonterminalKind; - parse(kind: cst.NonterminalKind, input: string): parse_output.ParseOutput; + parse(kind: cst.NonterminalKind, input: string): parser.ParseOutput; + } + export class ParseError { + severity(): diagnostic.Severity; + textRange(): cst.TextRange; + message(): string; + } + export class ParseOutput { + tree(): cst.Node; + errors(): Array; + get isValid(): boolean; + /** Creates a cursor that starts at the root of the parse tree. */ + createTreeCursor(): cst.Cursor; } } export declare namespace diagnostic { @@ -138,22 +150,6 @@ export declare namespace diagnostic { message(): string; } } -export declare namespace parse_error { - export class ParseError { - severity(): diagnostic.Severity; - textRange(): cst.TextRange; - message(): string; - } -} -export declare namespace parse_output { - export class ParseOutput { - tree(): cst.Node; - errors(): Array; - get isValid(): boolean; - /** Creates a cursor that starts at the root of the parse tree. */ - createTreeCursor(): cst.Cursor; - } -} export declare namespace ast_internal { export function selectSequence(node: cst.NonterminalNode): Array; export function selectChoice(node: cst.NonterminalNode): cst.Node; diff --git a/crates/codegen/runtime/npm/src/runtime/napi-bindings/generated/index.js b/crates/codegen/runtime/npm/src/runtime/napi-bindings/generated/index.js index d2e994f78d..54ef035fb6 100644 --- a/crates/codegen/runtime/npm/src/runtime/napi-bindings/generated/index.js +++ b/crates/codegen/runtime/npm/src/runtime/napi-bindings/generated/index.js @@ -291,11 +291,9 @@ if (!nativeBinding) { throw new Error(`Failed to load native binding`); } -const { cst, language, diagnostic, parse_error, parse_output, ast_internal } = nativeBinding; +const { cst, parser, diagnostic, ast_internal } = nativeBinding; module.exports.cst = cst; -module.exports.language = language; +module.exports.parser = parser; module.exports.diagnostic = diagnostic; -module.exports.parse_error = parse_error; -module.exports.parse_output = parse_output; module.exports.ast_internal = ast_internal; diff --git a/crates/codegen/runtime/npm/src/runtime/parse_error/index.ts b/crates/codegen/runtime/npm/src/runtime/parse_error/index.ts deleted file mode 100644 index 0602dfa4e0..0000000000 --- a/crates/codegen/runtime/npm/src/runtime/parse_error/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { DiagnosticInterface } from "../diagnostic"; -import * as generated from "../napi-bindings/generated"; - -export const ParseError = generated.parse_error.ParseError; -export type ParseError = generated.parse_error.ParseError; - -type AssertImplements = void; -declare const assertDiagnosticInterface: AssertImplements; diff --git a/crates/codegen/runtime/npm/src/runtime/parse_output/index.ts b/crates/codegen/runtime/npm/src/runtime/parse_output/index.ts deleted file mode 100644 index 9f5e3d4428..0000000000 --- a/crates/codegen/runtime/npm/src/runtime/parse_output/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import * as generated from "../napi-bindings/generated"; - -export const ParseOutput = generated.parse_output.ParseOutput; -export type ParseOutput = generated.parse_output.ParseOutput; diff --git a/crates/codegen/runtime/npm/src/runtime/parser/index.ts b/crates/codegen/runtime/npm/src/runtime/parser/index.ts new file mode 100644 index 0000000000..d240e92ea8 --- /dev/null +++ b/crates/codegen/runtime/npm/src/runtime/parser/index.ts @@ -0,0 +1,14 @@ +import * as generated from "../napi-bindings/generated"; +import { DiagnosticInterface } from "../diagnostic"; + +export const Language = generated.parser.Language; +export type Language = generated.parser.Language; + +export const ParseError = generated.parser.ParseError; +export type ParseError = generated.parser.ParseError; + +type AssertImplements = void; +declare const assertDiagnosticInterface: AssertImplements; + +export const ParseOutput = generated.parser.ParseOutput; +export type ParseOutput = generated.parser.ParseOutput; diff --git a/crates/solidity/outputs/cargo/slang_solidity/generated/public_api.txt b/crates/solidity/outputs/cargo/slang_solidity/generated/public_api.txt index 516793d59a..f8ef99c2f3 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/generated/public_api.txt +++ b/crates/solidity/outputs/cargo/slang_solidity/generated/public_api.txt @@ -873,57 +873,55 @@ pub trait slang_solidity::diagnostic::Diagnostic pub fn slang_solidity::diagnostic::Diagnostic::message(&self) -> alloc::string::String pub fn slang_solidity::diagnostic::Diagnostic::severity(&self) -> slang_solidity::diagnostic::Severity pub fn slang_solidity::diagnostic::Diagnostic::text_range(&self) -> metaslang_cst::text_index::TextRange -impl slang_solidity::diagnostic::Diagnostic for slang_solidity::parse_error::ParseError -pub fn slang_solidity::parse_error::ParseError::message(&self) -> alloc::string::String -pub fn slang_solidity::parse_error::ParseError::severity(&self) -> slang_solidity::diagnostic::Severity -pub fn slang_solidity::parse_error::ParseError::text_range(&self) -> metaslang_cst::text_index::TextRange +impl slang_solidity::diagnostic::Diagnostic for slang_solidity::parser::ParseError +pub fn slang_solidity::parser::ParseError::message(&self) -> alloc::string::String +pub fn slang_solidity::parser::ParseError::severity(&self) -> slang_solidity::diagnostic::Severity +pub fn slang_solidity::parser::ParseError::text_range(&self) -> metaslang_cst::text_index::TextRange pub fn slang_solidity::diagnostic::render(error: &D, source_id: &str, source: &str, with_color: bool) -> alloc::string::String -pub mod slang_solidity::language -pub enum slang_solidity::language::Error -pub slang_solidity::language::Error::UnsupportedLanguageVersion(semver::Version) -impl core::error::Error for slang_solidity::language::Error -impl core::fmt::Debug for slang_solidity::language::Error -pub fn slang_solidity::language::Error::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result -impl core::fmt::Display for slang_solidity::language::Error -pub fn slang_solidity::language::Error::fmt(&self, __formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result -pub struct slang_solidity::language::Language -impl slang_solidity::language::Language -pub const slang_solidity::language::Language::ROOT_KIND: slang_solidity::cst::NonterminalKind -pub const slang_solidity::language::Language::SUPPORTED_VERSIONS: &'static [semver::Version] -pub fn slang_solidity::language::Language::new(version: semver::Version) -> core::result::Result -pub fn slang_solidity::language::Language::parse(&self, kind: slang_solidity::cst::NonterminalKind, input: &str) -> slang_solidity::parse_output::ParseOutput -pub fn slang_solidity::language::Language::version(&self) -> &semver::Version -impl core::fmt::Debug for slang_solidity::language::Language -pub fn slang_solidity::language::Language::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result -pub mod slang_solidity::parse_error -pub struct slang_solidity::parse_error::ParseError -impl slang_solidity::parse_error::ParseError -pub fn slang_solidity::parse_error::ParseError::message(&self) -> alloc::string::String -pub fn slang_solidity::parse_error::ParseError::text_range(&self) -> &metaslang_cst::text_index::TextRange -impl core::clone::Clone for slang_solidity::parse_error::ParseError -pub fn slang_solidity::parse_error::ParseError::clone(&self) -> slang_solidity::parse_error::ParseError -impl core::cmp::Eq for slang_solidity::parse_error::ParseError -impl core::cmp::PartialEq for slang_solidity::parse_error::ParseError -pub fn slang_solidity::parse_error::ParseError::eq(&self, other: &slang_solidity::parse_error::ParseError) -> bool -impl core::fmt::Debug for slang_solidity::parse_error::ParseError -pub fn slang_solidity::parse_error::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result -impl core::fmt::Display for slang_solidity::parse_error::ParseError -pub fn slang_solidity::parse_error::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result -impl core::marker::StructuralPartialEq for slang_solidity::parse_error::ParseError -impl slang_solidity::diagnostic::Diagnostic for slang_solidity::parse_error::ParseError -pub fn slang_solidity::parse_error::ParseError::message(&self) -> alloc::string::String -pub fn slang_solidity::parse_error::ParseError::severity(&self) -> slang_solidity::diagnostic::Severity -pub fn slang_solidity::parse_error::ParseError::text_range(&self) -> metaslang_cst::text_index::TextRange -pub mod slang_solidity::parse_output -pub struct slang_solidity::parse_output::ParseOutput -impl slang_solidity::parse_output::ParseOutput -pub fn slang_solidity::parse_output::ParseOutput::create_tree_cursor(&self) -> slang_solidity::cst::Cursor -pub fn slang_solidity::parse_output::ParseOutput::errors(&self) -> &alloc::vec::Vec -pub fn slang_solidity::parse_output::ParseOutput::is_valid(&self) -> bool -pub fn slang_solidity::parse_output::ParseOutput::tree(&self) -> slang_solidity::cst::Node -impl core::cmp::PartialEq for slang_solidity::parse_output::ParseOutput -pub fn slang_solidity::parse_output::ParseOutput::eq(&self, other: &slang_solidity::parse_output::ParseOutput) -> bool -impl core::fmt::Debug for slang_solidity::parse_output::ParseOutput -pub fn slang_solidity::parse_output::ParseOutput::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result -impl core::marker::StructuralPartialEq for slang_solidity::parse_output::ParseOutput +pub mod slang_solidity::parser +pub enum slang_solidity::parser::LanguageInitializationError +pub slang_solidity::parser::LanguageInitializationError::UnsupportedLanguageVersion(semver::Version) +impl core::error::Error for slang_solidity::parser::LanguageInitializationError +impl core::fmt::Debug for slang_solidity::parser::LanguageInitializationError +pub fn slang_solidity::parser::LanguageInitializationError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl core::fmt::Display for slang_solidity::parser::LanguageInitializationError +pub fn slang_solidity::parser::LanguageInitializationError::fmt(&self, __formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub struct slang_solidity::parser::Language +impl slang_solidity::parser::Language +pub const slang_solidity::parser::Language::ROOT_KIND: slang_solidity::cst::NonterminalKind +pub const slang_solidity::parser::Language::SUPPORTED_VERSIONS: &'static [semver::Version] +pub fn slang_solidity::parser::Language::new(version: semver::Version) -> core::result::Result +pub fn slang_solidity::parser::Language::parse(&self, kind: slang_solidity::cst::NonterminalKind, input: &str) -> slang_solidity::parser::ParseOutput +pub fn slang_solidity::parser::Language::version(&self) -> &semver::Version +impl core::fmt::Debug for slang_solidity::parser::Language +pub fn slang_solidity::parser::Language::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +pub struct slang_solidity::parser::ParseError +impl slang_solidity::parser::ParseError +pub fn slang_solidity::parser::ParseError::message(&self) -> alloc::string::String +pub fn slang_solidity::parser::ParseError::text_range(&self) -> &metaslang_cst::text_index::TextRange +impl core::clone::Clone for slang_solidity::parser::ParseError +pub fn slang_solidity::parser::ParseError::clone(&self) -> slang_solidity::parser::ParseError +impl core::cmp::Eq for slang_solidity::parser::ParseError +impl core::cmp::PartialEq for slang_solidity::parser::ParseError +pub fn slang_solidity::parser::ParseError::eq(&self, other: &slang_solidity::parser::ParseError) -> bool +impl core::fmt::Debug for slang_solidity::parser::ParseError +pub fn slang_solidity::parser::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl core::fmt::Display for slang_solidity::parser::ParseError +pub fn slang_solidity::parser::ParseError::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl core::marker::StructuralPartialEq for slang_solidity::parser::ParseError +impl slang_solidity::diagnostic::Diagnostic for slang_solidity::parser::ParseError +pub fn slang_solidity::parser::ParseError::message(&self) -> alloc::string::String +pub fn slang_solidity::parser::ParseError::severity(&self) -> slang_solidity::diagnostic::Severity +pub fn slang_solidity::parser::ParseError::text_range(&self) -> metaslang_cst::text_index::TextRange +pub struct slang_solidity::parser::ParseOutput +impl slang_solidity::parser::ParseOutput +pub fn slang_solidity::parser::ParseOutput::create_tree_cursor(&self) -> slang_solidity::cst::Cursor +pub fn slang_solidity::parser::ParseOutput::errors(&self) -> &alloc::vec::Vec +pub fn slang_solidity::parser::ParseOutput::is_valid(&self) -> bool +pub fn slang_solidity::parser::ParseOutput::tree(&self) -> slang_solidity::cst::Node +impl core::cmp::PartialEq for slang_solidity::parser::ParseOutput +pub fn slang_solidity::parser::ParseOutput::eq(&self, other: &slang_solidity::parser::ParseOutput) -> bool +impl core::fmt::Debug for slang_solidity::parser::ParseOutput +pub fn slang_solidity::parser::ParseOutput::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result +impl core::marker::StructuralPartialEq for slang_solidity::parser::ParseOutput pub mod slang_solidity::wit diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/cli/commands/parse.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/cli/commands/parse.rs index d174ba0839..8929c649b3 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/cli/commands/parse.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/cli/commands/parse.rs @@ -7,7 +7,7 @@ use clap::Parser; use semver::Version; use crate::diagnostic; -use crate::language::Language; +use crate::parser::Language; #[derive(Parser, Debug)] pub struct ParseCommand { diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/mod.rs deleted file mode 100644 index 8bf1ce4454..0000000000 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -mod generated; -mod lexer; -mod parser_support; -mod scanner_macros; - -pub use generated::*; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/mod.rs index 151cbf6575..80a635d4af 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/mod.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/mod.rs @@ -2,9 +2,7 @@ pub mod cst; pub mod diagnostic; -pub mod language; -pub mod parse_error; -pub mod parse_output; +pub mod parser; #[cfg(feature = "__experimental_bindings_api")] pub mod bindings; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/mod.rs index b6ad89696d..681bf04f2a 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/mod.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/mod.rs @@ -2,8 +2,7 @@ pub mod cst; pub mod diagnostic; -pub mod parse_error; -pub mod parse_output; +pub mod parser; #[path = "generated/ast_selectors.rs"] pub mod ast_selectors; @@ -11,8 +10,8 @@ pub mod ast_selectors; type RustCursor = crate::cst::Cursor; type RustEdge = crate::cst::Edge; type RustNode = crate::cst::Node; -type RustParseError = crate::parse_error::ParseError; -type RustParseOutput = crate::parse_output::ParseOutput; +type RustParseError = crate::parser::ParseError; +type RustParseOutput = crate::parser::ParseOutput; type RustQuery = crate::cst::Query; type RustQueryMatch = crate::cst::QueryMatch; type RustQueryMatchIterator = crate::cst::QueryMatchIterator; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parser/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parser/mod.rs new file mode 100644 index 0000000000..0623fb565d --- /dev/null +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parser/mod.rs @@ -0,0 +1,7 @@ +// This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +mod parse_error; +mod parse_output; + +pub use parse_error::ParseError; +pub use parse_output::ParseOutput; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parse_error.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parser/parse_error.rs similarity index 83% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parse_error.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parser/parse_error.rs index 37d7a1e200..a7f67442e9 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parse_error.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parser/parse_error.rs @@ -8,7 +8,7 @@ use napi_derive::napi; use crate::expose_diagnostic_trait_interface; use crate::napi_interface::RustParseError; -#[napi(namespace = "parse_error")] +#[napi(namespace = "parser")] #[derive(PartialEq, Clone)] pub struct ParseError(RustParseError); @@ -18,4 +18,4 @@ impl From for ParseError { } } -expose_diagnostic_trait_interface!("parse_error", ParseError); +expose_diagnostic_trait_interface!("parser", ParseError); diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parse_output.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parser/parse_output.rs similarity index 78% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parse_output.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parser/parse_output.rs index 3d45c4e349..455c2ac8ea 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parse_output.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parser/parse_output.rs @@ -4,9 +4,10 @@ use napi::Either; use napi_derive::napi; use crate::napi_interface::cst::{Cursor, NAPINodeExtensions, NonterminalNode, TerminalNode}; -use crate::napi_interface::{parse_error, RustParseOutput}; +use crate::napi_interface::parser::ParseError; +use crate::napi_interface::RustParseOutput; -#[napi(namespace = "parse_output")] +#[napi(namespace = "parser")] pub struct ParseOutput(RustParseOutput); impl From for ParseOutput { @@ -15,15 +16,15 @@ impl From for ParseOutput { } } -#[napi(namespace = "parse_output")] +#[napi(namespace = "parser")] impl ParseOutput { #[napi(ts_return_type = "cst.Node", catch_unwind)] pub fn tree(&self) -> Either { self.0.tree().into_js_either_node() } - #[napi(ts_return_type = "Array", catch_unwind)] - pub fn errors(&self) -> Vec { + #[napi(ts_return_type = "Array", catch_unwind)] + pub fn errors(&self) -> Vec { self.0.errors().iter().map(|x| x.clone().into()).collect() } diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/generated/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/generated/language.rs similarity index 99% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/generated/mod.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/generated/language.rs index b227ec25cb..c1565f9bba 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/generated/mod.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/generated/language.rs @@ -18,22 +18,22 @@ use crate::cst; use crate::cst::{ EdgeLabel, IsLexicalContext, LexicalContext, LexicalContextType, NonterminalKind, TerminalKind, }; -use crate::language::lexer::{KeywordScan, Lexer, ScannedTerminal}; -use crate::language::parser_support::{ +#[cfg(feature = "__private_napi_interfaces")] +use crate::napi_interface::parser::ParseOutput as NAPIParseOutput; +use crate::parser::lexer::{KeywordScan, Lexer, ScannedTerminal}; +use crate::parser::parser_support::{ ChoiceHelper, OneOrMoreHelper, OptionalHelper, ParserContext, ParserFunction, ParserResult, PrecedenceHelper, SeparatedHelper, SequenceHelper, TerminalAcceptanceThreshold, ZeroOrMoreHelper, }; -use crate::language::scanner_macros::{ +use crate::parser::scanner_macros::{ scan_char_range, scan_chars, scan_choice, scan_keyword_choice, scan_none_of, scan_not_followed_by, scan_one_or_more, scan_optional, scan_sequence, scan_zero_or_more, }; -#[cfg(feature = "__private_napi_interfaces")] -use crate::napi_interface::parse_output::ParseOutput as NAPIParseOutput; -use crate::parse_output::ParseOutput; +use crate::parser::ParseOutput; #[derive(Debug)] -#[cfg_attr(feature = "__private_napi_interfaces", napi(namespace = "language"))] +#[cfg_attr(feature = "__private_napi_interfaces", napi(namespace = "parser"))] pub struct Language { #[allow(dead_code)] pub(crate) version_is_at_least_0_4_11: bool, @@ -75,7 +75,7 @@ pub struct Language { } #[derive(thiserror::Error, Debug)] -pub enum Error { +pub enum LanguageInitializationError { #[error("Unsupported language version '{0}'.")] UnsupportedLanguageVersion(Version), @@ -85,8 +85,8 @@ pub enum Error { } #[cfg(feature = "__private_napi_interfaces")] -impl From for napi::Error { - fn from(value: Error) -> Self { +impl From for napi::Error { + fn from(value: LanguageInitializationError) -> Self { napi::Error::from_reason(value.to_string()) } } @@ -179,7 +179,7 @@ impl Language { pub const ROOT_KIND: NonterminalKind = NonterminalKind::SourceUnit; - pub fn new(version: Version) -> std::result::Result { + pub fn new(version: Version) -> std::result::Result { if Self::SUPPORTED_VERSIONS.binary_search(&version).is_ok() { Ok(Self { version_is_at_least_0_4_11: Version::new(0, 4, 11) <= version, @@ -220,7 +220,9 @@ impl Language { version, }) } else { - Err(Error::UnsupportedLanguageVersion(version)) + Err(LanguageInitializationError::UnsupportedLanguageVersion( + version, + )) } } @@ -13551,12 +13553,12 @@ impl Lexer for Language { #[cfg(feature = "__private_napi_interfaces")] // NAPI-exposed functions have to accept owned values. #[allow(clippy::needless_pass_by_value)] -#[napi(namespace = "language")] +#[napi(namespace = "parser")] impl Language { #[napi(constructor, catch_unwind)] pub fn new_napi(version: String) -> std::result::Result { - let version = - Version::parse(&version).map_err(|_| Error::InvalidSemanticVersion(version))?; + let version = Version::parse(&version) + .map_err(|_| LanguageInitializationError::InvalidSemanticVersion(version))?; Self::new(version).map_err(|e| e.into()) } @@ -13582,11 +13584,7 @@ impl Language { Self::ROOT_KIND } - #[napi( - js_name = "parse", - ts_return_type = "parse_output.ParseOutput", - catch_unwind - )] + #[napi(js_name = "parse", ts_return_type = "parser.ParseOutput", catch_unwind)] pub fn parse_napi( &self, #[napi(ts_arg_type = "cst.NonterminalKind")] kind: NonterminalKind, diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/lexer/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/lexer/mod.rs similarity index 98% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/lexer/mod.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/lexer/mod.rs index 8ffb551c28..4853e3029f 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/lexer/mod.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/lexer/mod.rs @@ -1,7 +1,7 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Edge, IsLexicalContext, Node, TerminalKind}; -use crate::language::parser_support::{ParserContext, ParserResult}; +use crate::parser::parser_support::{ParserContext, ParserResult}; /// Whether a keyword has been scanned and if so, whether it is reserved (unusable as an identifier) /// or not. diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/mod.rs new file mode 100644 index 0000000000..44f4b789cf --- /dev/null +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/mod.rs @@ -0,0 +1,13 @@ +// This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +#[path = "generated/language.rs"] +mod language; +mod lexer; +mod parse_error; +mod parse_output; +mod parser_support; +mod scanner_macros; + +pub use language::{Language, LanguageInitializationError}; +pub use parse_error::ParseError; +pub use parse_output::ParseOutput; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/parse_error/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parse_error.rs similarity index 100% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/parse_error/mod.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parse_error.rs diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/parse_output/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parse_output.rs similarity index 95% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/parse_output/mod.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parse_output.rs index 729829b822..74160c0ef6 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/parse_output/mod.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parse_output.rs @@ -1,7 +1,7 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Cursor, Node, TextIndex}; -use crate::parse_error::ParseError; +use crate::parser::ParseError; #[derive(Debug, PartialEq)] pub struct ParseOutput { diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/choice_helper.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/choice_helper.rs similarity index 97% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/choice_helper.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/choice_helper.rs index ca61bf8261..558226833a 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/choice_helper.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/choice_helper.rs @@ -4,9 +4,9 @@ use std::mem; use std::ops::ControlFlow; use crate::cst::{Node, TerminalKindExtensions, TextIndex}; -use crate::language::parser_support::context::{Marker, ParserContext}; -use crate::language::parser_support::ParserResult; -use crate::parse_error::ParseError; +use crate::parser::parser_support::context::{Marker, ParserContext}; +use crate::parser::parser_support::ParserResult; +use crate::parser::ParseError; /// Starting from a given position in the input, this helper will try to pick (and remember) a best match. Settles on /// a first full match if possible, otherwise on the best incomplete match. diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/context.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/context.rs similarity index 98% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/context.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/context.rs index c8a8ffe334..9b52ba03f0 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/context.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/context.rs @@ -4,7 +4,7 @@ use std::mem; use std::ops::Range; use crate::cst::{TerminalKind, TextIndex}; -use crate::parse_error::ParseError; +use crate::parser::ParseError; #[derive(Debug)] pub struct ParserContext<'s> { diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/mod.rs similarity index 100% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/mod.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/mod.rs diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/optional_helper.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/optional_helper.rs similarity index 92% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/optional_helper.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/optional_helper.rs index e40e457ec4..989e259cda 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/optional_helper.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/optional_helper.rs @@ -1,6 +1,6 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. -use crate::language::parser_support::parser_result::ParserResult; +use crate::parser::parser_support::parser_result::ParserResult; pub struct OptionalHelper; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/parser_function.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/parser_function.rs similarity index 96% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/parser_function.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/parser_function.rs index b6d8e86cd2..5565042c60 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/parser_function.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/parser_function.rs @@ -3,13 +3,12 @@ use std::rc::Rc; use crate::cst::{Edge, Node, TerminalKind, TerminalKindExtensions, TextIndex}; -use crate::language::lexer::Lexer; -use crate::language::parser_support::context::ParserContext; -use crate::language::parser_support::parser_result::{ +use crate::parser::lexer::Lexer; +use crate::parser::parser_support::context::ParserContext; +use crate::parser::parser_support::parser_result::{ IncompleteMatch, Match, ParserResult, SkippedUntil, }; -use crate::parse_error::ParseError; -use crate::parse_output::ParseOutput; +use crate::parser::{ParseError, ParseOutput}; pub trait ParserFunction where diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/parser_result.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/parser_result.rs similarity index 100% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/parser_result.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/parser_result.rs diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/precedence_helper.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/precedence_helper.rs similarity index 98% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/precedence_helper.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/precedence_helper.rs index 2898ae9311..82a6606687 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/precedence_helper.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/precedence_helper.rs @@ -1,10 +1,10 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Edge, EdgeLabel, Node, NonterminalKind}; -use crate::language::parser_support::parser_result::PrattElement::{ +use crate::parser::parser_support::parser_result::PrattElement::{ self, Binary, Expression, Postfix, Prefix, }; -use crate::language::parser_support::parser_result::{ParserResult, PrattOperatorMatch}; +use crate::parser::parser_support::parser_result::{ParserResult, PrattOperatorMatch}; pub struct PrecedenceHelper; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/recovery.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/recovery.rs similarity index 95% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/recovery.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/recovery.rs index 8fb6e31c50..49641de07c 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/recovery.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/recovery.rs @@ -1,11 +1,11 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Edge, IsLexicalContext, TerminalKind, TextRange, TextRangeExtensions}; -use crate::language::lexer::{Lexer, ScannedTerminal}; -use crate::language::parser_support::context::ParserContext; -use crate::language::parser_support::parser_result::SkippedUntil; -use crate::language::parser_support::ParserResult; -use crate::parse_error::ParseError; +use crate::parser::lexer::{Lexer, ScannedTerminal}; +use crate::parser::parser_support::context::ParserContext; +use crate::parser::parser_support::parser_result::SkippedUntil; +use crate::parser::parser_support::ParserResult; +use crate::parser::ParseError; /// How many terminals have to be matched to trigger the error recovery. /// For ambiguous syntaxes this needs to be set to at least N, where N diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/repetition_helper.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/repetition_helper.rs similarity index 97% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/repetition_helper.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/repetition_helper.rs index 6d92001d80..a808e73796 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/repetition_helper.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/repetition_helper.rs @@ -1,7 +1,7 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. -use crate::language::parser_support::context::ParserContext; -use crate::language::parser_support::parser_result::{ +use crate::parser::parser_support::context::ParserContext; +use crate::parser::parser_support::parser_result::{ IncompleteMatch, NoMatch, ParserResult, PrattElement, }; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/separated_helper.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/separated_helper.rs similarity index 94% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/separated_helper.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/separated_helper.rs index f10e16ac1e..bcc5dc64f0 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/separated_helper.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/separated_helper.rs @@ -1,11 +1,11 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Edge, EdgeLabel, IsLexicalContext, Node, TerminalKind, TextRangeExtensions}; -use crate::language::lexer::Lexer; -use crate::language::parser_support::parser_result::{ParserResult, SkippedUntil}; -use crate::language::parser_support::recovery::skip_until_with_nested_delims; -use crate::language::parser_support::ParserContext; -use crate::parse_error::ParseError; +use crate::parser::lexer::Lexer; +use crate::parser::parser_support::parser_result::{ParserResult, SkippedUntil}; +use crate::parser::parser_support::recovery::skip_until_with_nested_delims; +use crate::parser::parser_support::ParserContext; +use crate::parser::ParseError; pub struct SeparatedHelper; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/sequence_helper.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/sequence_helper.rs similarity index 99% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/sequence_helper.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/sequence_helper.rs index e14dab5ac6..7c1f7995dd 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/sequence_helper.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/parser_support/sequence_helper.rs @@ -3,7 +3,7 @@ use std::ops::ControlFlow; use crate::cst::{Edge, EdgeLabel, Node, TerminalKind, TerminalKindExtensions}; -use crate::language::parser_support::parser_result::{ +use crate::parser::parser_support::parser_result::{ Match, ParserResult, PrattElement, SkippedUntil, }; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/scanner_macros/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/scanner_macros/mod.rs similarity index 100% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/scanner_macros/mod.rs rename to crates/solidity/outputs/cargo/slang_solidity/src/generated/parser/scanner_macros/mod.rs diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/_world.wit b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/_world.wit index b01e361068..7f826767f4 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/_world.wit +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/_world.wit @@ -5,7 +5,5 @@ package nomic-foundation:slang; world slang { export cst; export diagnostic; - export language; - export parse-error; - export parse-output; + export parser; } diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/language.wit b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/language.wit deleted file mode 100644 index 677d5337f9..0000000000 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/language.wit +++ /dev/null @@ -1,13 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -interface language { - use cst.{nonterminal-kind}; - use parse-output.{parse-output}; - - resource language { - supported-versions: static func() -> list; - new: static func(version: string) -> result; - version: func() -> string; - parse: func(kind: nonterminal-kind, input: string) -> parse-output; - } -} diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/parse-error.wit b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/parse-error.wit deleted file mode 100644 index ff2790c3d7..0000000000 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/parse-error.wit +++ /dev/null @@ -1,12 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -interface parse-error { - use cst.{text-range}; - use diagnostic.{severity}; - - resource parse-error { - severity: func() -> severity; - text-range: func() -> text-range; - message: func() -> string; - } -} diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/parse-output.wit b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/parse-output.wit deleted file mode 100644 index 7651e6a32e..0000000000 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/parse-output.wit +++ /dev/null @@ -1,13 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -interface parse-output { - use cst.{cursor, node}; - use parse-error.{parse-error}; - - resource parse-output { - tree: func() -> node; - errors: func() -> list; - is-valid: func() -> bool; - create-tree-cursor: func() -> cursor; - } -} diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/parser.wit b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/parser.wit new file mode 100644 index 0000000000..8e8875efea --- /dev/null +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/interface/generated/parser.wit @@ -0,0 +1,26 @@ +// This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +interface parser { + use cst.{cursor, node, nonterminal-kind, text-range}; + use diagnostic.{severity}; + + resource language { + supported-versions: static func() -> list; + new: static func(version: string) -> result; + version: func() -> string; + parse: func(kind: nonterminal-kind, input: string) -> parse-output; + } + + resource parse-error { + severity: func() -> severity; + text-range: func() -> text-range; + message: func() -> string; + } + + resource parse-output { + tree: func() -> node; + errors: func() -> list; + is-valid: func() -> bool; + create-tree-cursor: func() -> cursor; + } +} diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/language.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/language.rs deleted file mode 100644 index 0207bd70b3..0000000000 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/language.rs +++ /dev/null @@ -1,48 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -use crate::wit::utils::{define_wrapper, FromFFI, IntoFFI}; - -mod ffi { - pub use crate::wit::interface::exports::nomic_foundation::slang::language::{ - Guest, GuestLanguage, Language, LanguageBorrow, NonterminalKind, - }; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_output::ParseOutput; -} - -mod rust { - pub use crate::language::Language; -} - -impl ffi::Guest for crate::wit::World { - type Language = LanguageWrapper; -} - -//================================================ -// -// resource language -// -//================================================ - -define_wrapper! { Language { - fn new(version: String) -> Result { - semver::Version::parse(&version) - .map_err(|_| format!("Invalid version: {version}")) - .and_then(|version| rust::Language::new(version).map_err(|e| e.to_string())) - .map(IntoFFI::_into_ffi) - } - - fn version(&self) -> String { - self._borrow_ffi().version.to_string() - } - - fn supported_versions() -> Vec { - rust::Language::SUPPORTED_VERSIONS - .iter() - .map(|v| v.to_string()) - .collect() - } - - fn parse(&self, kind: ffi::NonterminalKind, input: String) -> ffi::ParseOutput { - self._borrow_ffi().parse(kind._from_ffi(), &input)._into_ffi() - } -} } diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/mod.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/mod.rs index 479d70466b..0bf0d41a7a 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/mod.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/mod.rs @@ -2,6 +2,4 @@ mod cst; mod diagnostic; -mod language; -mod parse_error; -mod parse_output; +mod parser; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/parse_error.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/parse_error.rs deleted file mode 100644 index c6097fcb71..0000000000 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/parse_error.rs +++ /dev/null @@ -1,43 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -use crate::diagnostic::Diagnostic; -use crate::wit::utils::{define_wrapper, IntoFFI}; - -mod ffi { - pub use crate::wit::interface::exports::nomic_foundation::slang::cst::TextRange; - pub use crate::wit::interface::exports::nomic_foundation::slang::diagnostic::Severity; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_error::{ - Guest, GuestParseError, - }; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_output::{ - ParseError, ParseErrorBorrow, - }; -} - -mod rust { - pub use crate::parse_error::ParseError; -} - -impl ffi::Guest for crate::wit::World { - type ParseError = ParseErrorWrapper; -} - -//================================================ -// -// resource parse-error -// -//================================================ - -define_wrapper! { ParseError { - fn severity(&self) -> ffi::Severity { - self._borrow_ffi().severity()._into_ffi() - } - - fn text_range(&self) -> ffi::TextRange { - self._borrow_ffi().text_range()._into_ffi() - } - - fn message(&self) -> String { - self._borrow_ffi().message() - } -} } diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/parse_output.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/parse_output.rs deleted file mode 100644 index 85905c39b9..0000000000 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/parse_output.rs +++ /dev/null @@ -1,43 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -use crate::wit::utils::{define_wrapper, IntoFFI}; - -mod ffi { - pub use crate::wit::interface::exports::nomic_foundation::slang::cst::{Cursor, Node}; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_error::ParseError; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_output::{ - Guest, GuestParseOutput, ParseOutput, ParseOutputBorrow, - }; -} - -mod rust { - pub use crate::parse_output::ParseOutput; -} - -impl ffi::Guest for crate::wit::World { - type ParseOutput = ParseOutputWrapper; -} - -//================================================ -// -// resource parse-output -// -//================================================ - -define_wrapper! { ParseOutput { - fn tree(&self) -> ffi::Node { - self._borrow_ffi().tree()._into_ffi() - } - - fn errors(&self) -> Vec { - self._borrow_ffi().errors().iter().map(|e| e.clone()._into_ffi()).collect() - } - - fn is_valid(&self) -> bool { - self._borrow_ffi().is_valid() - } - - fn create_tree_cursor(&self) -> ffi::Cursor { - self._borrow_ffi().create_tree_cursor()._into_ffi() - } -} } diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/parser.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/parser.rs new file mode 100644 index 0000000000..e13c5ca53a --- /dev/null +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/wit/wrappers/parser.rs @@ -0,0 +1,99 @@ +// This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +use crate::diagnostic::Diagnostic; +use crate::wit::utils::{define_wrapper, FromFFI, IntoFFI}; + +mod ffi { + pub use crate::wit::interface::exports::nomic_foundation::slang::cst::{ + Cursor, Node, TextRange, + }; + pub use crate::wit::interface::exports::nomic_foundation::slang::diagnostic::Severity; + pub use crate::wit::interface::exports::nomic_foundation::slang::parser::{ + Guest, GuestLanguage, GuestParseError, GuestParseOutput, Language, LanguageBorrow, + NonterminalKind, ParseError, ParseErrorBorrow, ParseOutput, ParseOutputBorrow, + }; +} + +mod rust { + pub use crate::parser::{Language, ParseError, ParseOutput}; +} + +impl ffi::Guest for crate::wit::World { + type Language = LanguageWrapper; + type ParseError = ParseErrorWrapper; + type ParseOutput = ParseOutputWrapper; +} + +//================================================ +// +// resource language +// +//================================================ + +define_wrapper! { Language { + fn new(version: String) -> Result { + semver::Version::parse(&version) + .map_err(|_| format!("Invalid version: {version}")) + .and_then(|version| rust::Language::new(version).map_err(|e| e.to_string())) + .map(IntoFFI::_into_ffi) + } + + fn version(&self) -> String { + self._borrow_ffi().version.to_string() + } + + fn supported_versions() -> Vec { + rust::Language::SUPPORTED_VERSIONS + .iter() + .map(|v| v.to_string()) + .collect() + } + + fn parse(&self, kind: ffi::NonterminalKind, input: String) -> ffi::ParseOutput { + self._borrow_ffi().parse(kind._from_ffi(), &input)._into_ffi() + } +} } + +//================================================ +// +// resource parse-error +// +//================================================ + +define_wrapper! { ParseError { + fn severity(&self) -> ffi::Severity { + self._borrow_ffi().severity()._into_ffi() + } + + fn text_range(&self) -> ffi::TextRange { + self._borrow_ffi().text_range()._into_ffi() + } + + fn message(&self) -> String { + self._borrow_ffi().message() + } +} } + +//================================================ +// +// resource parse-output +// +//================================================ + +define_wrapper! { ParseOutput { + fn tree(&self) -> ffi::Node { + self._borrow_ffi().tree()._into_ffi() + } + + fn errors(&self) -> Vec { + self._borrow_ffi().errors().iter().map(|e| e.clone()._into_ffi()).collect() + } + + fn is_valid(&self) -> bool { + self._borrow_ffi().is_valid() + } + + fn create_tree_cursor(&self) -> ffi::Cursor { + self._borrow_ffi().create_tree_cursor()._into_ffi() + } +} } diff --git a/crates/solidity/outputs/cargo/tests/src/bindings_assertions/runner.rs b/crates/solidity/outputs/cargo/tests/src/bindings_assertions/runner.rs index 900bb1abda..2db5b98c7d 100644 --- a/crates/solidity/outputs/cargo/tests/src/bindings_assertions/runner.rs +++ b/crates/solidity/outputs/cargo/tests/src/bindings_assertions/runner.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use anyhow::Result; use infra_utils::cargo::CargoWorkspace; use semver::Version; -use slang_solidity::language::Language; +use slang_solidity::parser::Language; use slang_solidity::{bindings, diagnostic}; use crate::bindings_assertions::assertions::{ diff --git a/crates/solidity/outputs/cargo/tests/src/bindings_output/runner.rs b/crates/solidity/outputs/cargo/tests/src/bindings_output/runner.rs index 06c369aa83..cde749cacf 100644 --- a/crates/solidity/outputs/cargo/tests/src/bindings_output/runner.rs +++ b/crates/solidity/outputs/cargo/tests/src/bindings_output/runner.rs @@ -8,8 +8,7 @@ use infra_utils::paths::PathExtensions; use metaslang_graph_builder::graph::Graph; use slang_solidity::bindings; use slang_solidity::cst::KindTypes; -use slang_solidity::language::Language; -use slang_solidity::parse_output::ParseOutput; +use slang_solidity::parser::{Language, ParseOutput}; use super::graph::{render_dot_graph, render_graph}; use super::renderer::render_bindings; diff --git a/crates/solidity/outputs/cargo/tests/src/cst_output/runner.rs b/crates/solidity/outputs/cargo/tests/src/cst_output/runner.rs index a0059c700f..0c1178d22f 100644 --- a/crates/solidity/outputs/cargo/tests/src/cst_output/runner.rs +++ b/crates/solidity/outputs/cargo/tests/src/cst_output/runner.rs @@ -5,7 +5,7 @@ use infra_utils::cargo::CargoWorkspace; use infra_utils::codegen::CodegenFileSystem; use infra_utils::paths::PathExtensions; use slang_solidity::cst::NonterminalKind; -use slang_solidity::language::Language; +use slang_solidity::parser::Language; use strum_macros::Display; use crate::cst_output::renderer::render; diff --git a/crates/solidity/outputs/cargo/tests/src/doc_examples/tree_query_language.rs b/crates/solidity/outputs/cargo/tests/src/doc_examples/tree_query_language.rs index 8d8919d150..f4d1422bc5 100644 --- a/crates/solidity/outputs/cargo/tests/src/doc_examples/tree_query_language.rs +++ b/crates/solidity/outputs/cargo/tests/src/doc_examples/tree_query_language.rs @@ -2,7 +2,7 @@ use once_cell::sync::Lazy; use regex::Regex; use semver::Version; use slang_solidity::cst::{NonterminalKind, Query, QueryMatchIterator}; -use slang_solidity::language::Language; +use slang_solidity::parser::Language; static SNIPPET_MARKER_RE: Lazy = Lazy::new(|| Regex::new("// --8<-- \\[(start|end):([a-z0-9-]+)\\]").unwrap()); diff --git a/crates/solidity/outputs/cargo/tests/src/doc_examples/using_queries.rs b/crates/solidity/outputs/cargo/tests/src/doc_examples/using_queries.rs index d382415d5e..30f616b918 100644 --- a/crates/solidity/outputs/cargo/tests/src/doc_examples/using_queries.rs +++ b/crates/solidity/outputs/cargo/tests/src/doc_examples/using_queries.rs @@ -4,8 +4,7 @@ use anyhow::Result; use infra_utils::paths::PathExtensions; use semver::Version; use slang_solidity::cst::{NonterminalKind, Query, QueryMatchIterator}; -use slang_solidity::language::Language; -use slang_solidity::parse_output::ParseOutput; +use slang_solidity::parser::{Language, ParseOutput}; fn parse_doc_input_file>(path: T) -> Result { let input_path = Path::repo_path("documentation/public/user-guide/inputs").join(path.as_ref()); diff --git a/crates/solidity/outputs/cargo/tests/src/doc_examples/using_the_cursor.rs b/crates/solidity/outputs/cargo/tests/src/doc_examples/using_the_cursor.rs index e6e6b157e1..f696336285 100644 --- a/crates/solidity/outputs/cargo/tests/src/doc_examples/using_the_cursor.rs +++ b/crates/solidity/outputs/cargo/tests/src/doc_examples/using_the_cursor.rs @@ -9,7 +9,7 @@ fn using_the_cursor() -> Result<()> { // --8<-- [start:imports] use semver::Version; use slang_solidity::cst::{EdgeLabel, NonterminalKind, TerminalKind, TextRangeExtensions}; - use slang_solidity::language::Language; + use slang_solidity::parser::Language; // --8<-- [end:imports] let input_path = Path::repo_path("documentation/public/user-guide/inputs/using-the-cursor.sol"); diff --git a/crates/solidity/outputs/cargo/tests/src/doc_examples/using_the_parser.rs b/crates/solidity/outputs/cargo/tests/src/doc_examples/using_the_parser.rs index 4e30b272d6..afc65c19fc 100644 --- a/crates/solidity/outputs/cargo/tests/src/doc_examples/using_the_parser.rs +++ b/crates/solidity/outputs/cargo/tests/src/doc_examples/using_the_parser.rs @@ -9,7 +9,7 @@ fn using_the_parser() -> Result<()> { // --8<-- [start:imports] use semver::Version; use slang_solidity::cst::{Node, NonterminalKind, TerminalKind}; - use slang_solidity::language::Language; + use slang_solidity::parser::Language; // --8<-- [end:imports] let input_path = Path::repo_path("documentation/public/user-guide/inputs/using-the-parser.sol"); diff --git a/crates/solidity/outputs/cargo/tests/src/trivia.rs b/crates/solidity/outputs/cargo/tests/src/trivia.rs index 0bbacb9d59..511d9d65f4 100644 --- a/crates/solidity/outputs/cargo/tests/src/trivia.rs +++ b/crates/solidity/outputs/cargo/tests/src/trivia.rs @@ -1,7 +1,7 @@ use anyhow::Result; use semver::Version; use slang_solidity::cst::{Node, NonterminalKind, TerminalKind}; -use slang_solidity::language::Language; +use slang_solidity::parser::Language; #[test] fn end_of_line() -> Result<()> { diff --git a/crates/solidity/outputs/npm/package/src/generated/index.ts b/crates/solidity/outputs/npm/package/src/generated/index.ts index c23f1285ab..7fb8ce0cac 100644 --- a/crates/solidity/outputs/npm/package/src/generated/index.ts +++ b/crates/solidity/outputs/npm/package/src/generated/index.ts @@ -2,6 +2,4 @@ export * as ast from "./ast"; export * as cst from "./cst"; -export * as language from "./language"; -export * as parse_error from "./parse_error"; -export * as parse_output from "./parse_output"; +export * as parser from "./parser"; diff --git a/crates/solidity/outputs/npm/package/src/generated/language/index.ts b/crates/solidity/outputs/npm/package/src/generated/language/index.ts deleted file mode 100644 index dee42cd664..0000000000 --- a/crates/solidity/outputs/npm/package/src/generated/language/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -import * as generated from "../napi-bindings/generated"; - -export const Language = generated.language.Language; -export type Language = generated.language.Language; diff --git a/crates/solidity/outputs/npm/package/src/generated/napi-bindings/generated/index.d.ts b/crates/solidity/outputs/npm/package/src/generated/napi-bindings/generated/index.d.ts index 08e11a2d5a..d4e20711f9 100644 --- a/crates/solidity/outputs/npm/package/src/generated/napi-bindings/generated/index.d.ts +++ b/crates/solidity/outputs/npm/package/src/generated/napi-bindings/generated/index.d.ts @@ -809,13 +809,25 @@ export declare namespace cst { next(): QueryMatch | null; } } -export declare namespace language { +export declare namespace parser { export class Language { constructor(version: string); get version(): string; static supportedVersions(): Array; static rootKind(): cst.NonterminalKind; - parse(kind: cst.NonterminalKind, input: string): parse_output.ParseOutput; + parse(kind: cst.NonterminalKind, input: string): parser.ParseOutput; + } + export class ParseError { + severity(): diagnostic.Severity; + textRange(): cst.TextRange; + message(): string; + } + export class ParseOutput { + tree(): cst.Node; + errors(): Array; + get isValid(): boolean; + /** Creates a cursor that starts at the root of the parse tree. */ + createTreeCursor(): cst.Cursor; } } export declare namespace diagnostic { @@ -840,22 +852,6 @@ export declare namespace diagnostic { message(): string; } } -export declare namespace parse_error { - export class ParseError { - severity(): diagnostic.Severity; - textRange(): cst.TextRange; - message(): string; - } -} -export declare namespace parse_output { - export class ParseOutput { - tree(): cst.Node; - errors(): Array; - get isValid(): boolean; - /** Creates a cursor that starts at the root of the parse tree. */ - createTreeCursor(): cst.Cursor; - } -} export declare namespace ast_internal { export function selectSequence(node: cst.NonterminalNode): Array; export function selectChoice(node: cst.NonterminalNode): cst.Node; diff --git a/crates/solidity/outputs/npm/package/src/generated/napi-bindings/generated/index.js b/crates/solidity/outputs/npm/package/src/generated/napi-bindings/generated/index.js index 9d4506b4f3..21264cf8e5 100644 --- a/crates/solidity/outputs/npm/package/src/generated/napi-bindings/generated/index.js +++ b/crates/solidity/outputs/npm/package/src/generated/napi-bindings/generated/index.js @@ -291,11 +291,9 @@ if (!nativeBinding) { throw new Error(`Failed to load native binding`); } -const { cst, language, diagnostic, parse_error, parse_output, ast_internal } = nativeBinding; +const { cst, parser, diagnostic, ast_internal } = nativeBinding; module.exports.cst = cst; -module.exports.language = language; +module.exports.parser = parser; module.exports.diagnostic = diagnostic; -module.exports.parse_error = parse_error; -module.exports.parse_output = parse_output; module.exports.ast_internal = ast_internal; diff --git a/crates/solidity/outputs/npm/package/src/generated/parse_output/index.ts b/crates/solidity/outputs/npm/package/src/generated/parse_output/index.ts deleted file mode 100644 index 5348f00742..0000000000 --- a/crates/solidity/outputs/npm/package/src/generated/parse_output/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -import * as generated from "../napi-bindings/generated"; - -export const ParseOutput = generated.parse_output.ParseOutput; -export type ParseOutput = generated.parse_output.ParseOutput; diff --git a/crates/solidity/outputs/npm/package/src/generated/parse_error/index.ts b/crates/solidity/outputs/npm/package/src/generated/parser/index.ts similarity index 51% rename from crates/solidity/outputs/npm/package/src/generated/parse_error/index.ts rename to crates/solidity/outputs/npm/package/src/generated/parser/index.ts index 4ea5cc70db..1693fe4024 100644 --- a/crates/solidity/outputs/npm/package/src/generated/parse_error/index.ts +++ b/crates/solidity/outputs/npm/package/src/generated/parser/index.ts @@ -1,10 +1,16 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. -import { DiagnosticInterface } from "../diagnostic"; import * as generated from "../napi-bindings/generated"; +import { DiagnosticInterface } from "../diagnostic"; -export const ParseError = generated.parse_error.ParseError; -export type ParseError = generated.parse_error.ParseError; +export const Language = generated.parser.Language; +export type Language = generated.parser.Language; + +export const ParseError = generated.parser.ParseError; +export type ParseError = generated.parser.ParseError; type AssertImplements = void; declare const assertDiagnosticInterface: AssertImplements; + +export const ParseOutput = generated.parser.ParseOutput; +export type ParseOutput = generated.parser.ParseOutput; diff --git a/crates/solidity/outputs/npm/tests/src/doc-examples/using-queries.ts b/crates/solidity/outputs/npm/tests/src/doc-examples/using-queries.ts index 5a61620b1a..c86e09ebd0 100644 --- a/crates/solidity/outputs/npm/tests/src/doc-examples/using-queries.ts +++ b/crates/solidity/outputs/npm/tests/src/doc-examples/using-queries.ts @@ -3,7 +3,7 @@ import path from "node:path"; import assert from "node:assert"; import fs from "node:fs/promises"; -import { Language } from "@nomicfoundation/slang/language"; +import { Language } from "@nomicfoundation/slang/parser"; import { NonterminalKind, NonterminalNode, Query, QueryMatchIterator, TerminalNode } from "@nomicfoundation/slang/cst"; async function parseDocInputFile(filePath: string) { diff --git a/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-ast.ts b/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-ast.ts index c7ea352716..8af327ff7b 100644 --- a/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-ast.ts +++ b/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-ast.ts @@ -3,7 +3,7 @@ import fs from "node:fs/promises"; // --8<-- [start:imports] import assert from "node:assert"; -import { Language } from "@nomicfoundation/slang/language"; +import { Language } from "@nomicfoundation/slang/parser"; import { NonterminalKind, NonterminalNode } from "@nomicfoundation/slang/cst"; import { FunctionDefinition } from "@nomicfoundation/slang/ast"; // --8<-- [end:imports] diff --git a/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-cursor.ts b/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-cursor.ts index 118819880e..0f82dcafe0 100644 --- a/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-cursor.ts +++ b/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-cursor.ts @@ -3,7 +3,7 @@ import fs from "node:fs/promises"; // --8<-- [start:imports] import assert from "node:assert"; -import { Language } from "@nomicfoundation/slang/language"; +import { Language } from "@nomicfoundation/slang/parser"; import { NonterminalKind, NonterminalNode, TerminalKind, TerminalNode } from "@nomicfoundation/slang/cst"; // --8<-- [end:imports] diff --git a/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-parser.ts b/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-parser.ts index deb96de5d6..7c5600e0be 100644 --- a/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-parser.ts +++ b/crates/solidity/outputs/npm/tests/src/doc-examples/using-the-parser.ts @@ -3,7 +3,7 @@ import fs from "node:fs/promises"; // --8<-- [start:imports] import assert from "node:assert"; -import { Language } from "@nomicfoundation/slang/language"; +import { Language } from "@nomicfoundation/slang/parser"; import { NonterminalKind, NonterminalNode, TerminalKind } from "@nomicfoundation/slang/cst"; // --8<-- [end:imports] diff --git a/crates/solidity/testing/perf/benches/iai/tests/parser.rs b/crates/solidity/testing/perf/benches/iai/tests/parser.rs index 801c85d2f8..7d1cc45ab5 100644 --- a/crates/solidity/testing/perf/benches/iai/tests/parser.rs +++ b/crates/solidity/testing/perf/benches/iai/tests/parser.rs @@ -1,7 +1,7 @@ use std::path::PathBuf; use slang_solidity::cst::Node; -use slang_solidity::language::Language; +use slang_solidity::parser::Language; use crate::dataset::{SourceFile, SOLC_VERSION}; diff --git a/crates/solidity/testing/sanctuary/src/tests.rs b/crates/solidity/testing/sanctuary/src/tests.rs index 18d210bc19..06bf3f3d1b 100644 --- a/crates/solidity/testing/sanctuary/src/tests.rs +++ b/crates/solidity/testing/sanctuary/src/tests.rs @@ -6,7 +6,7 @@ use infra_utils::paths::PathExtensions; use itertools::Itertools; use semver::Version; use slang_solidity::cst::NonterminalKind; -use slang_solidity::language::Language; +use slang_solidity::parser::Language; use crate::datasets::{DataSet, SourceFile}; use crate::events::{Events, TestOutcome}; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/cli/commands/parse.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/cli/commands/parse.rs index d174ba0839..8929c649b3 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/cli/commands/parse.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/cli/commands/parse.rs @@ -7,7 +7,7 @@ use clap::Parser; use semver::Version; use crate::diagnostic; -use crate::language::Language; +use crate::parser::Language; #[derive(Parser, Debug)] pub struct ParseCommand { diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/mod.rs deleted file mode 100644 index 8bf1ce4454..0000000000 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -mod generated; -mod lexer; -mod parser_support; -mod scanner_macros; - -pub use generated::*; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/mod.rs index 151cbf6575..80a635d4af 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/mod.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/mod.rs @@ -2,9 +2,7 @@ pub mod cst; pub mod diagnostic; -pub mod language; -pub mod parse_error; -pub mod parse_output; +pub mod parser; #[cfg(feature = "__experimental_bindings_api")] pub mod bindings; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/mod.rs index b6ad89696d..681bf04f2a 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/mod.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/mod.rs @@ -2,8 +2,7 @@ pub mod cst; pub mod diagnostic; -pub mod parse_error; -pub mod parse_output; +pub mod parser; #[path = "generated/ast_selectors.rs"] pub mod ast_selectors; @@ -11,8 +10,8 @@ pub mod ast_selectors; type RustCursor = crate::cst::Cursor; type RustEdge = crate::cst::Edge; type RustNode = crate::cst::Node; -type RustParseError = crate::parse_error::ParseError; -type RustParseOutput = crate::parse_output::ParseOutput; +type RustParseError = crate::parser::ParseError; +type RustParseOutput = crate::parser::ParseOutput; type RustQuery = crate::cst::Query; type RustQueryMatch = crate::cst::QueryMatch; type RustQueryMatchIterator = crate::cst::QueryMatchIterator; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parser/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parser/mod.rs new file mode 100644 index 0000000000..0623fb565d --- /dev/null +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parser/mod.rs @@ -0,0 +1,7 @@ +// This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +mod parse_error; +mod parse_output; + +pub use parse_error::ParseError; +pub use parse_output::ParseOutput; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parse_error.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parser/parse_error.rs similarity index 83% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parse_error.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parser/parse_error.rs index 37d7a1e200..a7f67442e9 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parse_error.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parser/parse_error.rs @@ -8,7 +8,7 @@ use napi_derive::napi; use crate::expose_diagnostic_trait_interface; use crate::napi_interface::RustParseError; -#[napi(namespace = "parse_error")] +#[napi(namespace = "parser")] #[derive(PartialEq, Clone)] pub struct ParseError(RustParseError); @@ -18,4 +18,4 @@ impl From for ParseError { } } -expose_diagnostic_trait_interface!("parse_error", ParseError); +expose_diagnostic_trait_interface!("parser", ParseError); diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parse_output.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parser/parse_output.rs similarity index 78% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parse_output.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parser/parse_output.rs index 3d45c4e349..455c2ac8ea 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/napi_interface/parse_output.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/napi_interface/parser/parse_output.rs @@ -4,9 +4,10 @@ use napi::Either; use napi_derive::napi; use crate::napi_interface::cst::{Cursor, NAPINodeExtensions, NonterminalNode, TerminalNode}; -use crate::napi_interface::{parse_error, RustParseOutput}; +use crate::napi_interface::parser::ParseError; +use crate::napi_interface::RustParseOutput; -#[napi(namespace = "parse_output")] +#[napi(namespace = "parser")] pub struct ParseOutput(RustParseOutput); impl From for ParseOutput { @@ -15,15 +16,15 @@ impl From for ParseOutput { } } -#[napi(namespace = "parse_output")] +#[napi(namespace = "parser")] impl ParseOutput { #[napi(ts_return_type = "cst.Node", catch_unwind)] pub fn tree(&self) -> Either { self.0.tree().into_js_either_node() } - #[napi(ts_return_type = "Array", catch_unwind)] - pub fn errors(&self) -> Vec { + #[napi(ts_return_type = "Array", catch_unwind)] + pub fn errors(&self) -> Vec { self.0.errors().iter().map(|x| x.clone().into()).collect() } diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/generated/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/generated/language.rs similarity index 97% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/generated/mod.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/generated/language.rs index 42fb90feaa..8371c3a108 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/generated/mod.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/generated/language.rs @@ -18,22 +18,22 @@ use crate::cst; use crate::cst::{ EdgeLabel, IsLexicalContext, LexicalContext, LexicalContextType, NonterminalKind, TerminalKind, }; -use crate::language::lexer::{KeywordScan, Lexer, ScannedTerminal}; -use crate::language::parser_support::{ +#[cfg(feature = "__private_napi_interfaces")] +use crate::napi_interface::parser::ParseOutput as NAPIParseOutput; +use crate::parser::lexer::{KeywordScan, Lexer, ScannedTerminal}; +use crate::parser::parser_support::{ ChoiceHelper, OneOrMoreHelper, OptionalHelper, ParserContext, ParserFunction, ParserResult, PrecedenceHelper, SeparatedHelper, SequenceHelper, TerminalAcceptanceThreshold, ZeroOrMoreHelper, }; -use crate::language::scanner_macros::{ +use crate::parser::scanner_macros::{ scan_char_range, scan_chars, scan_choice, scan_keyword_choice, scan_none_of, scan_not_followed_by, scan_one_or_more, scan_optional, scan_sequence, scan_zero_or_more, }; -#[cfg(feature = "__private_napi_interfaces")] -use crate::napi_interface::parse_output::ParseOutput as NAPIParseOutput; -use crate::parse_output::ParseOutput; +use crate::parser::ParseOutput; #[derive(Debug)] -#[cfg_attr(feature = "__private_napi_interfaces", napi(namespace = "language"))] +#[cfg_attr(feature = "__private_napi_interfaces", napi(namespace = "parser"))] pub struct Language { #[allow(dead_code)] pub(crate) version_is_at_least_1_0_0: bool, @@ -41,7 +41,7 @@ pub struct Language { } #[derive(thiserror::Error, Debug)] -pub enum Error { +pub enum LanguageInitializationError { #[error("Unsupported language version '{0}'.")] UnsupportedLanguageVersion(Version), @@ -51,8 +51,8 @@ pub enum Error { } #[cfg(feature = "__private_napi_interfaces")] -impl From for napi::Error { - fn from(value: Error) -> Self { +impl From for napi::Error { + fn from(value: LanguageInitializationError) -> Self { napi::Error::from_reason(value.to_string()) } } @@ -67,14 +67,16 @@ impl Language { pub const ROOT_KIND: NonterminalKind = NonterminalKind::SourceUnit; - pub fn new(version: Version) -> std::result::Result { + pub fn new(version: Version) -> std::result::Result { if Self::SUPPORTED_VERSIONS.binary_search(&version).is_ok() { Ok(Self { version_is_at_least_1_0_0: Version::new(1, 0, 0) <= version, version, }) } else { - Err(Error::UnsupportedLanguageVersion(version)) + Err(LanguageInitializationError::UnsupportedLanguageVersion( + version, + )) } } @@ -830,12 +832,12 @@ impl Lexer for Language { #[cfg(feature = "__private_napi_interfaces")] // NAPI-exposed functions have to accept owned values. #[allow(clippy::needless_pass_by_value)] -#[napi(namespace = "language")] +#[napi(namespace = "parser")] impl Language { #[napi(constructor, catch_unwind)] pub fn new_napi(version: String) -> std::result::Result { - let version = - Version::parse(&version).map_err(|_| Error::InvalidSemanticVersion(version))?; + let version = Version::parse(&version) + .map_err(|_| LanguageInitializationError::InvalidSemanticVersion(version))?; Self::new(version).map_err(|e| e.into()) } @@ -861,11 +863,7 @@ impl Language { Self::ROOT_KIND } - #[napi( - js_name = "parse", - ts_return_type = "parse_output.ParseOutput", - catch_unwind - )] + #[napi(js_name = "parse", ts_return_type = "parser.ParseOutput", catch_unwind)] pub fn parse_napi( &self, #[napi(ts_arg_type = "cst.NonterminalKind")] kind: NonterminalKind, diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/lexer/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/lexer/mod.rs similarity index 98% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/lexer/mod.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/lexer/mod.rs index 8ffb551c28..4853e3029f 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/lexer/mod.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/lexer/mod.rs @@ -1,7 +1,7 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Edge, IsLexicalContext, Node, TerminalKind}; -use crate::language::parser_support::{ParserContext, ParserResult}; +use crate::parser::parser_support::{ParserContext, ParserResult}; /// Whether a keyword has been scanned and if so, whether it is reserved (unusable as an identifier) /// or not. diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/mod.rs new file mode 100644 index 0000000000..44f4b789cf --- /dev/null +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/mod.rs @@ -0,0 +1,13 @@ +// This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +#[path = "generated/language.rs"] +mod language; +mod lexer; +mod parse_error; +mod parse_output; +mod parser_support; +mod scanner_macros; + +pub use language::{Language, LanguageInitializationError}; +pub use parse_error::ParseError; +pub use parse_output::ParseOutput; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/parse_error/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parse_error.rs similarity index 100% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/parse_error/mod.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parse_error.rs diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/parse_output/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parse_output.rs similarity index 95% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/parse_output/mod.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parse_output.rs index 729829b822..74160c0ef6 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/parse_output/mod.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parse_output.rs @@ -1,7 +1,7 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Cursor, Node, TextIndex}; -use crate::parse_error::ParseError; +use crate::parser::ParseError; #[derive(Debug, PartialEq)] pub struct ParseOutput { diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/choice_helper.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/choice_helper.rs similarity index 97% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/choice_helper.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/choice_helper.rs index ca61bf8261..558226833a 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/choice_helper.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/choice_helper.rs @@ -4,9 +4,9 @@ use std::mem; use std::ops::ControlFlow; use crate::cst::{Node, TerminalKindExtensions, TextIndex}; -use crate::language::parser_support::context::{Marker, ParserContext}; -use crate::language::parser_support::ParserResult; -use crate::parse_error::ParseError; +use crate::parser::parser_support::context::{Marker, ParserContext}; +use crate::parser::parser_support::ParserResult; +use crate::parser::ParseError; /// Starting from a given position in the input, this helper will try to pick (and remember) a best match. Settles on /// a first full match if possible, otherwise on the best incomplete match. diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/context.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/context.rs similarity index 98% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/context.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/context.rs index c8a8ffe334..9b52ba03f0 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/context.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/context.rs @@ -4,7 +4,7 @@ use std::mem; use std::ops::Range; use crate::cst::{TerminalKind, TextIndex}; -use crate::parse_error::ParseError; +use crate::parser::ParseError; #[derive(Debug)] pub struct ParserContext<'s> { diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/mod.rs similarity index 100% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/mod.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/mod.rs diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/optional_helper.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/optional_helper.rs similarity index 92% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/optional_helper.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/optional_helper.rs index e40e457ec4..989e259cda 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/optional_helper.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/optional_helper.rs @@ -1,6 +1,6 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. -use crate::language::parser_support::parser_result::ParserResult; +use crate::parser::parser_support::parser_result::ParserResult; pub struct OptionalHelper; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/parser_function.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/parser_function.rs similarity index 96% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/parser_function.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/parser_function.rs index b6d8e86cd2..5565042c60 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/parser_function.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/parser_function.rs @@ -3,13 +3,12 @@ use std::rc::Rc; use crate::cst::{Edge, Node, TerminalKind, TerminalKindExtensions, TextIndex}; -use crate::language::lexer::Lexer; -use crate::language::parser_support::context::ParserContext; -use crate::language::parser_support::parser_result::{ +use crate::parser::lexer::Lexer; +use crate::parser::parser_support::context::ParserContext; +use crate::parser::parser_support::parser_result::{ IncompleteMatch, Match, ParserResult, SkippedUntil, }; -use crate::parse_error::ParseError; -use crate::parse_output::ParseOutput; +use crate::parser::{ParseError, ParseOutput}; pub trait ParserFunction where diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/parser_result.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/parser_result.rs similarity index 100% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/parser_result.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/parser_result.rs diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/precedence_helper.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/precedence_helper.rs similarity index 98% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/precedence_helper.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/precedence_helper.rs index 2898ae9311..82a6606687 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/precedence_helper.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/precedence_helper.rs @@ -1,10 +1,10 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Edge, EdgeLabel, Node, NonterminalKind}; -use crate::language::parser_support::parser_result::PrattElement::{ +use crate::parser::parser_support::parser_result::PrattElement::{ self, Binary, Expression, Postfix, Prefix, }; -use crate::language::parser_support::parser_result::{ParserResult, PrattOperatorMatch}; +use crate::parser::parser_support::parser_result::{ParserResult, PrattOperatorMatch}; pub struct PrecedenceHelper; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/recovery.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/recovery.rs similarity index 95% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/recovery.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/recovery.rs index 8fb6e31c50..49641de07c 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/recovery.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/recovery.rs @@ -1,11 +1,11 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Edge, IsLexicalContext, TerminalKind, TextRange, TextRangeExtensions}; -use crate::language::lexer::{Lexer, ScannedTerminal}; -use crate::language::parser_support::context::ParserContext; -use crate::language::parser_support::parser_result::SkippedUntil; -use crate::language::parser_support::ParserResult; -use crate::parse_error::ParseError; +use crate::parser::lexer::{Lexer, ScannedTerminal}; +use crate::parser::parser_support::context::ParserContext; +use crate::parser::parser_support::parser_result::SkippedUntil; +use crate::parser::parser_support::ParserResult; +use crate::parser::ParseError; /// How many terminals have to be matched to trigger the error recovery. /// For ambiguous syntaxes this needs to be set to at least N, where N diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/repetition_helper.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/repetition_helper.rs similarity index 97% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/repetition_helper.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/repetition_helper.rs index 6d92001d80..a808e73796 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/repetition_helper.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/repetition_helper.rs @@ -1,7 +1,7 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. -use crate::language::parser_support::context::ParserContext; -use crate::language::parser_support::parser_result::{ +use crate::parser::parser_support::context::ParserContext; +use crate::parser::parser_support::parser_result::{ IncompleteMatch, NoMatch, ParserResult, PrattElement, }; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/separated_helper.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/separated_helper.rs similarity index 94% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/separated_helper.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/separated_helper.rs index f10e16ac1e..bcc5dc64f0 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/parser_support/separated_helper.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/separated_helper.rs @@ -1,11 +1,11 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. use crate::cst::{Edge, EdgeLabel, IsLexicalContext, Node, TerminalKind, TextRangeExtensions}; -use crate::language::lexer::Lexer; -use crate::language::parser_support::parser_result::{ParserResult, SkippedUntil}; -use crate::language::parser_support::recovery::skip_until_with_nested_delims; -use crate::language::parser_support::ParserContext; -use crate::parse_error::ParseError; +use crate::parser::lexer::Lexer; +use crate::parser::parser_support::parser_result::{ParserResult, SkippedUntil}; +use crate::parser::parser_support::recovery::skip_until_with_nested_delims; +use crate::parser::parser_support::ParserContext; +use crate::parser::ParseError; pub struct SeparatedHelper; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/sequence_helper.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/sequence_helper.rs similarity index 99% rename from crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/sequence_helper.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/sequence_helper.rs index e14dab5ac6..7c1f7995dd 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/language/parser_support/sequence_helper.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/parser_support/sequence_helper.rs @@ -3,7 +3,7 @@ use std::ops::ControlFlow; use crate::cst::{Edge, EdgeLabel, Node, TerminalKind, TerminalKindExtensions}; -use crate::language::parser_support::parser_result::{ +use crate::parser::parser_support::parser_result::{ Match, ParserResult, PrattElement, SkippedUntil, }; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/language/scanner_macros/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/scanner_macros/mod.rs similarity index 100% rename from crates/testlang/outputs/cargo/slang_testlang/src/generated/language/scanner_macros/mod.rs rename to crates/testlang/outputs/cargo/slang_testlang/src/generated/parser/scanner_macros/mod.rs diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/_world.wit b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/_world.wit index b01e361068..7f826767f4 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/_world.wit +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/_world.wit @@ -5,7 +5,5 @@ package nomic-foundation:slang; world slang { export cst; export diagnostic; - export language; - export parse-error; - export parse-output; + export parser; } diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/language.wit b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/language.wit deleted file mode 100644 index 677d5337f9..0000000000 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/language.wit +++ /dev/null @@ -1,13 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -interface language { - use cst.{nonterminal-kind}; - use parse-output.{parse-output}; - - resource language { - supported-versions: static func() -> list; - new: static func(version: string) -> result; - version: func() -> string; - parse: func(kind: nonterminal-kind, input: string) -> parse-output; - } -} diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/parse-error.wit b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/parse-error.wit deleted file mode 100644 index ff2790c3d7..0000000000 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/parse-error.wit +++ /dev/null @@ -1,12 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -interface parse-error { - use cst.{text-range}; - use diagnostic.{severity}; - - resource parse-error { - severity: func() -> severity; - text-range: func() -> text-range; - message: func() -> string; - } -} diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/parse-output.wit b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/parse-output.wit deleted file mode 100644 index 7651e6a32e..0000000000 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/parse-output.wit +++ /dev/null @@ -1,13 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -interface parse-output { - use cst.{cursor, node}; - use parse-error.{parse-error}; - - resource parse-output { - tree: func() -> node; - errors: func() -> list; - is-valid: func() -> bool; - create-tree-cursor: func() -> cursor; - } -} diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/parser.wit b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/parser.wit new file mode 100644 index 0000000000..8e8875efea --- /dev/null +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/interface/generated/parser.wit @@ -0,0 +1,26 @@ +// This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +interface parser { + use cst.{cursor, node, nonterminal-kind, text-range}; + use diagnostic.{severity}; + + resource language { + supported-versions: static func() -> list; + new: static func(version: string) -> result; + version: func() -> string; + parse: func(kind: nonterminal-kind, input: string) -> parse-output; + } + + resource parse-error { + severity: func() -> severity; + text-range: func() -> text-range; + message: func() -> string; + } + + resource parse-output { + tree: func() -> node; + errors: func() -> list; + is-valid: func() -> bool; + create-tree-cursor: func() -> cursor; + } +} diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/language.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/language.rs deleted file mode 100644 index 0207bd70b3..0000000000 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/language.rs +++ /dev/null @@ -1,48 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -use crate::wit::utils::{define_wrapper, FromFFI, IntoFFI}; - -mod ffi { - pub use crate::wit::interface::exports::nomic_foundation::slang::language::{ - Guest, GuestLanguage, Language, LanguageBorrow, NonterminalKind, - }; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_output::ParseOutput; -} - -mod rust { - pub use crate::language::Language; -} - -impl ffi::Guest for crate::wit::World { - type Language = LanguageWrapper; -} - -//================================================ -// -// resource language -// -//================================================ - -define_wrapper! { Language { - fn new(version: String) -> Result { - semver::Version::parse(&version) - .map_err(|_| format!("Invalid version: {version}")) - .and_then(|version| rust::Language::new(version).map_err(|e| e.to_string())) - .map(IntoFFI::_into_ffi) - } - - fn version(&self) -> String { - self._borrow_ffi().version.to_string() - } - - fn supported_versions() -> Vec { - rust::Language::SUPPORTED_VERSIONS - .iter() - .map(|v| v.to_string()) - .collect() - } - - fn parse(&self, kind: ffi::NonterminalKind, input: String) -> ffi::ParseOutput { - self._borrow_ffi().parse(kind._from_ffi(), &input)._into_ffi() - } -} } diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/mod.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/mod.rs index 479d70466b..0bf0d41a7a 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/mod.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/mod.rs @@ -2,6 +2,4 @@ mod cst; mod diagnostic; -mod language; -mod parse_error; -mod parse_output; +mod parser; diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/parse_error.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/parse_error.rs deleted file mode 100644 index c6097fcb71..0000000000 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/parse_error.rs +++ /dev/null @@ -1,43 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -use crate::diagnostic::Diagnostic; -use crate::wit::utils::{define_wrapper, IntoFFI}; - -mod ffi { - pub use crate::wit::interface::exports::nomic_foundation::slang::cst::TextRange; - pub use crate::wit::interface::exports::nomic_foundation::slang::diagnostic::Severity; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_error::{ - Guest, GuestParseError, - }; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_output::{ - ParseError, ParseErrorBorrow, - }; -} - -mod rust { - pub use crate::parse_error::ParseError; -} - -impl ffi::Guest for crate::wit::World { - type ParseError = ParseErrorWrapper; -} - -//================================================ -// -// resource parse-error -// -//================================================ - -define_wrapper! { ParseError { - fn severity(&self) -> ffi::Severity { - self._borrow_ffi().severity()._into_ffi() - } - - fn text_range(&self) -> ffi::TextRange { - self._borrow_ffi().text_range()._into_ffi() - } - - fn message(&self) -> String { - self._borrow_ffi().message() - } -} } diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/parse_output.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/parse_output.rs deleted file mode 100644 index 85905c39b9..0000000000 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/parse_output.rs +++ /dev/null @@ -1,43 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -use crate::wit::utils::{define_wrapper, IntoFFI}; - -mod ffi { - pub use crate::wit::interface::exports::nomic_foundation::slang::cst::{Cursor, Node}; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_error::ParseError; - pub use crate::wit::interface::exports::nomic_foundation::slang::parse_output::{ - Guest, GuestParseOutput, ParseOutput, ParseOutputBorrow, - }; -} - -mod rust { - pub use crate::parse_output::ParseOutput; -} - -impl ffi::Guest for crate::wit::World { - type ParseOutput = ParseOutputWrapper; -} - -//================================================ -// -// resource parse-output -// -//================================================ - -define_wrapper! { ParseOutput { - fn tree(&self) -> ffi::Node { - self._borrow_ffi().tree()._into_ffi() - } - - fn errors(&self) -> Vec { - self._borrow_ffi().errors().iter().map(|e| e.clone()._into_ffi()).collect() - } - - fn is_valid(&self) -> bool { - self._borrow_ffi().is_valid() - } - - fn create_tree_cursor(&self) -> ffi::Cursor { - self._borrow_ffi().create_tree_cursor()._into_ffi() - } -} } diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/parser.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/parser.rs new file mode 100644 index 0000000000..e13c5ca53a --- /dev/null +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/wit/wrappers/parser.rs @@ -0,0 +1,99 @@ +// This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +use crate::diagnostic::Diagnostic; +use crate::wit::utils::{define_wrapper, FromFFI, IntoFFI}; + +mod ffi { + pub use crate::wit::interface::exports::nomic_foundation::slang::cst::{ + Cursor, Node, TextRange, + }; + pub use crate::wit::interface::exports::nomic_foundation::slang::diagnostic::Severity; + pub use crate::wit::interface::exports::nomic_foundation::slang::parser::{ + Guest, GuestLanguage, GuestParseError, GuestParseOutput, Language, LanguageBorrow, + NonterminalKind, ParseError, ParseErrorBorrow, ParseOutput, ParseOutputBorrow, + }; +} + +mod rust { + pub use crate::parser::{Language, ParseError, ParseOutput}; +} + +impl ffi::Guest for crate::wit::World { + type Language = LanguageWrapper; + type ParseError = ParseErrorWrapper; + type ParseOutput = ParseOutputWrapper; +} + +//================================================ +// +// resource language +// +//================================================ + +define_wrapper! { Language { + fn new(version: String) -> Result { + semver::Version::parse(&version) + .map_err(|_| format!("Invalid version: {version}")) + .and_then(|version| rust::Language::new(version).map_err(|e| e.to_string())) + .map(IntoFFI::_into_ffi) + } + + fn version(&self) -> String { + self._borrow_ffi().version.to_string() + } + + fn supported_versions() -> Vec { + rust::Language::SUPPORTED_VERSIONS + .iter() + .map(|v| v.to_string()) + .collect() + } + + fn parse(&self, kind: ffi::NonterminalKind, input: String) -> ffi::ParseOutput { + self._borrow_ffi().parse(kind._from_ffi(), &input)._into_ffi() + } +} } + +//================================================ +// +// resource parse-error +// +//================================================ + +define_wrapper! { ParseError { + fn severity(&self) -> ffi::Severity { + self._borrow_ffi().severity()._into_ffi() + } + + fn text_range(&self) -> ffi::TextRange { + self._borrow_ffi().text_range()._into_ffi() + } + + fn message(&self) -> String { + self._borrow_ffi().message() + } +} } + +//================================================ +// +// resource parse-output +// +//================================================ + +define_wrapper! { ParseOutput { + fn tree(&self) -> ffi::Node { + self._borrow_ffi().tree()._into_ffi() + } + + fn errors(&self) -> Vec { + self._borrow_ffi().errors().iter().map(|e| e.clone()._into_ffi()).collect() + } + + fn is_valid(&self) -> bool { + self._borrow_ffi().is_valid() + } + + fn create_tree_cursor(&self) -> ffi::Cursor { + self._borrow_ffi().create_tree_cursor()._into_ffi() + } +} } diff --git a/crates/testlang/outputs/cargo/tests/src/errors/mod.rs b/crates/testlang/outputs/cargo/tests/src/errors/mod.rs index 940d36d684..7a6dea0187 100644 --- a/crates/testlang/outputs/cargo/tests/src/errors/mod.rs +++ b/crates/testlang/outputs/cargo/tests/src/errors/mod.rs @@ -1,5 +1,5 @@ use semver::Version; -use slang_testlang::language::Language; +use slang_testlang::parser::Language; #[test] fn unsupported_language_version() { diff --git a/crates/testlang/outputs/cargo/tests/src/graph/mod.rs b/crates/testlang/outputs/cargo/tests/src/graph/mod.rs index b495850425..27cc8d8f35 100644 --- a/crates/testlang/outputs/cargo/tests/src/graph/mod.rs +++ b/crates/testlang/outputs/cargo/tests/src/graph/mod.rs @@ -3,7 +3,7 @@ use metaslang_graph_builder::functions::Functions; use metaslang_graph_builder::{ExecutionConfig, NoCancellation, Variables}; use semver::Version; use slang_testlang::cst::NonterminalKind; -use slang_testlang::language::Language; +use slang_testlang::parser::Language; #[test] fn builds_a_graph() { diff --git a/crates/testlang/outputs/cargo/tests/src/versions/mod.rs b/crates/testlang/outputs/cargo/tests/src/versions/mod.rs index efa76ac0d5..3a6fcc600b 100644 --- a/crates/testlang/outputs/cargo/tests/src/versions/mod.rs +++ b/crates/testlang/outputs/cargo/tests/src/versions/mod.rs @@ -1,5 +1,5 @@ use semver::Version; -use slang_testlang::language::Language; +use slang_testlang::parser::Language; #[test] fn list_supported_versions() { diff --git a/crates/testlang/outputs/npm/package/src/generated/index.ts b/crates/testlang/outputs/npm/package/src/generated/index.ts index c23f1285ab..7fb8ce0cac 100644 --- a/crates/testlang/outputs/npm/package/src/generated/index.ts +++ b/crates/testlang/outputs/npm/package/src/generated/index.ts @@ -2,6 +2,4 @@ export * as ast from "./ast"; export * as cst from "./cst"; -export * as language from "./language"; -export * as parse_error from "./parse_error"; -export * as parse_output from "./parse_output"; +export * as parser from "./parser"; diff --git a/crates/testlang/outputs/npm/package/src/generated/language/index.ts b/crates/testlang/outputs/npm/package/src/generated/language/index.ts deleted file mode 100644 index dee42cd664..0000000000 --- a/crates/testlang/outputs/npm/package/src/generated/language/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -import * as generated from "../napi-bindings/generated"; - -export const Language = generated.language.Language; -export type Language = generated.language.Language; diff --git a/crates/testlang/outputs/npm/package/src/generated/napi-bindings/generated/index.d.ts b/crates/testlang/outputs/npm/package/src/generated/napi-bindings/generated/index.d.ts index 5c50a5a40c..99748cce1f 100644 --- a/crates/testlang/outputs/npm/package/src/generated/napi-bindings/generated/index.d.ts +++ b/crates/testlang/outputs/npm/package/src/generated/napi-bindings/generated/index.d.ts @@ -135,13 +135,25 @@ export declare namespace cst { next(): QueryMatch | null; } } -export declare namespace language { +export declare namespace parser { export class Language { constructor(version: string); get version(): string; static supportedVersions(): Array; static rootKind(): cst.NonterminalKind; - parse(kind: cst.NonterminalKind, input: string): parse_output.ParseOutput; + parse(kind: cst.NonterminalKind, input: string): parser.ParseOutput; + } + export class ParseError { + severity(): diagnostic.Severity; + textRange(): cst.TextRange; + message(): string; + } + export class ParseOutput { + tree(): cst.Node; + errors(): Array; + get isValid(): boolean; + /** Creates a cursor that starts at the root of the parse tree. */ + createTreeCursor(): cst.Cursor; } } export declare namespace diagnostic { @@ -166,22 +178,6 @@ export declare namespace diagnostic { message(): string; } } -export declare namespace parse_error { - export class ParseError { - severity(): diagnostic.Severity; - textRange(): cst.TextRange; - message(): string; - } -} -export declare namespace parse_output { - export class ParseOutput { - tree(): cst.Node; - errors(): Array; - get isValid(): boolean; - /** Creates a cursor that starts at the root of the parse tree. */ - createTreeCursor(): cst.Cursor; - } -} export declare namespace ast_internal { export function selectSequence(node: cst.NonterminalNode): Array; export function selectChoice(node: cst.NonterminalNode): cst.Node; diff --git a/crates/testlang/outputs/npm/package/src/generated/napi-bindings/generated/index.js b/crates/testlang/outputs/npm/package/src/generated/napi-bindings/generated/index.js index eceb57dde2..6aaaa87660 100644 --- a/crates/testlang/outputs/npm/package/src/generated/napi-bindings/generated/index.js +++ b/crates/testlang/outputs/npm/package/src/generated/napi-bindings/generated/index.js @@ -291,11 +291,9 @@ if (!nativeBinding) { throw new Error(`Failed to load native binding`); } -const { cst, language, diagnostic, parse_error, parse_output, ast_internal } = nativeBinding; +const { cst, parser, diagnostic, ast_internal } = nativeBinding; module.exports.cst = cst; -module.exports.language = language; +module.exports.parser = parser; module.exports.diagnostic = diagnostic; -module.exports.parse_error = parse_error; -module.exports.parse_output = parse_output; module.exports.ast_internal = ast_internal; diff --git a/crates/testlang/outputs/npm/package/src/generated/parse_output/index.ts b/crates/testlang/outputs/npm/package/src/generated/parse_output/index.ts deleted file mode 100644 index 5348f00742..0000000000 --- a/crates/testlang/outputs/npm/package/src/generated/parse_output/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -// This file is generated automatically by infrastructure scripts. Please don't edit by hand. - -import * as generated from "../napi-bindings/generated"; - -export const ParseOutput = generated.parse_output.ParseOutput; -export type ParseOutput = generated.parse_output.ParseOutput; diff --git a/crates/testlang/outputs/npm/package/src/generated/parse_error/index.ts b/crates/testlang/outputs/npm/package/src/generated/parser/index.ts similarity index 51% rename from crates/testlang/outputs/npm/package/src/generated/parse_error/index.ts rename to crates/testlang/outputs/npm/package/src/generated/parser/index.ts index 4ea5cc70db..1693fe4024 100644 --- a/crates/testlang/outputs/npm/package/src/generated/parse_error/index.ts +++ b/crates/testlang/outputs/npm/package/src/generated/parser/index.ts @@ -1,10 +1,16 @@ // This file is generated automatically by infrastructure scripts. Please don't edit by hand. -import { DiagnosticInterface } from "../diagnostic"; import * as generated from "../napi-bindings/generated"; +import { DiagnosticInterface } from "../diagnostic"; -export const ParseError = generated.parse_error.ParseError; -export type ParseError = generated.parse_error.ParseError; +export const Language = generated.parser.Language; +export type Language = generated.parser.Language; + +export const ParseError = generated.parser.ParseError; +export type ParseError = generated.parser.ParseError; type AssertImplements = void; declare const assertDiagnosticInterface: AssertImplements; + +export const ParseOutput = generated.parser.ParseOutput; +export type ParseOutput = generated.parser.ParseOutput; diff --git a/crates/testlang/outputs/npm/tests/src/tests/ast.ts b/crates/testlang/outputs/npm/tests/src/tests/ast.ts index 089686e232..2b75113a57 100644 --- a/crates/testlang/outputs/npm/tests/src/tests/ast.ts +++ b/crates/testlang/outputs/npm/tests/src/tests/ast.ts @@ -1,5 +1,5 @@ import assert from "node:assert"; -import { Language } from "@slang-private/slang-testlang/language"; +import { Language } from "@slang-private/slang-testlang/parser"; import { AdditionExpression, Expression, diff --git a/crates/testlang/outputs/npm/tests/src/tests/cst-cursor.ts b/crates/testlang/outputs/npm/tests/src/tests/cst-cursor.ts index 1e7a9df2d3..85c0026937 100644 --- a/crates/testlang/outputs/npm/tests/src/tests/cst-cursor.ts +++ b/crates/testlang/outputs/npm/tests/src/tests/cst-cursor.ts @@ -1,4 +1,4 @@ -import { Language } from "@slang-private/slang-testlang/language"; +import { Language } from "@slang-private/slang-testlang/parser"; import { expectNonterminal, expectTerminal } from "../utils/cst-helpers"; import { Cursor, EdgeLabel, NodeType, NonterminalKind, TerminalKind } from "@slang-private/slang-testlang/cst"; diff --git a/crates/testlang/outputs/npm/tests/src/tests/cst-output.ts b/crates/testlang/outputs/npm/tests/src/tests/cst-output.ts index 26b215af86..436a5b45a4 100644 --- a/crates/testlang/outputs/npm/tests/src/tests/cst-output.ts +++ b/crates/testlang/outputs/npm/tests/src/tests/cst-output.ts @@ -1,4 +1,4 @@ -import { Language } from "@slang-private/slang-testlang/language"; +import { Language } from "@slang-private/slang-testlang/parser"; import { NonterminalKind, TerminalKind } from "@slang-private/slang-testlang/cst"; import { expectNonterminal, expectTerminal } from "../utils/cst-helpers"; diff --git a/crates/testlang/outputs/npm/tests/src/tests/errors.ts b/crates/testlang/outputs/npm/tests/src/tests/errors.ts index 39bc52c229..a93dab545e 100644 --- a/crates/testlang/outputs/npm/tests/src/tests/errors.ts +++ b/crates/testlang/outputs/npm/tests/src/tests/errors.ts @@ -1,4 +1,4 @@ -import { Language } from "@slang-private/slang-testlang/language"; +import { Language } from "@slang-private/slang-testlang/parser"; import { NonterminalKind, TextIndex } from "@slang-private/slang-testlang/cst"; import { Severity } from "@slang-private/slang-testlang/diagnostic"; diff --git a/crates/testlang/outputs/npm/tests/src/tests/public-api.ts b/crates/testlang/outputs/npm/tests/src/tests/public-api.ts index 52c4ea2a6a..29b9bbc0de 100644 --- a/crates/testlang/outputs/npm/tests/src/tests/public-api.ts +++ b/crates/testlang/outputs/npm/tests/src/tests/public-api.ts @@ -1,6 +1,6 @@ import * as slang from "@slang-private/slang-testlang"; import { NonterminalKind, TerminalKind } from "@slang-private/slang-testlang/cst"; -import { Language } from "@slang-private/slang-testlang/language"; +import { Language } from "@slang-private/slang-testlang/parser"; test("use namespace imports of the API", () => { expect(slang.cst.NonterminalKind.SourceUnit).toEqual("SourceUnit"); diff --git a/crates/testlang/outputs/npm/tests/src/tests/query.ts b/crates/testlang/outputs/npm/tests/src/tests/query.ts index 50807f212a..72964f719b 100644 --- a/crates/testlang/outputs/npm/tests/src/tests/query.ts +++ b/crates/testlang/outputs/npm/tests/src/tests/query.ts @@ -1,5 +1,5 @@ import { NonterminalKind, TerminalKind, Query } from "@slang-private/slang-testlang/cst"; -import { Language } from "@slang-private/slang-testlang/language"; +import { Language } from "@slang-private/slang-testlang/parser"; import { expectTerminal } from "../utils/cst-helpers"; test("simple query", () => { diff --git a/crates/testlang/outputs/npm/tests/src/tests/versions.ts b/crates/testlang/outputs/npm/tests/src/tests/versions.ts index c9ef0a97c9..dc8e00afcb 100644 --- a/crates/testlang/outputs/npm/tests/src/tests/versions.ts +++ b/crates/testlang/outputs/npm/tests/src/tests/versions.ts @@ -1,4 +1,4 @@ -import { Language } from "@slang-private/slang-testlang/language"; +import { Language } from "@slang-private/slang-testlang/parser"; test("list supported versions", () => { const versions = Language.supportedVersions();