GCC Code Coverage Report


Directory: ../
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 31 / 1 / 32
Functions: 100.0% 3 / 0 / 3
Branches: 53.2% 66 / 0 / 124

src/visualizer/CSTVisualizer.cpp
Line Branch Exec Source
1 // Copyright (c) 2021-2026 ChilliBits. All rights reserved.
2
3 #include "CSTVisualizer.h"
4
5 #include <util/CommonUtil.h>
6 #include <util/SaveAndRestore.h>
7
8 namespace spice::compiler {
9
10 4271588 std::string CSTVisualizer::buildRule(const antlr4::ParserRuleContext *ctx) {
11
1/2
✓ Branch 2 → 3 taken 4271588 times.
✗ Branch 2 → 183 not taken.
4271588 std::stringstream result;
12
13 // Prepare strings
14
1/2
✓ Branch 3 → 4 taken 4271588 times.
✗ Branch 3 → 181 not taken.
4271588 const std::string codeLoc = tokenToCodeLoc(*ctx->start);
15
2/4
✓ Branch 4 → 5 taken 4271588 times.
✗ Branch 4 → 179 not taken.
✓ Branch 6 → 7 taken 4271588 times.
✗ Branch 6 → 179 not taken.
4271588 const std::string ruleName = ruleNames[ctx->getRuleIndex()];
16
2/4
✓ Branch 7 → 8 taken 4271588 times.
✗ Branch 7 → 115 not taken.
✓ Branch 8 → 9 taken 4271588 times.
✗ Branch 8 → 113 not taken.
4271588 const std::string nodeId = codeLoc + "_" + ruleName;
17
18 // Build result
19
4/8
✓ Branch 10 → 11 taken 4271588 times.
✗ Branch 10 → 175 not taken.
✓ Branch 11 → 12 taken 4271588 times.
✗ Branch 11 → 175 not taken.
✓ Branch 12 → 13 taken 4271588 times.
✗ Branch 12 → 175 not taken.
✓ Branch 13 → 14 taken 4271588 times.
✗ Branch 13 → 175 not taken.
4271588 result << nodeId << R"( [color="lightgreen",label=")" << ruleName << "\"];\n";
20
21 // Save the current node id and restore it at the end of the scope
22
1/2
✓ Branch 14 → 15 taken 4271588 times.
✗ Branch 14 → 175 not taken.
4271588 SaveAndRestore restoreParentNodeId(parentNodeId);
23
24 // Link parent node with the current one
25
2/2
✓ Branch 16 → 17 taken 4269713 times.
✓ Branch 16 → 25 taken 1875 times.
4271588 if (!parentNodeId.empty())
26
6/12
✓ Branch 17 → 18 taken 4269713 times.
✗ Branch 17 → 118 not taken.
✓ Branch 18 → 19 taken 4269713 times.
✗ Branch 18 → 116 not taken.
✓ Branch 19 → 20 taken 4269713 times.
✗ Branch 19 → 116 not taken.
✓ Branch 20 → 21 taken 4269713 times.
✗ Branch 20 → 116 not taken.
✓ Branch 21 → 22 taken 4269713 times.
✗ Branch 21 → 116 not taken.
✓ Branch 22 → 23 taken 4269713 times.
✗ Branch 22 → 116 not taken.
4269713 result << getSpaces() << parentNodeId << " -> " << nodeId << ";\n";
27
1/2
✓ Branch 25 → 26 taken 4271588 times.
✗ Branch 25 → 173 not taken.
4271588 parentNodeId = nodeId; // Set parentNodeId for children
28
29 // Visit all the children
30
2/2
✓ Branch 103 → 28 taken 5853349 times.
✓ Branch 103 → 104 taken 4271588 times.
14396525 for (const auto &child : ctx->children) {
31
2/4
✓ Branch 30 → 31 taken 5853349 times.
✗ Branch 30 → 121 not taken.
✓ Branch 31 → 32 taken 5853349 times.
✗ Branch 31 → 119 not taken.
5853349 result << getSpaces();
32
33
3/4
✓ Branch 33 → 34 taken 5853349 times.
✗ Branch 33 → 35 not taken.
✓ Branch 36 → 37 taken 1583636 times.
✓ Branch 36 → 88 taken 4269713 times.
5853349 if (const auto token = dynamic_cast<antlr4::tree::TerminalNode *>(child)) { // Terminal node
34
2/4
✓ Branch 37 → 38 taken 1583636 times.
✗ Branch 37 → 165 not taken.
✓ Branch 38 → 39 taken 1583636 times.
✗ Branch 38 → 165 not taken.
1583636 std::string terminalCodeLoc = tokenToCodeLoc(*token->getSymbol());
35
1/2
✓ Branch 39 → 40 taken 1583636 times.
✗ Branch 39 → 163 not taken.
1583636 std::string terminalText = token->getText();
36
3/6
✓ Branch 42 → 43 taken 1583636 times.
✗ Branch 42 → 130 not taken.
✓ Branch 45 → 46 taken 1583636 times.
✗ Branch 45 → 124 not taken.
✓ Branch 46 → 47 taken 1583636 times.
✗ Branch 46 → 122 not taken.
6334544 CommonUtil::replaceAll(terminalText, "\\", "\\\\");
37
3/6
✓ Branch 53 → 54 taken 1583636 times.
✗ Branch 53 → 142 not taken.
✓ Branch 56 → 57 taken 1583636 times.
✗ Branch 56 → 136 not taken.
✓ Branch 57 → 58 taken 1583636 times.
✗ Branch 57 → 134 not taken.
4750908 CommonUtil::replaceAll(terminalText, "\"", "\\\"");
38
6/12
✓ Branch 64 → 65 taken 1583636 times.
✗ Branch 64 → 150 not taken.
✓ Branch 65 → 66 taken 1583636 times.
✗ Branch 65 → 150 not taken.
✓ Branch 66 → 67 taken 1583636 times.
✗ Branch 66 → 150 not taken.
✓ Branch 67 → 68 taken 1583636 times.
✗ Branch 67 → 150 not taken.
✓ Branch 68 → 69 taken 1583636 times.
✗ Branch 68 → 148 not taken.
✓ Branch 69 → 70 taken 1583636 times.
✗ Branch 69 → 146 not taken.
3167272 std::string terminalName = std::string(vocabulary.getSymbolicName(token->getSymbol()->getType())) + ": " + terminalText;
39
40
4/8
✓ Branch 73 → 74 taken 1583636 times.
✗ Branch 73 → 159 not taken.
✓ Branch 74 → 75 taken 1583636 times.
✗ Branch 74 → 159 not taken.
✓ Branch 75 → 76 taken 1583636 times.
✗ Branch 75 → 159 not taken.
✓ Branch 76 → 77 taken 1583636 times.
✗ Branch 76 → 159 not taken.
1583636 result << terminalCodeLoc << R"( [color="lightblue",label=")" << terminalName << "\"];\n";
41
6/12
✓ Branch 77 → 78 taken 1583636 times.
✗ Branch 77 → 158 not taken.
✓ Branch 78 → 79 taken 1583636 times.
✗ Branch 78 → 156 not taken.
✓ Branch 79 → 80 taken 1583636 times.
✗ Branch 79 → 156 not taken.
✓ Branch 80 → 81 taken 1583636 times.
✗ Branch 80 → 156 not taken.
✓ Branch 81 → 82 taken 1583636 times.
✗ Branch 81 → 156 not taken.
✓ Branch 82 → 83 taken 1583636 times.
✗ Branch 82 → 156 not taken.
1583636 result << getSpaces() << nodeId << " -> " << terminalCodeLoc << "\n";
42 1583636 } else { // Non-terminal node
43
3/6
✓ Branch 88 → 89 taken 4269713 times.
✗ Branch 88 → 170 not taken.
✓ Branch 89 → 90 taken 4269713 times.
✗ Branch 89 → 168 not taken.
✓ Branch 90 → 91 taken 4269713 times.
✗ Branch 90 → 166 not taken.
4269713 result << std::any_cast<std::string>(visit(child));
44 }
45 }
46
47
1/2
✓ Branch 104 → 105 taken 4271588 times.
✗ Branch 104 → 173 not taken.
8543176 return result.str();
48 4271588 }
49
50 11706698 std::string CSTVisualizer::getSpaces() const {
51 11706698 std::string spaces;
52
2/2
✓ Branch 6 → 4 taken 11706698 times.
✓ Branch 6 → 7 taken 11706698 times.
23413396 for (int i = 0; i < currentTabs; i++)
53
1/2
✓ Branch 4 → 5 taken 11706698 times.
✗ Branch 4 → 9 not taken.
11706698 spaces += " ";
54 11706698 return spaces;
55 } // LCOV_EXCL_LINE - false positive
56
57 5855224 std::string CSTVisualizer::tokenToCodeLoc(const antlr4::Token &token) {
58
7/14
✓ Branch 2 → 3 taken 5855224 times.
✗ Branch 2 → 27 not taken.
✓ Branch 3 → 4 taken 5855224 times.
✗ Branch 3 → 27 not taken.
✓ Branch 4 → 5 taken 5855224 times.
✗ Branch 4 → 22 not taken.
✓ Branch 5 → 6 taken 5855224 times.
✗ Branch 5 → 22 not taken.
✓ Branch 6 → 7 taken 5855224 times.
✗ Branch 6 → 20 not taken.
✓ Branch 7 → 8 taken 5855224 times.
✗ Branch 7 → 18 not taken.
✓ Branch 8 → 9 taken 5855224 times.
✗ Branch 8 → 16 not taken.
11710448 return "L" + std::to_string(token.getLine()) + "C" + std::to_string(token.getCharPositionInLine());
59 }
60
61 } // namespace spice::compiler
62