// The RUN lines are at the bottom in case we ever need to rely on line:col info.
import Foo
import FooSwiftModule
var global: Int
struct S1 {}
func foo(x: FooStruct1) -> S1 {}
// RUN: rm -rf %t
// RUN: mkdir %t
// RUN: %swiftc_driver -emit-module -o %t/FooSwiftModule.swiftmodule %S/Inputs/FooSwiftModule.swift
// Sanity check that we have identical responses when things work.
// RUN: %sourcekitd-test -req=cursor -pos=5:5 %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %mcp_opt %s > %t.from_offset.txt
// RUN: %sourcekitd-test -req=cursor -usr "s:v10cursor_usr6globalSi" %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %mcp_opt %s > %t.from_usr.txt
// RUN: FileCheck %s -check-prefix=CHECK_SANITY1 < %t.from_offset.txt
// RUN: FileCheck %s -check-prefix=CHECK_SANITY1 < %t.from_usr.txt
// RUN: diff -u %t.from_usr.txt %t.from_offset.txt
// CHECK_SANITY1: source.lang.swift.decl.var.global (5:5-5:11)
// CHECK_SANITY1-NEXT: global
// CHECK_SANITY1-NEXT: s:v10cursor_usr6globalSi
// CHECK_SANITY1-NEXT: Int
// CHECK_SANITY1-NEXT: var global: Int
// CHECK_SANITY1-NEXT: var global: Int
// Bogus USR.
// RUN: %sourcekitd-test -req=cursor -usr "s:blahblahblah" %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %mcp_opt %s | FileCheck %s -check-prefix=EMPTY
// Missing s: prefix.
// RUN: %sourcekitd-test -req=cursor -usr "v10cursor_usr6globalSi" %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %mcp_opt %s | FileCheck %s -check-prefix=EMPTY
// FIXME: no support for clang USRs.
// RUN: %sourcekitd-test -req=cursor -usr "c:@S@FooStruct1" %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %mcp_opt %s | FileCheck %s -check-prefix=EMPTY
// EMPTY:
// FIXME: missing symbol shows up as some other part of the USR (the type here).
// RUN: %sourcekitd-test -req=cursor -usr "s:v10cursor_usr11global_noneSi" %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %mcp_opt %s | FileCheck %s -check-prefix=SHOULD_BE_EMPTY
// SHOULD_BE_EMPTY: source.lang.swift.decl.struct ()
// SHOULD_BE_EMPTY: Int
// RUN: %sourcekitd-test -req=cursor -usr "s:V10cursor_usr2S1" %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %mcp_opt %s | FileCheck %s -check-prefix=CHECK1
// CHECK1: source.lang.swift.decl.struct (7:8-7:10)
// CHECK1: S1
// CHECK1: struct S1
// RUN: %sourcekitd-test -req=cursor -usr "s:F14FooSwiftModule12fooSwiftFuncFT_Si" %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %mcp_opt %s | FileCheck %s -check-prefix=CHECK2
// CHECK2: source.lang.swift.decl.function.free ()
// CHECK2: fooSwiftFunc()
// CHECK2: () -> Int
// CHECK2: FooSwiftModule
// CHECK2: func fooSwiftFunc() -> Int
// RUN: %sourcekitd-test -req=cursor -usr "s:F10cursor_usr3fooFVSC10FooStruct1VS_2S1" %s -- -I %t -F %S/../Inputs/libIDE-mock-sdk %mcp_opt %s | FileCheck %s -check-prefix=CHECK3
// CHECK3: source.lang.swift.decl.function.free (9:6-9:24)
// CHECK3: foo(_:)
// CHECK3: (FooStruct1) -> S1
// CHECK3: func foo(x: FooStruct1) -> S1