Skip to content

Commit 37443eb

Browse files
author
Jonas Schievink
committed
Maybe everything else *should* have to deal with it
1 parent 2fe38d3 commit 37443eb

File tree

10 files changed

+35
-40
lines changed

10 files changed

+35
-40
lines changed

crates/ide/src/syntax_highlighting/highlight.rs

+7-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@ pub(super) fn token(sema: &Semantics<RootDatabase>, token: SyntaxToken) -> Optio
3030
INT_NUMBER if token.ancestors().nth(1).map(|it| it.kind()) == Some(FIELD_EXPR) => {
3131
SymbolKind::Field.into()
3232
}
33-
INT_NUMBER | FLOAT_NUMBER_PART => HlTag::NumericLiteral.into(),
34-
DOT if token.parent().map(|n| n.kind()) == Some(FLOAT_LITERAL) => {
33+
INT_NUMBER | FLOAT_NUMBER_PART | FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1
34+
| FLOAT_NUMBER_START_2 => HlTag::NumericLiteral.into(),
35+
DOT if matches!(
36+
token.prev_token().map(|n| n.kind()),
37+
Some(FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2)
38+
) =>
39+
{
3540
HlTag::NumericLiteral.into()
3641
}
3742
BYTE => HlTag::ByteLiteral.into(),

crates/mbe/src/syntax_bridge.rs

+10-14
Original file line numberDiff line numberDiff line change
@@ -260,23 +260,19 @@ fn convert_tokens<C: TokenConvertor>(conv: &mut C) -> tt::Subtree {
260260
IDENT => make_leaf!(Ident),
261261
UNDERSCORE => make_leaf!(Ident),
262262
k if k.is_keyword() => make_leaf!(Ident),
263-
FLOAT_NUMBER_PART => {
263+
FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2 => {
264264
// Reassemble a split-up float token.
265265
let mut range = range;
266266
let mut text = token.to_text(conv).to_string();
267-
if let Some(dot) = conv.peek() {
268-
if dot.kind(conv) == DOT {
269-
let (_, dot_range) = conv.bump().unwrap();
270-
text += &*dot.to_text(conv);
271-
range = TextRange::new(range.start(), dot_range.end());
272-
273-
if let Some(tail) = conv.peek() {
274-
if tail.kind(conv) == FLOAT_NUMBER_PART {
275-
let (_, tail_range) = conv.bump().unwrap();
276-
text += &*tail.to_text(conv);
277-
range = TextRange::new(range.start(), tail_range.end());
278-
}
279-
}
267+
if kind == FLOAT_NUMBER_START_1 || kind == FLOAT_NUMBER_START_2 {
268+
let (dot, dot_range) = conv.bump().unwrap();
269+
text += &*dot.to_text(conv);
270+
range = TextRange::new(range.start(), dot_range.end());
271+
272+
if kind == FLOAT_NUMBER_START_2 {
273+
let (tail, tail_range) = conv.bump().unwrap();
274+
text += &*tail.to_text(conv);
275+
range = TextRange::new(range.start(), tail_range.end());
280276
}
281277
}
282278

crates/parser/src/grammar/expressions.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ mod atom;
33
use super::*;
44

55
pub(crate) use self::atom::{block_expr, match_arm_list};
6-
pub(super) use self::atom::{float_literal, literal, FLOAT_LITERAL_FIRST, LITERAL_FIRST};
6+
pub(super) use self::atom::{literal, FLOAT_LITERAL_FIRST, LITERAL_FIRST};
77

88
#[derive(PartialEq, Eq)]
99
pub(super) enum Semicolon {

crates/parser/src/grammar/expressions/atom.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,14 @@ pub(crate) fn literal(p: &mut Parser) -> Option<CompletedMarker> {
5353
// }
5454
pub(crate) fn float_literal(p: &mut Parser) {
5555
// Floats can be up to 3 tokens. The first token indicates how many there are.
56-
// We remap the first token to `FLOAT_NUMBER_PART` so that no subsequent code has to deal with
57-
// this awful, awful hack.
5856
let f = p.start();
5957
if p.at(FLOAT_NUMBER_START_0) {
60-
p.bump_remap(FLOAT_NUMBER_PART);
58+
p.bump(FLOAT_NUMBER_START_0);
6159
} else if p.at(FLOAT_NUMBER_START_1) {
62-
p.bump_remap(FLOAT_NUMBER_PART);
60+
p.bump(FLOAT_NUMBER_START_1);
6361
p.bump(DOT);
6462
} else if p.at(FLOAT_NUMBER_START_2) {
65-
p.bump_remap(FLOAT_NUMBER_PART);
63+
p.bump(FLOAT_NUMBER_START_2);
6664
p.bump(DOT);
6765
p.bump(FLOAT_NUMBER_PART);
6866
} else {

crates/parser/src/grammar/items.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pub(crate) use self::{
99
traits::assoc_item_list,
1010
use_item::use_tree_list,
1111
};
12-
use super::{expressions::float_literal, *};
12+
use super::*;
1313

1414
// test mod_contents
1515
// fn foo() {}
@@ -457,9 +457,6 @@ pub(crate) fn token_tree(p: &mut Parser) {
457457
return;
458458
}
459459
T![')'] | T![']'] => p.err_and_bump("unmatched brace"),
460-
FLOAT_NUMBER_START_0 | FLOAT_NUMBER_START_1 | FLOAT_NUMBER_START_2 => {
461-
float_literal(p);
462-
}
463460
_ => p.bump_any(),
464461
}
465462
}

crates/parser/test_data/parser/err/0023_mismatched_paren.rast

+3-4
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,9 @@ SOURCE_FILE
3232
INT_NUMBER "1"
3333
COMMA ","
3434
WHITESPACE " "
35-
FLOAT_LITERAL
36-
FLOAT_NUMBER_PART "2"
37-
DOT "."
38-
FLOAT_NUMBER_PART "0"
35+
FLOAT_NUMBER_START_2 "2"
36+
DOT "."
37+
FLOAT_NUMBER_PART "0"
3938
WHITESPACE "\n "
4039
R_CURLY "}"
4140
WHITESPACE " "

crates/parser/test_data/parser/inline/ok/0085_expr_literals.rast

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ SOURCE_FILE
5858
WHITESPACE " "
5959
LITERAL
6060
FLOAT_LITERAL
61-
FLOAT_NUMBER_PART "2"
61+
FLOAT_NUMBER_START_2 "2"
6262
DOT "."
6363
FLOAT_NUMBER_PART "0"
6464
SEMICOLON ";"

crates/parser/test_data/parser/inline/ok/0107_method_call_expr.rast

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ SOURCE_FILE
6363
METHOD_CALL_EXPR
6464
LITERAL
6565
FLOAT_LITERAL
66-
FLOAT_NUMBER_PART "0e0"
66+
FLOAT_NUMBER_START_0 "0e0"
6767
DOT "."
6868
NAME_REF
6969
IDENT "sin"
@@ -76,7 +76,7 @@ SOURCE_FILE
7676
METHOD_CALL_EXPR
7777
LITERAL
7878
FLOAT_LITERAL
79-
FLOAT_NUMBER_PART "0e0f32"
79+
FLOAT_NUMBER_START_0 "0e0f32"
8080
DOT "."
8181
NAME_REF
8282
IDENT "sin"

crates/parser/test_data/parser/inline/ok/0201_float_literal.rast

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,34 +15,34 @@ SOURCE_FILE
1515
EXPR_STMT
1616
LITERAL
1717
FLOAT_LITERAL
18-
FLOAT_NUMBER_PART "0"
18+
FLOAT_NUMBER_START_2 "0"
1919
DOT "."
2020
FLOAT_NUMBER_PART "0"
2121
SEMICOLON ";"
2222
WHITESPACE "\n "
2323
EXPR_STMT
2424
LITERAL
2525
FLOAT_LITERAL
26-
FLOAT_NUMBER_PART "1"
26+
FLOAT_NUMBER_START_1 "1"
2727
DOT "."
2828
SEMICOLON ";"
2929
WHITESPACE "\n "
3030
EXPR_STMT
3131
LITERAL
3232
FLOAT_LITERAL
33-
FLOAT_NUMBER_PART "0e0"
33+
FLOAT_NUMBER_START_0 "0e0"
3434
SEMICOLON ";"
3535
WHITESPACE "\n "
3636
EXPR_STMT
3737
LITERAL
3838
FLOAT_LITERAL
39-
FLOAT_NUMBER_PART "0e0f32"
39+
FLOAT_NUMBER_START_0 "0e0f32"
4040
SEMICOLON ";"
4141
WHITESPACE "\n "
4242
EXPR_STMT
4343
LITERAL
4444
FLOAT_LITERAL
45-
FLOAT_NUMBER_PART "1"
45+
FLOAT_NUMBER_START_2 "1"
4646
DOT "."
4747
FLOAT_NUMBER_PART "23f64"
4848
SEMICOLON ";"

crates/parser/test_data/parser/ok/0056_neq_in_type.rast

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ SOURCE_FILE
2020
METHOD_CALL_EXPR
2121
LITERAL
2222
FLOAT_LITERAL
23-
FLOAT_NUMBER_PART "1"
23+
FLOAT_NUMBER_START_2 "1"
2424
DOT "."
2525
FLOAT_NUMBER_PART "0f32"
2626
DOT "."
@@ -44,7 +44,7 @@ SOURCE_FILE
4444
METHOD_CALL_EXPR
4545
LITERAL
4646
FLOAT_LITERAL
47-
FLOAT_NUMBER_PART "1"
47+
FLOAT_NUMBER_START_2 "1"
4848
DOT "."
4949
FLOAT_NUMBER_PART "0f32"
5050
DOT "."

0 commit comments

Comments
 (0)