Skip to content

Commit c3c3496

Browse files
committed
fix sumenko_1969
1 parent 6bcfc62 commit c3c3496

File tree

4 files changed

+54
-1
lines changed

4 files changed

+54
-1
lines changed

CodeService/src/Format/Analyzer/IndentationAnalyzer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ void IndentationAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
141141
}
142142
case LuaSyntaxNodeKind::TableField: {
143143
if (syntaxNode.GetChildToken('=', t).IsToken(t)) {
144-
auto expr = syntaxNode.GetChildSyntaxNode(LuaSyntaxMultiKind::Expression, t);
144+
auto expr = syntaxNode.GetLastChildSyntaxNode(LuaSyntaxMultiKind::Expression, t);
145145
AnalyzeTableFieldKeyValuePairExpr(f, expr, t);
146146
}
147147
// suffix expr

LuaParser/src/Ast/LuaSyntaxNode.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ void LuaSyntaxNode::ToNext(const LuaSyntaxTree &t) {
6767
_index = t.GetNextSibling(_index);
6868
}
6969

70+
void LuaSyntaxNode::ToPrev(const LuaSyntaxTree &t) {
71+
_index = t.GetPrevSibling(_index);
72+
}
73+
7074
bool LuaSyntaxNode::IsNull(const LuaSyntaxTree &t) const {
7175
return _index == 0;
7276
}
@@ -126,6 +130,27 @@ LuaSyntaxNode LuaSyntaxNode::GetChildSyntaxNode(LuaSyntaxMultiKind kind, const L
126130
return child;
127131
}
128132

133+
LuaSyntaxNode LuaSyntaxNode::GetLastChildSyntaxNode(LuaSyntaxNodeKind kind, const LuaSyntaxTree &t) const {
134+
auto child = GetLastChild(t);
135+
for (; !child.IsNull(t); child.ToPrev(t)) {
136+
if (child.GetSyntaxKind(t) == kind) {
137+
break;
138+
}
139+
}
140+
return child;
141+
}
142+
143+
LuaSyntaxNode LuaSyntaxNode::GetLastChildSyntaxNode(LuaSyntaxMultiKind kind, const LuaSyntaxTree &t) const {
144+
auto child = GetLastChild(t);
145+
for (; !child.IsNull(t); child.ToPrev(t)) {
146+
if (detail::multi_match::Match(kind, child.GetSyntaxKind(t))) {
147+
break;
148+
}
149+
}
150+
return child;
151+
}
152+
153+
129154
LuaSyntaxNode LuaSyntaxNode::GetChildToken(LuaTokenKind kind, const LuaSyntaxTree &t) const {
130155
auto child = GetFirstChild(t);
131156
for (; !child.IsNull(t); child.ToNext(t)) {
@@ -242,3 +267,5 @@ std::size_t LuaSyntaxNode::CountNodeChild(LuaSyntaxNodeKind kind, const LuaSynta
242267
bool LuaSyntaxNode::IsEmpty(const LuaSyntaxTree &t) const {
243268
return t.GetFirstChild(_index) == 0;
244269
}
270+
271+

Test/src/FormatResult_unitest.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,4 +742,24 @@ null_ls.setup {
742742
}
743743
}
744744
)", style));
745+
}
746+
747+
TEST(Format, sumneko_1969) {
748+
EXPECT_TRUE(TestHelper::TestFormatted(
749+
R"(
750+
Garbage = {
751+
["BahamaFrontDesk"] = {
752+
Coords = vector3( -1382.54, -592.77, 29.91),
753+
--Prop = "",
754+
}
755+
}
756+
)",
757+
R"(
758+
Garbage = {
759+
["BahamaFrontDesk"] = {
760+
Coords = vector3(-1382.54, -592.77, 29.91),
761+
--Prop = "",
762+
}
763+
}
764+
)"));
745765
}

include/LuaParser/Ast/LuaSyntaxNode.h

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

4848
void ToNext(const LuaSyntaxTree &t);
4949

50+
void ToPrev(const LuaSyntaxTree &t);
51+
5052
bool IsNull(const LuaSyntaxTree &t) const;
5153

5254
bool IsEmpty(const LuaSyntaxTree &t) const;
@@ -61,6 +63,10 @@ class LuaSyntaxNode {
6163

6264
LuaSyntaxNode GetChildSyntaxNode(LuaSyntaxMultiKind kind, const LuaSyntaxTree &t) const;
6365

66+
LuaSyntaxNode GetLastChildSyntaxNode(LuaSyntaxNodeKind kind, const LuaSyntaxTree &t) const;
67+
68+
LuaSyntaxNode GetLastChildSyntaxNode(LuaSyntaxMultiKind kind, const LuaSyntaxTree &t) const;
69+
6470
LuaSyntaxNode GetChildToken(LuaTokenKind kind, const LuaSyntaxTree &t) const;
6571

6672
LuaSyntaxNode GetChildToken(std::function<bool(LuaTokenKind)> predicated, const LuaSyntaxTree &t) const;

0 commit comments

Comments
 (0)