X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_lint%2Fnon_ascii_idents.rs;h=3c85a1b31b2445e77e37a7533d11529c64be8718;hb=3850d96379126087240b640470632362a5d32234;hp=aa39211efc71e6e622f4e2ce529be6e25fd018b5;hpb=e632dafba2782ce8f51c2e414290d36cf983896f;p=rust.git diff --git a/src/librustc_lint/non_ascii_idents.rs b/src/librustc_lint/non_ascii_idents.rs index aa39211efc7..3c85a1b31b2 100644 --- a/src/librustc_lint/non_ascii_idents.rs +++ b/src/librustc_lint/non_ascii_idents.rs @@ -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(); } } }