Remove check that text of parse_expr_from_str()
matches the produced parsed tree
This check is incorrect when we have comments and whitespace in the text. We can strip comments, but then we still have whitespace, which we cannot strip without changing meaning for the parser. So instead I opt to remove the check, and wrap the expression in parentheses (asserting what produced is a parenthesized expression) to strengthen verification.
This commit is contained in:
parent
ee38991676
commit
65f83e47ee
@ -996,4 +996,17 @@ fn BAR() {
|
|||||||
"#,
|
"#,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn allow_with_comment() {
|
||||||
|
check_diagnostics(
|
||||||
|
r#"
|
||||||
|
#[allow(
|
||||||
|
// Yo, sup
|
||||||
|
non_snake_case
|
||||||
|
)]
|
||||||
|
fn foo(_HelloWorld: ()) {}
|
||||||
|
"#,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,10 +8,15 @@
|
|||||||
|
|
||||||
pub fn parse_expr_from_str(s: &str, edition: Edition) -> Option<ast::Expr> {
|
pub fn parse_expr_from_str(s: &str, edition: Edition) -> Option<ast::Expr> {
|
||||||
let s = s.trim();
|
let s = s.trim();
|
||||||
let file = ast::SourceFile::parse(&format!("const _: () = {s};"), edition);
|
|
||||||
let expr = file.syntax_node().descendants().find_map(ast::Expr::cast)?;
|
let file = ast::SourceFile::parse(
|
||||||
if expr.syntax().text() != s {
|
// Need a newline because the text may contain line comments.
|
||||||
return None;
|
&format!("const _: () = ({s}\n);"),
|
||||||
}
|
edition,
|
||||||
Some(expr)
|
);
|
||||||
|
let expr = file.syntax_node().descendants().find_map(ast::ParenExpr::cast)?;
|
||||||
|
// Can't check the text because the original text may contain whitespace and comments.
|
||||||
|
// Wrap in parentheses to better allow for verification. Of course, the real fix is
|
||||||
|
// to get rid of this hack.
|
||||||
|
expr.expr()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user