@@ -18,35 +18,10 @@ void IndentationAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
1818 case LuaSyntaxNodeKind::Block: {
1919 AddIndenter (syntaxNode, t);
2020 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);
5025 }
5126 break ;
5227 }
@@ -176,6 +151,10 @@ void IndentationAnalyzer::Query(FormatState &f, LuaSyntaxNode n, const LuaSyntax
176151 }
177152 break ;
178153 }
154+ case IndentType::Keep: {
155+ resolve.SetIndent (0 , IndentStrategy::Absolute);
156+ break ;
157+ }
179158 default : {
180159 break ;
181160 }
@@ -354,3 +333,45 @@ void IndentationAnalyzer::ProcessExceedLinebreak(FormatState &f, LuaSyntaxNode s
354333 AddIndenter (c, t, IndentData (IndentType::WhenNewLine, group.Indent ));
355334 }
356335}
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