Skip to content

Commit afc4de7

Browse files
committed
fix #90
1 parent d2a0878 commit afc4de7

File tree

6 files changed

+84
-27
lines changed

6 files changed

+84
-27
lines changed

CodeService/src/Format/Analyzer/SpaceAnalyzer.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "LuaParser/Lexer/LuaTokenTypeDetail.h"
33
#include "CodeService/Format/FormatState.h"
44
#include "CodeService/Config/LanguageTranslator.h"
5+
#include "CodeService/Format/Analyzer/TokenAnalyzer.h"
56

67

78
SpaceAnalyzer::SpaceAnalyzer() {
@@ -154,7 +155,10 @@ void SpaceAnalyzer::ComplexAnalyze(FormatState &f, const LuaSyntaxTree &t) {
154155
if (f.GetStyle().space_before_function_call_open_parenthesis) {
155156
SpaceLeft(leftBrace, t, 1);
156157
} else {
157-
SpaceLeft(leftBrace, t, 0);
158+
auto tokenAnalyzer = f.GetAnalyzer<TokenAnalyzer>();
159+
if (!tokenAnalyzer->IsRemove(leftBrace, t)) {
160+
SpaceLeft(leftBrace, t, 0);
161+
}
158162
}
159163
} else {
160164
SpaceLeft(leftBrace, t, 1);
@@ -375,4 +379,4 @@ SpaceAnalyzer::ProcessSpace(const LuaSyntaxTree &t, LuaSyntaxNode &left, LuaSynt
375379

376380
void SpaceAnalyzer::SpaceIgnore(LuaSyntaxNode &n, const LuaSyntaxTree &t) {
377381
_ignoreSpace.insert(n.GetIndex());
378-
}
382+
}

CodeService/src/Format/Analyzer/TokenAnalyzer.cpp

Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
7482
void 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

188196
void 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+

Test/src/FormatStyle_unitest.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,11 +283,23 @@ p("456")
283283
p(123)
284284
p "12313"
285285
p("456")
286+
local t = {
287+
a({
288+
a = 123
289+
}),
290+
d = 123
291+
}
286292
)",
287293
R"(
288294
p(123)
289295
p "12313"
290296
p "456"
297+
local t = {
298+
a {
299+
a = 123
300+
},
301+
d = 123
302+
}
291303
)", style));
292304
style.call_arg_parentheses = CallArgParentheses::RemoveStringOnly;
293305
EXPECT_TRUE(TestHelper::TestFormatted(

Test2/src/FormatTest2.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,9 @@
77

88
int main() {
99
std::string buffer = R"(
10-
local t = switch(a)
11-
:case(function()
12-
end)
10+
p({
1311
12+
})
1413
)";
1514

1615
auto file = std::make_shared<LuaFile>(std::move(buffer));

include/CodeService/Config/LuaStyle.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,6 @@ class LuaStyle {
104104

105105
bool align_array_table = true;
106106

107-
// not implement now
108-
bool align_trailing_comments = false;
109-
110107
// [Indent]
111108

112109
/*

include/CodeService/Format/Analyzer/TokenAnalyzer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class TokenAnalyzer : public FormatAnalyzer {
1414
void Query(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) override;
1515

1616
void Mark(LuaSyntaxNode &n, const LuaSyntaxTree &t, TokenStrategy strategy);
17+
18+
bool IsRemove(LuaSyntaxNode &n, const LuaSyntaxTree &t) const;
1719
private:
1820
void TableFieldAddSep(FormatState &f, LuaSyntaxNode &n, const LuaSyntaxTree &t);
1921

0 commit comments

Comments
 (0)