Skip to content

Commit 4cd2576

Browse files
committed
Merge branch 'topic/lal_1552' into 'master'
Integer_Types_As_Enum: ignore formal types. See merge request eng/libadalang/langkit-query-language!542
2 parents c3fb04b + d6c4960 commit 4cd2576

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

lkql_checker/share/lkql/integer_types_as_enum.lkql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ fun integer_types_as_enum(node) =
7070
|" X := 2;
7171
|" Y := Y + 1;
7272
|" end Proc;
73-
node is TypeDecl(p_is_int_type(): true)
73+
node is ConcreteTypeDecl(p_is_int_type(): true)
7474
when not [t for t in types() if t == node]
7575
and not [t for t in instantiations() if t == node]
7676
and not [t for t in arithmetic_ops() if t == node]
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
procedure Generics is
2+
generic
3+
type T is range <>; -- NOFLAG
4+
package Pkg is
5+
-- T is never used as an integer type so in theory it could be flagged
6+
-- by this rule. However, we don't want to flag formal types.
7+
type U is range 1 .. 3; -- FLAG
8+
-- make sure that concrete type declarations inside generics are still
9+
-- flagged though.
10+
end Pkg;
11+
12+
package My_Pkg is new Pkg (Integer);
13+
begin
14+
null;
15+
end Generics;

testsuite/tests/checks/integer_as_enum/test.out

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ bit.adb:2:9: rule violation: integer type may be replaced by an enumeration
22
2 | type Enum is mod 2 ** 8; -- FLAG
33
| ^^^^
44

5+
generics.adb:7:12: rule violation: integer type may be replaced by an enumeration
6+
7 | type U is range 1 .. 3; -- FLAG
7+
| ^
8+
59
op.adb:2:9: rule violation: integer type may be replaced by an enumeration
610
2 | type Enum is range 1 .. 3; -- FLAG
711
| ^^^^

0 commit comments

Comments
 (0)