Rollup merge of #61883 - zackmdavis:non_ascii_idents_lint, r=Manishearth

`non_ascii_idents` lint (part of RFC 2457)

RFC 2457 [declares](121bbeff50/text/2457-non-ascii-idents.md): "A `non_ascii_idents` lint is added to the compiler. This lint is allow by default."

(Part of #55467.)

r? @Manishearth
This commit is contained in:
Mazdak Farrokhzad 2019-07-07 17:00:15 +02:00 committed by GitHub
commit 9cd75fb35f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 68 additions and 0 deletions

View File

@ -30,6 +30,7 @@ mod nonstandard_style;
pub mod builtin;
mod types;
mod unused;
mod non_ascii_idents;
use rustc::lint;
use rustc::lint::{EarlyContext, LateContext, LateLintPass, EarlyLintPass, LintPass, LintArray};
@ -61,6 +62,7 @@ use nonstandard_style::*;
use builtin::*;
use types::*;
use unused::*;
use non_ascii_idents::*;
use rustc::lint::internal::*;
/// Useful for other parts of the compiler.
@ -97,6 +99,7 @@ macro_rules! early_lint_passes {
NonCamelCaseTypes: NonCamelCaseTypes,
DeprecatedAttr: DeprecatedAttr::new(),
WhileTrue: WhileTrue,
NonAsciiIdents: NonAsciiIdents,
]);
)
}

View File

@ -0,0 +1,22 @@
use crate::lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass};
use syntax::ast;
declare_lint! {
pub NON_ASCII_IDENTS,
Allow,
"detects non-ASCII identifiers"
}
declare_lint_pass!(NonAsciiIdents => [NON_ASCII_IDENTS]);
impl EarlyLintPass for NonAsciiIdents {
fn check_ident(&mut self, cx: &EarlyContext<'_>, ident: ast::Ident) {
if !ident.name.as_str().is_ascii() {
cx.struct_span_lint(
NON_ASCII_IDENTS,
ident.span,
"identifier contains non-ASCII characters",
).emit();
}
}
}

View File

@ -0,0 +1,11 @@
#![feature(non_ascii_idents)]
#![deny(non_ascii_idents)]
const חלודה: usize = 2; //~ ERROR identifier contains non-ASCII characters
fn coöperation() {} //~ ERROR identifier contains non-ASCII characters
fn main() {
let naïveté = 2; //~ ERROR identifier contains non-ASCII characters
println!("{}", naïveté); //~ ERROR identifier contains non-ASCII characters
}

View File

@ -0,0 +1,32 @@
error: identifier contains non-ASCII characters
--> $DIR/lint-non-ascii-idents.rs:4:7
|
LL | const חלודה: usize = 2;
| ^^^^^
|
note: lint level defined here
--> $DIR/lint-non-ascii-idents.rs:2:9
|
LL | #![deny(non_ascii_idents)]
| ^^^^^^^^^^^^^^^^
error: identifier contains non-ASCII characters
--> $DIR/lint-non-ascii-idents.rs:6:4
|
LL | fn coöperation() {}
| ^^^^^^^^^^^
error: identifier contains non-ASCII characters
--> $DIR/lint-non-ascii-idents.rs:9:9
|
LL | let naïveté = 2;
| ^^^^^^^
error: identifier contains non-ASCII characters
--> $DIR/lint-non-ascii-idents.rs:10:20
|
LL | println!("{}", naïveté);
| ^^^^^^^
error: aborting due to 4 previous errors