mirror of
https://github.com/github/codeql.git
synced 2026-04-25 08:45:14 +02:00
Swift: add 5.8 update QL test
This commit is contained in:
committed by
Alex Denisov
parent
396b57696c
commit
75684eebe9
256
swift/ql/test/extractor-tests/updates/PrintAst.expected
Normal file
256
swift/ql/test/extractor-tests/updates/PrintAst.expected
Normal file
@@ -0,0 +1,256 @@
|
||||
v5.8.swift:
|
||||
# 1| [Comment] // https://github.com/apple/swift/blob/main/CHANGELOG.md#swift-58
|
||||
# 1|
|
||||
# 4| [StructDecl] Temperature
|
||||
# 5| getMember(0): [PatternBindingDecl] var ... = ...
|
||||
# 5| getPattern(0): [TypedPattern] ... as ...
|
||||
# 5| getSubPattern(): [NamedPattern] degreesCelsius
|
||||
# 5| getTypeRepr(): [TypeRepr] Double
|
||||
# 5| getMember(1): [ConcreteVarDecl] degreesCelsius
|
||||
# 5| Type = Double
|
||||
# 5| getAccessorDecl(0): [AccessorDecl] get
|
||||
# 5| InterfaceType = (Temperature) -> () -> Double
|
||||
# 5| getSelfParam(): [ParamDecl] self
|
||||
# 5| Type = Temperature
|
||||
# 5| getBody(): [BraceStmt] { ... }
|
||||
#-----| getElement(0): [ReturnStmt] return ...
|
||||
#-----| getResult(): [MemberRefExpr] .degreesCelsius
|
||||
#-----| getBase(): [DeclRefExpr] self
|
||||
# 5| getAccessorDecl(1): [AccessorDecl] set
|
||||
# 5| InterfaceType = (inout Temperature) -> (Double) -> ()
|
||||
# 5| getSelfParam(): [ParamDecl] self
|
||||
# 5| Type = Temperature
|
||||
# 5| getParam(0): [ParamDecl] value
|
||||
# 5| Type = Double
|
||||
# 5| getBody(): [BraceStmt] { ... }
|
||||
#-----| getElement(0): [AssignExpr] ... = ...
|
||||
#-----| getDest(): [MemberRefExpr] .degreesCelsius
|
||||
#-----| getBase(): [DeclRefExpr] self
|
||||
#-----| getSource(): [DeclRefExpr] value
|
||||
# 5| getAccessorDecl(2): [AccessorDecl] _modify
|
||||
# 5| InterfaceType = (inout Temperature) -> () -> ()
|
||||
# 5| getSelfParam(): [ParamDecl] self
|
||||
# 5| Type = Temperature
|
||||
# 5| getBody(): [BraceStmt] { ... }
|
||||
# 5| getElement(0): [YieldStmt] yield ...
|
||||
#-----| getResult(0): [InOutExpr] &...
|
||||
#-----| getSubExpr(): [MemberRefExpr] .degreesCelsius
|
||||
#-----| getBase(): [DeclRefExpr] self
|
||||
# 4| getMember(2): [ConstructorDecl] Temperature.init(degreesCelsius:)
|
||||
# 4| InterfaceType = (Temperature.Type) -> (Double) -> Temperature
|
||||
# 4| getSelfParam(): [ParamDecl] self
|
||||
# 4| Type = Temperature
|
||||
# 4| getParam(0): [ParamDecl] degreesCelsius
|
||||
# 4| Type = Double
|
||||
# 7| [Comment] // ...
|
||||
# 7|
|
||||
# 10| [ExtensionDecl] extension of Temperature
|
||||
# 13| getMember(0): [PatternBindingDecl] var ... = ...
|
||||
# 13| getPattern(0): [TypedPattern] ... as ...
|
||||
# 13| getSubPattern(): [NamedPattern] degreesFahrenheit
|
||||
# 13| getTypeRepr(): [TypeRepr] Double
|
||||
# 13| getMember(1): [ConcreteVarDecl] degreesFahrenheit
|
||||
# 13| Type = Double
|
||||
# 13| getAccessorDecl(0): [AccessorDecl] get
|
||||
# 13| InterfaceType = (Temperature) -> () -> Double
|
||||
# 13| getSelfParam(): [ParamDecl] self
|
||||
# 13| Type = Temperature
|
||||
# 13| getBody(): [BraceStmt] { ... }
|
||||
# 14| getElement(0): [ReturnStmt] return ...
|
||||
# 14| getResult(): [BinaryExpr] ... .+(_:_:) ...
|
||||
# 14| getFunction(): [MethodLookupExpr] .+(_:_:)
|
||||
# 14| getBase(): [TypeExpr] Double.Type
|
||||
# 14| getTypeRepr(): [TypeRepr] Double
|
||||
# 14| getMethodRef(): [DeclRefExpr] +(_:_:)
|
||||
# 14| getArgument(0): [Argument] : ... ./(_:_:) ...
|
||||
# 14| getExpr(): [BinaryExpr] ... ./(_:_:) ...
|
||||
# 14| getFunction(): [MethodLookupExpr] ./(_:_:)
|
||||
# 14| getBase(): [TypeExpr] Double.Type
|
||||
# 14| getTypeRepr(): [TypeRepr] Double
|
||||
# 14| getMethodRef(): [DeclRefExpr] /(_:_:)
|
||||
# 14| getArgument(0): [Argument] : ... .*(_:_:) ...
|
||||
# 14| getExpr(): [BinaryExpr] ... .*(_:_:) ...
|
||||
# 14| getFunction(): [MethodLookupExpr] .*(_:_:)
|
||||
# 14| getBase(): [TypeExpr] Double.Type
|
||||
# 14| getTypeRepr(): [TypeRepr] Double
|
||||
# 14| getMethodRef(): [DeclRefExpr] *(_:_:)
|
||||
# 14| getArgument(0): [Argument] : .degreesCelsius
|
||||
# 14| getExpr(): [MemberRefExpr] .degreesCelsius
|
||||
# 14| getBase(): [DeclRefExpr] self
|
||||
# 14| getArgument(1): [Argument] : 9
|
||||
# 14| getExpr(): [IntegerLiteralExpr] 9
|
||||
# 14| getArgument(1): [Argument] : 5
|
||||
# 14| getExpr(): [IntegerLiteralExpr] 5
|
||||
# 14| getExpr().getFullyConverted(): [ParenExpr] (...)
|
||||
# 14| getArgument(1): [Argument] : 32
|
||||
# 14| getExpr(): [IntegerLiteralExpr] 32
|
||||
# 18| [ConcreteFuncDecl] collectionDowncast(_:)
|
||||
# 18| InterfaceType = ([Any]) -> ()
|
||||
# 18| getParam(0): [ParamDecl] arr
|
||||
# 18| Type = [Any]
|
||||
# 18| getBody(): [BraceStmt] { ... }
|
||||
# 19| getElement(0): [SwitchStmt] switch arr { ... }
|
||||
# 19| getExpr(): [DeclRefExpr] arr
|
||||
# 20| getCase(0): [CaseStmt] case ...
|
||||
# 21| getBody(): [BraceStmt] { ... }
|
||||
# 21| getElement(0): [IntegerLiteralExpr] 0
|
||||
# 20| getLabel(0): [CaseLabelItem] ... is ...
|
||||
# 20| getPattern(): [IsPattern] ... is ...
|
||||
# 20| getCastTypeRepr(): [TypeRepr] [Int]
|
||||
# 20| getSubPattern(): [NamedPattern] ints
|
||||
# 20| getPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 22| getCase(1): [CaseStmt] case ...
|
||||
# 23| getBody(): [BraceStmt] { ... }
|
||||
# 23| getElement(0): [IntegerLiteralExpr] 1
|
||||
# 22| getLabel(0): [CaseLabelItem] ... is ...
|
||||
# 22| getPattern(): [IsPattern] ... is ...
|
||||
# 22| getCastTypeRepr(): [TypeRepr] [Bool]
|
||||
# 24| getCase(2): [CaseStmt] case ...
|
||||
# 25| getBody(): [BraceStmt] { ... }
|
||||
# 25| getElement(0): [IntegerLiteralExpr] 2
|
||||
# 24| getLabel(0): [CaseLabelItem] _
|
||||
# 24| getPattern(): [AnyPattern] _
|
||||
# 20| [ConcreteVarDecl] ints
|
||||
# 20| Type = [Int]
|
||||
# 29| [StructDecl] Button
|
||||
# 30| getMember(0): [PatternBindingDecl] var ... = ...
|
||||
#-----| getInit(0): [NilLiteralExpr] nil
|
||||
# 30| getPattern(0): [TypedPattern] ... as ...
|
||||
# 30| getSubPattern(): [NamedPattern] tapHandler
|
||||
# 30| getTypeRepr(): [TypeRepr] (() -> ())?
|
||||
# 30| getMember(1): [ConcreteVarDecl] tapHandler
|
||||
# 30| Type = (() -> ())?
|
||||
# 30| getAccessorDecl(0): [AccessorDecl] get
|
||||
# 30| InterfaceType = (Button) -> () -> (() -> ())?
|
||||
# 30| getSelfParam(): [ParamDecl] self
|
||||
# 30| Type = Button
|
||||
# 30| getBody(): [BraceStmt] { ... }
|
||||
#-----| getElement(0): [ReturnStmt] return ...
|
||||
#-----| getResult(): [MemberRefExpr] .tapHandler
|
||||
#-----| getBase(): [DeclRefExpr] self
|
||||
# 30| getAccessorDecl(1): [AccessorDecl] set
|
||||
# 30| InterfaceType = (inout Button) -> ((() -> ())?) -> ()
|
||||
# 30| getSelfParam(): [ParamDecl] self
|
||||
# 30| Type = Button
|
||||
# 30| getParam(0): [ParamDecl] value
|
||||
# 30| Type = (() -> ())?
|
||||
# 30| getBody(): [BraceStmt] { ... }
|
||||
#-----| getElement(0): [AssignExpr] ... = ...
|
||||
#-----| getDest(): [MemberRefExpr] .tapHandler
|
||||
#-----| getBase(): [DeclRefExpr] self
|
||||
#-----| getSource(): [DeclRefExpr] value
|
||||
# 30| getAccessorDecl(2): [AccessorDecl] _modify
|
||||
# 30| InterfaceType = (inout Button) -> () -> ()
|
||||
# 30| getSelfParam(): [ParamDecl] self
|
||||
# 30| Type = Button
|
||||
# 30| getBody(): [BraceStmt] { ... }
|
||||
# 30| getElement(0): [YieldStmt] yield ...
|
||||
#-----| getResult(0): [InOutExpr] &...
|
||||
#-----| getSubExpr(): [MemberRefExpr] .tapHandler
|
||||
#-----| getBase(): [DeclRefExpr] self
|
||||
# 29| getMember(2): [ConstructorDecl] Button.init()
|
||||
# 29| InterfaceType = (Button.Type) -> () -> Button
|
||||
# 29| getSelfParam(): [ParamDecl] self
|
||||
# 29| Type = Button
|
||||
# 29| getBody(): [BraceStmt] { ... }
|
||||
# 29| getElement(0): [ReturnStmt] return
|
||||
# 29| getMember(3): [ConstructorDecl] Button.init(tapHandler:)
|
||||
# 29| InterfaceType = (Button.Type) -> ((() -> ())?) -> Button
|
||||
# 29| getSelfParam(): [ParamDecl] self
|
||||
# 29| Type = Button
|
||||
# 29| getParam(0): [ParamDecl] tapHandler
|
||||
# 29| Type = (() -> ())?
|
||||
# 33| [ClassDecl] ViewController
|
||||
# 34| getMember(0): [PatternBindingDecl] var ... = ...
|
||||
# 34| getInit(0): [CallExpr] call to Button.init()
|
||||
# 34| getFunction(): [MethodLookupExpr] Button.init()
|
||||
# 34| getBase(): [TypeExpr] Button.Type
|
||||
# 34| getTypeRepr(): [TypeRepr] Button
|
||||
# 34| getMethodRef(): [DeclRefExpr] Button.init()
|
||||
# 34| getPattern(0): [TypedPattern] ... as ...
|
||||
# 34| getSubPattern(): [NamedPattern] button
|
||||
# 34| getTypeRepr(): [TypeRepr] Button
|
||||
# 34| getMember(1): [ConcreteVarDecl] button
|
||||
# 34| Type = Button
|
||||
# 34| getAccessorDecl(0): [AccessorDecl] get
|
||||
# 34| InterfaceType = (ViewController) -> () -> Button
|
||||
# 34| getSelfParam(): [ParamDecl] self
|
||||
# 34| Type = ViewController
|
||||
# 34| getBody(): [BraceStmt] { ... }
|
||||
#-----| getElement(0): [ReturnStmt] return ...
|
||||
#-----| getResult(): [MemberRefExpr] .button
|
||||
#-----| getBase(): [DeclRefExpr] self
|
||||
# 34| getAccessorDecl(1): [AccessorDecl] set
|
||||
# 34| InterfaceType = (ViewController) -> (Button) -> ()
|
||||
# 34| getSelfParam(): [ParamDecl] self
|
||||
# 34| Type = ViewController
|
||||
# 34| getParam(0): [ParamDecl] value
|
||||
# 34| Type = Button
|
||||
# 34| getBody(): [BraceStmt] { ... }
|
||||
#-----| getElement(0): [AssignExpr] ... = ...
|
||||
#-----| getDest(): [MemberRefExpr] .button
|
||||
#-----| getBase(): [DeclRefExpr] self
|
||||
#-----| getSource(): [DeclRefExpr] value
|
||||
# 34| getAccessorDecl(2): [AccessorDecl] _modify
|
||||
# 34| InterfaceType = (ViewController) -> () -> ()
|
||||
# 34| getSelfParam(): [ParamDecl] self
|
||||
# 34| Type = ViewController
|
||||
# 34| getBody(): [BraceStmt] { ... }
|
||||
# 34| getElement(0): [YieldStmt] yield ...
|
||||
#-----| getResult(0): [InOutExpr] &...
|
||||
#-----| getSubExpr(): [MemberRefExpr] .button
|
||||
#-----| getBase(): [DeclRefExpr] self
|
||||
# 36| getMember(2): [ConcreteFuncDecl] setup()
|
||||
# 36| InterfaceType = (ViewController) -> () -> ()
|
||||
# 36| getSelfParam(): [ParamDecl] self
|
||||
# 36| Type = ViewController
|
||||
# 36| getBody(): [BraceStmt] { ... }
|
||||
# 37| getElement(0): [AssignExpr] ... = ...
|
||||
# 37| getDest(): [MemberRefExpr] .tapHandler
|
||||
# 37| getBase(): [MemberRefExpr] .button
|
||||
# 37| getBase(): [DeclRefExpr] self
|
||||
# 37| getSource(): [CaptureListExpr] { ... }
|
||||
# 37| getBindingDecl(0): [PatternBindingDecl] var ... = ...
|
||||
# 37| getInit(0): [DeclRefExpr] self
|
||||
# 37| getInit(0).getFullyConverted(): [InjectIntoOptionalExpr] (ViewController?) ...
|
||||
# 37| getPattern(0): [NamedPattern] self
|
||||
# 37| getClosureBody(): [ClosureExpr] { ... }
|
||||
# 37| getBody(): [BraceStmt] { ... }
|
||||
# 38| getElement(0): [GuardStmt] guard ... else { ... }
|
||||
# 38| getCondition(): [StmtCondition] StmtCondition
|
||||
# 38| getElement(0): [ConditionElement] let ...? = ...
|
||||
# 38| getPattern(): [OptionalSomePattern] let ...?
|
||||
# 38| getSubPattern(): [NamedPattern] self
|
||||
# 38| getSubPattern().getFullyUnresolved(): [BindingPattern] let ...
|
||||
# 38| getInitializer(): [DeclRefExpr] self
|
||||
# 38| getInitializer().getFullyConverted(): [LoadExpr] (ViewController?) ...
|
||||
# 38| getBody(): [BraceStmt] { ... }
|
||||
# 38| getElement(0): [ReturnStmt] return
|
||||
# 39| getElement(1): [CallExpr] call to dismiss()
|
||||
# 39| getFunction(): [MethodLookupExpr] .dismiss()
|
||||
# 39| getBase(): [DeclRefExpr] self
|
||||
# 39| getMethodRef(): [DeclRefExpr] dismiss()
|
||||
# 38| getCapture(0): [CapturedDecl] self
|
||||
# 37| getSource().getFullyConverted(): [InjectIntoOptionalExpr] ((() -> ())?) ...
|
||||
# 43| getMember(3): [ConcreteFuncDecl] dismiss()
|
||||
# 43| InterfaceType = (ViewController) -> () -> ()
|
||||
# 43| getSelfParam(): [ParamDecl] self
|
||||
# 43| Type = ViewController
|
||||
# 43| getBody(): [BraceStmt] { ... }
|
||||
# 33| getMember(4): [DestructorDecl] ViewController.deinit()
|
||||
# 33| InterfaceType = (ViewController) -> () -> ()
|
||||
# 33| getSelfParam(): [ParamDecl] self
|
||||
# 33| Type = ViewController
|
||||
# 33| getBody(): [BraceStmt] { ... }
|
||||
# 33| getMember(5): [ConstructorDecl] ViewController.init()
|
||||
# 33| InterfaceType = (ViewController.Type) -> () -> ViewController
|
||||
# 33| getSelfParam(): [ParamDecl] self
|
||||
# 33| Type = ViewController
|
||||
# 33| getBody(): [BraceStmt] { ... }
|
||||
# 33| getElement(0): [ReturnStmt] return
|
||||
# 37| [ConcreteVarDecl] self
|
||||
# 37| Type = ViewController?
|
||||
# 38| [ConcreteVarDecl] self
|
||||
# 38| Type = ViewController
|
||||
# 39| [Comment] // refers to `self.dismiss()`
|
||||
# 39|
|
||||
1
swift/ql/test/extractor-tests/updates/PrintAst.qlref
Normal file
1
swift/ql/test/extractor-tests/updates/PrintAst.qlref
Normal file
@@ -0,0 +1 @@
|
||||
library-tests/ast/PrintAst.ql
|
||||
44
swift/ql/test/extractor-tests/updates/v5.8.swift
Normal file
44
swift/ql/test/extractor-tests/updates/v5.8.swift
Normal file
@@ -0,0 +1,44 @@
|
||||
// https://github.com/apple/swift/blob/main/CHANGELOG.md#swift-58
|
||||
|
||||
@available(macOS 12, *)
|
||||
public struct Temperature {
|
||||
public var degreesCelsius: Double
|
||||
|
||||
// ...
|
||||
}
|
||||
|
||||
extension Temperature {
|
||||
@available(macOS 12, *)
|
||||
@backDeployed(before: macOS 13)
|
||||
public var degreesFahrenheit: Double {
|
||||
return (degreesCelsius * 9 / 5) + 32
|
||||
}
|
||||
}
|
||||
|
||||
func collectionDowncast(_ arr: [Any]) {
|
||||
switch arr {
|
||||
case let ints as [Int]:
|
||||
0
|
||||
case is [Bool]:
|
||||
1
|
||||
case _:
|
||||
2
|
||||
}
|
||||
}
|
||||
|
||||
struct Button {
|
||||
var tapHandler: (() -> ())?
|
||||
}
|
||||
|
||||
class ViewController {
|
||||
var button: Button = Button()
|
||||
|
||||
func setup() {
|
||||
button.tapHandler = { [weak self] in
|
||||
guard let self else { return }
|
||||
dismiss() // refers to `self.dismiss()`
|
||||
}
|
||||
}
|
||||
|
||||
func dismiss() {}
|
||||
}
|
||||
Reference in New Issue
Block a user