mirror of
https://github.com/github/codeql.git
synced 2026-02-02 08:12:58 +01:00
Merge pull request #13213 from geoffw0/hideenumcasedecl
Swift: Add EnumDecl.getEnumElement(_)
This commit is contained in:
5
swift/ql/.generated.list
generated
5
swift/ql/.generated.list
generated
@@ -24,7 +24,6 @@ lib/codeql/swift/elements/decl/ConcreteVarDecl.qll 94bcbdd91f461295c5b6b49fa597b
|
||||
lib/codeql/swift/elements/decl/ConcreteVarDeclConstructor.qll 4b6a9f458db5437f9351b14464b3809a78194029554ea818b3e18272c17afba3 a60d695b0d0ffa917ad01908bec2beaa663e644eddb00fb370fbc906623775d4
|
||||
lib/codeql/swift/elements/decl/DeinitializerConstructor.qll 85f29a68ee5c0f2606c51e7a859f5f45fbc5f373e11b5e9c0762c9ba5cff51c4 6b28f69b8125d0393607dbad8e7a8aaa6469b9c671f67e8e825cc63964ed2f5d
|
||||
lib/codeql/swift/elements/decl/EnumCaseDeclConstructor.qll 8c907544170671f713a8665d294eeefdbe78a607c2f16e2c630ea9c33f484baf eec83efc930683628185dbdad8f73311aad510074d168a53d85ea09d13f1f7e1
|
||||
lib/codeql/swift/elements/decl/EnumDecl.qll 29f9d8cbfb19c174af9a666162fd918af7f962fa5d97756105e78d5eec38cb9e 779940ebdbd510eb651972c57eb84b04af39c44ef59a8c307a44549ab730febb
|
||||
lib/codeql/swift/elements/decl/EnumDeclConstructor.qll 642bbfb71e917d84695622f3b2c7b36bf5be4e185358609810267ab1fc4e221b f6e06d79e7ff65fbabf72c553508b67406fb59c577215d28cc47971d34b6af05
|
||||
lib/codeql/swift/elements/decl/EnumElementDeclConstructor.qll 736074246a795c14a30a8ec7bb8da595a729983187887294e485487309919dc6 4614fb380fad7af1b5fb8afce920f3e7350378254ece60d19722046046672fbb
|
||||
lib/codeql/swift/elements/decl/ExtensionDeclConstructor.qll 4f811e3332720327d2b9019edbb2fa70fb24322e72881afc040e7927452409d6 554f9832311dfc30762507e0bd4b25c5b6fdb9d0c4e8252cc5a1ef1033fafacb
|
||||
@@ -384,7 +383,7 @@ lib/codeql/swift/generated/OtherAvailabilitySpec.qll 0e26a203b26ff0581b7396b0c6d
|
||||
lib/codeql/swift/generated/ParentChild.qll f490202e849b9cbd550ee9d758644b85d43e60d81413e6c28df2850fb1e9a2d6 6b95aeab6b53a880b230ad0c96b6deb519a7368898c844632ae96090de59df99
|
||||
lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll f82d9ca416fe8bd59b5531b65b1c74c9f317b3297a6101544a11339a1cffce38 7f5c6d3309e66c134107afe55bae76dfc9a72cb7cdd6d4c3706b6b34cee09fa0
|
||||
lib/codeql/swift/generated/PureSynthConstructors.qll 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98
|
||||
lib/codeql/swift/generated/Raw.qll 8d4880e5ee1fdd120adeb7bf0dfa1399e7b1a53b2cc7598aed8e15cbf996d1c0 da0d446347d29f5cd05281c17c24e87610f31c32adb7e05ab8f3a26bed55bd90
|
||||
lib/codeql/swift/generated/Raw.qll cc504ec0771dbb461367944a5c95186047bad59a087a9bda74ef346c7b89b0d3 0b5973d56edd8099b645ea1f7be2a4934e62d5fa165261c63299ac2cf634437d
|
||||
lib/codeql/swift/generated/Synth.qll 551fdf7e4b53f9ee1314d1bb42c2638cf82f45bfa1f40a635dfa7b6072e4418c 9ab178464700a19951fc5285acacda4913addee81515d8e072b3d7055935a814
|
||||
lib/codeql/swift/generated/SynthConstructors.qll 2f801bd8b0db829b0253cd459ed3253c1fdfc55dce68ebc53e7fec138ef0aca4 2f801bd8b0db829b0253cd459ed3253c1fdfc55dce68ebc53e7fec138ef0aca4
|
||||
lib/codeql/swift/generated/UnknownFile.qll 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6
|
||||
@@ -398,7 +397,7 @@ lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll 4169d083104f9c089223ed3c5
|
||||
lib/codeql/swift/generated/decl/CapturedDecl.qll f8b69887acb35cc8de572984fef83eb08649845b49179b68d3afef36b526bddb 94ab461ef9ab5983dece5e2b1865b6056e381e5c06f2a3ec4dfde634a9368e59
|
||||
lib/codeql/swift/generated/decl/ClassDecl.qll a60e8af2fdbcd20cfa2049660c8bcbbc00508fbd3dde72b4778317dfc23c5ae4 a60e8af2fdbcd20cfa2049660c8bcbbc00508fbd3dde72b4778317dfc23c5ae4
|
||||
lib/codeql/swift/generated/decl/ConcreteVarDecl.qll 4801ccc477480c4bc4fc117976fbab152e081064e064c97fbb0f37199cb1d0a8 4d7cfbf5b39b307dd673781adc220fdef04213f2e3d080004fa658ba6d3acb8d
|
||||
lib/codeql/swift/generated/decl/Decl.qll 1d620c8e43df3cb46e5446dc9f6592205040c4d2b03c2ce1e491d7628f8904d0 b02514d7548a5a1dca39a148974a1b4dfeb681ebf81ad80f78d53ea48bab6133
|
||||
lib/codeql/swift/generated/decl/Decl.qll e9a27347096be6b0d1f9e555ba98867b4e3f1629bc4c24ed4c737921e416ef8c 5b9d839d3cce81a282fda869d83a33138c9587c76c1547692811aed05c44aa46
|
||||
lib/codeql/swift/generated/decl/Deinitializer.qll 816ecd92552915d06952517606a6e4c67bc53d7e7d9f5c09b7276e70612627fe 816ecd92552915d06952517606a6e4c67bc53d7e7d9f5c09b7276e70612627fe
|
||||
lib/codeql/swift/generated/decl/EnumCaseDecl.qll 564718862a9fd5b99427591a83921bf57aac2074041b5b335577599e8eefda16 90899d7d7a9c695576ae4b24d19deb05e45e0e85c954ab41de154d5cc521019e
|
||||
lib/codeql/swift/generated/decl/EnumDecl.qll fa4490d511ee537751a4fab2478e65250ff3deba43c74db5341184c9ba25b534 fa4490d511ee537751a4fab2478e65250ff3deba43c74db5341184c9ba25b534
|
||||
|
||||
1
swift/ql/.gitattributes
generated
vendored
1
swift/ql/.gitattributes
generated
vendored
@@ -26,7 +26,6 @@
|
||||
/lib/codeql/swift/elements/decl/ConcreteVarDeclConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/DeinitializerConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/EnumCaseDeclConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/EnumDecl.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/EnumDeclConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/EnumElementDeclConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/ExtensionDeclConstructor.qll linguist-generated
|
||||
|
||||
@@ -1,4 +1,36 @@
|
||||
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
|
||||
private import codeql.swift.generated.decl.EnumDecl
|
||||
private import codeql.swift.elements.decl.EnumCaseDecl
|
||||
private import codeql.swift.elements.decl.EnumElementDecl
|
||||
private import codeql.swift.elements.decl.Decl
|
||||
|
||||
class EnumDecl extends Generated::EnumDecl { }
|
||||
/**
|
||||
* An enumeration declaration, for example:
|
||||
* ```
|
||||
* enum MyColours {
|
||||
* case red
|
||||
* case green
|
||||
* case blue
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class EnumDecl extends Generated::EnumDecl {
|
||||
/**
|
||||
* Gets the `index`th enumeration element of this enumeration (0-based).
|
||||
*/
|
||||
final EnumElementDecl getEnumElement(int index) {
|
||||
result =
|
||||
rank[index + 1](int memberIndex, Decl d |
|
||||
d = this.getMember(memberIndex) and
|
||||
d instanceof EnumElementDecl
|
||||
|
|
||||
d order by memberIndex
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an enumeration element of this enumeration.
|
||||
*/
|
||||
final EnumElementDecl getAnEnumElement() {
|
||||
result = this.getMember(_).(EnumCaseDecl).getElement(_)
|
||||
}
|
||||
}
|
||||
|
||||
4
swift/ql/lib/codeql/swift/generated/Raw.qll
generated
4
swift/ql/lib/codeql/swift/generated/Raw.qll
generated
@@ -310,6 +310,10 @@ module Raw {
|
||||
|
||||
/**
|
||||
* Gets the `index`th member of this declaration (0-based).
|
||||
*
|
||||
* Prefer to use more specific methods (such as `EnumDecl.getEnumElement`) rather than relying
|
||||
* on the order of members given by `getMember`. In some cases the order of members may not
|
||||
* align with expectations, and could change in future releases.
|
||||
*/
|
||||
Decl getMember(int index) { decl_members(this, index, result) }
|
||||
}
|
||||
|
||||
@@ -39,6 +39,10 @@ module Generated {
|
||||
|
||||
/**
|
||||
* Gets the `index`th member of this declaration (0-based).
|
||||
*
|
||||
* Prefer to use more specific methods (such as `EnumDecl.getEnumElement`) rather than relying
|
||||
* on the order of members given by `getMember`. In some cases the order of members may not
|
||||
* align with expectations, and could change in future releases.
|
||||
*/
|
||||
final Decl getMember(int index) {
|
||||
exists(Decl immediate |
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
| enumdecl.swift:2:1:6:1 | MyColours | (EnumDecl), .getEnumElement(0) = red, .getEnumElement(1) = green, .getEnumElement(2) = yellow, .getEnumElement(3) = blue, .getType = MyColours |
|
||||
| enumdecl.swift:3:2:3:7 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyColours, .getElement(0) = red |
|
||||
| enumdecl.swift:3:7:3:7 | red | (EnumElementDecl), .getDeclaringDecl = MyColours |
|
||||
| enumdecl.swift:4:2:4:14 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyColours, .getElement(0) = green, .getElement(1) = yellow |
|
||||
| enumdecl.swift:4:7:4:7 | green | (EnumElementDecl), .getDeclaringDecl = MyColours |
|
||||
| enumdecl.swift:4:14:4:14 | yellow | (EnumElementDecl), .getDeclaringDecl = MyColours |
|
||||
| enumdecl.swift:5:2:5:7 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyColours, .getElement(0) = blue |
|
||||
| enumdecl.swift:5:7:5:7 | blue | (EnumElementDecl), .getDeclaringDecl = MyColours |
|
||||
| enumdecl.swift:8:1:11:1 | MyContainer | (EnumDecl), .getEnumElement(0) = str, .getEnumElement(1) = pair, .getType = MyContainer |
|
||||
| enumdecl.swift:9:2:9:17 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyContainer, .getElement(0) = str |
|
||||
| enumdecl.swift:9:7:9:17 | str | (EnumElementDecl), .getDeclaringDecl = MyContainer, .getParam(0) = _ |
|
||||
| enumdecl.swift:10:2:10:26 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyContainer, .getElement(0) = pair |
|
||||
| enumdecl.swift:10:7:10:26 | pair | (EnumElementDecl), .getDeclaringDecl = MyContainer, .getParam(0) = x, .getParam(1) = y |
|
||||
| enumdecl.swift:13:1:16:1 | MyNumbers | (EnumDecl), .getEnumElement(0) = one, .getEnumElement(1) = two, .getEnumElement(2) = three, .getEnumElement(3) = four, .getType = MyNumbers |
|
||||
| enumdecl.swift:14:2:14:16 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyNumbers, .getElement(0) = one, .getElement(1) = two |
|
||||
| enumdecl.swift:14:7:14:13 | one | (EnumElementDecl), .getDeclaringDecl = MyNumbers |
|
||||
| enumdecl.swift:14:16:14:16 | two | (EnumElementDecl), .getDeclaringDecl = MyNumbers |
|
||||
| enumdecl.swift:15:2:15:14 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyNumbers, .getElement(0) = three, .getElement(1) = four |
|
||||
| enumdecl.swift:15:7:15:7 | three | (EnumElementDecl), .getDeclaringDecl = MyNumbers |
|
||||
| enumdecl.swift:15:14:15:14 | four | (EnumElementDecl), .getDeclaringDecl = MyNumbers |
|
||||
| enumdecl.swift:18:1:20:1 | MyGreek | (EnumDecl), .getEnumElement(0) = alpha, .getEnumElement(1) = beta, .getEnumElement(2) = gamma, .getEnumElement(3) = delta, .getEnumElement(4) = epsilon, .getType = MyGreek |
|
||||
| enumdecl.swift:19:2:19:34 | case ... | (EnumCaseDecl), .getDeclaringDecl = MyGreek, .getElement(0) = alpha, .getElement(1) = beta, .getElement(2) = gamma, .getElement(3) = delta, .getElement(4) = epsilon |
|
||||
| enumdecl.swift:19:7:19:7 | alpha | (EnumElementDecl), .getDeclaringDecl = MyGreek |
|
||||
| enumdecl.swift:19:14:19:14 | beta | (EnumElementDecl), .getDeclaringDecl = MyGreek |
|
||||
| enumdecl.swift:19:20:19:20 | gamma | (EnumElementDecl), .getDeclaringDecl = MyGreek |
|
||||
| enumdecl.swift:19:27:19:27 | delta | (EnumElementDecl), .getDeclaringDecl = MyGreek |
|
||||
| enumdecl.swift:19:34:19:34 | epsilon | (EnumElementDecl), .getDeclaringDecl = MyGreek |
|
||||
@@ -0,0 +1,25 @@
|
||||
import swift
|
||||
|
||||
string describe(Decl d) {
|
||||
d instanceof EnumDecl and result = "(EnumDecl)"
|
||||
or
|
||||
d instanceof EnumCaseDecl and result = "(EnumCaseDecl)"
|
||||
or
|
||||
d instanceof EnumElementDecl and result = "(EnumElementDecl)"
|
||||
or
|
||||
result = ".getType = " + d.(EnumDecl).getType().toString()
|
||||
or
|
||||
result = ".getDeclaringDecl = " + d.getDeclaringDecl().toString()
|
||||
or
|
||||
exists(int i |
|
||||
result = ".getElement(" + i.toString() + ") = " + d.(EnumCaseDecl).getElement(i).toString()
|
||||
or
|
||||
result = ".getParam(" + i.toString() + ") = " + d.(EnumElementDecl).getParam(i).toString()
|
||||
or
|
||||
result = ".getEnumElement(" + i.toString() + ") = " + d.(EnumDecl).getEnumElement(i).toString()
|
||||
)
|
||||
}
|
||||
|
||||
from Decl d
|
||||
where d.getLocation().getFile().getName() != ""
|
||||
select d, strictconcat(describe(d), ", ")
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
enum MyColours {
|
||||
case red
|
||||
case green, yellow
|
||||
case blue
|
||||
}
|
||||
|
||||
enum MyContainer {
|
||||
case str(String)
|
||||
case pair(x: Int, y: Int)
|
||||
}
|
||||
|
||||
enum MyNumbers: Int {
|
||||
case one = 1, two
|
||||
case three, four
|
||||
}
|
||||
|
||||
enum MyGreek {
|
||||
case alpha, beta, gamma, delta, epsilon
|
||||
}
|
||||
@@ -80,7 +80,11 @@ class Type(Element):
|
||||
@group("decl")
|
||||
class Decl(AstNode):
|
||||
module: "ModuleDecl"
|
||||
members: list["Decl"] | child
|
||||
members: list["Decl"] | child | desc("""
|
||||
Prefer to use more specific methods (such as `EnumDecl.getEnumElement`) rather than relying
|
||||
on the order of members given by `getMember`. In some cases the order of members may not
|
||||
align with expectations, and could change in future releases.
|
||||
""")
|
||||
|
||||
@group("expr")
|
||||
class Expr(AstNode):
|
||||
|
||||
Reference in New Issue
Block a user