Skip to content

Commit 6bc5864

Browse files
committed
support maxspace
1 parent 4f1afbf commit 6bc5864

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

crates/xmake_formatter/src/format/formatter_context.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,23 @@ impl FormatterContext {
2222
self.text.pop();
2323
}
2424
}
25+
26+
pub fn get_last_whitespace_count(&self) -> usize {
27+
let mut count = 0;
28+
for ch in self.text.chars().rev() {
29+
if ch == ' ' {
30+
count += 1;
31+
} else {
32+
break;
33+
}
34+
}
35+
count
36+
}
37+
38+
pub fn reset_whitespace_to(&mut self, n: usize) {
39+
self.reset_whitespace();
40+
if n > 0 {
41+
self.text.push_str(&" ".repeat(n));
42+
}
43+
}
2544
}

crates/xmake_formatter/src/format/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,15 @@ impl XmakeFormatter {
6161
continue;
6262
}
6363
}
64+
(Some(TokenExpected::MaxSpace(n)), LuaTokenKind::TkWhitespace) => {
65+
if !context.is_line_first_token {
66+
let white_space_len = token.text().chars().count();
67+
if white_space_len > n {
68+
context.reset_whitespace_to(n);
69+
continue;
70+
}
71+
}
72+
}
6473
(_, LuaTokenKind::TkEndOfLine) => {
6574
// No space expected
6675
context.reset_whitespace();
@@ -85,6 +94,14 @@ impl XmakeFormatter {
8594
context.text.push_str(&" ".repeat(*n));
8695
}
8796
}
97+
TokenExpected::MaxSpace(n) => {
98+
if !context.is_line_first_token {
99+
let current_spaces = context.get_last_whitespace_count();
100+
if current_spaces > *n {
101+
context.reset_whitespace_to(*n);
102+
}
103+
}
104+
}
88105
}
89106
}
90107

crates/xmake_formatter/src/format/syntax_node_change.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@ pub enum TokenNodeChange {
1111
#[derive(Debug, Clone, Copy)]
1212
pub enum TokenExpected {
1313
Space(usize),
14+
MaxSpace(usize),
1415
}

crates/xmake_formatter/src/style_ruler/basic_space.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,16 @@ impl StyleRuler for BasicSpaceRuler {
8080
f.add_token_left_expected(syntax_id, TokenExpected::Space(1));
8181
f.add_token_right_expected(syntax_id, TokenExpected::Space(1));
8282
}
83-
LuaTokenKind::TkColon | LuaTokenKind::TkDot => {
83+
LuaTokenKind::TkColon => {
84+
if is_parent_syntax(&token, LuaSyntaxKind::IndexExpr) {
85+
f.add_token_left_expected(syntax_id, TokenExpected::Space(0));
86+
f.add_token_right_expected(syntax_id, TokenExpected::Space(0));
87+
continue;
88+
}
89+
f.add_token_left_expected(syntax_id, TokenExpected::MaxSpace(1));
90+
f.add_token_right_expected(syntax_id, TokenExpected::MaxSpace(1));
91+
}
92+
LuaTokenKind::TkDot => {
8493
f.add_token_left_expected(syntax_id, TokenExpected::Space(0));
8594
f.add_token_right_expected(syntax_id, TokenExpected::Space(0));
8695
}

0 commit comments

Comments
 (0)