]> git.lizzy.rs Git - rust.git/commitdiff
Put non-ascii identifiers behind a feature gate.
authorHuon Wilson <dbau.pp+github@gmail.com>
Fri, 22 Nov 2013 12:25:14 +0000 (23:25 +1100)
committerHuon Wilson <dbau.pp+github@gmail.com>
Fri, 22 Nov 2013 21:18:50 +0000 (08:18 +1100)
cf. https://mail.mozilla.org/pipermail/rust-dev/2013-November/006920.html

src/librustc/front/feature_gate.rs
src/test/compile-fail/gated-non-ascii-idents.rs [new file with mode: 0644]
src/test/run-pass/lint-non-camel-case-types-non-uppercase-statics-unicode.rs
src/test/run-pass/utf8_idents.rs

index c4337abb740927d3e7b46be3b6fb0f13a7b418e5..8fedd1d92be6672b6edb9459371b2d8ee05f0228 100644 (file)
@@ -23,6 +23,7 @@
 use syntax::codemap::Span;
 use syntax::visit;
 use syntax::visit::Visitor;
+use syntax::parse::token;
 
 use driver::session::Session;
 
@@ -36,6 +37,7 @@
     ("once_fns", Active),
     ("asm", Active),
     ("managed_boxes", Active),
+    ("non_ascii_idents", Active),
 
     // These are used to test this portion of the compiler, they don't actually
     // mean anything
@@ -76,6 +78,15 @@ fn has_feature(&self, feature: &str) -> bool {
 }
 
 impl Visitor<()> for Context {
+    fn visit_ident(&mut self, sp: Span, id: ast::Ident, _: ()) {
+        let s = token::ident_to_str(&id);
+
+        if !s.is_ascii() {
+            self.gate_feature("non_ascii_idents", sp,
+                              "non-ascii idents are not fully supported.");
+        }
+    }
+
     fn visit_view_item(&mut self, i: &ast::view_item, _: ()) {
         match i.node {
             ast::view_item_use(ref paths) => {
diff --git a/src/test/compile-fail/gated-non-ascii-idents.rs b/src/test/compile-fail/gated-non-ascii-idents.rs
new file mode 100644 (file)
index 0000000..9522a52
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// xfail-fast feature doesn't work.
+
+#[feature(struct_variant)];
+
+extern mod bäz; //~ ERROR non-ascii idents
+
+use föö::bar; //~ ERROR non-ascii idents
+
+mod föö { //~ ERROR non-ascii idents
+    pub fn bar() {}
+}
+
+fn bär( //~ ERROR non-ascii idents
+    bäz: int //~ ERROR non-ascii idents
+    ) {
+    let _ö: int; //~ ERROR non-ascii idents
+
+    match (1, 2) {
+        (_ä, _) => {} //~ ERROR non-ascii idents
+    }
+}
+
+struct Föö { //~ ERROR non-ascii idents
+    föö: int //~ ERROR non-ascii idents
+}
+
+enum Bär { //~ ERROR non-ascii idents
+    Bäz { //~ ERROR non-ascii idents
+        qüx: int //~ ERROR non-ascii idents
+    }
+}
+
+extern {
+    fn qüx();  //~ ERROR non-ascii idents
+}
+
+fn main() {}
index e3a0c8417d063bd2f301d61f5db62b04073ef912..527a1303b8253f8c0294b04550d3a8ff2b8ef714 100644 (file)
@@ -8,8 +8,11 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// xfail-fast feature doesn't work.
+
 #[forbid(non_camel_case_types)];
 #[forbid(non_uppercase_statics)];
+#[feature(non_ascii_idents)];
 
 // Some scripts (e.g. hiragana) don't have a concept of
 // upper/lowercase
index 3bc29ea13e3430ac44ebae45772df08cfc8acdfb..91b9c1c4e1e7f7d35b1da877205a45bb29cc6031 100644 (file)
@@ -8,6 +8,10 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// xfail-fast feature doesn't work.
+
+#[feature(non_ascii_idents)];
+
 use std::num;
 
 pub fn main() {