Skip to content

Commit

Permalink
Rollup merge of rust-lang#73839 - crlf0710:snapshot_the_reality, r=Ma…
Browse files Browse the repository at this point in the history
…nishearth

Split and expand nonstandard-style lints unicode unit test.

RFC 2457 requested that the `nonstandard_style` series of linted be adjusted to cover the non_ascii_identifier case. However when i read the code of those implementations, it seems they're already supporting non_ascii_identifiers. But the exact rules is a little different than what's proposed in RFC 2457.

So I splitted and expanded the existing test case to try to exercise every branch in the code. I think it'll also be easier to examine the cases in these unit tests to see whether it's ok to just leave them as is, or some adjustments are needed.

r? @Manishearth
  • Loading branch information
Manishearth authored Jul 2, 2020
2 parents a6ca459 + e8f5785 commit 05d4c81
Show file tree
Hide file tree
Showing 7 changed files with 189 additions and 16 deletions.
50 changes: 50 additions & 0 deletions src/test/ui/lint/lint-nonstandard-style-unicode-1.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#![allow(dead_code)]

#![forbid(non_camel_case_types)]
#![feature(non_ascii_idents)]

// Some scripts (e.g., hiragana) don't have a concept of
// upper/lowercase

// 1. non_camel_case_types

// Can start with non-lowercase letter
struct Θχ;
struct ヒa;

struct χa;
//~^ ERROR type `χa` should have an upper camel case name

// If there's already leading or trailing underscores, they get trimmed before checking.
// This is fine:
struct _ヒb;

// This is not:
struct __χa;
//~^ ERROR type `__χa` should have an upper camel case name

// Besides this, we cannot have two continous underscores in the middle.

struct 对__否;
//~^ ERROR type `对__否` should have an upper camel case name

struct ヒ__χ;
//~^ ERROR type `ヒ__χ` should have an upper camel case name

// also cannot have lowercase letter next to a underscore.
// so this triggers the lint:

struct Hello_你好;
//~^ ERROR type `Hello_你好` should have an upper camel case name

struct Hello_World;
//~^ ERROR type `Hello_World` should have an upper camel case name

struct 你_ӟ;
//~^ ERROR type `你_ӟ` should have an upper camel case name

// and this is ok:

struct 你_好;

fn main() {}
50 changes: 50 additions & 0 deletions src/test/ui/lint/lint-nonstandard-style-unicode-1.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
error: type `χa` should have an upper camel case name
--> $DIR/lint-nonstandard-style-unicode-1.rs:15:8
|
LL | struct χa;
| ^^ help: convert the identifier to upper camel case: `Χa`
|
note: the lint level is defined here
--> $DIR/lint-nonstandard-style-unicode-1.rs:3:11
|
LL | #![forbid(non_camel_case_types)]
| ^^^^^^^^^^^^^^^^^^^^

error: type `__χa` should have an upper camel case name
--> $DIR/lint-nonstandard-style-unicode-1.rs:23:8
|
LL | struct __χa;
| ^^^^ help: convert the identifier to upper camel case: `Χa`

error: type `对__否` should have an upper camel case name
--> $DIR/lint-nonstandard-style-unicode-1.rs:28:8
|
LL | struct 对__否;
| ^^^^^^ help: convert the identifier to upper camel case: `对_否`

error: type `ヒ__χ` should have an upper camel case name
--> $DIR/lint-nonstandard-style-unicode-1.rs:31:8
|
LL | struct ヒ__χ;
| ^^^^^ help: convert the identifier to upper camel case: `ヒΧ`

error: type `Hello_你好` should have an upper camel case name
--> $DIR/lint-nonstandard-style-unicode-1.rs:37:8
|
LL | struct Hello_你好;
| ^^^^^^^^^^ help: convert the identifier to upper camel case: `Hello你好`

error: type `Hello_World` should have an upper camel case name
--> $DIR/lint-nonstandard-style-unicode-1.rs:40:8
|
LL | struct Hello_World;
| ^^^^^^^^^^^ help: convert the identifier to upper camel case: `HelloWorld`

error: type `你_ӟ` should have an upper camel case name
--> $DIR/lint-nonstandard-style-unicode-1.rs:43:8
|
LL | struct 你_ӟ;
| ^^^^ help: convert the identifier to upper camel case: `你Ӟ`

error: aborting due to 7 previous errors

30 changes: 30 additions & 0 deletions src/test/ui/lint/lint-nonstandard-style-unicode-2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#![allow(dead_code)]

#![forbid(non_snake_case)]
#![feature(non_ascii_idents)]

// Some scripts (e.g., hiragana) don't have a concept of
// upper/lowercase

// 2. non_snake_case

// Can only use non-uppercase letters.
// So this works:

fn 编程() {}

// but this doesn't:

fn Ц() {}
//~^ ERROR function `Ц` should have a snake case name

// besides this, you cannot use continous underscores in the middle

fn 分__隔() {}
//~^ ERROR function `分__隔` should have a snake case name

// but you can use them both at the beginning and at the end.

fn _______不_连_续_的_存_在_______() {}

fn main() {}
20 changes: 20 additions & 0 deletions src/test/ui/lint/lint-nonstandard-style-unicode-2.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
error: function `Ц` should have a snake case name
--> $DIR/lint-nonstandard-style-unicode-2.rs:18:4
|
LL | fn Ц() {}
| ^ help: convert the identifier to snake case: `ц`
|
note: the lint level is defined here
--> $DIR/lint-nonstandard-style-unicode-2.rs:3:11
|
LL | #![forbid(non_snake_case)]
| ^^^^^^^^^^^^^^

error: function `分__隔` should have a snake case name
--> $DIR/lint-nonstandard-style-unicode-2.rs:23:4
|
LL | fn 分__隔() {}
| ^^^^^^ help: convert the identifier to snake case: `分_隔`

error: aborting due to 2 previous errors

25 changes: 25 additions & 0 deletions src/test/ui/lint/lint-nonstandard-style-unicode-3.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#![allow(dead_code)]

#![forbid(non_upper_case_globals)]
#![feature(non_ascii_idents)]

// Some scripts (e.g., hiragana) don't have a concept of
// upper/lowercase

// 3. non_upper_case_globals

// Can only use non-lowercase letters.
// So this works:

static: usize = 0;

// but this doesn't:

static τεχ: f32 = 3.14159265;
//~^ ERROR static variable `τεχ` should have an upper case name

// This has no limit at all on underscore usages.

static __密__封__线__内__禁__止__答__题__: bool = true;

fn main() {}
14 changes: 14 additions & 0 deletions src/test/ui/lint/lint-nonstandard-style-unicode-3.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
error: static variable `τεχ` should have an upper case name
--> $DIR/lint-nonstandard-style-unicode-3.rs:18:8
|
LL | static τεχ: f32 = 3.14159265;
| ^^^ help: convert the identifier to upper case: `ΤΕΧ`
|
note: the lint level is defined here
--> $DIR/lint-nonstandard-style-unicode-3.rs:3:11
|
LL | #![forbid(non_upper_case_globals)]
| ^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to previous error

16 changes: 0 additions & 16 deletions src/test/ui/lint/lint-nonstandard-style-unicode.rs

This file was deleted.

0 comments on commit 05d4c81

Please sign in to comment.