Skip to content

Commit 7b35cb7

Browse files
committed
support more optional value for single_arg_call
1 parent 11f27a1 commit 7b35cb7

File tree

6 files changed

+81
-9
lines changed

6 files changed

+81
-9
lines changed

CodeService/src/Config/LuaStyle.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,19 @@ void LuaStyle::ParseFromMap(std::map<std::string, std::string, std::less<>> &con
117117

118118
BOOL_OPTION(space_before_closure_open_parenthesis)
119119

120-
BOOL_OPTION(space_before_function_call_single_arg)
120+
if (configMap.count("space_before_function_call_single_arg")) {
121+
auto & value = configMap.at("space_before_function_call_single_arg");
122+
if (value == "true" || value == "always") {
123+
space_before_function_call_single_arg = FunctionSingleArgSpace::Always;
124+
} else if (value == "only_string") {
125+
space_before_function_call_single_arg = FunctionSingleArgSpace::OnlyString;
126+
} else if (value == "only_table") {
127+
space_before_function_call_single_arg = FunctionSingleArgSpace::OnlyTable;
128+
} else if (value == "false" || value == "none") {
129+
space_before_function_call_single_arg = FunctionSingleArgSpace::None;
130+
}
131+
}
132+
121133

122134
BOOL_OPTION(space_before_open_square_bracket)
123135

CodeService/src/Format/Analyzer/SpaceAnalyzer.cpp

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,10 +159,37 @@ void SpaceAnalyzer::ComplexAnalyze(FormatState &f, const LuaSyntaxTree &t) {
159159
SpaceLeft(leftBrace, t, 1);
160160
}
161161
} else {
162-
if (f.GetStyle().space_before_function_call_single_arg) {
163-
SpaceLeft(syntaxNode, t, 1);
164-
} else {
165-
SpaceLeft(syntaxNode, t, 0);
162+
switch (f.GetStyle().space_before_function_call_single_arg) {
163+
case FunctionSingleArgSpace::None: {
164+
SpaceLeft(syntaxNode, t, 0);
165+
break;
166+
}
167+
case FunctionSingleArgSpace::Always: {
168+
SpaceLeft(syntaxNode, t, 1);
169+
break;
170+
}
171+
case FunctionSingleArgSpace::OnlyString: {
172+
auto firstToken = syntaxNode.GetFirstToken(t);
173+
if (firstToken.GetTokenKind(t) == TK_STRING
174+
|| firstToken.GetTokenKind(t) == TK_LONG_STRING) {
175+
SpaceLeft(syntaxNode, t, 1);
176+
} else {
177+
SpaceLeft(syntaxNode, t, 0);
178+
}
179+
break;
180+
}
181+
case FunctionSingleArgSpace::OnlyTable: {
182+
auto firstChild = syntaxNode.GetFirstChild(t);
183+
if (firstChild.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
184+
SpaceLeft(syntaxNode, t, 1);
185+
} else {
186+
SpaceLeft(syntaxNode, t, 0);
187+
}
188+
break;
189+
}
190+
default: {
191+
break;
192+
}
166193
}
167194
}
168195
break;

Test/src/FormatStyle_unitest.cpp

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -447,21 +447,45 @@ end
447447
TEST(FormatByStyleOption, space_before_function_call_single_arg) {
448448
LuaStyle style;
449449

450-
style.space_before_function_call_single_arg = true;
450+
style.space_before_function_call_single_arg = FunctionSingleArgSpace::Always;
451451
EXPECT_TRUE(TestHelper::TestFormatted(
452452
R"(
453453
local f = p { a = 123 }
454+
p "aaa"
454455
)",
455456
R"(
456457
local f = p { a = 123 }
458+
p "aaa"
457459
)", style));
458-
style.space_before_function_call_single_arg = false;
460+
style.space_before_function_call_single_arg = FunctionSingleArgSpace::OnlyString;
459461
EXPECT_TRUE(TestHelper::TestFormatted(
460462
R"(
461463
local f = p { a = 123 }
464+
p "aaa"
462465
)",
463466
R"(
464467
local f = p{ a = 123 }
468+
p "aaa"
469+
)", style));
470+
style.space_before_function_call_single_arg = FunctionSingleArgSpace::OnlyTable;
471+
EXPECT_TRUE(TestHelper::TestFormatted(
472+
R"(
473+
local f = p { a = 123 }
474+
p "aaa"
475+
)",
476+
R"(
477+
local f = p { a = 123 }
478+
p"aaa"
479+
)", style));
480+
style.space_before_function_call_single_arg = FunctionSingleArgSpace::None;
481+
EXPECT_TRUE(TestHelper::TestFormatted(
482+
R"(
483+
local f = p { a = 123 }
484+
p "aaa"
485+
)",
486+
R"(
487+
local f = p{ a = 123 }
488+
p"aaa"
465489
)", style));
466490
}
467491

include/CodeService/Config/LuaStyle.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class LuaStyle {
6161

6262
bool space_before_closure_open_parenthesis = false;
6363

64-
bool space_before_function_call_single_arg = true;
64+
FunctionSingleArgSpace space_before_function_call_single_arg = FunctionSingleArgSpace::Always;
6565

6666
bool space_before_open_square_bracket = false;
6767

include/CodeService/Config/LuaStyleEnum.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,10 @@ struct LineSpace {
5757
LineSpaceType Type;
5858
std::size_t Space;
5959
};
60+
61+
enum class FunctionSingleArgSpace {
62+
None,
63+
Always, // true
64+
OnlyTable,
65+
OnlyString
66+
};

lua.template.editorconfig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ space_before_function_call_open_parenthesis = false
4444

4545
space_before_closure_open_parenthesis = true
4646

47-
space_before_function_call_single_arg = true
47+
# optional always/only_string/only_table/none
48+
# or true/false
49+
space_before_function_call_single_arg = always
4850

4951
space_before_open_square_bracket = false
5052

0 commit comments

Comments
 (0)