@@ -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+ }
0 commit comments