Skip to content

Commit c957831

Browse files
committed
fix #121
1 parent 9412cd0 commit c957831

File tree

8 files changed

+62
-12
lines changed

8 files changed

+62
-12
lines changed

CodeFormatCore/src/Format/Analyzer/LineBreakAnalyzer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ void LineBreakAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
1919
BreakAfter(syntaxNode, t, LineSpace(LineSpaceType::Keep));
2020
break;
2121
}
22-
case '{': {
22+
case '{':
23+
case '}': {
2324
if (f.GetStyle().break_before_braces) {
2425
auto parent = syntaxNode.GetParent(t);
2526
if (parent.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression && !parent.IsSingleLineNode(t)) {

CodeFormatCore/src/Format/Analyzer/TokenAnalyzer.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,7 @@ void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode,
141141
}
142142

143143
if (f.GetStyle().trailing_table_separator != TrailingTableSeparator::Keep) {
144-
auto nextToken = syntaxNode.GetNextToken(t);
145-
while (nextToken.GetTokenKind(t) == TK_SHORT_COMMENT || nextToken.GetTokenKind(t) == TK_LONG_COMMENT) {
146-
nextToken = nextToken.GetNextToken(t);
147-
}
144+
auto nextToken = syntaxNode.GetNextTokenSkipComment(t);
148145
// the last table field
149146
if (nextToken.GetTokenKind(t) == '}') {
150147
switch (f.GetStyle().trailing_table_separator) {
@@ -160,7 +157,7 @@ void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode,
160157
}
161158
case TrailingTableSeparator::Smart: {
162159
auto tableFieldList = syntaxNode.GetParent(t);
163-
if (tableFieldList.GetStartLine(t) == nextToken.GetStartLine(t)) {
160+
if (tableFieldList.GetEndLine(t) == nextToken.GetStartLine(t)) {
164161
auto sep = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
165162
auto sepToken = sep.GetFirstToken(t);
166163
Mark(sepToken, t, TokenStrategy::Remove);

LuaParser/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,7 @@ target_sources(LuaParser
4040
)
4141

4242
target_link_libraries(LuaParser PUBLIC Util)
43+
44+
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
45+
target_compile_options(LuaParser PUBLIC /utf-8)
46+
endif ()

LuaParser/include/LuaParser/Ast/LuaSyntaxNode.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ class LuaSyntaxNode {
8181

8282
LuaSyntaxNode GetNextToken(const LuaSyntaxTree &t) const;
8383

84+
LuaSyntaxNode GetNextTokenSkipComment(const LuaSyntaxTree &t) const;
85+
8486
LuaSyntaxNode GetPrevToken(const LuaSyntaxTree &t) const;
8587

8688
LuaSyntaxNode GetFirstToken(const LuaSyntaxTree &t) const;

LuaParser/src/Ast/LuaSyntaxNode.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "LuaParser/Ast/LuaSyntaxNode.h"
22
#include "LuaParser/Ast/LuaSyntaxTree.h"
3+
#include "LuaParser/Lexer/LuaTokenTypeDetail.h"
34
#include "Util/Utf8.h"
45

56
LuaSyntaxNode::LuaSyntaxNode(std::size_t index)
@@ -228,6 +229,18 @@ LuaSyntaxNode LuaSyntaxNode::GetNextToken(const LuaSyntaxTree &t) const {
228229
return LuaSyntaxNode(t.GetNextToken(_index));
229230
}
230231

232+
LuaSyntaxNode LuaSyntaxNode::GetNextTokenSkipComment(const LuaSyntaxTree &t) const {
233+
if (_index == 0) {
234+
return *this;
235+
}
236+
auto nextIndex = t.GetNextToken(_index);
237+
while(t.GetTokenKind(nextIndex) == TK_SHORT_COMMENT || t.GetTokenKind(nextIndex) == TK_LONG_COMMENT) {
238+
nextIndex = t.GetNextToken(nextIndex);
239+
}
240+
241+
return LuaSyntaxNode(nextIndex);
242+
}
243+
231244
LuaSyntaxNode LuaSyntaxNode::GetPrevToken(const LuaSyntaxTree &t) const {
232245
if (_index == 0) {
233246
return *this;
@@ -277,3 +290,4 @@ std::size_t LuaSyntaxNode::CountNodeChild(LuaSyntaxNodeKind kind, const LuaSynta
277290
bool LuaSyntaxNode::IsEmpty(const LuaSyntaxTree &t) const {
278291
return t.GetFirstChild(_index) == 0;
279292
}
293+

Test/src/FormatResult_unitest.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1035,4 +1035,26 @@ local t = {
10351035
{ "但是", 55, 6 }
10361036
}
10371037
)"));
1038+
}
1039+
1040+
TEST(Format, issue_121) {
1041+
EXPECT_TRUE(TestHelper::TestFormatted(
1042+
R"(
1043+
local t = { function ()
1044+
local t = 123
1045+
end }
1046+
1047+
local t = { {
1048+
okokok = 123
1049+
} }
1050+
)",
1051+
R"(
1052+
local t = { function()
1053+
local t = 123
1054+
end }
1055+
1056+
local t = { {
1057+
okokok = 123
1058+
} }
1059+
)"));
10381060
}

Test/src/FormatStyle_unitest.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,12 +1523,21 @@ local t = {
15231523
local t = {
15241524
a = 123
15251525
}
1526+
local t = { {
1527+
okokok = 123
1528+
} }
15261529
)",
15271530
R"(
15281531
local t =
15291532
{
15301533
a = 123
15311534
}
1535+
local t =
1536+
{
1537+
{
1538+
okokok = 123
1539+
}
1540+
}
15321541
)",
15331542
style));
15341543
}

Test2/src/FormatTest2.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88

99
int main() {
1010
std::string buffer = R"(
11-
local disable = {
12-
move= disableControls?.disableMovement,
13-
oko = disableControls?.disableLook,
14-
combat = disableControls?.disableCombat,
15-
}
11+
local t = { function ()
12+
local t = 123
13+
end }
14+
15+
local t = { {
16+
okokok = 123
17+
} }
1618
)";
1719

1820
auto file = std::make_shared<LuaFile>(std::move(buffer));
@@ -28,7 +30,6 @@ combat = disableControls?.disableCombat,
2830
std::cout << t.GetDebugView() << std::endl;
2931

3032
LuaStyle s;
31-
s.break_before_braces = true;
3233
FormatBuilder b(s);
3334
auto text = b.GetFormatResult(t);
3435
std::cout<< text << std::endl;

0 commit comments

Comments
 (0)