Nicer error messages for unknown tokens (#974)
This commit is contained in:
@ -36,13 +36,13 @@ impl Parser {
|
|||||||
|
|
||||||
if !self.unknown_tokens.is_empty() {
|
if !self.unknown_tokens.is_empty() {
|
||||||
let source_ranges = self.unknown_tokens.iter().map(SourceRange::from).collect();
|
let source_ranges = self.unknown_tokens.iter().map(SourceRange::from).collect();
|
||||||
return Err(KclError::Lexical(KclErrorDetails {
|
let token_list = self.unknown_tokens.iter().map(|t| t.value.as_str()).collect::<Vec<_>>();
|
||||||
source_ranges,
|
let message = if token_list.len() == 1 {
|
||||||
message: format!(
|
format!("found unknown token '{}'", token_list[0])
|
||||||
"found unknown tokens {:?}",
|
} else {
|
||||||
self.unknown_tokens.iter().map(|t| t.value.as_str()).collect::<Vec<_>>()
|
format!("found unknown tokens [{}]", token_list.join(", "))
|
||||||
),
|
};
|
||||||
}));
|
return Err(KclError::Lexical(KclErrorDetails { source_ranges, message }));
|
||||||
}
|
}
|
||||||
|
|
||||||
parser_impl::run_parser(&mut self.tokens.as_slice())
|
parser_impl::run_parser(&mut self.tokens.as_slice())
|
||||||
|
@ -2214,9 +2214,10 @@ const secondExtrude = startSketchOn('XY')
|
|||||||
let tokens = crate::token::lexer(">!");
|
let tokens = crate::token::lexer(">!");
|
||||||
let parser = crate::parser::Parser::new(tokens);
|
let parser = crate::parser::Parser::new(tokens);
|
||||||
let err = parser.ast().unwrap_err();
|
let err = parser.ast().unwrap_err();
|
||||||
// TODO: Better errors when program cannot tokenize.
|
assert_eq!(
|
||||||
// https://github.com/KittyCAD/modeling-app/issues/696
|
err.to_string(),
|
||||||
assert!(err.to_string().contains("found list of unknown tokens"));
|
r#"lexical: KclErrorDetails { source_ranges: [SourceRange([1, 2])], message: "found unknown token '!'" }"#
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -2272,11 +2273,9 @@ z(-[["#,
|
|||||||
let parser = crate::parser::Parser::new(tokens);
|
let parser = crate::parser::Parser::new(tokens);
|
||||||
let result = parser.ast();
|
let result = parser.ast();
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
// TODO: Better errors when program cannot tokenize.
|
|
||||||
// https://github.com/KittyCAD/modeling-app/issues/696
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.err().unwrap().to_string(),
|
result.err().unwrap().to_string(),
|
||||||
r##"lexical: KclErrorDetails { source_ranges: [SourceRange([6, 7])], message: "found list of unknown tokens \"#\"" }"##
|
r#"lexical: KclErrorDetails { source_ranges: [SourceRange([6, 7])], message: "found unknown token '#'" }"#
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2286,11 +2285,9 @@ z(-[["#,
|
|||||||
let parser = crate::parser::Parser::new(tokens);
|
let parser = crate::parser::Parser::new(tokens);
|
||||||
let result = parser.ast();
|
let result = parser.ast();
|
||||||
assert!(result.is_err());
|
assert!(result.is_err());
|
||||||
// TODO: Better errors when program cannot tokenize.
|
|
||||||
// https://github.com/KittyCAD/modeling-app/issues/696
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
result.err().unwrap().to_string(),
|
result.err().unwrap().to_string(),
|
||||||
r##"lexical: KclErrorDetails { source_ranges: [SourceRange([25, 26]), SourceRange([26, 27])], message: "found list of unknown tokens \"# #\"" }"##
|
r#"lexical: KclErrorDetails { source_ranges: [SourceRange([25, 26]), SourceRange([26, 27])], message: "found unknown tokens [#, #]" }"#
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 90 KiB |
Reference in New Issue
Block a user