diff options
author | Aleksey Kladov <[email protected]> | 2018-01-13 08:55:03 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2018-01-13 08:55:03 +0000 |
commit | 29b2e0adcc35834dda2884222624bfcc268a3eff (patch) | |
tree | 0838a22c27bba0361dcde3660075175f243a4d7a /src | |
parent | f31d85860771b0c4c8d232d79e4a3489a051ba9d (diff) |
G: allow self & super in paths
Diffstat (limited to 'src')
-rw-r--r-- | src/parser/event_parser/grammar/paths.rs | 13 | ||||
-rw-r--r-- | src/syntax_kinds.rs | 135 |
2 files changed, 80 insertions, 68 deletions
diff --git a/src/parser/event_parser/grammar/paths.rs b/src/parser/event_parser/grammar/paths.rs index 108545bc2..d6887a9ba 100644 --- a/src/parser/event_parser/grammar/paths.rs +++ b/src/parser/event_parser/grammar/paths.rs | |||
@@ -1,7 +1,7 @@ | |||
1 | use super::*; | 1 | use super::*; |
2 | 2 | ||
3 | pub(crate) fn use_path(p: &mut Parser) { | 3 | pub(crate) fn use_path(p: &mut Parser) { |
4 | if !AnyOf(&[IDENT, COLONCOLON]).is_ahead(p) { | 4 | if !AnyOf(&[IDENT, SELF_KW, SUPER_KW, COLONCOLON]).is_ahead(p) { |
5 | return; | 5 | return; |
6 | } | 6 | } |
7 | let mut prev = p.mark(); | 7 | let mut prev = p.mark(); |
@@ -23,6 +23,15 @@ fn path_segment(p: &mut Parser, first: bool) { | |||
23 | if first { | 23 | if first { |
24 | p.eat(COLONCOLON); | 24 | p.eat(COLONCOLON); |
25 | } | 25 | } |
26 | p.expect(IDENT); | 26 | match p.current() { |
27 | IDENT | SELF_KW | SUPER_KW => { | ||
28 | p.bump(); | ||
29 | }, | ||
30 | _ => { | ||
31 | p.error() | ||
32 | .message("expected identifier") | ||
33 | .emit(); | ||
34 | } | ||
35 | }; | ||
27 | }) | 36 | }) |
28 | } \ No newline at end of file | 37 | } \ No newline at end of file |
diff --git a/src/syntax_kinds.rs b/src/syntax_kinds.rs index 84f1072b7..48f55fa97 100644 --- a/src/syntax_kinds.rs +++ b/src/syntax_kinds.rs | |||
@@ -16,73 +16,74 @@ pub const MOD_KW: SyntaxKind = SyntaxKind(11); | |||
16 | pub const PUB_KW: SyntaxKind = SyntaxKind(12); | 16 | pub const PUB_KW: SyntaxKind = SyntaxKind(12); |
17 | pub const SELF_KW: SyntaxKind = SyntaxKind(13); | 17 | pub const SELF_KW: SyntaxKind = SyntaxKind(13); |
18 | pub const SUPER_KW: SyntaxKind = SyntaxKind(14); | 18 | pub const SUPER_KW: SyntaxKind = SyntaxKind(14); |
19 | pub const ERROR: SyntaxKind = SyntaxKind(15); | 19 | pub const IN_KW: SyntaxKind = SyntaxKind(15); |
20 | pub const IDENT: SyntaxKind = SyntaxKind(16); | 20 | pub const ERROR: SyntaxKind = SyntaxKind(16); |
21 | pub const UNDERSCORE: SyntaxKind = SyntaxKind(17); | 21 | pub const IDENT: SyntaxKind = SyntaxKind(17); |
22 | pub const WHITESPACE: SyntaxKind = SyntaxKind(18); | 22 | pub const UNDERSCORE: SyntaxKind = SyntaxKind(18); |
23 | pub const INT_NUMBER: SyntaxKind = SyntaxKind(19); | 23 | pub const WHITESPACE: SyntaxKind = SyntaxKind(19); |
24 | pub const FLOAT_NUMBER: SyntaxKind = SyntaxKind(20); | 24 | pub const INT_NUMBER: SyntaxKind = SyntaxKind(20); |
25 | pub const SEMI: SyntaxKind = SyntaxKind(21); | 25 | pub const FLOAT_NUMBER: SyntaxKind = SyntaxKind(21); |
26 | pub const COMMA: SyntaxKind = SyntaxKind(22); | 26 | pub const SEMI: SyntaxKind = SyntaxKind(22); |
27 | pub const DOT: SyntaxKind = SyntaxKind(23); | 27 | pub const COMMA: SyntaxKind = SyntaxKind(23); |
28 | pub const DOTDOT: SyntaxKind = SyntaxKind(24); | 28 | pub const DOT: SyntaxKind = SyntaxKind(24); |
29 | pub const DOTDOTDOT: SyntaxKind = SyntaxKind(25); | 29 | pub const DOTDOT: SyntaxKind = SyntaxKind(25); |
30 | pub const DOTDOTEQ: SyntaxKind = SyntaxKind(26); | 30 | pub const DOTDOTDOT: SyntaxKind = SyntaxKind(26); |
31 | pub const L_PAREN: SyntaxKind = SyntaxKind(27); | 31 | pub const DOTDOTEQ: SyntaxKind = SyntaxKind(27); |
32 | pub const R_PAREN: SyntaxKind = SyntaxKind(28); | 32 | pub const L_PAREN: SyntaxKind = SyntaxKind(28); |
33 | pub const L_CURLY: SyntaxKind = SyntaxKind(29); | 33 | pub const R_PAREN: SyntaxKind = SyntaxKind(29); |
34 | pub const R_CURLY: SyntaxKind = SyntaxKind(30); | 34 | pub const L_CURLY: SyntaxKind = SyntaxKind(30); |
35 | pub const L_BRACK: SyntaxKind = SyntaxKind(31); | 35 | pub const R_CURLY: SyntaxKind = SyntaxKind(31); |
36 | pub const R_BRACK: SyntaxKind = SyntaxKind(32); | 36 | pub const L_BRACK: SyntaxKind = SyntaxKind(32); |
37 | pub const L_ANGLE: SyntaxKind = SyntaxKind(33); | 37 | pub const R_BRACK: SyntaxKind = SyntaxKind(33); |
38 | pub const R_ANGLE: SyntaxKind = SyntaxKind(34); | 38 | pub const L_ANGLE: SyntaxKind = SyntaxKind(34); |
39 | pub const AT: SyntaxKind = SyntaxKind(35); | 39 | pub const R_ANGLE: SyntaxKind = SyntaxKind(35); |
40 | pub const POUND: SyntaxKind = SyntaxKind(36); | 40 | pub const AT: SyntaxKind = SyntaxKind(36); |
41 | pub const TILDE: SyntaxKind = SyntaxKind(37); | 41 | pub const POUND: SyntaxKind = SyntaxKind(37); |
42 | pub const QUESTION: SyntaxKind = SyntaxKind(38); | 42 | pub const TILDE: SyntaxKind = SyntaxKind(38); |
43 | pub const COLON: SyntaxKind = SyntaxKind(39); | 43 | pub const QUESTION: SyntaxKind = SyntaxKind(39); |
44 | pub const COLONCOLON: SyntaxKind = SyntaxKind(40); | 44 | pub const COLON: SyntaxKind = SyntaxKind(40); |
45 | pub const DOLLAR: SyntaxKind = SyntaxKind(41); | 45 | pub const COLONCOLON: SyntaxKind = SyntaxKind(41); |
46 | pub const EQ: SyntaxKind = SyntaxKind(42); | 46 | pub const DOLLAR: SyntaxKind = SyntaxKind(42); |
47 | pub const EQEQ: SyntaxKind = SyntaxKind(43); | 47 | pub const EQ: SyntaxKind = SyntaxKind(43); |
48 | pub const FAT_ARROW: SyntaxKind = SyntaxKind(44); | 48 | pub const EQEQ: SyntaxKind = SyntaxKind(44); |
49 | pub const NEQ: SyntaxKind = SyntaxKind(45); | 49 | pub const FAT_ARROW: SyntaxKind = SyntaxKind(45); |
50 | pub const EXCL: SyntaxKind = SyntaxKind(46); | 50 | pub const NEQ: SyntaxKind = SyntaxKind(46); |
51 | pub const LIFETIME: SyntaxKind = SyntaxKind(47); | 51 | pub const EXCL: SyntaxKind = SyntaxKind(47); |
52 | pub const CHAR: SyntaxKind = SyntaxKind(48); | 52 | pub const LIFETIME: SyntaxKind = SyntaxKind(48); |
53 | pub const BYTE: SyntaxKind = SyntaxKind(49); | 53 | pub const CHAR: SyntaxKind = SyntaxKind(49); |
54 | pub const STRING: SyntaxKind = SyntaxKind(50); | 54 | pub const BYTE: SyntaxKind = SyntaxKind(50); |
55 | pub const RAW_STRING: SyntaxKind = SyntaxKind(51); | 55 | pub const STRING: SyntaxKind = SyntaxKind(51); |
56 | pub const BYTE_STRING: SyntaxKind = SyntaxKind(52); | 56 | pub const RAW_STRING: SyntaxKind = SyntaxKind(52); |
57 | pub const RAW_BYTE_STRING: SyntaxKind = SyntaxKind(53); | 57 | pub const BYTE_STRING: SyntaxKind = SyntaxKind(53); |
58 | pub const PLUS: SyntaxKind = SyntaxKind(54); | 58 | pub const RAW_BYTE_STRING: SyntaxKind = SyntaxKind(54); |
59 | pub const MINUS: SyntaxKind = SyntaxKind(55); | 59 | pub const PLUS: SyntaxKind = SyntaxKind(55); |
60 | pub const STAR: SyntaxKind = SyntaxKind(56); | 60 | pub const MINUS: SyntaxKind = SyntaxKind(56); |
61 | pub const SLASH: SyntaxKind = SyntaxKind(57); | 61 | pub const STAR: SyntaxKind = SyntaxKind(57); |
62 | pub const CARET: SyntaxKind = SyntaxKind(58); | 62 | pub const SLASH: SyntaxKind = SyntaxKind(58); |
63 | pub const PERCENT: SyntaxKind = SyntaxKind(59); | 63 | pub const CARET: SyntaxKind = SyntaxKind(59); |
64 | pub const AMPERSAND: SyntaxKind = SyntaxKind(60); | 64 | pub const PERCENT: SyntaxKind = SyntaxKind(60); |
65 | pub const PIPE: SyntaxKind = SyntaxKind(61); | 65 | pub const AMPERSAND: SyntaxKind = SyntaxKind(61); |
66 | pub const THIN_ARROW: SyntaxKind = SyntaxKind(62); | 66 | pub const PIPE: SyntaxKind = SyntaxKind(62); |
67 | pub const COMMENT: SyntaxKind = SyntaxKind(63); | 67 | pub const THIN_ARROW: SyntaxKind = SyntaxKind(63); |
68 | pub const DOC_COMMENT: SyntaxKind = SyntaxKind(64); | 68 | pub const COMMENT: SyntaxKind = SyntaxKind(64); |
69 | pub const SHEBANG: SyntaxKind = SyntaxKind(65); | 69 | pub const DOC_COMMENT: SyntaxKind = SyntaxKind(65); |
70 | pub const FILE: SyntaxKind = SyntaxKind(66); | 70 | pub const SHEBANG: SyntaxKind = SyntaxKind(66); |
71 | pub const STRUCT_ITEM: SyntaxKind = SyntaxKind(67); | 71 | pub const FILE: SyntaxKind = SyntaxKind(67); |
72 | pub const STRUCT_FIELD: SyntaxKind = SyntaxKind(68); | 72 | pub const STRUCT_ITEM: SyntaxKind = SyntaxKind(68); |
73 | pub const FN_ITEM: SyntaxKind = SyntaxKind(69); | 73 | pub const STRUCT_FIELD: SyntaxKind = SyntaxKind(69); |
74 | pub const EXTERN_CRATE_ITEM: SyntaxKind = SyntaxKind(70); | 74 | pub const FN_ITEM: SyntaxKind = SyntaxKind(70); |
75 | pub const ATTR: SyntaxKind = SyntaxKind(71); | 75 | pub const EXTERN_CRATE_ITEM: SyntaxKind = SyntaxKind(71); |
76 | pub const META_ITEM: SyntaxKind = SyntaxKind(72); | 76 | pub const ATTR: SyntaxKind = SyntaxKind(72); |
77 | pub const MOD_ITEM: SyntaxKind = SyntaxKind(73); | 77 | pub const META_ITEM: SyntaxKind = SyntaxKind(73); |
78 | pub const USE_ITEM: SyntaxKind = SyntaxKind(74); | 78 | pub const MOD_ITEM: SyntaxKind = SyntaxKind(74); |
79 | pub const PATH: SyntaxKind = SyntaxKind(75); | 79 | pub const USE_ITEM: SyntaxKind = SyntaxKind(75); |
80 | pub const PATH_SEGMENT: SyntaxKind = SyntaxKind(76); | 80 | pub const PATH: SyntaxKind = SyntaxKind(76); |
81 | pub const LITERAL: SyntaxKind = SyntaxKind(77); | 81 | pub const PATH_SEGMENT: SyntaxKind = SyntaxKind(77); |
82 | pub const ALIAS: SyntaxKind = SyntaxKind(78); | 82 | pub const LITERAL: SyntaxKind = SyntaxKind(78); |
83 | pub const VISIBILITY: SyntaxKind = SyntaxKind(79); | 83 | pub const ALIAS: SyntaxKind = SyntaxKind(79); |
84 | pub const VISIBILITY: SyntaxKind = SyntaxKind(80); | ||
84 | 85 | ||
85 | static INFOS: [SyntaxInfo; 80] = [ | 86 | static INFOS: [SyntaxInfo; 81] = [ |
86 | SyntaxInfo { name: "USE_KW" }, | 87 | SyntaxInfo { name: "USE_KW" }, |
87 | SyntaxInfo { name: "FN_KW" }, | 88 | SyntaxInfo { name: "FN_KW" }, |
88 | SyntaxInfo { name: "STRUCT_KW" }, | 89 | SyntaxInfo { name: "STRUCT_KW" }, |
@@ -98,6 +99,7 @@ static INFOS: [SyntaxInfo; 80] = [ | |||
98 | SyntaxInfo { name: "PUB_KW" }, | 99 | SyntaxInfo { name: "PUB_KW" }, |
99 | SyntaxInfo { name: "SELF_KW" }, | 100 | SyntaxInfo { name: "SELF_KW" }, |
100 | SyntaxInfo { name: "SUPER_KW" }, | 101 | SyntaxInfo { name: "SUPER_KW" }, |
102 | SyntaxInfo { name: "IN_KW" }, | ||
101 | SyntaxInfo { name: "ERROR" }, | 103 | SyntaxInfo { name: "ERROR" }, |
102 | SyntaxInfo { name: "IDENT" }, | 104 | SyntaxInfo { name: "IDENT" }, |
103 | SyntaxInfo { name: "UNDERSCORE" }, | 105 | SyntaxInfo { name: "UNDERSCORE" }, |
@@ -186,6 +188,7 @@ pub(crate) fn ident_to_keyword(ident: &str) -> Option<SyntaxKind> { | |||
186 | "pub" => Some(PUB_KW), | 188 | "pub" => Some(PUB_KW), |
187 | "self" => Some(SELF_KW), | 189 | "self" => Some(SELF_KW), |
188 | "super" => Some(SUPER_KW), | 190 | "super" => Some(SUPER_KW), |
191 | "in" => Some(IN_KW), | ||
189 | _ => None, | 192 | _ => None, |
190 | } | 193 | } |
191 | } | 194 | } |