Skip to content

Commit

Permalink
Rollup merge of rust-lang#61883 - zackmdavis:non_ascii_idents_lint, r…
Browse files Browse the repository at this point in the history
…=Manishearth

`non_ascii_idents` lint (part of RFC 2457)

RFC 2457 [declares](https://github.com/rust-lang/rfcs/blob/121bbeff500c3274cea22c7e0ca176274d592646/text/2457-non-ascii-idents.md): "A `non_ascii_idents` lint is added to the compiler. This lint is allow by default."

(Part of rust-lang#55467.)

r? @Manishearth
  • Loading branch information
Manishearth authored Jul 2, 2019
2 parents e58fbbb + 0ae61d8 commit af4b62b
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/librustc_lint/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,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 @@ -62,6 +63,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 {
EllipsisInclusiveRangePatterns: EllipsisInclusiveRangePatterns::default(),
NonCamelCaseTypes: NonCamelCaseTypes,
DeprecatedAttr: DeprecatedAttr::new(),
NonAsciiIdents: NonAsciiIdents,
]);
)
}
Expand Down
23 changes: 23 additions & 0 deletions src/librustc_lint/non_ascii_idents.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
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() {
let mut err = cx.struct_span_lint(
NON_ASCII_IDENTS,
ident.span,
"identifier contains non-ASCII characters",
);
err.emit();
}
}
}
11 changes: 11 additions & 0 deletions src/test/ui/lint/lint-non-ascii-idents.rs
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
}
32 changes: 32 additions & 0 deletions src/test/ui/lint/lint-non-ascii-idents.stderr
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

0 comments on commit af4b62b

Please sign in to comment.