--- a/cmds/jrsonnet-fmt/src/main.rs +++ b/cmds/jrsonnet-fmt/src/main.rs @@ -647,10 +647,10 @@ fn format(input: &str, opts: &FormatOptions) -> Option { let (parsed, errors) = jrsonnet_rowan_parser::parse(input); if !errors.is_empty() { - let mut builder = ass_stroke::SnippetBuilder::new(input); + let mut builder = hi_doc::SnippetBuilder::new(input); for error in errors { builder - .error(ass_stroke::Text::single( + .error(hi_doc::Text::single( format!("{:?}", error.error).chars(), Default::default(), )) @@ -661,7 +661,7 @@ .build(); } let snippet = builder.build(); - let ansi = ass_stroke::source_to_ansi(&snippet); + let ansi = hi_doc::source_to_ansi(&snippet); eprintln!("{ansi}"); // It is possible to recover from this failure, but the output may be broken, as formatter is free to skip // ERROR rowan nodes. --- a/crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs +++ b/crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs @@ -135,7 +135,7 @@ MULTI_LINE_COMMENT, #[regex("/\\*/")] ERROR_COMMENT_TOO_SHORT, - #[regex("/\\*([^*]|\\*[^/])+")] + #[regex("/\\*([^*/]|\\*[^/])+")] ERROR_COMMENT_UNTERMINATED, #[token("tailstrict")] TAILSTRICT_KW, @@ -178,9 +178,8 @@ ERROR_MISSING_TOKEN, ERROR_UNEXPECTED_TOKEN, ERROR_CUSTOM, - #[doc = r" Also acts as __LAST_TOKEN"] - #[error] LEXING_ERROR, + __LAST_TOKEN, SOURCE_FILE, EXPR, SUFFIX_INDEX, --- a/crates/jrsonnet-rowan-parser/src/lex.rs +++ b/crates/jrsonnet-rowan-parser/src/lex.rs @@ -30,7 +30,7 @@ let mut kind = self.inner.next()?; let text = self.inner.slice(); - if kind == STRING_BLOCK { + if kind == Ok(STRING_BLOCK) { // We use custom lexer, which skips enough bytes, but not returns error // Instead we should call lexer again to verify if there is something wrong with string block let mut lexer = logos::Lexer::::new(text); @@ -41,20 +41,20 @@ match res { Ok(_) => {} Err(e) => { - kind = match e { + kind = Ok(match e { StringBlockError::UnexpectedEnd => ERROR_STRING_BLOCK_UNEXPECTED_END, StringBlockError::MissingNewLine => ERROR_STRING_BLOCK_MISSING_NEW_LINE, StringBlockError::MissingTermination => { ERROR_STRING_BLOCK_MISSING_TERMINATION } StringBlockError::MissingIndent => ERROR_STRING_BLOCK_MISSING_INDENT, - } + }) } } } Some(Self::Item { - kind, + kind: kind.unwrap_or(SyntaxKind::LEXING_ERROR), text, range: { let Range { start, end } = self.inner.span(); --- a/crates/jrsonnet-rowan-parser/src/parser.rs +++ b/crates/jrsonnet-rowan-parser/src/parser.rs @@ -57,7 +57,7 @@ fn from(val: LocatedSyntaxError) -> Self { let span = SourceSpan::new( SourceOffset::from(usize::from(val.range.start())), - SourceOffset::from(usize::from(val.range.end() - val.range.start())), + usize::from(val.range.end() - val.range.start()), ); dbg!(&val); match val.error { --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snap @@ -65,10 +65,10 @@ LocatedSyntaxError { error: Custom { error: "unexpected tokens after end" }, range: 29..67 } === x syntax error - ,-[1:1] + ,-[1:15] 1 | ,-> local intr = $intrinsic(test); - : || ^^^^|^^^^ - : || `-- expected L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK, found IDENT + : | ^^^^|^^^^ + : | `-- expected L_BRACK, L_PAREN, L_BRACE, SEMI, DOT, COMMA or QUESTION_MARK, found IDENT 2 | | 3 | | local a = 1, b = 2, c = a + b; 4 | | --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snap @@ -40,7 +40,7 @@ LocatedSyntaxError { error: Missing { expected: Named("expression") }, range: 25..25 } === x syntax error - ,-[2:1] + ,-[3:3] 2 | local b = 3; 3 | 1 : ^^ --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snap @@ -26,7 +26,7 @@ LocatedSyntaxError { error: Unexpected { expected: Named("destruction specifier"), found: MUL }, range: 6..7 } === x syntax error - ,-[1:1] + ,-[1:7] 1 | local * = 1; : | : `-- expected destruction specifier, found MUL --- a/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snap @@ -39,7 +39,7 @@ LocatedSyntaxError { error: Unexpected { expected: Named("comma"), found: SEMI }, range: 14..15 } === x syntax error - ,-[1:1] + ,-[2:6] 1 | { 2 | a: 1; : | --- a/xtask/src/sourcegen/kinds.rs +++ b/xtask/src/sourcegen/kinds.rs @@ -273,7 +273,7 @@ lit("SINGLE_LINE_HASH_COMMENT") => r"#[^\r\n]*(\r\n|\n)?"; lit("MULTI_LINE_COMMENT") => r"/\*([^*]|\*[^/])*\*/"; error("COMMENT_TOO_SHORT") => r"/\*/"; - error("COMMENT_UNTERMINATED") => r"/\*([^*]|\*[^/])+"; + error("COMMENT_UNTERMINATED") => r"/\*([^*/]|\*[^/])+"; ]; kinds } --- a/xtask/src/sourcegen/mod.rs +++ b/xtask/src/sourcegen/mod.rs @@ -149,9 +149,8 @@ #[doc(hidden)] EOF, #(#token_kinds,)* - /// Also acts as __LAST_TOKEN - #[error] LEXING_ERROR, + __LAST_TOKEN, #(#nodes,)* #[doc(hidden)] __LAST,