1 use crate::{EarlyContext, EarlyLintPass, LintContext};
7 "detects non-ASCII identifiers"
11 pub UNCOMMON_CODEPOINTS,
13 "detects uncommon Unicode codepoints in identifiers"
16 declare_lint_pass!(NonAsciiIdents => [NON_ASCII_IDENTS, UNCOMMON_CODEPOINTS]);
18 impl EarlyLintPass for NonAsciiIdents {
19 fn check_ident(&mut self, cx: &EarlyContext<'_>, ident: ast::Ident) {
20 use unicode_security::GeneralSecurityProfile;
21 let name_str = ident.name.as_str();
22 if name_str.is_ascii() {
25 cx.struct_span_lint(NON_ASCII_IDENTS, ident.span, |lint| {
26 lint.build("identifier contains non-ASCII characters").emit()
28 if !name_str.chars().all(GeneralSecurityProfile::identifier_allowed) {
29 cx.struct_span_lint(UNCOMMON_CODEPOINTS, ident.span, |lint| {
30 lint.build("identifier contains uncommon Unicode codepoints").emit()