Skip to content

Commit 87570a2

Browse files
committed
stash
1 parent ebcd76a commit 87570a2

File tree

6 files changed

+96
-39
lines changed

6 files changed

+96
-39
lines changed

CodeFormatCore/include/CodeFormatCore/Config/LuaStyleEnum.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ enum class CallArgParentheses : int {
1818
Remove,
1919
RemoveStringOnly,
2020
RemoveTableOnly,
21-
// 应该没人用
22-
//UnambiguousRemoveStringOnly
21+
Always
22+
2323
};
2424

2525
enum class ContinuousAlign {
@@ -70,7 +70,9 @@ enum class FunctionSingleArgSpace {
7070
None,
7171
Always,// true
7272
OnlyTable,
73-
OnlyString
73+
OnlyString,
74+
OnlyStringKeep,
75+
OnlyTableKeep
7476
};
7577

7678
enum class AlignArrayTable {

CodeFormatCore/include/CodeFormatCore/Format/Analyzer/FormatStrategy.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,18 @@ enum class TokenStrategy {
2626
TableSepComma,
2727
OriginRange,
2828
StmtEndSemicolon,
29-
NewLineBeforeToken
29+
NewLineBeforeToken,
30+
31+
WithParentheses,
32+
WithLeftParentheses,
33+
WithRightParentheses
3034
};
3135

3236
enum class TokenAddStrategy {
3337
None,
3438
TableAddColon,
3539
TableAddComma,
36-
StmtEndSemicolon
40+
StmtEndSemicolon,
3741
};
3842

3943
enum class IndentStrategy {

CodeFormatCore/include/CodeFormatCore/Format/Analyzer/TokenAnalyzer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ class TokenAnalyzer : public FormatAnalyzer {
2222
private:
2323
void TableFieldAddSep(FormatState &f, LuaSyntaxNode n, const LuaSyntaxTree &t);
2424

25-
void AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t);
25+
void AnalyzeTableField(FormatState &f, LuaSyntaxNode n, const LuaSyntaxTree &t);
2626

27-
void AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t);
27+
void AnalyzeCallExpression(FormatState &f, LuaSyntaxNode n, const LuaSyntaxTree &t);
2828

2929

3030
std::unordered_map<std::size_t, TokenStrategy> _tokenStrategies;

CodeFormatCore/src/Format/Analyzer/SpaceAnalyzer.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,25 @@ void SpaceAnalyzer::ComplexAnalyze(FormatState &f, const LuaSyntaxTree &t) {
264264
}
265265
break;
266266
}
267+
case FunctionSingleArgSpace::OnlyStringKeep: {
268+
auto firstToken = syntaxNode.GetFirstToken(t);
269+
if (firstToken.GetTokenKind(t) == TK_STRING ||
270+
firstToken.GetTokenKind(t) == TK_LONG_STRING) {
271+
SpaceIgnore(syntaxNode);
272+
} else {
273+
SpaceLeft(syntaxNode, t, 1);
274+
}
275+
break;
276+
}
277+
case FunctionSingleArgSpace::OnlyTableKeep: {
278+
auto firstChild = syntaxNode.GetFirstChild(t);
279+
if (firstChild.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
280+
SpaceIgnore(syntaxNode);
281+
} else {
282+
SpaceLeft(syntaxNode, t, 1);
283+
}
284+
break;
285+
}
267286
default: {
268287
break;
269288
}

CodeFormatCore/src/Format/Analyzer/TokenAnalyzer.cpp

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -111,28 +111,28 @@ void TokenAnalyzer::TableFieldAddSep(FormatState &f, LuaSyntaxNode n, const LuaS
111111
}
112112
}
113113

114-
void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t) {
114+
void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode n, const LuaSyntaxTree &t) {
115115
if (f.GetStyle().table_separator_style == TableSeparatorStyle::Semicolon) {
116-
auto sep = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
116+
auto sep = n.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
117117
auto comma = sep.GetChildToken(',', t);
118118
if (comma.IsToken(t)) {
119119
Mark(comma, t, TokenStrategy::TableSepSemicolon);
120120
}
121121
} else if (f.GetStyle().table_separator_style == TableSeparatorStyle::Comma) {
122-
auto sep = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
122+
auto sep = n.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
123123
auto semicolon = sep.GetChildToken(';', t);
124124
if (semicolon.IsToken(t)) {
125125
Mark(semicolon, t, TokenStrategy::TableSepComma);
126126
}
127127
} else if (f.GetStyle().table_separator_style == TableSeparatorStyle::OnlyKVColon) {
128-
if (syntaxNode.GetChildToken('=', t).IsToken(t)) {
129-
auto sep = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
128+
if (n.GetChildToken('=', t).IsToken(t)) {
129+
auto sep = n.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
130130
auto semicolon = sep.GetChildToken(',', t);
131131
if (semicolon.IsToken(t)) {
132132
Mark(semicolon, t, TokenStrategy::TableSepSemicolon);
133133
}
134134
} else {
135-
auto sep = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
135+
auto sep = n.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
136136
auto semicolon = sep.GetChildToken(';', t);
137137
if (semicolon.IsToken(t)) {
138138
Mark(semicolon, t, TokenStrategy::TableSepComma);
@@ -141,28 +141,28 @@ void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode,
141141
}
142142

143143
if (f.GetStyle().trailing_table_separator != TrailingTableSeparator::Keep) {
144-
auto nextToken = syntaxNode.GetNextTokenSkipComment(t);
144+
auto nextToken = n.GetNextTokenSkipComment(t);
145145
// the last table field
146146
if (nextToken.GetTokenKind(t) == '}') {
147147
switch (f.GetStyle().trailing_table_separator) {
148148
case TrailingTableSeparator::Never: {
149-
auto sep = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
149+
auto sep = n.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
150150
auto sepToken = sep.GetFirstToken(t);
151151
Mark(sepToken, t, TokenStrategy::Remove);
152152
break;
153153
}
154154
case TrailingTableSeparator::Always: {
155-
TableFieldAddSep(f, syntaxNode, t);
155+
TableFieldAddSep(f, n, t);
156156
break;
157157
}
158158
case TrailingTableSeparator::Smart: {
159-
auto tableFieldList = syntaxNode.GetParent(t);
159+
auto tableFieldList = n.GetParent(t);
160160
if (tableFieldList.GetEndLine(t) == nextToken.GetStartLine(t)) {
161-
auto sep = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
161+
auto sep = n.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
162162
auto sepToken = sep.GetFirstToken(t);
163163
Mark(sepToken, t, TokenStrategy::Remove);
164164
} else {
165-
TableFieldAddSep(f, syntaxNode, t);
165+
TableFieldAddSep(f, n, t);
166166
}
167167
break;
168168
}
@@ -177,7 +177,8 @@ void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode,
177177
bool IsSingleTableOrStringArg(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t) {
178178
auto children = syntaxNode.GetChildren(t);
179179
for (auto child: children) {
180-
if (child.GetTokenKind(t) == TK_STRING || child.GetTokenKind(t) == TK_LONG_STRING || child.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
180+
if (child.GetTokenKind(t) == TK_STRING || child.GetTokenKind(t) == TK_LONG_STRING ||
181+
child.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
181182
return true;
182183
} else if (
183184
child.GetSyntaxKind(t) == LuaSyntaxNodeKind::ExpressionList) {
@@ -198,7 +199,8 @@ bool IsSingleTableOrStringArg(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t)
198199
LuaSyntaxNode GetSingleArgStringOrTable(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t) {
199200
auto children = syntaxNode.GetChildren(t);
200201
for (auto child: children) {
201-
if (child.GetTokenKind(t) == TK_STRING || child.GetTokenKind(t) == TK_LONG_STRING || child.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
202+
if (child.GetTokenKind(t) == TK_STRING || child.GetTokenKind(t) == TK_LONG_STRING ||
203+
child.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
202204
return syntaxNode;
203205
} else if (child.GetSyntaxKind(t) == LuaSyntaxNodeKind::ExpressionList) {
204206
auto exprs = child.GetChildSyntaxNodes(LuaSyntaxMultiKind::Expression, t);
@@ -218,45 +220,59 @@ LuaSyntaxNode GetSingleArgStringOrTable(LuaSyntaxNode &syntaxNode, const LuaSynt
218220
return LuaSyntaxNode(0);
219221
}
220222

221-
void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t) {
222-
if (IsSingleTableOrStringArg(syntaxNode, t)) {
223+
void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode n, const LuaSyntaxTree &t) {
224+
if (IsSingleTableOrStringArg(n, t)) {
223225
switch (f.GetStyle().call_arg_parentheses) {
224226
case CallArgParentheses::Remove: {
225-
auto lbrace = syntaxNode.GetChildToken('(', t);
227+
auto lbrace = n.GetChildToken('(', t);
226228
if (lbrace.IsToken(t)) {
227229
Mark(lbrace, t, TokenStrategy::Remove);
228-
auto rbrace = syntaxNode.GetChildToken(')', t);
230+
auto rbrace = n.GetChildToken(')', t);
229231
Mark(rbrace, t, TokenStrategy::Remove);
230232
}
231233

232234
break;
233235
}
234236
case CallArgParentheses::RemoveStringOnly: {
235-
auto node = GetSingleArgStringOrTable(syntaxNode, t);
237+
auto node = GetSingleArgStringOrTable(n, t);
236238
if (node.GetTokenKind(t) == TK_STRING || node.GetTokenKind(t) == TK_LONG_STRING) {
237-
auto lbrace = syntaxNode.GetChildToken('(', t);
239+
auto lbrace = n.GetChildToken('(', t);
238240
if (lbrace.IsToken(t)) {
239241
Mark(lbrace, t, TokenStrategy::Remove);
240-
auto rbrace = syntaxNode.GetChildToken(')', t);
242+
auto rbrace = n.GetChildToken(')', t);
241243
Mark(rbrace, t, TokenStrategy::Remove);
242244
}
243245
}
244246

245247
break;
246248
}
247249
case CallArgParentheses::RemoveTableOnly: {
248-
auto node = GetSingleArgStringOrTable(syntaxNode, t);
250+
auto node = GetSingleArgStringOrTable(n, t);
249251
if (node.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
250-
auto lbrace = syntaxNode.GetChildToken('(', t);
252+
auto lbrace = n.GetChildToken('(', t);
251253
if (lbrace.IsToken(t)) {
252254
Mark(lbrace, t, TokenStrategy::Remove);
253-
auto rbrace = syntaxNode.GetChildToken(')', t);
255+
auto rbrace = n.GetChildToken(')', t);
254256
Mark(rbrace, t, TokenStrategy::Remove);
255257
}
256258
}
257259

258260
break;
259261
}
262+
case CallArgParentheses::Always: {
263+
auto lbrace = n.GetChildToken('(', t);
264+
if (!lbrace.IsToken(t)) {
265+
auto node = GetSingleArgStringOrTable(n, t);
266+
if (node.IsToken(t)) {
267+
Mark(node, t, TokenStrategy::WithParentheses);
268+
} else {
269+
Mark(node.GetFirstToken(t), t, TokenStrategy::WithLeftParentheses);
270+
Mark(node.GetLastToken(t), t, TokenStrategy::WithRightParentheses);
271+
}
272+
}
273+
274+
break;
275+
}
260276
default: {
261277
break;
262278
}
@@ -266,28 +282,28 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
266282
if (spaceAnalyzer) {
267283
switch (f.GetStyle().space_before_function_call_single_arg) {
268284
case FunctionSingleArgSpace::None: {
269-
spaceAnalyzer->SpaceLeft(syntaxNode, t, 0);
285+
spaceAnalyzer->SpaceLeft(n, t, 0);
270286
break;
271287
}
272288
case FunctionSingleArgSpace::Always: {
273-
spaceAnalyzer->SpaceLeft(syntaxNode, t, 1);
289+
spaceAnalyzer->SpaceLeft(n, t, 1);
274290
break;
275291
}
276292
case FunctionSingleArgSpace::OnlyString: {
277-
auto firstToken = syntaxNode.GetFirstToken(t);
293+
auto firstToken = n.GetFirstToken(t);
278294
if (firstToken.GetTokenKind(t) == TK_STRING || firstToken.GetTokenKind(t) == TK_LONG_STRING) {
279-
spaceAnalyzer->SpaceLeft(syntaxNode, t, 1);
295+
spaceAnalyzer->SpaceLeft(n, t, 1);
280296
} else {
281-
spaceAnalyzer->SpaceLeft(syntaxNode, t, 0);
297+
spaceAnalyzer->SpaceLeft(n, t, 0);
282298
}
283299
break;
284300
}
285301
case FunctionSingleArgSpace::OnlyTable: {
286-
auto firstChild = syntaxNode.GetFirstChild(t);
302+
auto firstChild = n.GetFirstChild(t);
287303
if (firstChild.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
288-
spaceAnalyzer->SpaceLeft(syntaxNode, t, 1);
304+
spaceAnalyzer->SpaceLeft(n, t, 1);
289305
} else {
290-
spaceAnalyzer->SpaceLeft(syntaxNode, t, 0);
306+
spaceAnalyzer->SpaceLeft(n, t, 0);
291307
}
292308
break;
293309
}

CodeFormatCore/src/Format/FormatBuilder.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,22 @@ void FormatBuilder::DoResolve(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t,
146146
WriteSyntaxNode(syntaxNode, t);
147147
break;
148148
}
149+
case TokenStrategy::WithParentheses: {
150+
WriteChar('(');
151+
WriteSyntaxNode(syntaxNode, t);
152+
WriteChar(')');
153+
break;
154+
}
155+
case TokenStrategy::WithLeftParentheses:{
156+
WriteChar('(');
157+
WriteSyntaxNode(syntaxNode, t);
158+
break;
159+
}
160+
case TokenStrategy::WithRightParentheses:{
161+
WriteSyntaxNode(syntaxNode, t);
162+
WriteChar(')');
163+
break;
164+
}
149165
default: {
150166
break;
151167
}

0 commit comments

Comments
 (0)