git.delta.rocks / jrsonnet / refs/commits / da64a7455472

difftreelog

refactor update logos

Yaroslav Bolyukin2024-02-20parent: #759175b.patch.diff
in: master

10 files changed

modifiedcmds/jrsonnet-fmt/src/main.rsdiffbeforeafterboth
--- 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<String> {
 	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.
modifiedcrates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rsdiffbeforeafterboth
before · crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs
1//! This is a generated file, please do not edit manually. Changes can be2//! made in codegeneration that lives in `xtask` top-level dir.34#![allow(5	bad_style,6	missing_docs,7	unreachable_pub,8	clippy::manual_non_exhaustive,9	clippy::match_like_matches_macro10)]11use logos::Logos;12#[doc = r" The kind of syntax node, e.g. `IDENT`, `USE_KW`, or `STRUCT`."]13#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Logos)]14#[repr(u16)]15pub enum SyntaxKind {16	#[doc(hidden)]17	TOMBSTONE,18	#[doc(hidden)]19	EOF,20	#[token("||")]21	OR,22	#[token("??")]23	NULL_COAELSE,24	#[token("&&")]25	AND,26	#[token("|")]27	BIT_OR,28	#[token("^")]29	BIT_XOR,30	#[token("&")]31	BIT_AND,32	#[token("==")]33	EQ,34	#[token("!=")]35	NE,36	#[token("<")]37	LT,38	#[token(">")]39	GT,40	#[token("<=")]41	LE,42	#[token(">=")]43	GE,44	#[token("<<")]45	LHS,46	#[token(">>")]47	RHS,48	#[token("+")]49	PLUS,50	#[token("-")]51	MINUS,52	#[token("*")]53	MUL,54	#[token("/")]55	DIV,56	#[token("%")]57	MODULO,58	#[token("!")]59	NOT,60	#[token("~")]61	BIT_NOT,62	#[token("[")]63	L_BRACK,64	#[token("]")]65	R_BRACK,66	#[token("(")]67	L_PAREN,68	#[token(")")]69	R_PAREN,70	#[token("{")]71	L_BRACE,72	#[token("}")]73	R_BRACE,74	#[token(":")]75	COLON,76	#[token("::")]77	COLONCOLON,78	#[token(":::")]79	COLONCOLONCOLON,80	#[token(";")]81	SEMI,82	#[token(".")]83	DOT,84	#[token("...")]85	DOTDOTDOT,86	#[token(",")]87	COMMA,88	#[token("$")]89	DOLLAR,90	#[token("=")]91	ASSIGN,92	#[token("?")]93	QUESTION_MARK,94	#[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?")]95	FLOAT,96	#[regex("(?:0|[1-9][0-9]*)\\.[^0-9]")]97	ERROR_FLOAT_JUNK_AFTER_POINT,98	#[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?[eE][^+\\-0-9]")]99	ERROR_FLOAT_JUNK_AFTER_EXPONENT,100	#[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?[eE][+-][^0-9]")]101	ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN,102	#[regex("\"(?s:[^\"\\\\]|\\\\.)*\"")]103	STRING_DOUBLE,104	#[regex("\"(?s:[^\"\\\\]|\\\\.)*")]105	ERROR_STRING_DOUBLE_UNTERMINATED,106	#[regex("'(?s:[^'\\\\]|\\\\.)*'")]107	STRING_SINGLE,108	#[regex("'(?s:[^'\\\\]|\\\\.)*")]109	ERROR_STRING_SINGLE_UNTERMINATED,110	#[regex("@\"(?:[^\"]|\"\")*\"")]111	STRING_DOUBLE_VERBATIM,112	#[regex("@\"(?:[^\"]|\"\")*")]113	ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED,114	#[regex("@'(?:[^']|'')*'")]115	STRING_SINGLE_VERBATIM,116	#[regex("@'(?:[^']|'')*")]117	ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED,118	#[regex("@[^\"'\\s]\\S+")]119	ERROR_STRING_VERBATIM_MISSING_QUOTES,120	#[regex("\\|\\|\\|", crate::string_block::lex_str_block_test)]121	STRING_BLOCK,122	ERROR_STRING_BLOCK_UNEXPECTED_END,123	ERROR_STRING_BLOCK_MISSING_NEW_LINE,124	ERROR_STRING_BLOCK_MISSING_TERMINATION,125	ERROR_STRING_BLOCK_MISSING_INDENT,126	#[regex("[_a-zA-Z][_a-zA-Z0-9]*")]127	IDENT,128	#[regex("[ \\t\\n\\r]+")]129	WHITESPACE,130	#[regex("//[^\\r\\n]*(\\r\\n|\\n)?")]131	SINGLE_LINE_SLASH_COMMENT,132	#[regex("#[^\\r\\n]*(\\r\\n|\\n)?")]133	SINGLE_LINE_HASH_COMMENT,134	#[regex("/\\*([^*]|\\*[^/])*\\*/")]135	MULTI_LINE_COMMENT,136	#[regex("/\\*/")]137	ERROR_COMMENT_TOO_SHORT,138	#[regex("/\\*([^*]|\\*[^/])+")]139	ERROR_COMMENT_UNTERMINATED,140	#[token("tailstrict")]141	TAILSTRICT_KW,142	#[token("local")]143	LOCAL_KW,144	#[token("importstr")]145	IMPORTSTR_KW,146	#[token("importbin")]147	IMPORTBIN_KW,148	#[token("import")]149	IMPORT_KW,150	#[token("if")]151	IF_KW,152	#[token("then")]153	THEN_KW,154	#[token("else")]155	ELSE_KW,156	#[token("function")]157	FUNCTION_KW,158	#[token("error")]159	ERROR_KW,160	#[token("in")]161	IN_KW,162	META_OBJECT_APPLY,163	ERROR_NO_OPERATOR,164	#[token("null")]165	NULL_KW,166	#[token("true")]167	TRUE_KW,168	#[token("false")]169	FALSE_KW,170	#[token("self")]171	SELF_KW,172	#[token("super")]173	SUPER_KW,174	#[token("for")]175	FOR_KW,176	#[token("assert")]177	ASSERT_KW,178	ERROR_MISSING_TOKEN,179	ERROR_UNEXPECTED_TOKEN,180	ERROR_CUSTOM,181	#[doc = r" Also acts as __LAST_TOKEN"]182	#[error]183	LEXING_ERROR,184	SOURCE_FILE,185	EXPR,186	SUFFIX_INDEX,187	NAME,188	SUFFIX_INDEX_EXPR,189	SUFFIX_SLICE,190	SLICE_DESC,191	SUFFIX_APPLY,192	ARGS_DESC,193	STMT_LOCAL,194	STMT_ASSERT,195	ASSERTION,196	EXPR_BINARY,197	EXPR_UNARY,198	EXPR_OBJ_EXTEND,199	EXPR_PARENED,200	EXPR_LITERAL,201	EXPR_STRING,202	EXPR_NUMBER,203	EXPR_ARRAY,204	EXPR_OBJECT,205	EXPR_ARRAY_COMP,206	EXPR_IMPORT,207	EXPR_VAR,208	EXPR_IF_THEN_ELSE,209	TRUE_EXPR,210	FALSE_EXPR,211	EXPR_FUNCTION,212	PARAMS_DESC,213	EXPR_ERROR,214	SLICE_DESC_END,215	SLICE_DESC_STEP,216	ARG,217	OBJ_BODY_COMP,218	OBJ_BODY_MEMBER_LIST,219	MEMBER_BIND_STMT,220	OBJ_LOCAL,221	MEMBER_ASSERT_STMT,222	MEMBER_FIELD_NORMAL,223	MEMBER_FIELD_METHOD,224	FIELD_NAME_FIXED,225	FIELD_NAME_DYNAMIC,226	FOR_SPEC,227	IF_SPEC,228	BIND_DESTRUCT,229	BIND_FUNCTION,230	PARAM,231	DESTRUCT_FULL,232	DESTRUCT_SKIP,233	DESTRUCT_ARRAY,234	DESTRUCT_OBJECT,235	DESTRUCT_OBJECT_FIELD,236	DESTRUCT_REST,237	DESTRUCT_ARRAY_ELEMENT,238	SUFFIX,239	BIND,240	STMT,241	OBJ_BODY,242	COMP_SPEC,243	EXPR_BASE,244	MEMBER_COMP,245	MEMBER,246	FIELD_NAME,247	DESTRUCT,248	DESTRUCT_ARRAY_PART,249	BINARY_OPERATOR,250	UNARY_OPERATOR,251	LITERAL,252	TEXT,253	NUMBER,254	IMPORT_KIND,255	VISIBILITY,256	TRIVIA,257	CUSTOM_ERROR,258	#[doc(hidden)]259	__LAST,260}261use self::SyntaxKind::*;262impl SyntaxKind {263	pub fn is_keyword(self) -> bool {264		match self {265			OR | NULL_COAELSE | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE266			| LHS | RHS | PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK267			| L_PAREN | R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON268			| SEMI | DOT | DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | TAILSTRICT_KW269			| LOCAL_KW | IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | IF_KW | THEN_KW | ELSE_KW270			| FUNCTION_KW | ERROR_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW271			| SUPER_KW | FOR_KW | ASSERT_KW => true,272			_ => false,273		}274	}275	pub fn is_enum(self) -> bool {276		match self {277			SUFFIX | BIND | STMT | OBJ_BODY | COMP_SPEC | EXPR_BASE | MEMBER_COMP | MEMBER278			| FIELD_NAME | DESTRUCT | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR279			| LITERAL | TEXT | NUMBER | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true,280			_ => false,281		}282	}283	pub fn from_raw(r: u16) -> Self {284		assert!(r < Self::__LAST as u16);285		unsafe { std::mem::transmute(r) }286	}287	pub fn into_raw(self) -> u16 {288		self as u16289	}290}291#[macro_export]292macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [??] => { $ crate :: SyntaxKind :: NULL_COAELSE } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } }293#[allow(unused_imports)]294pub use T;
after · crates/jrsonnet-rowan-parser/src/generated/syntax_kinds.rs
1//! This is a generated file, please do not edit manually. Changes can be2//! made in codegeneration that lives in `xtask` top-level dir.34#![allow(5	bad_style,6	missing_docs,7	unreachable_pub,8	clippy::manual_non_exhaustive,9	clippy::match_like_matches_macro10)]11use logos::Logos;12#[doc = r" The kind of syntax node, e.g. `IDENT`, `USE_KW`, or `STRUCT`."]13#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Logos)]14#[repr(u16)]15pub enum SyntaxKind {16	#[doc(hidden)]17	TOMBSTONE,18	#[doc(hidden)]19	EOF,20	#[token("||")]21	OR,22	#[token("??")]23	NULL_COAELSE,24	#[token("&&")]25	AND,26	#[token("|")]27	BIT_OR,28	#[token("^")]29	BIT_XOR,30	#[token("&")]31	BIT_AND,32	#[token("==")]33	EQ,34	#[token("!=")]35	NE,36	#[token("<")]37	LT,38	#[token(">")]39	GT,40	#[token("<=")]41	LE,42	#[token(">=")]43	GE,44	#[token("<<")]45	LHS,46	#[token(">>")]47	RHS,48	#[token("+")]49	PLUS,50	#[token("-")]51	MINUS,52	#[token("*")]53	MUL,54	#[token("/")]55	DIV,56	#[token("%")]57	MODULO,58	#[token("!")]59	NOT,60	#[token("~")]61	BIT_NOT,62	#[token("[")]63	L_BRACK,64	#[token("]")]65	R_BRACK,66	#[token("(")]67	L_PAREN,68	#[token(")")]69	R_PAREN,70	#[token("{")]71	L_BRACE,72	#[token("}")]73	R_BRACE,74	#[token(":")]75	COLON,76	#[token("::")]77	COLONCOLON,78	#[token(":::")]79	COLONCOLONCOLON,80	#[token(";")]81	SEMI,82	#[token(".")]83	DOT,84	#[token("...")]85	DOTDOTDOT,86	#[token(",")]87	COMMA,88	#[token("$")]89	DOLLAR,90	#[token("=")]91	ASSIGN,92	#[token("?")]93	QUESTION_MARK,94	#[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?")]95	FLOAT,96	#[regex("(?:0|[1-9][0-9]*)\\.[^0-9]")]97	ERROR_FLOAT_JUNK_AFTER_POINT,98	#[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?[eE][^+\\-0-9]")]99	ERROR_FLOAT_JUNK_AFTER_EXPONENT,100	#[regex("(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?[eE][+-][^0-9]")]101	ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN,102	#[regex("\"(?s:[^\"\\\\]|\\\\.)*\"")]103	STRING_DOUBLE,104	#[regex("\"(?s:[^\"\\\\]|\\\\.)*")]105	ERROR_STRING_DOUBLE_UNTERMINATED,106	#[regex("'(?s:[^'\\\\]|\\\\.)*'")]107	STRING_SINGLE,108	#[regex("'(?s:[^'\\\\]|\\\\.)*")]109	ERROR_STRING_SINGLE_UNTERMINATED,110	#[regex("@\"(?:[^\"]|\"\")*\"")]111	STRING_DOUBLE_VERBATIM,112	#[regex("@\"(?:[^\"]|\"\")*")]113	ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED,114	#[regex("@'(?:[^']|'')*'")]115	STRING_SINGLE_VERBATIM,116	#[regex("@'(?:[^']|'')*")]117	ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED,118	#[regex("@[^\"'\\s]\\S+")]119	ERROR_STRING_VERBATIM_MISSING_QUOTES,120	#[regex("\\|\\|\\|", crate::string_block::lex_str_block_test)]121	STRING_BLOCK,122	ERROR_STRING_BLOCK_UNEXPECTED_END,123	ERROR_STRING_BLOCK_MISSING_NEW_LINE,124	ERROR_STRING_BLOCK_MISSING_TERMINATION,125	ERROR_STRING_BLOCK_MISSING_INDENT,126	#[regex("[_a-zA-Z][_a-zA-Z0-9]*")]127	IDENT,128	#[regex("[ \\t\\n\\r]+")]129	WHITESPACE,130	#[regex("//[^\\r\\n]*(\\r\\n|\\n)?")]131	SINGLE_LINE_SLASH_COMMENT,132	#[regex("#[^\\r\\n]*(\\r\\n|\\n)?")]133	SINGLE_LINE_HASH_COMMENT,134	#[regex("/\\*([^*]|\\*[^/])*\\*/")]135	MULTI_LINE_COMMENT,136	#[regex("/\\*/")]137	ERROR_COMMENT_TOO_SHORT,138	#[regex("/\\*([^*/]|\\*[^/])+")]139	ERROR_COMMENT_UNTERMINATED,140	#[token("tailstrict")]141	TAILSTRICT_KW,142	#[token("local")]143	LOCAL_KW,144	#[token("importstr")]145	IMPORTSTR_KW,146	#[token("importbin")]147	IMPORTBIN_KW,148	#[token("import")]149	IMPORT_KW,150	#[token("if")]151	IF_KW,152	#[token("then")]153	THEN_KW,154	#[token("else")]155	ELSE_KW,156	#[token("function")]157	FUNCTION_KW,158	#[token("error")]159	ERROR_KW,160	#[token("in")]161	IN_KW,162	META_OBJECT_APPLY,163	ERROR_NO_OPERATOR,164	#[token("null")]165	NULL_KW,166	#[token("true")]167	TRUE_KW,168	#[token("false")]169	FALSE_KW,170	#[token("self")]171	SELF_KW,172	#[token("super")]173	SUPER_KW,174	#[token("for")]175	FOR_KW,176	#[token("assert")]177	ASSERT_KW,178	ERROR_MISSING_TOKEN,179	ERROR_UNEXPECTED_TOKEN,180	ERROR_CUSTOM,181	LEXING_ERROR,182	__LAST_TOKEN,183	SOURCE_FILE,184	EXPR,185	SUFFIX_INDEX,186	NAME,187	SUFFIX_INDEX_EXPR,188	SUFFIX_SLICE,189	SLICE_DESC,190	SUFFIX_APPLY,191	ARGS_DESC,192	STMT_LOCAL,193	STMT_ASSERT,194	ASSERTION,195	EXPR_BINARY,196	EXPR_UNARY,197	EXPR_OBJ_EXTEND,198	EXPR_PARENED,199	EXPR_LITERAL,200	EXPR_STRING,201	EXPR_NUMBER,202	EXPR_ARRAY,203	EXPR_OBJECT,204	EXPR_ARRAY_COMP,205	EXPR_IMPORT,206	EXPR_VAR,207	EXPR_IF_THEN_ELSE,208	TRUE_EXPR,209	FALSE_EXPR,210	EXPR_FUNCTION,211	PARAMS_DESC,212	EXPR_ERROR,213	SLICE_DESC_END,214	SLICE_DESC_STEP,215	ARG,216	OBJ_BODY_COMP,217	OBJ_BODY_MEMBER_LIST,218	MEMBER_BIND_STMT,219	OBJ_LOCAL,220	MEMBER_ASSERT_STMT,221	MEMBER_FIELD_NORMAL,222	MEMBER_FIELD_METHOD,223	FIELD_NAME_FIXED,224	FIELD_NAME_DYNAMIC,225	FOR_SPEC,226	IF_SPEC,227	BIND_DESTRUCT,228	BIND_FUNCTION,229	PARAM,230	DESTRUCT_FULL,231	DESTRUCT_SKIP,232	DESTRUCT_ARRAY,233	DESTRUCT_OBJECT,234	DESTRUCT_OBJECT_FIELD,235	DESTRUCT_REST,236	DESTRUCT_ARRAY_ELEMENT,237	SUFFIX,238	BIND,239	STMT,240	OBJ_BODY,241	COMP_SPEC,242	EXPR_BASE,243	MEMBER_COMP,244	MEMBER,245	FIELD_NAME,246	DESTRUCT,247	DESTRUCT_ARRAY_PART,248	BINARY_OPERATOR,249	UNARY_OPERATOR,250	LITERAL,251	TEXT,252	NUMBER,253	IMPORT_KIND,254	VISIBILITY,255	TRIVIA,256	CUSTOM_ERROR,257	#[doc(hidden)]258	__LAST,259}260use self::SyntaxKind::*;261impl SyntaxKind {262	pub fn is_keyword(self) -> bool {263		match self {264			OR | NULL_COAELSE | AND | BIT_OR | BIT_XOR | BIT_AND | EQ | NE | LT | GT | LE | GE265			| LHS | RHS | PLUS | MINUS | MUL | DIV | MODULO | NOT | BIT_NOT | L_BRACK | R_BRACK266			| L_PAREN | R_PAREN | L_BRACE | R_BRACE | COLON | COLONCOLON | COLONCOLONCOLON267			| SEMI | DOT | DOTDOTDOT | COMMA | DOLLAR | ASSIGN | QUESTION_MARK | TAILSTRICT_KW268			| LOCAL_KW | IMPORTSTR_KW | IMPORTBIN_KW | IMPORT_KW | IF_KW | THEN_KW | ELSE_KW269			| FUNCTION_KW | ERROR_KW | IN_KW | NULL_KW | TRUE_KW | FALSE_KW | SELF_KW270			| SUPER_KW | FOR_KW | ASSERT_KW => true,271			_ => false,272		}273	}274	pub fn is_enum(self) -> bool {275		match self {276			SUFFIX | BIND | STMT | OBJ_BODY | COMP_SPEC | EXPR_BASE | MEMBER_COMP | MEMBER277			| FIELD_NAME | DESTRUCT | DESTRUCT_ARRAY_PART | BINARY_OPERATOR | UNARY_OPERATOR278			| LITERAL | TEXT | NUMBER | IMPORT_KIND | VISIBILITY | TRIVIA | CUSTOM_ERROR => true,279			_ => false,280		}281	}282	pub fn from_raw(r: u16) -> Self {283		assert!(r < Self::__LAST as u16);284		unsafe { std::mem::transmute(r) }285	}286	pub fn into_raw(self) -> u16 {287		self as u16288	}289}290#[macro_export]291macro_rules ! T { [||] => { $ crate :: SyntaxKind :: OR } ; [??] => { $ crate :: SyntaxKind :: NULL_COAELSE } ; [&&] => { $ crate :: SyntaxKind :: AND } ; [|] => { $ crate :: SyntaxKind :: BIT_OR } ; [^] => { $ crate :: SyntaxKind :: BIT_XOR } ; [&] => { $ crate :: SyntaxKind :: BIT_AND } ; [==] => { $ crate :: SyntaxKind :: EQ } ; [!=] => { $ crate :: SyntaxKind :: NE } ; [<] => { $ crate :: SyntaxKind :: LT } ; [>] => { $ crate :: SyntaxKind :: GT } ; [<=] => { $ crate :: SyntaxKind :: LE } ; [>=] => { $ crate :: SyntaxKind :: GE } ; [<<] => { $ crate :: SyntaxKind :: LHS } ; [>>] => { $ crate :: SyntaxKind :: RHS } ; [+] => { $ crate :: SyntaxKind :: PLUS } ; [-] => { $ crate :: SyntaxKind :: MINUS } ; [*] => { $ crate :: SyntaxKind :: MUL } ; [/] => { $ crate :: SyntaxKind :: DIV } ; [%] => { $ crate :: SyntaxKind :: MODULO } ; [!] => { $ crate :: SyntaxKind :: NOT } ; [~] => { $ crate :: SyntaxKind :: BIT_NOT } ; ['['] => { $ crate :: SyntaxKind :: L_BRACK } ; [']'] => { $ crate :: SyntaxKind :: R_BRACK } ; ['('] => { $ crate :: SyntaxKind :: L_PAREN } ; [')'] => { $ crate :: SyntaxKind :: R_PAREN } ; ['{'] => { $ crate :: SyntaxKind :: L_BRACE } ; ['}'] => { $ crate :: SyntaxKind :: R_BRACE } ; [:] => { $ crate :: SyntaxKind :: COLON } ; [::] => { $ crate :: SyntaxKind :: COLONCOLON } ; [:::] => { $ crate :: SyntaxKind :: COLONCOLONCOLON } ; [;] => { $ crate :: SyntaxKind :: SEMI } ; [.] => { $ crate :: SyntaxKind :: DOT } ; [...] => { $ crate :: SyntaxKind :: DOTDOTDOT } ; [,] => { $ crate :: SyntaxKind :: COMMA } ; ['$'] => { $ crate :: SyntaxKind :: DOLLAR } ; [=] => { $ crate :: SyntaxKind :: ASSIGN } ; [?] => { $ crate :: SyntaxKind :: QUESTION_MARK } ; [tailstrict] => { $ crate :: SyntaxKind :: TAILSTRICT_KW } ; [local] => { $ crate :: SyntaxKind :: LOCAL_KW } ; [importstr] => { $ crate :: SyntaxKind :: IMPORTSTR_KW } ; [importbin] => { $ crate :: SyntaxKind :: IMPORTBIN_KW } ; [import] => { $ crate :: SyntaxKind :: IMPORT_KW } ; [if] => { $ crate :: SyntaxKind :: IF_KW } ; [then] => { $ crate :: SyntaxKind :: THEN_KW } ; [else] => { $ crate :: SyntaxKind :: ELSE_KW } ; [function] => { $ crate :: SyntaxKind :: FUNCTION_KW } ; [error] => { $ crate :: SyntaxKind :: ERROR_KW } ; [in] => { $ crate :: SyntaxKind :: IN_KW } ; [null] => { $ crate :: SyntaxKind :: NULL_KW } ; [true] => { $ crate :: SyntaxKind :: TRUE_KW } ; [false] => { $ crate :: SyntaxKind :: FALSE_KW } ; [self] => { $ crate :: SyntaxKind :: SELF_KW } ; [super] => { $ crate :: SyntaxKind :: SUPER_KW } ; [for] => { $ crate :: SyntaxKind :: FOR_KW } ; [assert] => { $ crate :: SyntaxKind :: ASSERT_KW } }292#[allow(unused_imports)]293pub use T;
modifiedcrates/jrsonnet-rowan-parser/src/lex.rsdiffbeforeafterboth
--- 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::<SyntaxKind>::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();
modifiedcrates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth
--- 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 {
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__continue_after_total_failure.snapdiffbeforeafterboth
--- 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 | |
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_no_value_recovery.snapdiffbeforeafterboth
--- 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
    :   ^^
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unexpected_destruct.snapdiffbeforeafterboth
--- 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
modifiedcrates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__wrong_field_end.snapdiffbeforeafterboth
--- 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;
    :         |
modifiedxtask/src/sourcegen/kinds.rsdiffbeforeafterboth
--- 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
 }
modifiedxtask/src/sourcegen/mod.rsdiffbeforeafterboth
--- 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,