mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The macro tests were all using "REQUIRES: OS=macosx" as a proxy for "have the Swift Swift parser". There was an existing feature for this, but it was just checking whether the path was passed through. Fix that to use the same variable as in CMake. Also remove all extraneous `-I` and `-L` to the host libs in the target invocations.
77 lines
2.6 KiB
Swift
77 lines
2.6 KiB
Swift
// REQUIRES: swift_swift_parser
|
|
|
|
// RUN: %empty-directory(%t)
|
|
// RUN: %empty-directory(%t/mods)
|
|
// RUN: split-file --leading-lines %s %t
|
|
|
|
// Check that indexing and cursor info both point to the expansion site rather
|
|
// than generated macro buffer.
|
|
|
|
// Create a plugin that adds a new function as a member
|
|
// RUN: %host-build-swift -swift-version 5 -emit-library -o %t/%target-library-name(MacroPlugin) -module-name=MacroPlugin %t/MacroPlugin.swift -g -no-toolchain-stdlib-rpath
|
|
|
|
// Prepare a test module that uses the macro in a struct
|
|
// RUN: %target-swift-frontend -emit-module -emit-module-source-info -module-name TestModule -o %t/mods -load-plugin-library %t/%target-library-name(MacroPlugin) %t/TestModule.swift -index-store-path %t/idx
|
|
|
|
// Check we correctly output the added `newFunc` on the line of the attached
|
|
// macro.
|
|
// RUN: c-index-test core -print-record %t/idx | %FileCheck %s --check-prefix=INDEX
|
|
|
|
//--- MacroPlugin.swift
|
|
import SwiftSyntax
|
|
import SwiftSyntaxBuilder
|
|
import SwiftSyntaxMacros
|
|
|
|
public struct AddNamedFuncMacro: MemberMacro {
|
|
public static func expansion(
|
|
of node: AttributeSyntax,
|
|
providingMembersOf declaration: some DeclGroupSyntax,
|
|
in context: some MacroExpansionContext
|
|
) throws -> [DeclSyntax] {
|
|
let newFunc: DeclSyntax =
|
|
"""
|
|
public func newFunc() {}
|
|
"""
|
|
return [
|
|
newFunc,
|
|
]
|
|
}
|
|
}
|
|
|
|
//--- TestModule.swift
|
|
@attached(
|
|
member,
|
|
names: named(newFunc)
|
|
)
|
|
public macro AddNamedFunc() = #externalMacro(module: "MacroPlugin", type: "AddNamedFuncMacro")
|
|
|
|
// INDEX: [[@LINE+2]]:1 | instance-method/Swift | s:10TestModule9ModStructV7newFuncyyF
|
|
// INDEX-SAME: Def,Impl
|
|
@AddNamedFunc
|
|
// MOD_CURSOR: source.lang.swift.ref.function.method.instance
|
|
// MOD_CURSOR-SAME: TestModule.swift:[[@LINE-2]]:1
|
|
// MOD_CURSOR: newFunc()
|
|
public struct ModStruct {
|
|
public func existingFunc() {}
|
|
}
|
|
|
|
//--- test.swift
|
|
import TestModule
|
|
|
|
@AddNamedFunc
|
|
// LOCAL_CURSOR: source.lang.swift.ref.function.method.instance
|
|
// LOCAL_CURSOR-SAME: [[@LINE-2]]:1
|
|
// LOCAL_CURSOR: newFunc()
|
|
public struct LocalStruct {
|
|
public func existingFunc() {}
|
|
}
|
|
|
|
// Check the location in cursor info is the attached macro.
|
|
func test(l: LocalStruct, m: ModStruct) {
|
|
// RUN: %sourcekitd-test -req=cursor -pos=%(line+1):5 %t/test.swift -- -I %t/mods -load-plugin-library %t/%target-library-name(MacroPlugin) -target %target-triple %t/test.swift | %FileCheck %s --check-prefix=LOCAL_CURSOR
|
|
l.newFunc()
|
|
|
|
// RUN: %sourcekitd-test -req=cursor -pos=%(line+1):5 %t/test.swift -- -I %t/mods -target %target-triple %t/test.swift | %FileCheck %s --check-prefix=MOD_CURSOR
|
|
m.newFunc()
|
|
}
|