about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/incorrect_case.rs13
-rw-r--r--src/tools/rust-analyzer/crates/syntax/src/hacks.rs17
2 files changed, 24 insertions, 6 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/incorrect_case.rs b/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/incorrect_case.rs
index 96d8313cc1b..c4c28953175 100644
--- a/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/incorrect_case.rs
+++ b/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/incorrect_case.rs
@@ -996,4 +996,17 @@ fn BAR() {
         "#,
         );
     }
+
+    #[test]
+    fn allow_with_comment() {
+        check_diagnostics(
+            r#"
+#[allow(
+    // Yo, sup
+    non_snake_case
+)]
+fn foo(_HelloWorld: ()) {}
+        "#,
+        );
+    }
 }
diff --git a/src/tools/rust-analyzer/crates/syntax/src/hacks.rs b/src/tools/rust-analyzer/crates/syntax/src/hacks.rs
index 9e63448ce96..2184359f1d0 100644
--- a/src/tools/rust-analyzer/crates/syntax/src/hacks.rs
+++ b/src/tools/rust-analyzer/crates/syntax/src/hacks.rs
@@ -8,10 +8,15 @@ use crate::{ast, AstNode};
 
 pub fn parse_expr_from_str(s: &str, edition: Edition) -> Option<ast::Expr> {
     let s = s.trim();
-    let file = ast::SourceFile::parse(&format!("const _: () = {s};"), edition);
-    let expr = file.syntax_node().descendants().find_map(ast::Expr::cast)?;
-    if expr.syntax().text() != s {
-        return None;
-    }
-    Some(expr)
+
+    let file = ast::SourceFile::parse(
+        // Need a newline because the text may contain line comments.
+        &format!("const _: () = ({s}\n);"),
+        edition,
+    );
+    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()
 }