diff options
Diffstat (limited to 'crates/ra_parser')
-rw-r--r-- | crates/ra_parser/src/grammar/items/consts.rs | 2 | ||||
-rw-r--r-- | crates/ra_parser/src/grammar/items/nominal.rs | 2 | ||||
-rw-r--r-- | crates/ra_parser/src/grammar/items/traits.rs | 2 | ||||
-rw-r--r-- | crates/ra_parser/src/grammar/items/use_item.rs | 4 | ||||
-rw-r--r-- | crates/ra_parser/src/grammar/types.rs | 3 | ||||
-rw-r--r-- | crates/ra_parser/src/parser.rs | 4 |
6 files changed, 10 insertions, 7 deletions
diff --git a/crates/ra_parser/src/grammar/items/consts.rs b/crates/ra_parser/src/grammar/items/consts.rs index e6e6011c6..1f802246f 100644 --- a/crates/ra_parser/src/grammar/items/consts.rs +++ b/crates/ra_parser/src/grammar/items/consts.rs | |||
@@ -11,7 +11,7 @@ pub(super) fn const_def(p: &mut Parser, m: Marker) { | |||
11 | fn const_or_static(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) { | 11 | fn const_or_static(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) { |
12 | assert!(p.at(kw)); | 12 | assert!(p.at(kw)); |
13 | p.bump(); | 13 | p.bump(); |
14 | p.eat(MUT_KW); // TODO: validator to forbid const mut | 14 | p.eat(MUT_KW); // FIXME: validator to forbid const mut |
15 | name(p); | 15 | name(p); |
16 | types::ascription(p); | 16 | types::ascription(p); |
17 | if p.eat(EQ) { | 17 | if p.eat(EQ) { |
diff --git a/crates/ra_parser/src/grammar/items/nominal.rs b/crates/ra_parser/src/grammar/items/nominal.rs index a3579eebd..e93bd76b8 100644 --- a/crates/ra_parser/src/grammar/items/nominal.rs +++ b/crates/ra_parser/src/grammar/items/nominal.rs | |||
@@ -15,7 +15,7 @@ pub(super) fn struct_def(p: &mut Parser, m: Marker, kind: SyntaxKind) { | |||
15 | } | 15 | } |
16 | L_CURLY => named_field_def_list(p), | 16 | L_CURLY => named_field_def_list(p), |
17 | _ => { | 17 | _ => { |
18 | //TODO: special case `(` error message | 18 | //FIXME: special case `(` error message |
19 | p.error("expected `;` or `{`"); | 19 | p.error("expected `;` or `{`"); |
20 | } | 20 | } |
21 | } | 21 | } |
diff --git a/crates/ra_parser/src/grammar/items/traits.rs b/crates/ra_parser/src/grammar/items/traits.rs index d5a8ccd98..f49615f6b 100644 --- a/crates/ra_parser/src/grammar/items/traits.rs +++ b/crates/ra_parser/src/grammar/items/traits.rs | |||
@@ -49,7 +49,7 @@ pub(super) fn impl_block(p: &mut Parser) { | |||
49 | type_params::opt_type_param_list(p); | 49 | type_params::opt_type_param_list(p); |
50 | } | 50 | } |
51 | 51 | ||
52 | // TODO: never type | 52 | // FIXME: never type |
53 | // impl ! {} | 53 | // impl ! {} |
54 | 54 | ||
55 | // test impl_block_neg | 55 | // test impl_block_neg |
diff --git a/crates/ra_parser/src/grammar/items/use_item.rs b/crates/ra_parser/src/grammar/items/use_item.rs index ea2f94604..908493789 100644 --- a/crates/ra_parser/src/grammar/items/use_item.rs +++ b/crates/ra_parser/src/grammar/items/use_item.rs | |||
@@ -21,7 +21,7 @@ fn use_tree(p: &mut Parser) { | |||
21 | // This does not handle cases such as `use some::path::*` | 21 | // This does not handle cases such as `use some::path::*` |
22 | // N.B. in Rust 2015 `use *;` imports all from crate root | 22 | // N.B. in Rust 2015 `use *;` imports all from crate root |
23 | // however in Rust 2018 `use *;` errors: ('cannot glob-import all possible crates') | 23 | // however in Rust 2018 `use *;` errors: ('cannot glob-import all possible crates') |
24 | // TODO: Add this error (if not out of scope) | 24 | // FIXME: Add this error (if not out of scope) |
25 | 25 | ||
26 | // test use_star | 26 | // test use_star |
27 | // use *; | 27 | // use *; |
@@ -33,7 +33,7 @@ fn use_tree(p: &mut Parser) { | |||
33 | // Parse `use ::*;`, which imports all from the crate root in Rust 2015 | 33 | // Parse `use ::*;`, which imports all from the crate root in Rust 2015 |
34 | // This is invalid inside a use_tree_list, (e.g. `use some::path::{::*}`) | 34 | // This is invalid inside a use_tree_list, (e.g. `use some::path::{::*}`) |
35 | // but still parses and errors later: ('crate root in paths can only be used in start position') | 35 | // but still parses and errors later: ('crate root in paths can only be used in start position') |
36 | // TODO: Add this error (if not out of scope) | 36 | // FIXME: Add this error (if not out of scope) |
37 | // In Rust 2018, it is always invalid (see above) | 37 | // In Rust 2018, it is always invalid (see above) |
38 | p.bump(); | 38 | p.bump(); |
39 | p.bump(); | 39 | p.bump(); |
diff --git a/crates/ra_parser/src/grammar/types.rs b/crates/ra_parser/src/grammar/types.rs index adc189a29..fdd4f2c52 100644 --- a/crates/ra_parser/src/grammar/types.rs +++ b/crates/ra_parser/src/grammar/types.rs | |||
@@ -202,12 +202,15 @@ pub(super) fn for_binder(p: &mut Parser) { | |||
202 | 202 | ||
203 | // test for_type | 203 | // test for_type |
204 | // type A = for<'a> fn() -> (); | 204 | // type A = for<'a> fn() -> (); |
205 | // fn foo<T>(_t: &T) where for<'a> &'a T: Iterator {} | ||
206 | // fn bar<T>(_t: &T) where for<'a> &'a mut T: Iterator {} | ||
205 | pub(super) fn for_type(p: &mut Parser) { | 207 | pub(super) fn for_type(p: &mut Parser) { |
206 | assert!(p.at(FOR_KW)); | 208 | assert!(p.at(FOR_KW)); |
207 | let m = p.start(); | 209 | let m = p.start(); |
208 | for_binder(p); | 210 | for_binder(p); |
209 | match p.current() { | 211 | match p.current() { |
210 | FN_KW | UNSAFE_KW | EXTERN_KW => fn_pointer_type(p), | 212 | FN_KW | UNSAFE_KW | EXTERN_KW => fn_pointer_type(p), |
213 | AMP => reference_type(p), | ||
211 | _ if paths::is_path_start(p) => path_type_(p, false), | 214 | _ if paths::is_path_start(p) => path_type_(p, false), |
212 | _ => p.error("expected a path"), | 215 | _ => p.error("expected a path"), |
213 | } | 216 | } |
diff --git a/crates/ra_parser/src/parser.rs b/crates/ra_parser/src/parser.rs index 3c326452b..56f8b7126 100644 --- a/crates/ra_parser/src/parser.rs +++ b/crates/ra_parser/src/parser.rs | |||
@@ -121,7 +121,7 @@ impl<'t> Parser<'t> { | |||
121 | /// final tree. | 121 | /// final tree. |
122 | pub(crate) fn bump_remap(&mut self, kind: SyntaxKind) { | 122 | pub(crate) fn bump_remap(&mut self, kind: SyntaxKind) { |
123 | if self.nth(0) == EOF { | 123 | if self.nth(0) == EOF { |
124 | // TODO: panic!? | 124 | // FIXME: panic!? |
125 | return; | 125 | return; |
126 | } | 126 | } |
127 | self.do_bump(kind, 1); | 127 | self.do_bump(kind, 1); |
@@ -135,7 +135,7 @@ impl<'t> Parser<'t> { | |||
135 | } | 135 | } |
136 | 136 | ||
137 | /// Emit error with the `message` | 137 | /// Emit error with the `message` |
138 | /// TODO: this should be much more fancy and support | 138 | /// FIXME: this should be much more fancy and support |
139 | /// structured errors with spans and notes, like rustc | 139 | /// structured errors with spans and notes, like rustc |
140 | /// does. | 140 | /// does. |
141 | pub(crate) fn error<T: Into<String>>(&mut self, message: T) { | 141 | pub(crate) fn error<T: Into<String>>(&mut self, message: T) { |