Auto merge of #83799 - crlf0710:stablize_non_ascii_idents, r=Manishearth
Stablize `non-ascii-idents` This is the stablization PR for RFC 2457. Currently this is waiting on fcp in [tracking issue](https://github.com/rust-lang/rust/issues/55467). r? `@Manishearth`
This commit is contained in:
commit
c4ba8e3e5f
57 changed files with 166 additions and 549 deletions
|
@ -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;
|
||||
|
@ -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) => {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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!
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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),
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@ declare_lint! {
|
|||
///
|
||||
/// ```rust,compile_fail
|
||||
/// # #![allow(unused)]
|
||||
/// #![feature(non_ascii_idents)]
|
||||
/// #![deny(non_ascii_idents)]
|
||||
/// fn main() {
|
||||
/// let föö = 1;
|
||||
|
@ -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,
|
||||
|
@ -44,7 +40,6 @@ declare_lint! {
|
|||
///
|
||||
/// ```rust
|
||||
/// # #![allow(unused)]
|
||||
/// #![feature(non_ascii_idents)]
|
||||
/// const µ: f64 = 0.000001;
|
||||
/// ```
|
||||
///
|
||||
|
@ -52,10 +47,8 @@ declare_lint! {
|
|||
///
|
||||
/// ### 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®
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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 = "アイウ";
|
||||
/// ```
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue