@@ -111,28 +111,28 @@ void TokenAnalyzer::TableFieldAddSep(FormatState &f, LuaSyntaxNode n, const LuaS
111111 }
112112}
113113
114- void TokenAnalyzer::AnalyzeTableField (FormatState &f, LuaSyntaxNode &syntaxNode , const LuaSyntaxTree &t) {
114+ void TokenAnalyzer::AnalyzeTableField (FormatState &f, LuaSyntaxNode n , const LuaSyntaxTree &t) {
115115 if (f.GetStyle ().table_separator_style == TableSeparatorStyle::Semicolon) {
116- auto sep = syntaxNode .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
116+ auto sep = n .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
117117 auto comma = sep.GetChildToken (' ,' , t);
118118 if (comma.IsToken (t)) {
119119 Mark (comma, t, TokenStrategy::TableSepSemicolon);
120120 }
121121 } else if (f.GetStyle ().table_separator_style == TableSeparatorStyle::Comma) {
122- auto sep = syntaxNode .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
122+ auto sep = n .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
123123 auto semicolon = sep.GetChildToken (' ;' , t);
124124 if (semicolon.IsToken (t)) {
125125 Mark (semicolon, t, TokenStrategy::TableSepComma);
126126 }
127127 } else if (f.GetStyle ().table_separator_style == TableSeparatorStyle::OnlyKVColon) {
128- if (syntaxNode .GetChildToken (' =' , t).IsToken (t)) {
129- auto sep = syntaxNode .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
128+ if (n .GetChildToken (' =' , t).IsToken (t)) {
129+ auto sep = n .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
130130 auto semicolon = sep.GetChildToken (' ,' , t);
131131 if (semicolon.IsToken (t)) {
132132 Mark (semicolon, t, TokenStrategy::TableSepSemicolon);
133133 }
134134 } else {
135- auto sep = syntaxNode .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
135+ auto sep = n .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
136136 auto semicolon = sep.GetChildToken (' ;' , t);
137137 if (semicolon.IsToken (t)) {
138138 Mark (semicolon, t, TokenStrategy::TableSepComma);
@@ -141,28 +141,28 @@ void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode,
141141 }
142142
143143 if (f.GetStyle ().trailing_table_separator != TrailingTableSeparator::Keep) {
144- auto nextToken = syntaxNode .GetNextTokenSkipComment (t);
144+ auto nextToken = n .GetNextTokenSkipComment (t);
145145 // the last table field
146146 if (nextToken.GetTokenKind (t) == ' }' ) {
147147 switch (f.GetStyle ().trailing_table_separator ) {
148148 case TrailingTableSeparator::Never: {
149- auto sep = syntaxNode .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
149+ auto sep = n .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
150150 auto sepToken = sep.GetFirstToken (t);
151151 Mark (sepToken, t, TokenStrategy::Remove);
152152 break ;
153153 }
154154 case TrailingTableSeparator::Always: {
155- TableFieldAddSep (f, syntaxNode , t);
155+ TableFieldAddSep (f, n , t);
156156 break ;
157157 }
158158 case TrailingTableSeparator::Smart: {
159- auto tableFieldList = syntaxNode .GetParent (t);
159+ auto tableFieldList = n .GetParent (t);
160160 if (tableFieldList.GetEndLine (t) == nextToken.GetStartLine (t)) {
161- auto sep = syntaxNode .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
161+ auto sep = n .GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
162162 auto sepToken = sep.GetFirstToken (t);
163163 Mark (sepToken, t, TokenStrategy::Remove);
164164 } else {
165- TableFieldAddSep (f, syntaxNode , t);
165+ TableFieldAddSep (f, n , t);
166166 }
167167 break ;
168168 }
@@ -177,7 +177,8 @@ void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode,
177177bool IsSingleTableOrStringArg (LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t) {
178178 auto children = syntaxNode.GetChildren (t);
179179 for (auto child: children) {
180- if (child.GetTokenKind (t) == TK_STRING || child.GetTokenKind (t) == TK_LONG_STRING || child.GetSyntaxKind (t) == LuaSyntaxNodeKind::TableExpression) {
180+ if (child.GetTokenKind (t) == TK_STRING || child.GetTokenKind (t) == TK_LONG_STRING ||
181+ child.GetSyntaxKind (t) == LuaSyntaxNodeKind::TableExpression) {
181182 return true ;
182183 } else if (
183184 child.GetSyntaxKind (t) == LuaSyntaxNodeKind::ExpressionList) {
@@ -198,7 +199,8 @@ bool IsSingleTableOrStringArg(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t)
198199LuaSyntaxNode GetSingleArgStringOrTable (LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t) {
199200 auto children = syntaxNode.GetChildren (t);
200201 for (auto child: children) {
201- if (child.GetTokenKind (t) == TK_STRING || child.GetTokenKind (t) == TK_LONG_STRING || child.GetSyntaxKind (t) == LuaSyntaxNodeKind::TableExpression) {
202+ if (child.GetTokenKind (t) == TK_STRING || child.GetTokenKind (t) == TK_LONG_STRING ||
203+ child.GetSyntaxKind (t) == LuaSyntaxNodeKind::TableExpression) {
202204 return syntaxNode;
203205 } else if (child.GetSyntaxKind (t) == LuaSyntaxNodeKind::ExpressionList) {
204206 auto exprs = child.GetChildSyntaxNodes (LuaSyntaxMultiKind::Expression, t);
@@ -218,45 +220,59 @@ LuaSyntaxNode GetSingleArgStringOrTable(LuaSyntaxNode &syntaxNode, const LuaSynt
218220 return LuaSyntaxNode (0 );
219221}
220222
221- void TokenAnalyzer::AnalyzeCallExpression (FormatState &f, LuaSyntaxNode &syntaxNode , const LuaSyntaxTree &t) {
222- if (IsSingleTableOrStringArg (syntaxNode , t)) {
223+ void TokenAnalyzer::AnalyzeCallExpression (FormatState &f, LuaSyntaxNode n , const LuaSyntaxTree &t) {
224+ if (IsSingleTableOrStringArg (n , t)) {
223225 switch (f.GetStyle ().call_arg_parentheses ) {
224226 case CallArgParentheses::Remove: {
225- auto lbrace = syntaxNode .GetChildToken (' (' , t);
227+ auto lbrace = n .GetChildToken (' (' , t);
226228 if (lbrace.IsToken (t)) {
227229 Mark (lbrace, t, TokenStrategy::Remove);
228- auto rbrace = syntaxNode .GetChildToken (' )' , t);
230+ auto rbrace = n .GetChildToken (' )' , t);
229231 Mark (rbrace, t, TokenStrategy::Remove);
230232 }
231233
232234 break ;
233235 }
234236 case CallArgParentheses::RemoveStringOnly: {
235- auto node = GetSingleArgStringOrTable (syntaxNode , t);
237+ auto node = GetSingleArgStringOrTable (n , t);
236238 if (node.GetTokenKind (t) == TK_STRING || node.GetTokenKind (t) == TK_LONG_STRING) {
237- auto lbrace = syntaxNode .GetChildToken (' (' , t);
239+ auto lbrace = n .GetChildToken (' (' , t);
238240 if (lbrace.IsToken (t)) {
239241 Mark (lbrace, t, TokenStrategy::Remove);
240- auto rbrace = syntaxNode .GetChildToken (' )' , t);
242+ auto rbrace = n .GetChildToken (' )' , t);
241243 Mark (rbrace, t, TokenStrategy::Remove);
242244 }
243245 }
244246
245247 break ;
246248 }
247249 case CallArgParentheses::RemoveTableOnly: {
248- auto node = GetSingleArgStringOrTable (syntaxNode , t);
250+ auto node = GetSingleArgStringOrTable (n , t);
249251 if (node.GetSyntaxKind (t) == LuaSyntaxNodeKind::TableExpression) {
250- auto lbrace = syntaxNode .GetChildToken (' (' , t);
252+ auto lbrace = n .GetChildToken (' (' , t);
251253 if (lbrace.IsToken (t)) {
252254 Mark (lbrace, t, TokenStrategy::Remove);
253- auto rbrace = syntaxNode .GetChildToken (' )' , t);
255+ auto rbrace = n .GetChildToken (' )' , t);
254256 Mark (rbrace, t, TokenStrategy::Remove);
255257 }
256258 }
257259
258260 break ;
259261 }
262+ case CallArgParentheses::Always: {
263+ auto lbrace = n.GetChildToken (' (' , t);
264+ if (!lbrace.IsToken (t)) {
265+ auto node = GetSingleArgStringOrTable (n, t);
266+ if (node.IsToken (t)) {
267+ Mark (node, t, TokenStrategy::WithParentheses);
268+ } else {
269+ Mark (node.GetFirstToken (t), t, TokenStrategy::WithLeftParentheses);
270+ Mark (node.GetLastToken (t), t, TokenStrategy::WithRightParentheses);
271+ }
272+ }
273+
274+ break ;
275+ }
260276 default : {
261277 break ;
262278 }
@@ -266,28 +282,28 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
266282 if (spaceAnalyzer) {
267283 switch (f.GetStyle ().space_before_function_call_single_arg ) {
268284 case FunctionSingleArgSpace::None: {
269- spaceAnalyzer->SpaceLeft (syntaxNode , t, 0 );
285+ spaceAnalyzer->SpaceLeft (n , t, 0 );
270286 break ;
271287 }
272288 case FunctionSingleArgSpace::Always: {
273- spaceAnalyzer->SpaceLeft (syntaxNode , t, 1 );
289+ spaceAnalyzer->SpaceLeft (n , t, 1 );
274290 break ;
275291 }
276292 case FunctionSingleArgSpace::OnlyString: {
277- auto firstToken = syntaxNode .GetFirstToken (t);
293+ auto firstToken = n .GetFirstToken (t);
278294 if (firstToken.GetTokenKind (t) == TK_STRING || firstToken.GetTokenKind (t) == TK_LONG_STRING) {
279- spaceAnalyzer->SpaceLeft (syntaxNode , t, 1 );
295+ spaceAnalyzer->SpaceLeft (n , t, 1 );
280296 } else {
281- spaceAnalyzer->SpaceLeft (syntaxNode , t, 0 );
297+ spaceAnalyzer->SpaceLeft (n , t, 0 );
282298 }
283299 break ;
284300 }
285301 case FunctionSingleArgSpace::OnlyTable: {
286- auto firstChild = syntaxNode .GetFirstChild (t);
302+ auto firstChild = n .GetFirstChild (t);
287303 if (firstChild.GetSyntaxKind (t) == LuaSyntaxNodeKind::TableExpression) {
288- spaceAnalyzer->SpaceLeft (syntaxNode , t, 1 );
304+ spaceAnalyzer->SpaceLeft (n , t, 1 );
289305 } else {
290- spaceAnalyzer->SpaceLeft (syntaxNode , t, 0 );
306+ spaceAnalyzer->SpaceLeft (n , t, 0 );
291307 }
292308 break ;
293309 }
0 commit comments