Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

non_ascii_idents lint (part of RFC 2457) #61883

Merged
merged 1 commit into from
Jul 7, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/librustc_lint/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -97,6 +99,7 @@ macro_rules! early_lint_passes {
NonCamelCaseTypes: NonCamelCaseTypes,
DeprecatedAttr: DeprecatedAttr::new(),
WhileTrue: WhileTrue,
NonAsciiIdents: NonAsciiIdents,
]);
)
}
Expand Down
22 changes: 22 additions & 0 deletions src/librustc_lint/non_ascii_idents.rs
Original file line number Diff line number Diff line change
@@ -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();
}
}
}
Original file line number Diff line number Diff line change
@@ -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
}
Original file line number Diff line number Diff line change
@@ -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