@@ -71,6 +71,14 @@ void TokenAnalyzer::Mark(LuaSyntaxNode &n, const LuaSyntaxTree &t, TokenStrategy
7171 _tokenStrategies[n.GetIndex ()] = strategy;
7272}
7373
74+ bool TokenAnalyzer::IsRemove (LuaSyntaxNode &n, const LuaSyntaxTree &t) const {
75+ auto it = _tokenStrategies.find (n.GetIndex ());
76+ if (it == _tokenStrategies.end ()){
77+ return false ;
78+ }
79+ return it->second == TokenStrategy::Remove;
80+ }
81+
7482void TokenAnalyzer::TableFieldAddSep (FormatState &f, LuaSyntaxNode &n, const LuaSyntaxTree &t) {
7583 auto sep = n.GetChildSyntaxNode (LuaSyntaxNodeKind::TableFieldSep, t);
7684 if (!sep.IsNode (t)) {
@@ -187,16 +195,15 @@ LuaSyntaxNode GetSingleArgStringOrTable(LuaSyntaxNode &syntaxNode, const LuaSynt
187195
188196void TokenAnalyzer::AnalyzeCallExpression (FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t) {
189197 if (IsSingleTableOrStringArg (syntaxNode, t)) {
198+ bool parenthesesFounded = false ;
190199 switch (f.GetStyle ().call_arg_parentheses ) {
191200 case CallArgParentheses::Remove: {
192201 auto lbrace = syntaxNode.GetChildToken (' (' , t);
193- Mark (lbrace, t, TokenStrategy::Remove);
194- auto rbrace = syntaxNode.GetChildToken (' )' , t);
195- Mark (rbrace, t, TokenStrategy::Remove);
196- auto spaceAnalyzer = f.GetAnalyzer <SpaceAnalyzer>();
197- if (spaceAnalyzer) {
198- auto node = GetSingleArgStringOrTable (syntaxNode, t);
199- spaceAnalyzer->SpaceAround (node, t, 1 );
202+ if (lbrace.IsToken (t)){
203+ parenthesesFounded = true ;
204+ Mark (lbrace, t, TokenStrategy::Remove);
205+ auto rbrace = syntaxNode.GetChildToken (' )' , t);
206+ Mark (rbrace, t, TokenStrategy::Remove);
200207 }
201208
202209 break ;
@@ -206,12 +213,11 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
206213 if (node.GetTokenKind (t) == TK_STRING
207214 || node.GetTokenKind (t) == TK_LONG_STRING) {
208215 auto lbrace = syntaxNode.GetChildToken (' (' , t);
209- Mark (lbrace, t, TokenStrategy::Remove);
210- auto rbrace = syntaxNode.GetChildToken (' )' , t);
211- Mark (rbrace, t, TokenStrategy::Remove);
212- auto spaceAnalyzer = f.GetAnalyzer <SpaceAnalyzer>();
213- if (spaceAnalyzer) {
214- spaceAnalyzer->SpaceAround (node, t, 1 );
216+ if (lbrace.IsToken (t)) {
217+ parenthesesFounded = true ;
218+ Mark (lbrace, t, TokenStrategy::Remove);
219+ auto rbrace = syntaxNode.GetChildToken (' )' , t);
220+ Mark (rbrace, t, TokenStrategy::Remove);
215221 }
216222 }
217223
@@ -221,12 +227,11 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
221227 auto node = GetSingleArgStringOrTable (syntaxNode, t);
222228 if (node.GetSyntaxKind (t) == LuaSyntaxNodeKind::TableExpression) {
223229 auto lbrace = syntaxNode.GetChildToken (' (' , t);
224- Mark (lbrace, t, TokenStrategy::Remove);
225- auto rbrace = syntaxNode.GetChildToken (' )' , t);
226- Mark (rbrace, t, TokenStrategy::Remove);
227- auto spaceAnalyzer = f.GetAnalyzer <SpaceAnalyzer>();
228- if (spaceAnalyzer) {
229- spaceAnalyzer->SpaceAround (node, t, 1 );
230+ if (lbrace.IsToken (t)) {
231+ parenthesesFounded = true ;
232+ Mark (lbrace, t, TokenStrategy::Remove);
233+ auto rbrace = syntaxNode.GetChildToken (' )' , t);
234+ Mark (rbrace, t, TokenStrategy::Remove);
230235 }
231236 }
232237
@@ -236,5 +241,43 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
236241 break ;
237242 }
238243 }
244+
245+ auto spaceAnalyzer = f.GetAnalyzer <SpaceAnalyzer>();
246+ if (spaceAnalyzer) {
247+ switch (f.GetStyle ().space_before_function_call_single_arg ) {
248+ case FunctionSingleArgSpace::None: {
249+ spaceAnalyzer->SpaceLeft (syntaxNode, t, 0 );
250+ break ;
251+ }
252+ case FunctionSingleArgSpace::Always: {
253+ spaceAnalyzer->SpaceLeft (syntaxNode, t, 1 );
254+ break ;
255+ }
256+ case FunctionSingleArgSpace::OnlyString: {
257+ auto firstToken = syntaxNode.GetFirstToken (t);
258+ if (firstToken.GetTokenKind (t) == TK_STRING
259+ || firstToken.GetTokenKind (t) == TK_LONG_STRING) {
260+ spaceAnalyzer->SpaceLeft (syntaxNode, t, 1 );
261+ } else {
262+ spaceAnalyzer->SpaceLeft (syntaxNode, t, 0 );
263+ }
264+ break ;
265+ }
266+ case FunctionSingleArgSpace::OnlyTable: {
267+ auto firstChild = syntaxNode.GetFirstChild (t);
268+ if (firstChild.GetSyntaxKind (t) == LuaSyntaxNodeKind::TableExpression) {
269+ spaceAnalyzer->SpaceLeft (syntaxNode, t, 1 );
270+ } else {
271+ spaceAnalyzer->SpaceLeft (syntaxNode, t, 0 );
272+ }
273+ break ;
274+ }
275+ default : {
276+ break ;
277+ }
278+ }
279+ }
239280 }
240281}
282+
283+
0 commit comments