diff options
Diffstat (limited to 'crates/ra_syntax')
-rw-r--r-- | crates/ra_syntax/Cargo.toml | 2 | ||||
-rw-r--r-- | crates/ra_syntax/src/ast/expr_extensions.rs | 22 |
2 files changed, 20 insertions, 4 deletions
diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml index 40d63ef7a..bc1c88070 100644 --- a/crates/ra_syntax/Cargo.toml +++ b/crates/ra_syntax/Cargo.toml | |||
@@ -10,7 +10,7 @@ repository = "https://github.com/rust-analyzer/rust-analyzer" | |||
10 | [dependencies] | 10 | [dependencies] |
11 | unicode-xid = "0.1.0" | 11 | unicode-xid = "0.1.0" |
12 | itertools = "0.8.0" | 12 | itertools = "0.8.0" |
13 | rowan = "0.6.0" | 13 | rowan = "0.6.1" |
14 | ra_rustc_lexer = { version = "0.1.0-pre.2" } | 14 | ra_rustc_lexer = { version = "0.1.0-pre.2" } |
15 | 15 | ||
16 | # ideally, `serde` should be enabled by `ra_lsp_server`, but we enable it here | 16 | # ideally, `serde` should be enabled by `ra_lsp_server`, but we enable it here |
diff --git a/crates/ra_syntax/src/ast/expr_extensions.rs b/crates/ra_syntax/src/ast/expr_extensions.rs index f9190d877..8284f1b25 100644 --- a/crates/ra_syntax/src/ast/expr_extensions.rs +++ b/crates/ra_syntax/src/ast/expr_extensions.rs | |||
@@ -239,16 +239,32 @@ impl ast::Literal { | |||
239 | pub fn kind(&self) -> LiteralKind { | 239 | pub fn kind(&self) -> LiteralKind { |
240 | match self.token().kind() { | 240 | match self.token().kind() { |
241 | INT_NUMBER => { | 241 | INT_NUMBER => { |
242 | let allowed_suffix_list = [ | 242 | let int_suffix_list = [ |
243 | "isize", "i128", "i64", "i32", "i16", "i8", "usize", "u128", "u64", "u32", | 243 | "isize", "i128", "i64", "i32", "i16", "i8", "usize", "u128", "u64", "u32", |
244 | "u16", "u8", | 244 | "u16", "u8", |
245 | ]; | 245 | ]; |
246 | |||
247 | // The lexer treats e.g. `1f64` as an integer literal. See | ||
248 | // https://github.com/rust-analyzer/rust-analyzer/issues/1592 | ||
249 | // and the comments on the linked PR. | ||
250 | let float_suffix_list = ["f32", "f64"]; | ||
251 | |||
246 | let text = self.token().text().to_string(); | 252 | let text = self.token().text().to_string(); |
247 | let suffix = allowed_suffix_list | 253 | |
254 | let float_suffix = float_suffix_list | ||
248 | .iter() | 255 | .iter() |
249 | .find(|&s| text.ends_with(s)) | 256 | .find(|&s| text.ends_with(s)) |
250 | .map(|&suf| SmolStr::new(suf)); | 257 | .map(|&suf| SmolStr::new(suf)); |
251 | LiteralKind::IntNumber { suffix } | 258 | |
259 | if float_suffix.is_some() { | ||
260 | LiteralKind::FloatNumber { suffix: float_suffix } | ||
261 | } else { | ||
262 | let suffix = int_suffix_list | ||
263 | .iter() | ||
264 | .find(|&s| text.ends_with(s)) | ||
265 | .map(|&suf| SmolStr::new(suf)); | ||
266 | LiteralKind::IntNumber { suffix } | ||
267 | } | ||
252 | } | 268 | } |
253 | FLOAT_NUMBER => { | 269 | FLOAT_NUMBER => { |
254 | let allowed_suffix_list = ["f64", "f32"]; | 270 | let allowed_suffix_list = ["f64", "f32"]; |