Skip to content

Commit

Permalink
Rollup merge of rust-lang#83799 - crlf0710:stablize_non_ascii_idents,…
Browse files Browse the repository at this point in the history
… r=Manishearth

Stablize `non-ascii-idents`

This is the stablization PR for RFC 2457. Currently this is waiting on fcp in [tracking issue](rust-lang#55467).

r? `@Manishearth`
  • Loading branch information
GuillaumeGomez authored Apr 18, 2021
2 parents ef88434 + e5f9271 commit 55be034
Show file tree
Hide file tree
Showing 57 changed files with 163 additions and 546 deletions.
13 changes: 1 addition & 12 deletions compiler/rustc_ast_passes/src/feature_gate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use rustc_feature::{Features, GateIssue};
use rustc_session::parse::{feature_err, feature_err_issue};
use rustc_session::Session;
use rustc_span::source_map::Spanned;
use rustc_span::symbol::{sym, Symbol};
use rustc_span::symbol::sym;
use rustc_span::Span;

use tracing::debug;
Expand Down Expand Up @@ -328,17 +328,6 @@ impl<'a> Visitor<'a> for PostExpansionVisitor<'a> {
}
}

fn visit_name(&mut self, sp: Span, name: Symbol) {
if !name.as_str().is_ascii() {
gate_feature_post!(
&self,
non_ascii_idents,
self.sess.parse_sess.source_map().guess_head_span(sp),
"non-ascii idents are not fully supported"
);
}
}

fn visit_item(&mut self, i: &'a ast::Item) {
match i.kind {
ast::ItemKind::ForeignMod(ref foreign_module) => {
Expand Down
4 changes: 2 additions & 2 deletions compiler/rustc_error_codes/src/error_codes/E0554.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ beta compilers will not comply.
Erroneous code example:

```ignore (depends on release channel)
#![feature(non_ascii_idents)] // error: `#![feature]` may not be used on the
// stable release channel
#![feature(lang_items)] // error: `#![feature]` may not be used on the
// stable release channel
```

If you need the feature, make sure to use a nightly release of the compiler
Expand Down
3 changes: 0 additions & 3 deletions compiler/rustc_error_codes/src/error_codes/E0754.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ A non-ASCII identifier was used in an invalid context.
Erroneous code examples:

```compile_fail,E0754
# #![feature(non_ascii_idents)]
mod řųśť; // error!
Expand All @@ -17,8 +16,6 @@ Non-ASCII can be used as module names if it is inlined or if a `#[path]`
attribute is specified. For example:

```
# #![feature(non_ascii_idents)]
mod řųśť { // ok!
const IS_GREAT: bool = true;
}
Expand Down
2 changes: 2 additions & 0 deletions compiler/rustc_feature/src/accepted.rs
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,8 @@ declare_features! (
(accepted, unsafe_block_in_unsafe_fn, "1.52.0", Some(71668), None),
/// Allows the use of or-patterns (e.g., `0 | 1`).
(accepted, or_patterns, "1.53.0", Some(54883), None),
/// Allows defining identifiers beyond ASCII.
(accepted, non_ascii_idents, "1.53.0", Some(55467), None),

// -------------------------------------------------------------------------
// feature-group-end: accepted features
Expand Down
3 changes: 0 additions & 3 deletions compiler/rustc_feature/src/active.rs
Original file line number Diff line number Diff line change
Expand Up @@ -255,9 +255,6 @@ declare_features! (
// feature-group-start: actual feature gates
// -------------------------------------------------------------------------

/// Allows defining identifiers beyond ASCII.
(active, non_ascii_idents, "1.0.0", Some(55467), None),

/// Allows using `#[plugin_registrar]` on functions.
(active, plugin_registrar, "1.0.0", Some(29597), None),

Expand Down
37 changes: 9 additions & 28 deletions compiler/rustc_lint/src/non_ascii_idents.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ declare_lint! {
///
/// ```rust,compile_fail
/// # #![allow(unused)]
/// #![feature(non_ascii_idents)]
/// #![deny(non_ascii_idents)]
/// fn main() {
/// let föö = 1;
Expand All @@ -21,14 +20,11 @@ declare_lint! {
///
/// ### Explanation
///
/// Currently on stable Rust, identifiers must contain ASCII characters.
/// The [`non_ascii_idents`] nightly-only feature allows identifiers to
/// contain non-ASCII characters. This lint allows projects that wish to
/// retain the limit of only using ASCII characters to switch this lint to
/// "forbid" (for example to ease collaboration or for security reasons).
/// This lint allows projects that wish to retain the limit of only using
/// ASCII characters to switch this lint to "forbid" (for example to ease
/// collaboration or for security reasons).
/// See [RFC 2457] for more details.
///
/// [`non_ascii_idents`]: https://doc.rust-lang.org/nightly/unstable-book/language-features/non-ascii-idents.html
/// [RFC 2457]: https://github.com/rust-lang/rfcs/blob/master/text/2457-non-ascii-idents.md
pub NON_ASCII_IDENTS,
Allow,
Expand All @@ -44,18 +40,15 @@ declare_lint! {
///
/// ```rust
/// # #![allow(unused)]
/// #![feature(non_ascii_idents)]
/// const µ: f64 = 0.000001;
/// ```
///
/// {{produces}}
///
/// ### Explanation
///
/// With the [`non_ascii_idents`] nightly-only feature enabled,
/// identifiers are allowed to use non-ASCII characters. This lint warns
/// about using characters which are not commonly used, and may cause
/// visual confusion.
/// This lint warns about using characters which are not commonly used, and may
/// cause visual confusion.
///
/// This lint is triggered by identifiers that contain a codepoint that is
/// not part of the set of "Allowed" codepoints as described by [Unicode®
Expand All @@ -66,7 +59,6 @@ declare_lint! {
/// that if you "forbid" this lint that existing code may fail in the
/// future.
///
/// [`non_ascii_idents`]: https://doc.rust-lang.org/nightly/unstable-book/language-features/non-ascii-idents.html
/// [TR39Allowed]: https://www.unicode.org/reports/tr39/#General_Security_Profile
pub UNCOMMON_CODEPOINTS,
Warn,
Expand All @@ -81,8 +73,6 @@ declare_lint! {
/// ### Example
///
/// ```rust
/// #![feature(non_ascii_idents)]
///
/// // Latin Capital Letter E With Caron
/// pub const Ě: i32 = 1;
/// // Latin Capital Letter E With Breve
Expand All @@ -93,10 +83,8 @@ declare_lint! {
///
/// ### Explanation
///
/// With the [`non_ascii_idents`] nightly-only feature enabled,
/// identifiers are allowed to use non-ASCII characters. This lint warns
/// when different identifiers may appear visually similar, which can
/// cause confusion.
/// This lint warns when different identifiers may appear visually similar,
/// which can cause confusion.
///
/// The confusable detection algorithm is based on [Unicode® Technical
/// Standard #39 Unicode Security Mechanisms Section 4 Confusable
Expand All @@ -110,7 +98,6 @@ declare_lint! {
/// Beware that if you "forbid" this lint that existing code may fail in
/// the future.
///
/// [`non_ascii_idents`]: https://doc.rust-lang.org/nightly/unstable-book/language-features/non-ascii-idents.html
/// [TR39Confusable]: https://www.unicode.org/reports/tr39/#Confusable_Detection
pub CONFUSABLE_IDENTS,
Warn,
Expand All @@ -127,8 +114,6 @@ declare_lint! {
/// ### Example
///
/// ```rust
/// #![feature(non_ascii_idents)]
///
/// // The Japanese katakana character エ can be confused with the Han character 工.
/// const エ: &'static str = "アイウ";
/// ```
Expand All @@ -137,10 +122,8 @@ declare_lint! {
///
/// ### Explanation
///
/// With the [`non_ascii_idents`] nightly-only feature enabled,
/// identifiers are allowed to use non-ASCII characters. This lint warns
/// when characters between different scripts may appear visually similar,
/// which can cause confusion.
/// This lint warns when characters between different scripts may appear
/// visually similar, which can cause confusion.
///
/// If the crate contains other identifiers in the same script that have
/// non-confusable characters, then this lint will *not* be issued. For
Expand All @@ -152,8 +135,6 @@ declare_lint! {
/// Note that the set of confusable characters may change over time.
/// Beware that if you "forbid" this lint that existing code may fail in
/// the future.
///
/// [`non_ascii_idents`]: https://doc.rust-lang.org/nightly/unstable-book/language-features/non-ascii-idents.html
pub MIXED_SCRIPT_CONFUSABLES,
Warn,
"detects Unicode scripts whose mixed script confusables codepoints are solely used",
Expand Down
48 changes: 0 additions & 48 deletions src/doc/unstable-book/src/language-features/non-ascii-idents.md

This file was deleted.

2 changes: 0 additions & 2 deletions src/test/debuginfo/multi-byte-chars.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

// compile-flags:-g

#![feature(non_ascii_idents)]

// This test checks whether debuginfo generation can handle multi-byte UTF-8
// characters at the end of a block. There's no need to do anything in the
// debugger -- just make sure that the compiler doesn't crash.
Expand Down
2 changes: 0 additions & 2 deletions src/test/ui/codemap_tests/unicode_2.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#![feature(non_ascii_idents)]

fn main() {
let _ = ("a̐éö̲", 0u7); //~ ERROR invalid width
let _ = ("아あ", 1i42); //~ ERROR invalid width
Expand Down
6 changes: 3 additions & 3 deletions src/test/ui/codemap_tests/unicode_2.stderr
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
error: invalid width `7` for integer literal
--> $DIR/unicode_2.rs:4:25
--> $DIR/unicode_2.rs:2:25
|
LL | let _ = ("a̐éö̲", 0u7);
| ^^^
|
= help: valid widths are 8, 16, 32, 64 and 128

error: invalid width `42` for integer literal
--> $DIR/unicode_2.rs:5:20
--> $DIR/unicode_2.rs:3:20
|
LL | let _ = ("아あ", 1i42);
| ^^^^
|
= help: valid widths are 8, 16, 32, 64 and 128

error[E0425]: cannot find value `a̐é` in this scope
--> $DIR/unicode_2.rs:6:13
--> $DIR/unicode_2.rs:4:13
|
LL | let _ = a̐é;
| ^^ not found in this scope
Expand Down
34 changes: 0 additions & 34 deletions src/test/ui/feature-gates/feature-gate-non_ascii_idents.rs

This file was deleted.

Loading

0 comments on commit 55be034

Please sign in to comment.