Skip to content

Commit 415c63d

Browse files
committed
support #88
1 parent 01b37fe commit 415c63d

File tree

3 files changed

+35
-7
lines changed

3 files changed

+35
-7
lines changed

CodeService/src/Format/Analyzer/AlignAnalyzer.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,17 @@ void AlignAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
3434
}
3535
case LuaSyntaxNodeKind::CallExpression: {
3636
if (f.GetStyle().align_call_args) {
37-
auto exprlist = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::ExpressionList, t);
38-
AnalyzeExpressionList(f, exprlist, t);
37+
auto exprList = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::ExpressionList, t);
38+
auto exprs = exprList.GetChildSyntaxNodes(LuaSyntaxMultiKind::Expression, t);
39+
auto symbolLine = exprList.GetPrevToken(t).GetEndLine(t);
40+
bool sameLine = true;
41+
for (auto expr: exprs) {
42+
sameLine = sameLine && expr.GetStartLine(t) == symbolLine;
43+
}
44+
if (sameLine) {
45+
break;
46+
}
47+
AnalyzeExpressionList(f, exprList, t);
3948
}
4049
break;
4150
}
@@ -79,7 +88,7 @@ void AlignAnalyzer::Query(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSy
7988
break;
8089
}
8190
case AlignStrategy::AlignToFirst: {
82-
resolve.SetAlign(alignGroup.AlignPos);
91+
resolve.SetIndent(alignGroup.AlignPos, IndentStrategy::Absolute);
8392
break;
8493
}
8594
default: {
@@ -335,9 +344,7 @@ AlignAnalyzer::ResolveAlignGroup(FormatState &f, std::size_t groupIndex, AlignGr
335344
auto width = f.GetCurrentWidth();
336345
group.AlignPos = width;
337346
for (auto i: group.SyntaxGroup) {
338-
auto node = LuaSyntaxNode(i);
339-
auto leftToken = node.GetFirstToken(t);
340-
_resolveGroupIndex[leftToken.GetIndex()] = groupIndex;
347+
_resolveGroupIndex[i] = groupIndex;
341348
}
342349
}
343350
break;
@@ -411,7 +418,7 @@ void AlignAnalyzer::AnalyzeIfStatement(FormatState &f, LuaSyntaxNode &syntaxNode
411418
// 若有 elseif
412419

413420
auto spaceAfterIf = if_.GetNextToken(t).GetStartCol(t) - if_.GetStartCol(t);
414-
if(spaceAfterIf == 3 && ifAlignPos == 0){
421+
if (spaceAfterIf == 3 && ifAlignPos == 0) {
415422
group.clear();
416423
logicOps.clear();
417424
}

CodeService/src/Format/FormatState.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,10 @@ void FormatState::DfsForeach(std::vector<LuaSyntaxNode> &startNodes,
169169
AddInvertIndent(traverse.Node, indent);
170170
break;
171171
}
172+
case IndentStrategy::Absolute: {
173+
AddAbsoluteIndent(traverse.Node, indent);
174+
break;
175+
}
172176
default: {
173177
break;
174178
}
@@ -185,3 +189,18 @@ void FormatState::DfsForeach(std::vector<LuaSyntaxNode> &startNodes,
185189
}
186190
}
187191

192+
void FormatState::AddAbsoluteIndent(LuaSyntaxNode &syntaxNoe, std::size_t indent) {
193+
switch (_formatStyle.indent_style) {
194+
case IndentStyle::Space: {
195+
_indentStack.emplace(syntaxNoe, indent, 0);
196+
break;
197+
}
198+
case IndentStyle::Tab: {
199+
auto tabIndent = indent / _formatStyle.tab_width;
200+
auto spaceIndent = indent % _formatStyle.tab_width;
201+
_indentStack.emplace(syntaxNoe, spaceIndent, tabIndent);
202+
break;
203+
}
204+
}
205+
}
206+

include/CodeService/Format/FormatState.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class FormatState {
2828

2929
std::size_t &GetCurrentWidth();
3030

31+
void AddAbsoluteIndent(LuaSyntaxNode &syntaxNoe, std::size_t indent);
32+
3133
void AddRelativeIndent(LuaSyntaxNode &syntaxNoe, std::size_t indent);
3234

3335
void AddInvertIndent(LuaSyntaxNode &syntaxNoe, std::size_t indent);

0 commit comments

Comments
 (0)