Skip to content

Commit b517682

Browse files
author
Julian Wollersberger
committed
Added test cases for raw keywords.
1 parent c57f512 commit b517682

File tree

3 files changed

+198
-1
lines changed

3 files changed

+198
-1
lines changed

src/librustdoc/html/highlight.rs

-1
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,6 @@ impl<'a> Classifier<'a> {
408408
c => c,
409409
},
410410
TokenKind::RawIdent => Class::Ident,
411-
//TODO How do I test this?
412411
TokenKind::RawKeyword => Class::KeyWord,
413412
TokenKind::Lifetime { .. } => Class::Lifetime,
414413
};
+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// check-fail
2+
3+
macro_rules! one_token { ( $a:tt ) => { }; }
4+
macro_rules! two_tokens { ( $a:tt $b:tt ) => { }; }
5+
macro_rules! three_tokens { ( $a:tt $b:tt $c:tt) => { }; }
6+
macro_rules! four_tokens { ( $a:tt $b:tt $c:tt $d:tt ) => { }; }
7+
8+
fn main() {
9+
// Intended raw keyword syntax
10+
one_token!(k#ident);
11+
//~^ ERROR raw keyword syntax is reserved for future use
12+
one_token!(k#fn);
13+
//~^ ERROR raw keyword syntax is reserved for future use
14+
one_token!(k#Self);
15+
//~^ ERROR raw keyword syntax is reserved for future use
16+
one_token!(k#dyn);
17+
//~^ ERROR raw keyword syntax is reserved for future use
18+
one_token!(k#await);
19+
//~^ ERROR raw keyword syntax is reserved for future use
20+
21+
// This was previously valid in `quote!` macros, where `k` was a variable.
22+
two_tokens!(#k#other_variable);
23+
//~^ ERROR raw keyword syntax is reserved for future use
24+
25+
// weird interactions with raw literals.
26+
two_tokens!(k#r"raw string");
27+
//~^ ERROR raw keyword syntax is reserved for future use
28+
two_tokens!(k#r "raw string");
29+
//~^ ERROR raw keyword syntax is reserved for future use
30+
two_tokens!(k#br"raw byte string");
31+
//~^ ERROR raw keyword syntax is reserved for future use
32+
three_tokens!(k#r"raw string"#);
33+
//~^ ERROR raw keyword syntax is reserved for future use
34+
four_tokens!(k#r#"raw string"#);
35+
//~^ ERROR raw keyword syntax is reserved for future use
36+
two_tokens!(k#b'-');
37+
//~^ ERROR raw keyword syntax is reserved for future use
38+
two_tokens!(k#b '-');
39+
//~^ ERROR raw keyword syntax is reserved for future use
40+
41+
// weird raw idents
42+
one_token!(r#k);
43+
two_tokens!(r#k#);
44+
three_tokens!(r#k#ident);
45+
two_tokens!(r#k ident);
46+
three_tokens!(r#k#r);
47+
three_tokens!(r#k#r#ident);
48+
49+
// Inserting a whitespace gets you the previous lexing behaviour
50+
three_tokens!(k# ident);
51+
three_tokens!(k #ident);
52+
three_tokens!(k # ident);
53+
54+
// These should work anyway
55+
two_tokens!(k#);
56+
two_tokens!(k #);
57+
three_tokens!(k#123);
58+
three_tokens!(k#"normal string");
59+
three_tokens!(k#'c');
60+
three_tokens!(k#'lifetime);
61+
three_tokens!(k#[doc("doc attribute")]);
62+
63+
#[cfg(False)]
64+
mod inside_cfg_false {
65+
const k#SOMETHING: i32 = 42;
66+
//~^ ERROR raw keyword syntax is reserved for future use
67+
}
68+
69+
fn returns_k() -> i32 {
70+
let k = 42;
71+
k#k
72+
//~^ ERROR raw keyword syntax is reserved for future use
73+
}
74+
75+
76+
// Test that the token counting macros actually count the right amount of tokens.
77+
two_tokens!(k#knampf);
78+
//~^ ERROR unexpected end of macro invocation
79+
//~^^ ERROR raw keyword syntax is reserved for future use
80+
two_tokens!(k # knampf);
81+
//~^ ERROR no rules expected the token `knampf`
82+
}
+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
error: raw keyword syntax is reserved for future use
2+
--> $DIR/raw_keywords.rs:10:16
3+
|
4+
LL | one_token!(k#ident);
5+
| ^^^^^^^ help: insert a whitespace: `k #ident`
6+
7+
error: raw keyword syntax is reserved for future use
8+
--> $DIR/raw_keywords.rs:12:16
9+
|
10+
LL | one_token!(k#fn);
11+
| ^^^^ help: insert a whitespace: `k #fn`
12+
13+
error: raw keyword syntax is reserved for future use
14+
--> $DIR/raw_keywords.rs:14:16
15+
|
16+
LL | one_token!(k#Self);
17+
| ^^^^^^ help: insert a whitespace: `k #Self`
18+
19+
error: raw keyword syntax is reserved for future use
20+
--> $DIR/raw_keywords.rs:16:16
21+
|
22+
LL | one_token!(k#dyn);
23+
| ^^^^^ help: insert a whitespace: `k #dyn`
24+
25+
error: raw keyword syntax is reserved for future use
26+
--> $DIR/raw_keywords.rs:18:16
27+
|
28+
LL | one_token!(k#await);
29+
| ^^^^^^^ help: insert a whitespace: `k #await`
30+
31+
error: raw keyword syntax is reserved for future use
32+
--> $DIR/raw_keywords.rs:22:18
33+
|
34+
LL | two_tokens!(#k#other_variable);
35+
| ^^^^^^^^^^^^^^^^ help: insert a whitespace: `k #other_variable`
36+
37+
error: raw keyword syntax is reserved for future use
38+
--> $DIR/raw_keywords.rs:26:17
39+
|
40+
LL | two_tokens!(k#r"raw string");
41+
| ^^^ help: insert a whitespace: `k #r`
42+
43+
error: raw keyword syntax is reserved for future use
44+
--> $DIR/raw_keywords.rs:28:17
45+
|
46+
LL | two_tokens!(k#r "raw string");
47+
| ^^^ help: insert a whitespace: `k #r`
48+
49+
error: raw keyword syntax is reserved for future use
50+
--> $DIR/raw_keywords.rs:30:17
51+
|
52+
LL | two_tokens!(k#br"raw byte string");
53+
| ^^^^ help: insert a whitespace: `k #br`
54+
55+
error: raw keyword syntax is reserved for future use
56+
--> $DIR/raw_keywords.rs:32:19
57+
|
58+
LL | three_tokens!(k#r"raw string"#);
59+
| ^^^ help: insert a whitespace: `k #r`
60+
61+
error: raw keyword syntax is reserved for future use
62+
--> $DIR/raw_keywords.rs:34:18
63+
|
64+
LL | four_tokens!(k#r#"raw string"#);
65+
| ^^^ help: insert a whitespace: `k #r`
66+
67+
error: raw keyword syntax is reserved for future use
68+
--> $DIR/raw_keywords.rs:36:17
69+
|
70+
LL | two_tokens!(k#b'-');
71+
| ^^^ help: insert a whitespace: `k #b`
72+
73+
error: raw keyword syntax is reserved for future use
74+
--> $DIR/raw_keywords.rs:38:17
75+
|
76+
LL | two_tokens!(k#b '-');
77+
| ^^^ help: insert a whitespace: `k #b`
78+
79+
error: raw keyword syntax is reserved for future use
80+
--> $DIR/raw_keywords.rs:65:15
81+
|
82+
LL | const k#SOMETHING: i32 = 42;
83+
| ^^^^^^^^^^^ help: insert a whitespace: `k #SOMETHING`
84+
85+
error: raw keyword syntax is reserved for future use
86+
--> $DIR/raw_keywords.rs:71:9
87+
|
88+
LL | k#k
89+
| ^^^ help: insert a whitespace: `k #k`
90+
91+
error: raw keyword syntax is reserved for future use
92+
--> $DIR/raw_keywords.rs:77:17
93+
|
94+
LL | two_tokens!(k#knampf);
95+
| ^^^^^^^^ help: insert a whitespace: `k #knampf`
96+
97+
error: unexpected end of macro invocation
98+
--> $DIR/raw_keywords.rs:77:25
99+
|
100+
LL | macro_rules! two_tokens { ( $a:tt $b:tt ) => { }; }
101+
| ----------------------- when calling this macro
102+
...
103+
LL | two_tokens!(k#knampf);
104+
| ^ missing tokens in macro arguments
105+
106+
error: no rules expected the token `knampf`
107+
--> $DIR/raw_keywords.rs:80:21
108+
|
109+
LL | macro_rules! two_tokens { ( $a:tt $b:tt ) => { }; }
110+
| ----------------------- when calling this macro
111+
...
112+
LL | two_tokens!(k # knampf);
113+
| ^^^^^^ no rules expected this token in macro call
114+
115+
error: aborting due to 18 previous errors
116+

0 commit comments

Comments
 (0)