Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/syntax/src/parsing.rs')
| -rw-r--r-- | crates/syntax/src/parsing.rs | 29 |
1 files changed, 4 insertions, 25 deletions
diff --git a/crates/syntax/src/parsing.rs b/crates/syntax/src/parsing.rs index 971fa2700d..047e670c9f 100644 --- a/crates/syntax/src/parsing.rs +++ b/crates/syntax/src/parsing.rs @@ -5,46 +5,25 @@ mod reparsing; use rowan::TextRange; -use crate::{syntax_node::GreenNode, AstNode, SyntaxError, SyntaxNode, SyntaxTreeBuilder}; +use crate::{syntax_node::GreenNode, SyntaxError, SyntaxTreeBuilder}; pub(crate) use crate::parsing::reparsing::incremental_reparse; pub(crate) fn parse_text(text: &str) -> (GreenNode, Vec<SyntaxError>) { let lexed = parser::LexedStr::new(text); let parser_input = lexed.to_input(); - let parser_output = parser::parse_source_file(&parser_input); - let (node, errors, _eof) = build_tree(lexed, parser_output, false); + let parser_output = parser::TopEntryPoint::SourceFile.parse(&parser_input); + let (node, errors, _eof) = build_tree(lexed, parser_output); (node, errors) } -/// Returns `text` parsed as a `T` provided there are no parse errors. -pub(crate) fn parse_text_as<T: AstNode>( - text: &str, - entry_point: parser::ParserEntryPoint, -) -> Result<T, ()> { - let lexed = parser::LexedStr::new(text); - if lexed.errors().next().is_some() { - return Err(()); - } - let parser_input = lexed.to_input(); - let parser_output = parser::parse(&parser_input, entry_point); - let (node, errors, eof) = build_tree(lexed, parser_output, true); - - if !errors.is_empty() || !eof { - return Err(()); - } - - SyntaxNode::new_root(node).first_child().and_then(T::cast).ok_or(()) -} - pub(crate) fn build_tree( lexed: parser::LexedStr<'_>, parser_output: parser::Output, - synthetic_root: bool, ) -> (GreenNode, Vec<SyntaxError>, bool) { let mut builder = SyntaxTreeBuilder::default(); - let is_eof = lexed.intersperse_trivia(&parser_output, synthetic_root, &mut |step| match step { + let is_eof = lexed.intersperse_trivia(&parser_output, &mut |step| match step { parser::StrStep::Token { kind, text } => builder.token(kind, text), parser::StrStep::Enter { kind } => builder.start_node(kind), parser::StrStep::Exit => builder.finish_node(), |