mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 04:19:13 +00:00
Maybe everything else *should* have to deal with it
This commit is contained in:
parent
2fe38d3b63
commit
37443eb9a1
10 changed files with 34 additions and 39 deletions
|
@ -30,8 +30,13 @@ pub(super) fn token(sema: &Semantics<RootDatabase>, token: SyntaxToken) -> Optio
|
||||||
INT_NUMBER if token.ancestors().nth(1).map(|it| it.kind()) == Some(FIELD_EXPR) => {
|
INT_NUMBER if token.ancestors().nth(1).map(|it| it.kind()) == Some(FIELD_EXPR) => {
|
||||||
SymbolKind::Field.into()
|
SymbolKind::Field.into()
|
||||||
}
|
}
|
||||||
INT_NUMBER | FLOAT_NUMBER_PART => HlTag::NumericLiteral.into(),
|
INT_NUMBER | FLOAT_NUMBER_PART | FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1
|
||||||
DOT if token.parent().map(|n| n.kind()) == Some(FLOAT_LITERAL) => {
|
| FLOAT_NUMBER_START_2 => HlTag::NumericLiteral.into(),
|
||||||
|
DOT if matches!(
|
||||||
|
token.prev_token().map(|n| n.kind()),
|
||||||
|
Some(FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2)
|
||||||
|
) =>
|
||||||
|
{
|
||||||
HlTag::NumericLiteral.into()
|
HlTag::NumericLiteral.into()
|
||||||
}
|
}
|
||||||
BYTE => HlTag::ByteLiteral.into(),
|
BYTE => HlTag::ByteLiteral.into(),
|
||||||
|
|
|
@ -260,23 +260,19 @@ fn convert_tokens<C: TokenConvertor>(conv: &mut C) -> tt::Subtree {
|
||||||
IDENT => make_leaf!(Ident),
|
IDENT => make_leaf!(Ident),
|
||||||
UNDERSCORE => make_leaf!(Ident),
|
UNDERSCORE => make_leaf!(Ident),
|
||||||
k if k.is_keyword() => make_leaf!(Ident),
|
k if k.is_keyword() => make_leaf!(Ident),
|
||||||
FLOAT_NUMBER_PART => {
|
FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2 => {
|
||||||
// Reassemble a split-up float token.
|
// Reassemble a split-up float token.
|
||||||
let mut range = range;
|
let mut range = range;
|
||||||
let mut text = token.to_text(conv).to_string();
|
let mut text = token.to_text(conv).to_string();
|
||||||
if let Some(dot) = conv.peek() {
|
if kind == FLOAT_NUMBER_START_1 || kind == FLOAT_NUMBER_START_2 {
|
||||||
if dot.kind(conv) == DOT {
|
let (dot, dot_range) = conv.bump().unwrap();
|
||||||
let (_, dot_range) = conv.bump().unwrap();
|
text += &*dot.to_text(conv);
|
||||||
text += &*dot.to_text(conv);
|
range = TextRange::new(range.start(), dot_range.end());
|
||||||
range = TextRange::new(range.start(), dot_range.end());
|
|
||||||
|
|
||||||
if let Some(tail) = conv.peek() {
|
if kind == FLOAT_NUMBER_START_2 {
|
||||||
if tail.kind(conv) == FLOAT_NUMBER_PART {
|
let (tail, tail_range) = conv.bump().unwrap();
|
||||||
let (_, tail_range) = conv.bump().unwrap();
|
text += &*tail.to_text(conv);
|
||||||
text += &*tail.to_text(conv);
|
range = TextRange::new(range.start(), tail_range.end());
|
||||||
range = TextRange::new(range.start(), tail_range.end());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ mod atom;
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
pub(crate) use self::atom::{block_expr, match_arm_list};
|
pub(crate) use self::atom::{block_expr, match_arm_list};
|
||||||
pub(super) use self::atom::{float_literal, literal, FLOAT_LITERAL_FIRST, LITERAL_FIRST};
|
pub(super) use self::atom::{literal, FLOAT_LITERAL_FIRST, LITERAL_FIRST};
|
||||||
|
|
||||||
#[derive(PartialEq, Eq)]
|
#[derive(PartialEq, Eq)]
|
||||||
pub(super) enum Semicolon {
|
pub(super) enum Semicolon {
|
||||||
|
|
|
@ -53,16 +53,14 @@ pub(crate) fn literal(p: &mut Parser) -> Option<CompletedMarker> {
|
||||||
// }
|
// }
|
||||||
pub(crate) fn float_literal(p: &mut Parser) {
|
pub(crate) fn float_literal(p: &mut Parser) {
|
||||||
// Floats can be up to 3 tokens. The first token indicates how many there are.
|
// Floats can be up to 3 tokens. The first token indicates how many there are.
|
||||||
// We remap the first token to `FLOAT_NUMBER_PART` so that no subsequent code has to deal with
|
|
||||||
// this awful, awful hack.
|
|
||||||
let f = p.start();
|
let f = p.start();
|
||||||
if p.at(FLOAT_NUMBER_START_0) {
|
if p.at(FLOAT_NUMBER_START_0) {
|
||||||
p.bump_remap(FLOAT_NUMBER_PART);
|
p.bump(FLOAT_NUMBER_START_0);
|
||||||
} else if p.at(FLOAT_NUMBER_START_1) {
|
} else if p.at(FLOAT_NUMBER_START_1) {
|
||||||
p.bump_remap(FLOAT_NUMBER_PART);
|
p.bump(FLOAT_NUMBER_START_1);
|
||||||
p.bump(DOT);
|
p.bump(DOT);
|
||||||
} else if p.at(FLOAT_NUMBER_START_2) {
|
} else if p.at(FLOAT_NUMBER_START_2) {
|
||||||
p.bump_remap(FLOAT_NUMBER_PART);
|
p.bump(FLOAT_NUMBER_START_2);
|
||||||
p.bump(DOT);
|
p.bump(DOT);
|
||||||
p.bump(FLOAT_NUMBER_PART);
|
p.bump(FLOAT_NUMBER_PART);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -9,7 +9,7 @@ pub(crate) use self::{
|
||||||
traits::assoc_item_list,
|
traits::assoc_item_list,
|
||||||
use_item::use_tree_list,
|
use_item::use_tree_list,
|
||||||
};
|
};
|
||||||
use super::{expressions::float_literal, *};
|
use super::*;
|
||||||
|
|
||||||
// test mod_contents
|
// test mod_contents
|
||||||
// fn foo() {}
|
// fn foo() {}
|
||||||
|
@ -457,9 +457,6 @@ pub(crate) fn token_tree(p: &mut Parser) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
T![')'] | T![']'] => p.err_and_bump("unmatched brace"),
|
T![')'] | T![']'] => p.err_and_bump("unmatched brace"),
|
||||||
FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2 => {
|
|
||||||
float_literal(p);
|
|
||||||
}
|
|
||||||
_ => p.bump_any(),
|
_ => p.bump_any(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,9 @@ SOURCE_FILE
|
||||||
INT_NUMBER "1"
|
INT_NUMBER "1"
|
||||||
COMMA ","
|
COMMA ","
|
||||||
WHITESPACE " "
|
WHITESPACE " "
|
||||||
FLOAT_LITERAL
|
FLOAT_NUMBER_START_2 "2"
|
||||||
FLOAT_NUMBER_PART "2"
|
DOT "."
|
||||||
DOT "."
|
FLOAT_NUMBER_PART "0"
|
||||||
FLOAT_NUMBER_PART "0"
|
|
||||||
WHITESPACE "\n "
|
WHITESPACE "\n "
|
||||||
R_CURLY "}"
|
R_CURLY "}"
|
||||||
WHITESPACE " "
|
WHITESPACE " "
|
||||||
|
|
|
@ -58,7 +58,7 @@ SOURCE_FILE
|
||||||
WHITESPACE " "
|
WHITESPACE " "
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "2"
|
FLOAT_NUMBER_START_2 "2"
|
||||||
DOT "."
|
DOT "."
|
||||||
FLOAT_NUMBER_PART "0"
|
FLOAT_NUMBER_PART "0"
|
||||||
SEMICOLON ";"
|
SEMICOLON ";"
|
||||||
|
|
|
@ -63,7 +63,7 @@ SOURCE_FILE
|
||||||
METHOD_CALL_EXPR
|
METHOD_CALL_EXPR
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "0e0"
|
FLOAT_NUMBER_START_0 "0e0"
|
||||||
DOT "."
|
DOT "."
|
||||||
NAME_REF
|
NAME_REF
|
||||||
IDENT "sin"
|
IDENT "sin"
|
||||||
|
@ -76,7 +76,7 @@ SOURCE_FILE
|
||||||
METHOD_CALL_EXPR
|
METHOD_CALL_EXPR
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "0e0f32"
|
FLOAT_NUMBER_START_0 "0e0f32"
|
||||||
DOT "."
|
DOT "."
|
||||||
NAME_REF
|
NAME_REF
|
||||||
IDENT "sin"
|
IDENT "sin"
|
||||||
|
|
|
@ -15,7 +15,7 @@ SOURCE_FILE
|
||||||
EXPR_STMT
|
EXPR_STMT
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "0"
|
FLOAT_NUMBER_START_2 "0"
|
||||||
DOT "."
|
DOT "."
|
||||||
FLOAT_NUMBER_PART "0"
|
FLOAT_NUMBER_PART "0"
|
||||||
SEMICOLON ";"
|
SEMICOLON ";"
|
||||||
|
@ -23,26 +23,26 @@ SOURCE_FILE
|
||||||
EXPR_STMT
|
EXPR_STMT
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "1"
|
FLOAT_NUMBER_START_1 "1"
|
||||||
DOT "."
|
DOT "."
|
||||||
SEMICOLON ";"
|
SEMICOLON ";"
|
||||||
WHITESPACE "\n "
|
WHITESPACE "\n "
|
||||||
EXPR_STMT
|
EXPR_STMT
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "0e0"
|
FLOAT_NUMBER_START_0 "0e0"
|
||||||
SEMICOLON ";"
|
SEMICOLON ";"
|
||||||
WHITESPACE "\n "
|
WHITESPACE "\n "
|
||||||
EXPR_STMT
|
EXPR_STMT
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "0e0f32"
|
FLOAT_NUMBER_START_0 "0e0f32"
|
||||||
SEMICOLON ";"
|
SEMICOLON ";"
|
||||||
WHITESPACE "\n "
|
WHITESPACE "\n "
|
||||||
EXPR_STMT
|
EXPR_STMT
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "1"
|
FLOAT_NUMBER_START_2 "1"
|
||||||
DOT "."
|
DOT "."
|
||||||
FLOAT_NUMBER_PART "23f64"
|
FLOAT_NUMBER_PART "23f64"
|
||||||
SEMICOLON ";"
|
SEMICOLON ";"
|
||||||
|
|
|
@ -20,7 +20,7 @@ SOURCE_FILE
|
||||||
METHOD_CALL_EXPR
|
METHOD_CALL_EXPR
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "1"
|
FLOAT_NUMBER_START_2 "1"
|
||||||
DOT "."
|
DOT "."
|
||||||
FLOAT_NUMBER_PART "0f32"
|
FLOAT_NUMBER_PART "0f32"
|
||||||
DOT "."
|
DOT "."
|
||||||
|
@ -44,7 +44,7 @@ SOURCE_FILE
|
||||||
METHOD_CALL_EXPR
|
METHOD_CALL_EXPR
|
||||||
LITERAL
|
LITERAL
|
||||||
FLOAT_LITERAL
|
FLOAT_LITERAL
|
||||||
FLOAT_NUMBER_PART "1"
|
FLOAT_NUMBER_START_2 "1"
|
||||||
DOT "."
|
DOT "."
|
||||||
FLOAT_NUMBER_PART "0f32"
|
FLOAT_NUMBER_PART "0f32"
|
||||||
DOT "."
|
DOT "."
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue