MCPcopy Create free account
hub / github.com/CppCXY/EmmyLuaCodeStyle / BuildTree

Method BuildTree

LuaParser/src/Ast/LuaSyntaxTree.cpp:12–72  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10}
11
12void LuaSyntaxTree::BuildTree(LuaParser &p) {
13 _errors.swap(p.GetErrors());
14
15 _source = p.GetLuaFile();
16 StartNode(LuaSyntaxNodeKind::File, p);
17
18 auto &events = p.GetEvents();
19 std::vector<LuaSyntaxNodeKind> parents;
20 for (std::size_t i = 0; i != events.size(); i++) {
21 switch (events[i].Type) {
22 case MarkEventType::NodeStart: {
23 auto e = events[i];
24 if (e.U.Start.Kind == LuaSyntaxNodeKind::None) {
25 continue;
26 }
27
28 parents.push_back(e.U.Start.Kind);
29 auto parentPos = e.U.Start.Parent;
30 while (parentPos > 0) {
31 if (events[parentPos].Type == MarkEventType::NodeStart) {
32 auto &pe = events[parentPos];
33 parents.push_back(pe.U.Start.Kind);
34 parentPos = pe.U.Start.Parent;
35 pe.U.Start.Kind = LuaSyntaxNodeKind::None;
36 } else {
37 break;
38 }
39 }
40 // When debug here will throw error
41 for (auto rIt = parents.rbegin(); rIt != parents.rend(); rIt++) {
42 StartNode(*rIt, p);
43 }
44
45 parents.clear();
46 break;
47 }
48 case MarkEventType::EatToken: {
49 EatComments(p);
50 EatToken(p);
51 EatInlineComment(p);
52 break;
53 }
54 case MarkEventType::NodeEnd: {
55 FinishNode(p);
56 break;
57 }
58 default: {
59 break;
60 }
61 }
62 }
63
64 FinishNode(p);
65
66 if (!_nodeOrTokens.empty()) {
67 _syntaxNodes.reserve(_nodeOrTokens.size() - 1);
68 for (std::size_t i = 0; i != _nodeOrTokens.size() - 1; i++) {
69 _syntaxNodes.emplace_back(i + 1);

Callers 15

CheckSingleFileMethod · 0.80
ReformatSingleFileMethod · 0.80
RangeReformatMethod · 0.80
ReformatMethod · 0.80
RangeFormatMethod · 0.80
TypeFormatMethod · 0.80
DiagnosticMethod · 0.80
mainFunction · 0.80
ReformatMethod · 0.80
RangeFormatMethod · 0.80
TypeFormatMethod · 0.80
DiagnosticMethod · 0.80

Calls 7

GetLuaFileMethod · 0.80
swapMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45
clearMethod · 0.45
emptyMethod · 0.45
reserveMethod · 0.45

Tested by 3

mainFunction · 0.64
TestFormattedMethod · 0.64
TestRangeFormattedMethod · 0.64