[Test] Improve signature help tests

This commit is contained in:
Ahmed Mahmoud
2025-09-26 22:33:07 +03:00
parent 6f6b9d8a61
commit 456a40a7bb
14 changed files with 78 additions and 115 deletions

View File

@@ -2,8 +2,6 @@
func apply<Value, Result>(value: Value, body: (Value) -> Result) -> Result {
return body(#^CLOSURE_PARAM^#)
// CLOSURE_PARAM: Begin signatures, 1 items
// CLOSURE_PARAM-DAG: Signature[Active]: body(<param active>Value</param>) -> Result
}
// CLOSURE_PARAM: Begin signatures, 1 items
// CLOSURE_PARAM-NEXT: Signature[Active]: body(<param active>Value</param>) -> Result
// CLOSURE_PARAM-NEXT: End signatures

View File

@@ -42,39 +42,33 @@ func topLevelCurried(x: Int) -> (Double) -> (String) -> Void {
func testCurryTopLevel() {
topLevelCurried(x: 1)(#^CURRY_TOPLEVEL^#)
// CURRY_TOPLEVEL: Begin signatures, 1 items
// CURRY_TOPLEVEL-DAG: Signature[Active]: (<param active>Double</param>) -> (String) -> Void
}
func testCurryMemberPartial() {
Adder.add(#^CURRY_MEMBER_PARTIAL^#)
// CURRY_MEMBER_PARTIAL: Begin signatures, 8 items
// CURRY_MEMBER_PARTIAL-DAG: Signature[Active]: add(<param name="self" active>_ self: Adder</param>) -> (Int, Int) -> Int
// CURRY_MEMBER_PARTIAL-DAG: Signature: add(<param name="self" active>_ self: Adder</param>) -> (inout Int) -> ()
// CURRY_MEMBER_PARTIAL-DAG: Signature: add(<param name="self" active>_ self: Adder</param>) -> (AdditiveArithmetic, AdditiveArithmetic) -> AdditiveArithmetic
// CURRY_MEMBER_PARTIAL-DAG: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Double?, Float, Int) -> Double
// CURRY_MEMBER_PARTIAL-DAG: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Double, Float, Int) -> Double
// CURRY_MEMBER_PARTIAL-DAG: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Double...) -> Double
// CURRY_MEMBER_PARTIAL-DAG: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Int, Int, (Int, Int) throws -> Int) throws -> Int?
// CURRY_MEMBER_PARTIAL-DAG: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Int) -> (Int) -> Int
}
func testCurryMemberFull() {
let adder = Adder()
Adder.add(adder)(#^CURRY_MEMBER_FULL^#)
// CURRY_MEMBER_FULL: Begin signatures, 8 items
// CURRY_MEMBER_FULL-DAG: Signature[Active]: (<param name="x" active>_ x: Int</param>, <param name="y">to: Int</param>) -> Int
// CURRY_MEMBER_FULL-DAG: Signature: (<param name="x" active>oneTo: inout Int</param>)
// CURRY_MEMBER_FULL-DAG: Signature: (<param name="x" active>_ x: AdditiveArithmetic</param>, <param name="y">to: AdditiveArithmetic</param>) -> AdditiveArithmetic
// CURRY_MEMBER_FULL-DAG: Signature: (<param name="first" active>first: Double!</param>, <param name="second">second: Float</param>, <param name="third">third: Int</param>) -> Double
// CURRY_MEMBER_FULL-DAG: Signature: (<param name="param1" active>arg1: Double</param>, <param name="arg2">arg2: Float</param>, <param name="param3">arg3: Int</param>) -> Double
// CURRY_MEMBER_FULL-DAG: Signature: (<param name="numbers" active>numbers: Double...</param>) -> Double
// CURRY_MEMBER_FULL-DAG: Signature: (<param name="x" active>x: Int</param>, <param name="y">y: Int</param>, <param name="adder">with: (Int, Int) throws -> Int</param>) throws -> Int!
// CURRY_MEMBER_FULL-DAG: Signature: (<param name="x" active>x: Int</param>) -> (Int) -> Int
}
// CURRY_TOPLEVEL: Begin signatures, 1 items
// CURRY_TOPLEVEL-NEXT: Signature[Active]: (<param active>Double</param>) -> (String) -> Void
// CURRY_TOPLEVEL-NEXT: End signatures
// CURRY_MEMBER_PARTIAL: Begin signatures, 8 items
// CURRY_MEMBER_PARTIAL-NEXT: Signature[Active]: add(<param name="self" active>_ self: Adder</param>) -> (Int, Int) -> Int
// CURRY_MEMBER_PARTIAL-NEXT: Signature: add(<param name="self" active>_ self: Adder</param>) -> (inout Int) -> ()
// CURRY_MEMBER_PARTIAL-NEXT: Signature: add(<param name="self" active>_ self: Adder</param>) -> (AdditiveArithmetic, AdditiveArithmetic) -> AdditiveArithmetic
// CURRY_MEMBER_PARTIAL-NEXT: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Double?, Float, Int) -> Double
// CURRY_MEMBER_PARTIAL-NEXT: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Double, Float, Int) -> Double
// CURRY_MEMBER_PARTIAL-NEXT: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Double...) -> Double
// CURRY_MEMBER_PARTIAL-NEXT: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Int, Int, (Int, Int) throws -> Int) throws -> Int?
// CURRY_MEMBER_PARTIAL-NEXT: Signature: add(<param name="self" active>_ self: Adder</param>) -> (Int) -> (Int) -> Int
// CURRY_MEMBER_PARTIAL-NEXT: End signatures
// CURRY_MEMBER_FULL: Begin signatures, 8 items
// CURRY_MEMBER_FULL-NEXT: Signature[Active]: (<param name="x" active>_ x: Int</param>, <param name="y">to: Int</param>) -> Int
// CURRY_MEMBER_FULL-NEXT: Signature: (<param name="x" active>oneTo: inout Int</param>)
// CURRY_MEMBER_FULL-NEXT: Signature: (<param name="x" active>_ x: AdditiveArithmetic</param>, <param name="y">to: AdditiveArithmetic</param>) -> AdditiveArithmetic
// CURRY_MEMBER_FULL-NEXT: Signature: (<param name="first" active>first: Double!</param>, <param name="second">second: Float</param>, <param name="third">third: Int</param>) -> Double
// CURRY_MEMBER_FULL-NEXT: Signature: (<param name="param1" active>arg1: Double</param>, <param name="arg2">arg2: Float</param>, <param name="param3">arg3: Int</param>) -> Double
// CURRY_MEMBER_FULL-NEXT: Signature: (<param name="numbers" active>numbers: Double...</param>) -> Double
// CURRY_MEMBER_FULL-NEXT: Signature: (<param name="x" active>x: Int</param>, <param name="y">y: Int</param>, <param name="adder">with: (Int, Int) throws -> Int</param>) throws -> Int!
// CURRY_MEMBER_FULL-NEXT: Signature: (<param name="x" active>x: Int</param>) -> (Int) -> Int
// CURRY_MEMBER_FULL-NEXT: End signatures

View File

@@ -23,14 +23,12 @@ func add(x: Int = importantValue) {}
func add(x: Int, line: UInt = #line, file: StaticString = #file) {}
add(#^DEFAULT_ARGS^#)
// DEFAULT_ARGS: Begin signatures, 8 items
// DEFAULT_ARGS-NEXT: Signature[Active]: add(<param name="x" active>_ x: Int = 10</param>, <param name="y">to: Int</param>) -> Int
// DEFAULT_ARGS-NEXT: Signature: add(<param name="x" active>oneTo: inout Int</param>)
// DEFAULT_ARGS-NEXT: Signature: add(<param name="x" active>_ x: Int</param>, <param name="y">to: Int? = nil</param>) -> String
// DEFAULT_ARGS-NEXT: Signature: add(<param name="first" active>first: Double!</param>, <param name="second">second: Float = .pi</param>, <param name="third">third: Int</param>) -> Double
// DEFAULT_ARGS-NEXT: Signature: add(<param name="s" active>s: S = S(a: false)</param>) -> Double
// DEFAULT_ARGS-NEXT: Signature: add(<param name="x" active>x: Int</param>, <param name="y">y: Int</param>, <param name="adder">with: (Int, Int) -> Int = { $0 + $1 }</param>) -> Int
// DEFAULT_ARGS-NEXT: Signature: add(<param name="x" active>x: Int = importantValue</param>)
// DEFAULT_ARGS-NEXT: Signature: add(<param name="x" active>x: Int</param>, <param name="line">line: UInt = #line</param>, <param name="file">file: StaticString = #file</param>)
// DEFAULT_ARGS-NEXT: End signatures
// DEFAULT_ARGS: Begin signatures, 8 items
// DEFAULT_ARGS-DAG: Signature[Active]: add(<param name="x" active>_ x: Int = 10</param>, <param name="y">to: Int</param>) -> Int
// DEFAULT_ARGS-DAG: Signature: add(<param name="x" active>oneTo: inout Int</param>)
// DEFAULT_ARGS-DAG: Signature: add(<param name="x" active>_ x: Int</param>, <param name="y">to: Int? = nil</param>) -> String
// DEFAULT_ARGS-DAG: Signature: add(<param name="first" active>first: Double!</param>, <param name="second">second: Float = .pi</param>, <param name="third">third: Int</param>) -> Double
// DEFAULT_ARGS-DAG: Signature: add(<param name="s" active>s: S = S(a: false)</param>) -> Double
// DEFAULT_ARGS-DAG: Signature: add(<param name="x" active>x: Int</param>, <param name="y">y: Int</param>, <param name="adder">with: (Int, Int) -> Int = { $0 + $1 }</param>) -> Int
// DEFAULT_ARGS-DAG: Signature: add(<param name="x" active>x: Int = importantValue</param>)
// DEFAULT_ARGS-DAG: Signature: add(<param name="x" active>x: Int</param>, <param name="line">line: UInt = #line</param>, <param name="file">file: StaticString = #file</param>)

View File

@@ -17,7 +17,5 @@ func add(_ x: Int, to y: Int) -> Int {
}
add(#^DOC^#)
// DOC: Begin signatures, 1 items
// DOC-NEXT: Signature[Active]: add(<param name="x" active>_ x: Int</param>, <param name="y">to: Int</param>) -> Int; Documentation=Adds two integers.\n\n- Parameters:\n - x: The first integer to add.\n - y: The second integer to add.\n\nUsage:\n```swift\nadd(1, to: 2) // 3\n```\n\n- Returns: The sum of the two integers.
// DOC-NEXT: End signatures
// DOC: Begin signatures, 1 items
// DOC-DAG: Signature[Active]: add(<param name="x" active>_ x: Int</param>, <param name="y">to: Int</param>) -> Int; Documentation=Adds two integers.\n\n- Parameters:\n - x: The first integer to add.\n - y: The second integer to add.\n\nUsage:\n```swift\nadd(1, to: 2) // 3\n```\n\n- Returns: The sum of the two integers.

View File

@@ -8,16 +8,12 @@ enum Barcode {
func testLabeled() {
Barcode.upc(#^LABELLED^#, manufacturer: 85909, product: 51226, check: 3)
// LABELLED: Begin signatures, 1 items
// LABELLED-DAG: Signature[Active]: upc(<param name="numberSystem" active>numberSystem: Int</param>, <param name="manufacturer">manufacturer: Int</param>, <param name="product">product: Int</param>, <param name="check">check: Int</param>) -> Barcode
}
func testUnlabled() {
Barcode.qrCode(#^UNLABELLED^#)
// UNLABELLED: Begin signatures, 1 items
// UNLABELLED-DAG: Signature[Active]: qrCode(<param active>String</param>) -> Barcode
}
// LABELLED: Begin signatures, 1 items
// LABELLED-NEXT: Signature[Active]: upc(<param name="numberSystem" active>numberSystem: Int</param>, <param name="manufacturer">manufacturer: Int</param>, <param name="product">product: Int</param>, <param name="check">check: Int</param>) -> Barcode
// LABELLED-NEXT: End signatures
// UNLABELLED: Begin signatures, 1 items
// UNLABELLED-NEXT: Signature[Active]: qrCode(<param active>String</param>) -> Barcode
// UNLABELLED-NEXT: End signatures

View File

@@ -5,7 +5,5 @@ struct Person {
}
Person(name: "John", age: #^INIT^#)
// INIT: Begin signatures, 1 items
// INIT-NEXT: Signature[Active]: init(<param name="name">name: String</param>, <param name="age" active>age: Int</param>, <param name="job">profession: String</param>)
// INIT-NEXT: End signatures
// INIT: Begin signatures, 1 items
// INIT-DAG: Signature[Active]: init(<param name="name">name: String</param>, <param name="age" active>age: Int</param>, <param name="job">profession: String</param>)

View File

@@ -5,9 +5,7 @@ struct Observable {
func notify() async throws {
_ = try await observer("EVENT", #^MEMBER_CLOSURE^#, [:])
// MEMBER_CLOSURE: Begin signatures, 1 items
// MEMBER_CLOSURE-DAG: Signature[Active]: observer(<param>String</param>, <param active>Int?</param>, <param>[AnyHashable : [Double?]]</param>) async throws -> [Observable?]
}
}
// MEMBER_CLOSURE: Begin signatures, 1 items
// MEMBER_CLOSURE-NEXT: Signature[Active]: observer(<param>String</param>, <param active>Int?</param>, <param>[AnyHashable : [Double?]]</param>) async throws -> [Observable?]
// MEMBER_CLOSURE-NEXT: End signatures

View File

@@ -36,14 +36,12 @@ struct Adder {
let adder = Adder()
adder.add(#^MEMBER_FUNC^#)
// MEMBER_FUNC: Begin signatures, 8 items
// MEMBER_FUNC-NEXT: Signature[Active]: add(<param name="x" active>_ x: Int</param>, <param name="y">to: Int</param>) -> Int
// MEMBER_FUNC-NEXT: Signature: add(<param name="x" active>oneTo: inout Int</param>)
// MEMBER_FUNC-NEXT: Signature: add(<param name="x" active>_ x: AdditiveArithmetic</param>, <param name="y">to: AdditiveArithmetic</param>) -> AdditiveArithmetic
// MEMBER_FUNC-NEXT: Signature: add(<param name="first" active>first: Double!</param>, <param name="second">second: Float</param>, <param name="third">third: Int</param>) -> Double
// MEMBER_FUNC-NEXT: Signature: add(<param name="param1" active>arg1: Double</param>, <param name="arg2">arg2: Float</param>, <param name="param3">arg3: Int</param>) -> Double
// MEMBER_FUNC-NEXT: Signature: add(<param name="numbers" active>numbers: Double...</param>) -> Double
// MEMBER_FUNC-NEXT: Signature: add(<param name="x" active>x: Int</param>, <param name="y">y: Int</param>, <param name="adder">with: (Int, Int) -> Int</param>) -> Int
// MEMBER_FUNC-NEXT: Signature: add(<param name="x" active>x: Int</param>) -> (Int) -> Int
// MEMBER_FUNC-NEXT: End signatures
// MEMBER_FUNC: Begin signatures, 8 items
// MEMBER_FUNC-DAG: Signature[Active]: add(<param name="x" active>_ x: Int</param>, <param name="y">to: Int</param>) -> Int
// MEMBER_FUNC-DAG: Signature: add(<param name="x" active>oneTo: inout Int</param>)
// MEMBER_FUNC-DAG: Signature: add(<param name="x" active>_ x: AdditiveArithmetic</param>, <param name="y">to: AdditiveArithmetic</param>) -> AdditiveArithmetic
// MEMBER_FUNC-DAG: Signature: add(<param name="first" active>first: Double!</param>, <param name="second">second: Float</param>, <param name="third">third: Int</param>) -> Double
// MEMBER_FUNC-DAG: Signature: add(<param name="param1" active>arg1: Double</param>, <param name="arg2">arg2: Float</param>, <param name="param3">arg3: Int</param>) -> Double
// MEMBER_FUNC-DAG: Signature: add(<param name="numbers" active>numbers: Double...</param>) -> Double
// MEMBER_FUNC-DAG: Signature: add(<param name="x" active>x: Int</param>, <param name="y">y: Int</param>, <param name="adder">with: (Int, Int) -> Int</param>) -> Int
// MEMBER_FUNC-DAG: Signature: add(<param name="x" active>x: Int</param>) -> (Int) -> Int

View File

@@ -8,7 +8,5 @@ struct Vector<Value> {
let vec = Vector(elements: [1.0, 2.1, 3.4])
vec.dot(with: #^MEMBER_GENERIC^#)
// MEMBER_GENERIC: Begin signatures, 1 items
// MEMBER_GENERIC-NEXT: Signature[Active]: dot(<param name="other" active>with: Vector<Double></param>) -> Double
// MEMBER_GENERIC-NEXT: End signatures
// MEMBER_GENERIC: Begin signatures, 1 items
// MEMBER_GENERIC-DAG: Signature[Active]: dot(<param name="other" active>with: Vector<Double></param>) -> Double

View File

@@ -16,10 +16,8 @@ struct Matrix {
let matrix = Matrix()
matrix[#^MEMBER_SUBSCRIPT^#]
// MEMBER_SUBSCRIPT: Begin signatures, 4 items
// MEMBER_SUBSCRIPT-NEXT: Signature[Active]: subscript(<param active>keyPath: KeyPath<Matrix, Value></param>) -> Value
// MEMBER_SUBSCRIPT-NEXT: Signature: subscript(<param name="row" active>row: Int</param>, <param name="column">column: Int</param>) -> Int
// MEMBER_SUBSCRIPT-NEXT: Signature: subscript(<param name="r" active>row: Int</param>) -> [Int]
// MEMBER_SUBSCRIPT-NEXT: Signature: subscript(<param name="c" active>column: Int</param>) -> [Int]
// MEMBER_SUBSCRIPT-NEXT: End signatures
// MEMBER_SUBSCRIPT: Begin signatures, 4 items
// MEMBER_SUBSCRIPT-DAG: Signature[Active]: subscript(<param active>keyPath: KeyPath<Matrix, Value></param>) -> Value
// MEMBER_SUBSCRIPT-DAG: Signature: subscript(<param name="row" active>row: Int</param>, <param name="column">column: Int</param>) -> Int
// MEMBER_SUBSCRIPT-DAG: Signature: subscript(<param name="r" active>row: Int</param>) -> [Int]
// MEMBER_SUBSCRIPT-DAG: Signature: subscript(<param name="c" active>column: Int</param>) -> [Int]

View File

@@ -5,7 +5,5 @@ struct `Raw Identifier` {
}
`Raw Identifier`().`some method :)`(#^RAW_ID^#)
// RAW_ID: Begin signatures, 1 items
// RAW_ID-NEXT: Signature[Active]: `some method :)`(<param name="param label?" active>`argument label!`: Int</param>)
// RAW_ID-NEXT: End signatures
// RAW_ID: Begin signatures, 1 items
// RAW_ID-DAG: Signature[Active]: `some method :)`(<param name="param label?" active>`argument label!`: Int</param>)

View File

@@ -33,14 +33,12 @@ func add(x: Int) -> (Int) -> Int {
}
add(#^TOP_LEVEL^#)
// TOP_LEVEL: Begin signatures, 8 items
// TOP_LEVEL-NEXT: Signature[Active]: add(<param name="x" active>_ x: Int</param>, <param name="y">to: Int</param>) -> Int
// TOP_LEVEL-NEXT: Signature: add(<param name="x" active>oneTo: inout Int</param>)
// TOP_LEVEL-NEXT: Signature: add(<param name="x" active>_ x: AdditiveArithmetic</param>, <param name="y">to: AdditiveArithmetic</param>) -> AdditiveArithmetic
// TOP_LEVEL-NEXT: Signature: add(<param name="first" active>first: Double!</param>, <param name="second">second: Float</param>, <param name="third">third: Int</param>) -> Double
// TOP_LEVEL-NEXT: Signature: add(<param name="param1" active>arg1: Double</param>, <param name="arg2">arg2: Float</param>, <param name="param3">arg3: Int</param>) -> Double
// TOP_LEVEL-NEXT: Signature: add(<param name="numbers" active>numbers: Double...</param>) -> Double
// TOP_LEVEL-NEXT: Signature: add(<param name="x" active>x: Int</param>, <param name="y">y: Int</param>, <param name="adder">with: (Int, Int) -> Int</param>) -> Int
// TOP_LEVEL-NEXT: Signature: add(<param name="x" active>x: Int</param>) -> (Int) -> Int
// TOP_LEVEL-NEXT: End signatures
// TOP_LEVEL: Begin signatures, 8 items
// TOP_LEVEL-DAG: Signature[Active]: add(<param name="x" active>_ x: Int</param>, <param name="y">to: Int</param>) -> Int
// TOP_LEVEL-DAG: Signature: add(<param name="x" active>oneTo: inout Int</param>)
// TOP_LEVEL-DAG: Signature: add(<param name="x" active>_ x: AdditiveArithmetic</param>, <param name="y">to: AdditiveArithmetic</param>) -> AdditiveArithmetic
// TOP_LEVEL-DAG: Signature: add(<param name="first" active>first: Double!</param>, <param name="second">second: Float</param>, <param name="third">third: Int</param>) -> Double
// TOP_LEVEL-DAG: Signature: add(<param name="param1" active>arg1: Double</param>, <param name="arg2">arg2: Float</param>, <param name="param3">arg3: Int</param>) -> Double
// TOP_LEVEL-DAG: Signature: add(<param name="numbers" active>numbers: Double...</param>) -> Double
// TOP_LEVEL-DAG: Signature: add(<param name="x" active>x: Int</param>, <param name="y">y: Int</param>, <param name="adder">with: (Int, Int) -> Int</param>) -> Int
// TOP_LEVEL-DAG: Signature: add(<param name="x" active>x: Int</param>) -> (Int) -> Int

View File

@@ -5,7 +5,5 @@ func add<T>(x: T, y: T, with adder: (T, T) -> T) -> T where T: AdditiveArithmeti
}
add(x: "A", y: "B", with: #^TOP_LEVEL_GENERIC^#)
// TOP_LEVEL_GENERIC: Begin signatures, 1 items
// TOP_LEVEL_GENERIC-NEXT: Signature[Active]: add(<param name="x">x: String</param>, <param name="y">y: String</param>, <param name="adder" active>with: (String, String) -> String</param>) -> String
// TOP_LEVEL_GENERIC-NEXT: End signatures
// TOP_LEVEL_GENERIC: Begin signatures, 1 items
// TOP_LEVEL_GENERIC-DAG: Signature[Active]: add(<param name="x">x: String</param>, <param name="y">y: String</param>, <param name="adder" active>with: (String, String) -> String</param>) -> String

View File

@@ -1489,38 +1489,33 @@ static void printSignatureHelpResultsImpl(const FormattedSignatureHelp &Result,
}
StringRef signatureText = Signature.Text;
std::string formattedSignature;
llvm::raw_string_ostream signatureOS(formattedSignature);
unsigned currentPos = 0;
for (unsigned j = 0; j < Signature.Params.size(); ++j) {
const auto &Param = Signature.Params[j];
if (Param.Offset > currentPos) {
signatureOS << signatureText.substr(currentPos,
Param.Offset - currentPos);
OS << signatureText.substr(currentPos, Param.Offset - currentPos);
}
signatureOS << "<param";
OS << "<param";
if (!Param.Name.empty()) {
signatureOS << " name=\"" << Param.Name << '"';
OS << " name=\"" << Param.Name << '"';
}
if (Signature.ActiveParam && *Signature.ActiveParam == j) {
signatureOS << " active";
OS << " active";
}
signatureOS << ">";
signatureOS << signatureText.substr(Param.Offset, Param.Length);
signatureOS << "</param>";
OS << ">";
OS << signatureText.substr(Param.Offset, Param.Length);
OS << "</param>";
currentPos = Param.Offset + Param.Length;
}
if (currentPos < signatureText.size()) {
signatureOS << signatureText.substr(currentPos);
OS << signatureText.substr(currentPos);
}
OS << formattedSignature;
if (!Signature.DocComment.empty()) {
OS << "; Documentation=";
printWithEscaping(Signature.DocComment, OS);