]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_lint/non_ascii_idents.rs
Auto merge of #68034 - Centril:rollup-3d9pq14, r=Centril
[rust.git] / src / librustc_lint / non_ascii_idents.rs
index 9ec84553942957566649fcce1cefde1d72692c28..f30d0bcbdd53fe0eb9c308cb6c34a4b0ccbaac05 100644 (file)
@@ -7,15 +7,32 @@
     "detects non-ASCII identifiers"
 }
 
-declare_lint_pass!(NonAsciiIdents => [NON_ASCII_IDENTS]);
+declare_lint! {
+    pub UNCOMMON_CODEPOINTS,
+    Warn,
+    "detects uncommon Unicode codepoints in identifiers"
+}
+
+declare_lint_pass!(NonAsciiIdents => [NON_ASCII_IDENTS, UNCOMMON_CODEPOINTS]);
 
 impl EarlyLintPass for NonAsciiIdents {
     fn check_ident(&mut self, cx: &EarlyContext<'_>, ident: ast::Ident) {
-        if !ident.name.as_str().is_ascii() {
+        use unicode_security::GeneralSecurityProfile;
+        let name_str = ident.name.as_str();
+        if name_str.is_ascii() {
+            return;
+        }
+        cx.struct_span_lint(
+            NON_ASCII_IDENTS,
+            ident.span,
+            "identifier contains non-ASCII characters",
+        )
+        .emit();
+        if !name_str.chars().all(GeneralSecurityProfile::identifier_allowed) {
             cx.struct_span_lint(
-                NON_ASCII_IDENTS,
+                UNCOMMON_CODEPOINTS,
                 ident.span,
-                "identifier contains non-ASCII characters",
+                "identifier contains uncommon Unicode codepoints",
             )
             .emit();
         }