Skip to content

Commit 85ca116

Browse files
committed
引入消息机制, 逐步取消语法节点的引用参数
1 parent c60af35 commit 85ca116

File tree

15 files changed

+54
-40
lines changed

15 files changed

+54
-40
lines changed

CodeService/src/Format/Analyzer/FormatDocAnalyze.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ void FormatDocAnalyze::Analyze(FormatState &f, const LuaSyntaxTree &t) {
2626
void FormatDocAnalyze::ComplexAnalyze(FormatState &f, const LuaSyntaxTree &t) {
2727
}
2828

29-
void FormatDocAnalyze::Query(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
29+
void FormatDocAnalyze::Query(FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
3030
auto it = _ignores.find(syntaxNode.GetIndex());
3131
if (it == _ignores.end()) {
3232
return;

CodeService/src/Format/Analyzer/IndentationAnalyzer.cpp

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ void IndentationAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
6868
if (expr.IsNode(t) && IsExprShouldIndent(expr, t)) {
6969
AddIndenter(expr, t);
7070
} else {
71-
AddIndenter(expr, t, IndentData(IndentType::WhenLineBreak));
71+
AddIndenter(expr, t, IndentData(IndentType::WhenNewLine));
7272
}
7373
}
7474
case LuaSyntaxNodeKind::LocalStatement:
@@ -115,7 +115,7 @@ void IndentationAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
115115
case LuaSyntaxNodeKind::TableExpression: {
116116
auto tableFieldList = syntaxNode.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldList, t);
117117
for (auto field: tableFieldList.GetChildren(t)) {
118-
AddIndenter(field, t, IndentData(IndentType::WhenLineBreak, f.GetStyle().indent_style == IndentStyle::Space ? f.GetStyle().indent_size : f.GetStyle().tab_width));
118+
AddIndenter(field, t, IndentData(IndentType::WhenNewLine, f.GetStyle().indent_style == IndentStyle::Space ? f.GetStyle().indent_size : f.GetStyle().tab_width));
119119
}
120120

121121
break;
@@ -150,7 +150,7 @@ void IndentationAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
150150
}
151151
}
152152

153-
void IndentationAnalyzer::Query(FormatState &f, LuaSyntaxNode &n, const LuaSyntaxTree &t, FormatResolve &resolve) {
153+
void IndentationAnalyzer::Query(FormatState &f, LuaSyntaxNode n, const LuaSyntaxTree &t, FormatResolve &resolve) {
154154
auto it = _indent.find(n.GetIndex());
155155
if (it != _indent.end()) {
156156
auto &indentData = it->second;
@@ -163,7 +163,7 @@ void IndentationAnalyzer::Query(FormatState &f, LuaSyntaxNode &n, const LuaSynta
163163
resolve.SetIndent(indentData.Indent, IndentStrategy::InvertRelative);
164164
break;
165165
}
166-
case IndentType::WhenLineBreak: {
166+
case IndentType::WhenNewLine: {
167167
if (f.IsNewLine(n, t)) {
168168
resolve.SetIndent(indentData.Indent);
169169
}
@@ -196,6 +196,18 @@ void IndentationAnalyzer::MarkIndent(LuaSyntaxNode n, const LuaSyntaxTree &t) {
196196
}
197197
}
198198

199+
void IndentationAnalyzer::OnFormatMessage(FormatState &f, FormatEvent event, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t) {
200+
switch (event) {
201+
case FormatEvent::NodeExceedLinebreak: {
202+
203+
break;
204+
}
205+
default: {
206+
break;
207+
}
208+
}
209+
}
210+
199211
void IndentationAnalyzer::AnalyzeExprList(FormatState &f, LuaSyntaxNode &exprList, const LuaSyntaxTree &t) {
200212
auto exprs = exprList.GetChildSyntaxNodes(MultiKind::Expression, t);
201213
if (exprs.size() == 1) {

CodeService/src/Format/Analyzer/LineBreakAnalyzer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ void LineBreakAnalyzer::ComplexAnalyze(FormatState &f, const LuaSyntaxTree &t) {
179179
}
180180
}
181181

182-
void LineBreakAnalyzer::Query(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
182+
void LineBreakAnalyzer::Query(FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
183183
auto it = _lineBreaks.find(syntaxNode.GetIndex());
184184
bool collapse = false;
185185
if (it != _lineBreaks.end()) {

CodeService/src/Format/Analyzer/SpaceAnalyzer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ void SpaceAnalyzer::ComplexAnalyze(FormatState &f, const LuaSyntaxTree &t) {
326326
}
327327
}
328328

329-
void SpaceAnalyzer::Query(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
329+
void SpaceAnalyzer::Query(FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
330330
if (syntaxNode.IsToken(t)) {
331331
auto nextToken = syntaxNode.GetNextToken(t);
332332
auto space = ProcessSpace(t, syntaxNode, nextToken);

CodeService/src/Format/Analyzer/TokenAnalyzer.cpp

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
#include "CodeService/Format/Analyzer/TokenAnalyzer.h"
2-
#include "LuaParser/Lexer/LuaTokenTypeDetail.h"
3-
#include "CodeService/Format/FormatState.h"
42
#include "CodeService/Format/Analyzer/SpaceAnalyzer.h"
3+
#include "CodeService/Format/FormatState.h"
4+
#include "LuaParser/Lexer/LuaTokenTypeDetail.h"
55

66
TokenAnalyzer::TokenAnalyzer() {
7-
87
}
98

109
void TokenAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
@@ -58,7 +57,7 @@ void TokenAnalyzer::Analyze(FormatState &f, const LuaSyntaxTree &t) {
5857
}
5958
}
6059

61-
void TokenAnalyzer::Query(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
60+
void TokenAnalyzer::Query(FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) {
6261
if (syntaxNode.IsToken(t)) {
6362
auto it = _tokenStrategies.find(syntaxNode.GetIndex());
6463
if (it != _tokenStrategies.end()) {
@@ -73,7 +72,7 @@ void TokenAnalyzer::Mark(LuaSyntaxNode &n, const LuaSyntaxTree &t, TokenStrategy
7372

7473
bool TokenAnalyzer::IsRemove(LuaSyntaxNode &n, const LuaSyntaxTree &t) const {
7574
auto it = _tokenStrategies.find(n.GetIndex());
76-
if(it == _tokenStrategies.end()){
75+
if (it == _tokenStrategies.end()) {
7776
return false;
7877
}
7978
return it->second == TokenStrategy::Remove;
@@ -83,8 +82,7 @@ void TokenAnalyzer::TableFieldAddSep(FormatState &f, LuaSyntaxNode &n, const Lua
8382
auto sep = n.GetChildSyntaxNode(LuaSyntaxNodeKind::TableFieldSep, t);
8483
if (!sep.IsNode(t)) {
8584
auto lastToken = n.GetLastToken(t);
86-
if (lastToken.GetTokenKind(t) == TK_SHORT_COMMENT
87-
|| lastToken.GetTokenKind(t) == TK_LONG_COMMENT) {
85+
if (lastToken.GetTokenKind(t) == TK_SHORT_COMMENT || lastToken.GetTokenKind(t) == TK_LONG_COMMENT) {
8886
lastToken = lastToken.GetPrevToken(t);
8987
}
9088
Mark(lastToken, t, TokenStrategy::TableAddSep);
@@ -108,8 +106,7 @@ void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode,
108106

109107
if (f.GetStyle().trailing_table_separator != TrailingTableSeparator::Keep) {
110108
auto nextToken = syntaxNode.GetNextToken(t);
111-
while (nextToken.GetTokenKind(t) == TK_SHORT_COMMENT
112-
|| nextToken.GetTokenKind(t) == TK_LONG_COMMENT) {
109+
while (nextToken.GetTokenKind(t) == TK_SHORT_COMMENT || nextToken.GetTokenKind(t) == TK_LONG_COMMENT) {
113110
nextToken = nextToken.GetNextToken(t);
114111
}
115112
// the last table field
@@ -147,9 +144,7 @@ void TokenAnalyzer::AnalyzeTableField(FormatState &f, LuaSyntaxNode &syntaxNode,
147144
bool IsSingleTableOrStringArg(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t) {
148145
auto children = syntaxNode.GetChildren(t);
149146
for (auto child: children) {
150-
if (child.GetTokenKind(t) == TK_STRING
151-
|| child.GetTokenKind(t) == TK_LONG_STRING
152-
|| child.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
147+
if (child.GetTokenKind(t) == TK_STRING || child.GetTokenKind(t) == TK_LONG_STRING || child.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
153148
return true;
154149
} else if (
155150
child.GetSyntaxKind(t) == LuaSyntaxNodeKind::ExpressionList) {
@@ -170,9 +165,7 @@ bool IsSingleTableOrStringArg(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t)
170165
LuaSyntaxNode GetSingleArgStringOrTable(LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t) {
171166
auto children = syntaxNode.GetChildren(t);
172167
for (auto child: children) {
173-
if (child.GetTokenKind(t) == TK_STRING
174-
|| child.GetTokenKind(t) == TK_LONG_STRING
175-
|| child.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
168+
if (child.GetTokenKind(t) == TK_STRING || child.GetTokenKind(t) == TK_LONG_STRING || child.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
176169
return syntaxNode;
177170
} else if (child.GetSyntaxKind(t) == LuaSyntaxNodeKind::ExpressionList) {
178171
auto exprs = child.GetChildSyntaxNodes(LuaSyntaxMultiKind::Expression, t);
@@ -182,8 +175,7 @@ LuaSyntaxNode GetSingleArgStringOrTable(LuaSyntaxNode &syntaxNode, const LuaSynt
182175
return expr;
183176
} else if (expr.GetSyntaxKind(t) == LuaSyntaxNodeKind::StringLiteralExpression) {
184177
auto firstToken = expr.GetFirstToken(t);
185-
if (firstToken.GetTokenKind(t) == TK_STRING
186-
|| firstToken.GetTokenKind(t) == TK_LONG_STRING) {
178+
if (firstToken.GetTokenKind(t) == TK_STRING || firstToken.GetTokenKind(t) == TK_LONG_STRING) {
187179
return firstToken;
188180
}
189181
}
@@ -198,7 +190,7 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
198190
switch (f.GetStyle().call_arg_parentheses) {
199191
case CallArgParentheses::Remove: {
200192
auto lbrace = syntaxNode.GetChildToken('(', t);
201-
if(lbrace.IsToken(t)){
193+
if (lbrace.IsToken(t)) {
202194
Mark(lbrace, t, TokenStrategy::Remove);
203195
auto rbrace = syntaxNode.GetChildToken(')', t);
204196
Mark(rbrace, t, TokenStrategy::Remove);
@@ -208,10 +200,9 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
208200
}
209201
case CallArgParentheses::RemoveStringOnly: {
210202
auto node = GetSingleArgStringOrTable(syntaxNode, t);
211-
if (node.GetTokenKind(t) == TK_STRING
212-
|| node.GetTokenKind(t) == TK_LONG_STRING) {
203+
if (node.GetTokenKind(t) == TK_STRING || node.GetTokenKind(t) == TK_LONG_STRING) {
213204
auto lbrace = syntaxNode.GetChildToken('(', t);
214-
if(lbrace.IsToken(t)) {
205+
if (lbrace.IsToken(t)) {
215206
Mark(lbrace, t, TokenStrategy::Remove);
216207
auto rbrace = syntaxNode.GetChildToken(')', t);
217208
Mark(rbrace, t, TokenStrategy::Remove);
@@ -224,7 +215,7 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
224215
auto node = GetSingleArgStringOrTable(syntaxNode, t);
225216
if (node.GetSyntaxKind(t) == LuaSyntaxNodeKind::TableExpression) {
226217
auto lbrace = syntaxNode.GetChildToken('(', t);
227-
if(lbrace.IsToken(t)) {
218+
if (lbrace.IsToken(t)) {
228219
Mark(lbrace, t, TokenStrategy::Remove);
229220
auto rbrace = syntaxNode.GetChildToken(')', t);
230221
Mark(rbrace, t, TokenStrategy::Remove);
@@ -251,8 +242,7 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
251242
}
252243
case FunctionSingleArgSpace::OnlyString: {
253244
auto firstToken = syntaxNode.GetFirstToken(t);
254-
if (firstToken.GetTokenKind(t) == TK_STRING
255-
|| firstToken.GetTokenKind(t) == TK_LONG_STRING) {
245+
if (firstToken.GetTokenKind(t) == TK_STRING || firstToken.GetTokenKind(t) == TK_LONG_STRING) {
256246
spaceAnalyzer->SpaceLeft(syntaxNode, t, 1);
257247
} else {
258248
spaceAnalyzer->SpaceLeft(syntaxNode, t, 0);
@@ -275,5 +265,3 @@ void TokenAnalyzer::AnalyzeCallExpression(FormatState &f, LuaSyntaxNode &syntaxN
275265
}
276266
}
277267
}
278-
279-

CodeService/src/Format/FormatState.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,3 +246,9 @@ void FormatState::StopDfsForeach() {
246246
FormatState::Mode FormatState::GetMode() const {
247247
return _mode;
248248
}
249+
250+
void FormatState::Notify(FormatEvent event, LuaSyntaxNode n, const LuaSyntaxTree &t) {
251+
for (auto &a: _analyzers) {
252+
a->OnFormatMessage(*this, event, n, t);
253+
}
254+
}

include/CodeService/Format/Analyzer/FormatAnalyzer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,7 @@ class FormatAnalyzer {
1919

2020
virtual void ComplexAnalyze(FormatState &f, const LuaSyntaxTree &t) {};
2121

22-
virtual void Query(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) = 0;
22+
virtual void Query(FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) = 0;
23+
24+
virtual void OnFormatMessage(FormatState& f, FormatEvent event, LuaSyntaxNode syntaxNode, const LuaSyntaxTree& t) {};
2325
};

include/CodeService/Format/Analyzer/FormatDocAnalyze.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class FormatDocAnalyze : public FormatAnalyzer {
2020

2121
void ComplexAnalyze(FormatState &f, const LuaSyntaxTree &t) override;
2222

23-
void Query(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) override;
23+
void Query(FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) override;
2424

2525
void AddIgnoreRange(const IndexRange& range, const LuaSyntaxTree &t);
2626

include/CodeService/Format/Analyzer/FormatStrategy.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ enum class IndentType {
4444
None,
4545
Standard,
4646
InvertIndentation,
47-
WhenLineBreak,
47+
WhenNewLine,
4848
WhenPrevIndent
4949
};
5050

include/CodeService/Format/Analyzer/IndentationAnalyzer.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@ class IndentationAnalyzer : public FormatAnalyzer {
2121

2222
void Analyze(FormatState &f, const LuaSyntaxTree &t) override;
2323

24-
void Query(FormatState &f, LuaSyntaxNode &syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) override;
24+
void Query(FormatState &f, LuaSyntaxNode syntaxNode, const LuaSyntaxTree &t, FormatResolve &resolve) override;
2525

2626
void AddIndenter(LuaSyntaxNode n, const LuaSyntaxTree &t, IndentData indentData = IndentData());
2727

2828
// 在格式化过程中标记Token缩进
2929
void MarkIndent(LuaSyntaxNode n, const LuaSyntaxTree &t);
3030

31+
void OnFormatMessage(FormatState& f, FormatEvent event, LuaSyntaxNode syntaxNode, const LuaSyntaxTree& t) override;
3132
private:
3233
void AnalyzeExprList(FormatState &f, LuaSyntaxNode &exprList, const LuaSyntaxTree &t);
3334

0 commit comments

Comments
 (0)