Files
swift-mirror/test/ModuleInterface/if-configs.swift
Doug Gregor a73711ef4b Implement extractInlinableText with swift-syntax
Replace the existing C++ implementation of extractInlinableText with
a new implementation based on swift-syntax. It uses SwiftIfConfig to
remove inactive regions (with a special mode), and a new compiler-only
entrypoint in the library to remove comments and `#sourceLocation`.
2024-08-30 16:43:41 -07:00

182 lines
4.3 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module -o %t/Test~partial.swiftmodule -module-name Test -primary-file %s
// RUN: %target-swift-frontend -merge-modules -emit-module -o %t/Test.swiftmodule %t/Test~partial.swiftmodule
// RUN: %target-swift-ide-test -print-module -module-to-print=Test -source-filename=x -I %t -prefer-type-repr=false -fully-qualified-types=true | %FileCheck %s
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %s
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface)
// RUN: %FileCheck %s < %t.swiftinterface
// CHECK-LABEL: func hasClosureDefaultArgWithComplexNestedPoundIfs(_ x: () -> Swift.Void = {
// CHECK-NOT: #if NOT_PROVIDED
// CHECK-NOT: print("should not exist")
// CHECK-NOT: #elseif !NOT_PROVIDED
// CHECK: let innerClosure = {
// CHECK-NOT: #if false
// CHECK-NOT: print("should also not exist")
// CHECK-NOT: #else
// CHECK: print("should exist")
// CHECK-NOT: #endif
// CHECK: }
// CHECK-NOT: #endif
// CHECK: })
public func hasClosureDefaultArgWithComplexNestedPoundIfs(_ x: () -> Void = {
#if NOT_PROVIDED
print("should not exist")
#elseif !NOT_PROVIDED
let innerClosure = {
#if false
print("should also not exist")
#else
print("should exist")
#endif
}
#endif
}) {
}
// CHECK-LABEL: func hasClosureDefaultArgWithComplexPoundIf(_ x: () -> Swift.Void = {
// CHECK-NOT: #if NOT_PROVIDED
// CHECK-NOT: print("should not exist")
// CHECK-NOT: #else
// CHECK-NOT: #if NOT_PROVIDED
// CHECK-NOT: print("should also not exist")
// CHECK-NOT: #else
// CHECK: print("should exist"){{$}}
// CHECK-NOT: #if !second
// CHECK: print("should also exist"){{$}}
// CHECK-NOT: #endif
// CHECK-NEXT: })
public func hasClosureDefaultArgWithComplexPoundIf(_ x: () -> Void = {
#if NOT_PROVIDED
print("should not exist")
#else
#if NOT_PROVIDED
print("should also not exist")
#else
print("should exist")
#endif
#endif
#if !second
print("should also exist")
#endif
}) {
}
// CHECK-LABEL: func hasClosureDefaultArgWithMultilinePoundIfCondition(_ x: () -> Swift.Void = {
// CHECK-NOT: #if (
// CHECK-NOT: !false && true
// CHECK-NOT: )
// CHECK: print("should appear")
// CHECK-NOT: #endif
// CHECK-NOT: #if (
// CHECK-NOT: !true
// CHECK-NOT: )
// CHECK-NOT: print("should not appear")
// CHECK-NOT: #else
// CHECK: print("also should appear")
// CHECK-NOT: #endif
// CHECK-NEXT: })
public func hasClosureDefaultArgWithMultilinePoundIfCondition(_ x: () -> Void = {
#if (
!false && true
)
print("should appear")
#endif
#if (
!true
)
print("should not appear")
#else
print("also should appear")
#endif
}) {
}
// CHECK-LABEL: func hasClosureDefaultArgWithSinglePoundIf(_ x: () -> Swift.Void = {
// CHECK-NOT: #if true
// CHECK: print("true")
// CHECK-NOT: #else
// CHECK-NOT: print("false")
// CHECK-NOT: #endif
// CHECK-NEXT: })
public func hasClosureDefaultArgWithSinglePoundIf(_ x: () -> Void = {
#if true
print("true")
#else
print("false")
#endif
}) {
}
// CHECK-LABEL: func hasComments
// CHECK: print(
// CHECK: "this should show up"
// CHECK-NOT: comment! don't mess up indentation!
// CHECK: {{^}} """
// CHECK: {{^}} """
// CHECK: #if compiler(>=5.3) {{$}}
// CHECK: print( "")
// CHECK: #endif
// CHECK: let x = 1
// CHECK-NEXT: let y = 2
// CHECK: let a = 3
// CHECK: let b = 2
// CHECK-NOT: #sourceLocation
// CHECK-NOT: #if
// CHECK-NOT: comment!
// CHECK: return true
@inlinable
public func hasComments(_ x: () -> Bool = {
/* comment! */ // comment!
#if NOT_PROVIDED
// comment!
return true
#endif
print(/*
comment!
*/"this should show up")
print(
// comment! don't mess up indentation!
"""
""")
#if compiler(>=5.3) // comment!
print(/*comment!*/"")
#endif
let x = 1/*
*/let y = 2
let a = 3
/* test */let b = 2
#sourceLocation(file: "if-configs.swift", line: 200)
#if !NOT_PROVIDED
// comment!
return/* comment! */true/* comment! */
#endif
}) {
}
// CHECK-LABEL: func hasIfCompilerCheck
// CHECK: #if compiler(>=5.3)
// CHECK-NEXT: return true
// CHECK-NEXT: #else
// CHECK-NEXT: return false
// CHECK-NEXT: #endif
@_alwaysEmitIntoClient
public func hasIfCompilerCheck(_ x: () -> Bool = {
#if compiler(>=5.3)
return true
#else
return false
#endif
}) {
}