Skip to content

Commit d7f1a62

Browse files
committed
Complete #89
1 parent d9e8c5e commit d7f1a62

File tree

6 files changed

+62
-31
lines changed

6 files changed

+62
-31
lines changed

CodeService/src/Config/LuaStyle.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,4 @@ void LuaStyle::ParseFromMap(std::map<std::string, std::string, std::less<>> &con
224224
BOOL_OPTION(ignore_space_after_colon)
225225

226226
BOOL_OPTION(remove_call_expression_list_finish_comma)
227-
228-
BOOL_OPTION(table_use_continuation_indent)
229-
230-
BOOL_OPTION(function_call_use_continuation_indent)
231227
}

CodeService/src/Format/Analyzer/IndentationAnalyzer.cpp

Lines changed: 51 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -130,22 +130,43 @@ void IndentationAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
130130
case LuaSyntaxNodeKind::TableExpression: {
131131
auto tableFieldList = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldList, t);
132132
for (auto field: tableFieldList.GetChildren(t)) {
133-
if (f.GetStyle().table_use_continuation_indent) {
134-
Indenter(field, t, IndentData(
135-
IndentType::WhenLineBreak,
136-
f.GetStyle().continuation_indent
137-
));
138-
} else {
139-
Indenter(field, t, IndentData(
140-
IndentType::WhenLineBreak,
141-
f.GetStyle().indent_style == IndentStyle::Space ?
142-
f.GetStyle().indent_size : f.GetStyle().tab_width
143-
));
144-
}
133+
Indenter(field, t, IndentData(
134+
IndentType::WhenLineBreak,
135+
f.GetStyle().indent_style == IndentStyle::Space ?
136+
f.GetStyle().indent_size : f.GetStyle().tab_width
137+
));
145138
}
146139

147140
break;
148141
}
142+
case LuaSyntaxNodeKind::TableField: {
143+
if (syntaxNode.GetChildToken('=', t).IsToken(t)) {
144+
auto expr = syntaxNode.GetChildSyntaxNode(LuaSyntaxMultiKind::Expression, t);
145+
AnalyzeTableFieldKeyValuePairExpr(f, expr, t);
146+
}
147+
// suffix expr
148+
else {
149+
auto suffixedExpression = syntaxNode.GetChildSyntaxNode(NodeKind::SuffixedExpression, t);
150+
151+
for (auto expr: suffixedExpression.GetChildren(t)) {
152+
if (expr.GetSyntaxKind(t) == LuaSyntaxNodeKind::IndexExpression) {
153+
Indenter(expr, t, IndentData(
154+
IndentType::Standard,
155+
f.GetStyle().continuation_indent
156+
));
157+
} else if (expr.GetSyntaxKind(t) == LuaSyntaxNodeKind::CallExpression) {
158+
auto prevSibling = expr.GetPrevSibling(t);
159+
if (prevSibling.GetSyntaxKind(t) != LuaSyntaxNodeKind::NameExpression) {
160+
Indenter(expr, t, IndentData(
161+
IndentType::WhenPrevIndent,
162+
f.GetStyle().continuation_indent
163+
));
164+
}
165+
}
166+
}
167+
}
168+
break;
169+
}
149170
default: {
150171
break;
151172
}
@@ -250,15 +271,7 @@ void IndentationAnalyzer::AnalyzeCallExprList(FormatState &f, LuaSyntaxNode &exp
250271
}
251272

252273
if (shouldIndent) {
253-
auto indent = f.GetStyle().function_call_use_continuation_indent
254-
? f.GetStyle().continuation_indent
255-
: (f.GetStyle().indent_style == IndentStyle::Space
256-
? f.GetStyle().indent_size
257-
: f.GetStyle().tab_width);
258-
Indenter(exprList, t, IndentData(
259-
IndentType::Standard,
260-
indent
261-
));
274+
Indenter(exprList, t, IndentData(IndentType::Standard));
262275
}
263276
}
264277

@@ -313,3 +326,20 @@ bool IndentationAnalyzer::IsExprShouldIndent(LuaSyntaxNode &expr, const LuaSynta
313326
}
314327
return false;
315328
}
329+
330+
void
331+
IndentationAnalyzer::AnalyzeTableFieldKeyValuePairExpr(FormatState &f, LuaSyntaxNode &expr, const LuaSyntaxTree &t) {
332+
auto syntaxKind = expr.GetSyntaxKind(t);
333+
// special deal with
334+
if (syntaxKind == LuaSyntaxNodeKind::TableExpression
335+
|| syntaxKind == LuaSyntaxNodeKind::StringLiteralExpression) {
336+
return;
337+
}
338+
339+
if (IsExprShouldIndent(expr, t)) {
340+
Indenter(expr, t, IndentData(
341+
IndentType::Standard,
342+
f.GetStyle().continuation_indent
343+
));
344+
}
345+
}

CodeService/src/Format/Analyzer/LineBreakAnalyzer.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,13 @@ void LineBreakAnalyzer::ComplexAnalyze(FormatState &f, const LuaSyntaxTree &t) {
149149

150150
break;
151151
}
152+
case LuaSyntaxNodeKind::TableField: {
153+
auto expr = syntaxNode.GetChildSyntaxNode(LuaSyntaxMultiKind::Expression, t);
154+
if (expr.IsNode(t)) {
155+
AnalyzeExpr(f, expr, t);
156+
}
157+
break;
158+
}
152159
case LuaSyntaxNodeKind::ExpressionStatement: {
153160
auto suffixedExpression = syntaxNode.GetChildSyntaxNode(NodeKind::SuffixedExpression, t);
154161
if (suffixedExpression.IsNode(t)) {

Test/src/FormatResult_unitest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -676,8 +676,8 @@ end
676676
R"(
677677
local t = {
678678
a = cond
679-
and "is true"
680-
or "is not true"
679+
and "is true"
680+
or "is not true"
681681
}
682682
683683

include/CodeService/Config/LuaStyle.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,4 @@ class LuaStyle {
145145

146146
// not implement now
147147
bool leading_comma_style = false;
148-
149-
bool table_use_continuation_indent = false;
150-
151-
bool function_call_use_continuation_indent = false;
152148
};

include/CodeService/Format/Analyzer/IndentationAnalyzer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class IndentationAnalyzer : public FormatAnalyzer {
3333

3434
void AnalyzeCallExprList(FormatState &f, LuaSyntaxNode &exprList, const LuaSyntaxTree &t);
3535

36+
void AnalyzeTableFieldKeyValuePairExpr(FormatState &f, LuaSyntaxNode &expr, const LuaSyntaxTree &t);
37+
3638
bool IsExprShouldIndent(LuaSyntaxNode &expr, const LuaSyntaxTree &t);
3739

3840
std::unordered_map<std::size_t, IndentData> _indent;

0 commit comments

Comments
 (0)