aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_syntax
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_syntax')
-rw-r--r--crates/ra_syntax/Cargo.toml2
-rw-r--r--crates/ra_syntax/src/ast/expr_extensions.rs22
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]
11unicode-xid = "0.1.0" 11unicode-xid = "0.1.0"
12itertools = "0.8.0" 12itertools = "0.8.0"
13rowan = "0.6.0" 13rowan = "0.6.1"
14ra_rustc_lexer = { version = "0.1.0-pre.2" } 14ra_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"];