@@ -18,35 +18,10 @@ void IndentationAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
18
18
case LuaSyntaxNodeKind::Block: {
19
19
AddIndenter (syntaxNode, t);
20
20
if (f.GetStyle ().never_indent_comment_on_if_branch ) {
21
- auto ifStmt = syntaxNode.GetParent (t);
22
- if (ifStmt.GetSyntaxKind (t) == LuaSyntaxNodeKind::IfStatement) {
23
- auto ifBranch = syntaxNode.GetNextToken (t);
24
- if (ifBranch.GetTokenKind (t) == TK_ELSEIF || ifBranch.GetTokenKind (t) == TK_ELSE) {
25
- auto bodyChildren = syntaxNode.GetChildren (t);
26
- bool isCommentOnly = true ;
27
- for (auto bodyChild: bodyChildren) {
28
- if (bodyChild.IsNode (t)) {
29
- isCommentOnly = false ;
30
- break ;
31
- }
32
- }
33
- if (isCommentOnly) {
34
- break ;
35
- }
36
- std::size_t siblingLine = ifBranch.GetStartLine (t);
37
- for (auto it = bodyChildren.rbegin (); it != bodyChildren.rend (); it++) {
38
- auto n = *it;
39
- if (n.GetTokenKind (t) != TK_SHORT_COMMENT) {
40
- break ;
41
- }
42
- auto commentLine = n.GetStartLine (t);
43
- if (commentLine + 1 == siblingLine) {
44
- AddIndenter (n, t, IndentData (IndentType::InvertIndentation));
45
- siblingLine = commentLine;
46
- }
47
- }
48
- }
49
- }
21
+ NeverIndentCommentOnIfBranch (f, syntaxNode, t);
22
+ }
23
+ if (f.GetStyle ().allow_non_indented_comments ) {
24
+ AllowNonIndentedComment (f, syntaxNode, t);
50
25
}
51
26
break ;
52
27
}
@@ -176,6 +151,10 @@ void IndentationAnalyzer::Query(FormatState &f, LuaSyntaxNode n, const LuaSyntax
176
151
}
177
152
break ;
178
153
}
154
+ case IndentType::Keep: {
155
+ resolve.SetIndent (0 , IndentStrategy::Absolute);
156
+ break ;
157
+ }
179
158
default : {
180
159
break ;
181
160
}
@@ -354,3 +333,45 @@ void IndentationAnalyzer::ProcessExceedLinebreak(FormatState &f, LuaSyntaxNode s
354
333
AddIndenter (c, t, IndentData (IndentType::WhenNewLine, group.Indent ));
355
334
}
356
335
}
336
+
337
+ void IndentationAnalyzer::NeverIndentCommentOnIfBranch (FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t) {
338
+ auto ifStmt = syntaxNode.GetParent (t);
339
+ if (ifStmt.GetSyntaxKind (t) == LuaSyntaxNodeKind::IfStatement) {
340
+ auto ifBranch = syntaxNode.GetNextToken (t);
341
+ if (ifBranch.GetTokenKind (t) == TK_ELSEIF || ifBranch.GetTokenKind (t) == TK_ELSE) {
342
+ auto bodyChildren = syntaxNode.GetChildren (t);
343
+ bool isCommentOnly = true ;
344
+ for (auto bodyChild: bodyChildren) {
345
+ if (bodyChild.IsNode (t)) {
346
+ isCommentOnly = false ;
347
+ break ;
348
+ }
349
+ }
350
+ if (isCommentOnly) {
351
+ return ;
352
+ }
353
+ std::size_t siblingLine = ifBranch.GetStartLine (t);
354
+ for (auto it = bodyChildren.rbegin (); it != bodyChildren.rend (); it++) {
355
+ auto n = *it;
356
+ if (n.GetTokenKind (t) != TK_SHORT_COMMENT) {
357
+ break ;
358
+ }
359
+ auto commentLine = n.GetStartLine (t);
360
+ if (commentLine + 1 == siblingLine) {
361
+ AddIndenter (n, t, IndentData (IndentType::InvertIndentation));
362
+ siblingLine = commentLine;
363
+ }
364
+ }
365
+ }
366
+ }
367
+ }
368
+
369
+ void IndentationAnalyzer::AllowNonIndentedComment (FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t) {
370
+ for (auto n: syntaxNode.GetChildren (t)) {
371
+ if (n.IsToken (t) && (n.GetTokenKind (t) == TK_SHORT_COMMENT || n.GetTokenKind (t) == TK_LONG_COMMENT)) {
372
+ if (n.GetStartCol (t) == 0 ) {
373
+ AddIndenter (n, t, IndentData (IndentType::Keep));
374
+ }
375
+ }
376
+ }
377
+ }
0 commit comments