File tree Expand file tree Collapse file tree 4 files changed +47
-1
lines changed
crates/xmake_formatter/src Expand file tree Collapse file tree 4 files changed +47
-1
lines changed Original file line number Diff line number Diff 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}
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change @@ -11,4 +11,5 @@ pub enum TokenNodeChange {
1111#[ derive( Debug , Clone , Copy ) ]
1212pub enum TokenExpected {
1313 Space ( usize ) ,
14+ MaxSpace ( usize ) ,
1415}
Original file line number Diff line number Diff 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 }
You can’t perform that action at this time.
0 commit comments