about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-07-07 17:00:15 +0200
committerGitHub <noreply@github.com>2019-07-07 17:00:15 +0200
commit9cd75fb35f1d24f805c6759fd6236cd708b81ee1 (patch)
tree700a42673d9375f779853ee3cc37cc224074fb9e /src
parentdd2e8040a35883574ae0c4cc7a4e887ecb66469c (diff)
parent6de8e39e2612305cef4e2d8ef3eca296294d01b5 (diff)
downloadrust-9cd75fb35f1d24f805c6759fd6236cd708b81ee1.tar.gz
rust-9cd75fb35f1d24f805c6759fd6236cd708b81ee1.zip
Rollup merge of #61883 - zackmdavis:non_ascii_idents_lint, r=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 #55467.)

r? @Manishearth
Diffstat (limited to 'src')
-rw-r--r--src/librustc_lint/lib.rs3
-rw-r--r--src/librustc_lint/non_ascii_idents.rs22
-rw-r--r--src/test/ui/lint/rfc-2457-non-ascii-idents/lint-non-ascii-idents.rs11
-rw-r--r--src/test/ui/lint/rfc-2457-non-ascii-idents/lint-non-ascii-idents.stderr32
4 files changed, 68 insertions, 0 deletions
diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs
index 2519981fa21..13a9963fa90 100644
--- a/src/librustc_lint/lib.rs
+++ b/src/librustc_lint/lib.rs
@@ -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,
         ]);
     )
 }
diff --git a/src/librustc_lint/non_ascii_idents.rs b/src/librustc_lint/non_ascii_idents.rs
new file mode 100644
index 00000000000..aa39211efc7
--- /dev/null
+++ b/src/librustc_lint/non_ascii_idents.rs
@@ -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();
+        }
+    }
+}
diff --git a/src/test/ui/lint/rfc-2457-non-ascii-idents/lint-non-ascii-idents.rs b/src/test/ui/lint/rfc-2457-non-ascii-idents/lint-non-ascii-idents.rs
new file mode 100644
index 00000000000..057329a0a65
--- /dev/null
+++ b/src/test/ui/lint/rfc-2457-non-ascii-idents/lint-non-ascii-idents.rs
@@ -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
+}
diff --git a/src/test/ui/lint/rfc-2457-non-ascii-idents/lint-non-ascii-idents.stderr b/src/test/ui/lint/rfc-2457-non-ascii-idents/lint-non-ascii-idents.stderr
new file mode 100644
index 00000000000..56925846e95
--- /dev/null
+++ b/src/test/ui/lint/rfc-2457-non-ascii-idents/lint-non-ascii-idents.stderr
@@ -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
+