Line | Branch | Exec | Source |
---|---|---|---|
1 | // Copyright (c) 2021-2024 ChilliBits. All rights reserved. | ||
2 | |||
3 | #include "CompilerWarning.h" | ||
4 | |||
5 | #include <util/CodeLoc.h> | ||
6 | |||
7 | namespace spice::compiler { | ||
8 | |||
9 | /** | ||
10 | * Constructor: Used in case that the exact code position where the warning occurred is known | ||
11 | * | ||
12 | * @param codeLoc Code location, where the warning occurred | ||
13 | * @param type Type of the warning | ||
14 | * @param message Warning message suffix | ||
15 | */ | ||
16 | 1250 | CompilerWarning::CompilerWarning(const CodeLoc &codeLoc, const CompilerWarningType type, const std::string &message) { | |
17 |
7/14✓ Branch 1 taken 1250 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1250 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 1250 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1250 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 1250 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 1250 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 1250 times.
✗ Branch 20 not taken.
|
1250 | warningMessage = "[Warning] " + codeLoc.toPrettyString() + ": " + getMessagePrefix(type) + ": " + message; |
18 | 1250 | } | |
19 | |||
20 | /** | ||
21 | * Constructor: Used in case the exact code position where the warning occurred is not known | ||
22 | * | ||
23 | * @param type Type of the warning | ||
24 | * @param message Warning message suffix | ||
25 | */ | ||
26 | ✗ | CompilerWarning::CompilerWarning(CompilerWarningType type, const std::string &message) { | |
27 | ✗ | warningMessage = "[Warning] " + getMessagePrefix(type) + ": " + message; | |
28 | ✗ | } | |
29 | |||
30 | /** | ||
31 | * Print the compiler warning to the standard error output | ||
32 | */ | ||
33 | 144 | void CompilerWarning::print() const { std::cout << "\033[33m" << warningMessage << "\033[0m\n"; } | |
34 | |||
35 | /** | ||
36 | * Get the prefix of the warning message for a particular error | ||
37 | * | ||
38 | * @param warningType Type of the warning | ||
39 | * @return Prefix string for the warning type | ||
40 | */ | ||
41 | 1250 | std::string CompilerWarning::getMessagePrefix(CompilerWarningType warningType) { | |
42 |
17/20✓ Branch 0 taken 11 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 19 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 4 times.
✓ Branch 6 taken 10 times.
✓ Branch 7 taken 18 times.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 21 times.
✓ Branch 10 taken 132 times.
✓ Branch 11 taken 5 times.
✓ Branch 12 taken 11 times.
✓ Branch 13 taken 1006 times.
✓ Branch 14 taken 1 times.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 5 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
1250 | switch (warningType) { |
43 | 11 | case UNUSED_FUNCTION: | |
44 |
1/2✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
|
22 | return "Unused function"; |
45 | 2 | case UNUSED_PROCEDURE: | |
46 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | return "Unused procedure"; |
47 | 19 | case UNUSED_METHOD: | |
48 |
1/2✓ Branch 1 taken 19 times.
✗ Branch 2 not taken.
|
38 | return "Unused method"; |
49 | 2 | case UNUSED_STRUCT: | |
50 |
1/2✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
|
4 | return "Unused struct"; |
51 | 1 | case UNUSED_INTERFACE: | |
52 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "Unused interface"; |
53 | 4 | case UNUSED_IMPORT: | |
54 |
1/2✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
|
8 | return "Unused import"; |
55 | 10 | case UNUSED_FIELD: | |
56 |
1/2✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
|
20 | return "Unused field"; |
57 | 18 | case UNUSED_ENUM_ITEM: | |
58 |
1/2✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
|
36 | return "Unused enum item"; |
59 | 1 | case UNUSED_ALIAS: | |
60 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "Unused type alias"; |
61 | 21 | case UNUSED_VARIABLE: | |
62 |
1/2✓ Branch 1 taken 21 times.
✗ Branch 2 not taken.
|
42 | return "Unused variable"; |
63 | 132 | case UNUSED_RETURN_VALUE: | |
64 |
1/2✓ Branch 1 taken 132 times.
✗ Branch 2 not taken.
|
264 | return "Unused return value"; |
65 | 5 | case UNREACHABLE_CODE: | |
66 |
1/2✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
|
10 | return "Unreachable code detected"; |
67 | 11 | case SHADOWED_VARIABLE: | |
68 |
1/2✓ Branch 1 taken 11 times.
✗ Branch 2 not taken.
|
22 | return "Shadowed variable"; |
69 | 1006 | case IDENTITY_CAST: | |
70 |
1/2✓ Branch 1 taken 1006 times.
✗ Branch 2 not taken.
|
2012 | return "Identity cast"; |
71 | 1 | case SINGLE_GENERIC_TYPE_CONDITION: | |
72 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "Only one type condition"; |
73 | 1 | case BOOL_ASSIGN_AS_CONDITION: | |
74 |
1/2✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
|
2 | return "Bool assignment as condition"; |
75 | 5 | case ASYNC_LAMBDA_CAPTURE_RULE_VIOLATION: | |
76 |
1/2✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
|
10 | return "Lambda violates async lambda capture rules"; |
77 | ✗ | case UNINSTALL_FAILED: | |
78 | ✗ | return "Uninstall failed"; | |
79 | ✗ | case VERIFIER_DISABLED: | |
80 | ✗ | return "Verifier disabled"; | |
81 | } | ||
82 | − | return "Unknown warning"; // GCOV_EXCL_LINE | |
83 | } | ||
84 | |||
85 | } // namespace spice::compiler | ||
86 |