mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 06:11:35 +00:00
Add special case for f32 and f43 suffices on Literal.kind
This commit is contained in:
parent
578bc05ca4
commit
4fd7ad908b
3 changed files with 26 additions and 17 deletions
|
@ -77,6 +77,11 @@ mod tests {
|
||||||
"fn f() { let a<|> = 42f64; }",
|
"fn f() { let a<|> = 42f64; }",
|
||||||
"fn f() { let a<|>: f64 = 42f64; }",
|
"fn f() { let a<|>: f64 = 42f64; }",
|
||||||
);
|
);
|
||||||
|
check_assist(
|
||||||
|
add_explicit_type,
|
||||||
|
"fn f() { let a<|> = 42f32; }",
|
||||||
|
"fn f() { let a<|>: f32 = 42f32; }",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
@ -239,16 +239,34 @@ impl ast::Literal {
|
||||||
pub fn kind(&self) -> LiteralKind {
|
pub fn kind(&self) -> LiteralKind {
|
||||||
match self.token().kind() {
|
match self.token().kind() {
|
||||||
INT_NUMBER => {
|
INT_NUMBER => {
|
||||||
let allowed_suffix_list = [
|
let int_suffix_list = [
|
||||||
"isize", "i128", "i64", "i32", "i16", "i8", "usize", "u128", "u64", "u32",
|
"isize", "i128", "i64", "i32", "i16", "i8", "usize", "u128", "u64", "u32",
|
||||||
"u16", "u8",
|
"u16", "u8",
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// The lexer treats e.g. `1f64` as an integer literal. See
|
||||||
|
// https://github.com/rust-analyzer/rust-analyzer/issues/1592
|
||||||
|
// and the comments on the linked PR.
|
||||||
|
let float_suffix_list = [
|
||||||
|
"f32", "f64"
|
||||||
|
];
|
||||||
|
|
||||||
let text = self.token().text().to_string();
|
let text = self.token().text().to_string();
|
||||||
let suffix = allowed_suffix_list
|
|
||||||
|
let float_suffix = float_suffix_list
|
||||||
.iter()
|
.iter()
|
||||||
.find(|&s| text.ends_with(s))
|
.find(|&s| text.ends_with(s))
|
||||||
.map(|&suf| SmolStr::new(suf));
|
.map(|&suf| SmolStr::new(suf));
|
||||||
LiteralKind::IntNumber { suffix }
|
|
||||||
|
if float_suffix.is_some() {
|
||||||
|
LiteralKind::FloatNumber { suffix: float_suffix }
|
||||||
|
} else {
|
||||||
|
let suffix = int_suffix_list
|
||||||
|
.iter()
|
||||||
|
.find(|&s| text.ends_with(s))
|
||||||
|
.map(|&suf| SmolStr::new(suf));
|
||||||
|
LiteralKind::IntNumber { suffix }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
FLOAT_NUMBER => {
|
FLOAT_NUMBER => {
|
||||||
let allowed_suffix_list = ["f64", "f32"];
|
let allowed_suffix_list = ["f64", "f32"];
|
||||||
|
|
|
@ -145,17 +145,3 @@ pub fn classify_literal(text: &str) -> Option<Token> {
|
||||||
};
|
};
|
||||||
Some(Token { kind, len: TextUnit::from_usize(t.len) })
|
Some(Token { kind, len: TextUnit::from_usize(t.len) })
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
|
|
||||||
// https://github.com/rust-analyzer/rust-analyzer/issues/1592
|
|
||||||
#[test]
|
|
||||||
fn lex_float_literal() {
|
|
||||||
assert_eq!(
|
|
||||||
tokenize("42f64")[0],
|
|
||||||
Token { kind: FLOAT_NUMBER, len: TextUnit::from_usize(5)}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue