Skip to content

Commit cc2aef9

Browse files
committed
lkql check: add a warning when different LKQL files declare checkers with identical name
1 parent 6e59e9f commit cc2aef9

File tree

8 files changed

+40
-1
lines changed

8 files changed

+40
-1
lines changed

lkql_jit/language/src/main/java/com/adacore/lkql_jit/checker/BaseChecker.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@ public void setAlias(String alias) {
118118
/** Create a deep copy of the current checker and return it. */
119119
public abstract BaseChecker copy();
120120

121+
/** Get the checker path name. */
122+
public String getPath() {
123+
return function.rootNode.getBody().getSourceSection().getSource().getPath();
124+
}
125+
121126
// ----- Inner classes -----
122127

123128
/** This enum represents the valid remediation levels */

lkql_jit/language/src/main/java/com/adacore/lkql_jit/runtime/GlobalScope.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,19 @@ public Map<String, BaseChecker> getCheckers() {
8686
*/
8787
@CompilerDirectives.TruffleBoundary
8888
public void addChecker(String name, BaseChecker checker) {
89-
this.checkers.put(name, checker);
89+
BaseChecker previousValue = this.checkers.put(name, checker);
90+
91+
if (previousValue != null) {
92+
System.err.println(
93+
"Warning: a checker named \"" +
94+
name +
95+
"\" from: " +
96+
previousValue.getPath() +
97+
", has been replaced by the one from: " +
98+
checker.getPath() +
99+
". Note: checkers should have unique names."
100+
);
101+
}
90102
}
91103

92104
/**
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@check(message="Rule1")
2+
fun my_rule(node) =
3+
node is DefiningName
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@check(message="Rule2")
2+
fun my_rule(node) =
3+
node is NullStmt
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@check(message="Rule3")
2+
fun my_rule(node) =
3+
node is DefiningName
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
procedure P is -- FLAG
2+
begin
3+
null;
4+
end P;
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Warning: a checker named "my_rule" from: <test-dir>/rule1.lkql, has been replaced by the one from: <test-dir>/rule2.lkql. Note: checkers should have unique names.
2+
Warning: a checker named "my_rule" from: <test-dir>/rule2.lkql, has been replaced by the one from: <test-dir>/rule3.lkql. Note: checkers should have unique names.
3+
test.adb:1:11: rule violation: Rule3
4+
1 | procedure P is -- FLAG
5+
| ^
6+
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
driver: 'checker'
2+
rule_name: My_Rule
3+
input_sources: [test.adb]

0 commit comments

Comments
 (0)