]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc_lint/non_ascii_idents.rs
clean up error codes explanation
[rust.git] / src / librustc_lint / non_ascii_idents.rs
index aa39211efc71e6e622f4e2ce529be6e25fd018b5..3c85a1b31b2445e77e37a7533d11529c64be8718 100644 (file)
@@ -1,4 +1,4 @@
-use crate::lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass};
+use crate::{EarlyContext, EarlyLintPass, LintContext};
 use syntax::ast;
 
 declare_lint! {
@@ -7,16 +7,34 @@
     "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",
-            ).emit();
+                "identifier contains uncommon Unicode codepoints",
+            )
+            .emit();
         }
     }
 }