Skip to content
This repository was archived by the owner on Dec 17, 2018. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions Fixtures/LineIterator/bar.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
struct Bar {
let x: Int
let y: String
}

extension Bar {
func foo() -> Int {
return 1
}
}

private struct Blah {
let x: Bar
}
198 changes: 198 additions & 0 deletions Fixtures/LineIterator/complete_inner.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
// XFAIL: broken_std_regex

class Foo {}
class Base {
init() {}
func base() {}
}
class FooBar {
init() {}
init(x: Foo) {}
static func fooBar() {}
static func fooBaz() {}
func method() {}
let prop: FooBar { return FooBar() }
subscript(x: Foo) -> Foo {}
}

enum E1 {
case one
case two
}

// Note: this test uses line:column inputs as a workaround for a complete-test limitation.
func test010(x: E1, y: FooBar) {
switch x {
case .:
break
case two:
y.
}
}

// RUN: %sourcekitd-test -req=complete.open -pos=26:11 -req-opts=filtertext=one %s -- %s | %FileCheck %s -check-prefix=INNER_POSTFIX_0
// INNER_POSTFIX_0-NOT: key.description: "one{{.+}}"
// INNER_POSTFIX_0: key.description: "one",{{$}}
// INNER_POSTFIX_0-NOT: key.description: "one{{.+}}"

// RUN: %sourcekitd-test -req=complete.open -pos=29:9 -req-opts=filtertext=prop %s -- %s | %FileCheck %s -check-prefix=INNER_POSTFIX_1
// INNER_POSTFIX_1-NOT: key.description: "prop{{.+}}"
// INNER_POSTFIX_1: key.description: "prop",{{$}}
// INNER_POSTFIX_1-NOT: key.description: "prop{{.+}}"


func test001() {
#^TOP_LEVEL_0,fo,foo,foob,foobar^#
}
// RUN: %complete-test %s -no-fuzz -group=none -add-inner-results -tok=TOP_LEVEL_0 | %FileCheck %s -check-prefix=TOP_LEVEL_0
// TOP_LEVEL_0-LABEL: Results for filterText: fo [
// TOP_LEVEL_0-NEXT: for
// TOP_LEVEL_0-NEXT: Foo
// TOP_LEVEL_0-NEXT: FooBar
// TOP_LEVEL_0: ]

// TOP_LEVEL_0-LABEL: Results for filterText: foo [
// TOP_LEVEL_0-NEXT: Foo
// TOP_LEVEL_0-NEXT: Foo(
// TOP_LEVEL_0-NEXT: FooBar
// TOP_LEVEL_0-NEXT: Foo()
// TOP_LEVEL_0-NEXT: ]

// TOP_LEVEL_0-LABEL: Results for filterText: foob [
// TOP_LEVEL_0-NEXT: FooBar
// TOP_LEVEL_0-NEXT: ]

// TOP_LEVEL_0-LABEL: Results for filterText: foobar [
// TOP_LEVEL_0-NEXT: FooBar
// TOP_LEVEL_0-NEXT: FooBar.
// TOP_LEVEL_0-NEXT: FooBar(
// TOP_LEVEL_0-NEXT: FooBar()
// TOP_LEVEL_0-NEXT: FooBar(x: Foo)
// TOP_LEVEL_0-NEXT: FooBar.fooBar()
// TOP_LEVEL_0-NEXT: FooBar.fooBaz()
// TOP_LEVEL_0: ]

func test002(abc: FooBar, abd: Base) {
#^TOP_LEVEL_1,ab,abc,abd^#
}
// RUN: %complete-test %s -no-fuzz -group=none -add-inner-results -tok=TOP_LEVEL_1 | %FileCheck %s -check-prefix=TOP_LEVEL_1
// TOP_LEVEL_1-LABEL: Results for filterText: ab [
// TOP_LEVEL_1-NEXT: abc
// TOP_LEVEL_1-NEXT: abd
// TOP_LEVEL_1: ]

// TOP_LEVEL_1-LABEL: Results for filterText: abc [
// TOP_LEVEL_1-NEXT: abc
// TOP_LEVEL_1-NEXT: abc.
// TOP_LEVEL_1-NEXT: abc===
// TOP_LEVEL_1-NEXT: abc!==
// TOP_LEVEL_1-NEXT: abc.method()
// TOP_LEVEL_1-NEXT: abc.prop
// TOP_LEVEL_1-NEXT: ]

// TOP_LEVEL_1-LABEL: Results for filterText: abd [
// TOP_LEVEL_1-NEXT: abd
// TOP_LEVEL_1-NEXT: abd.
// TOP_LEVEL_1-NEXT: abd===
// TOP_LEVEL_1-NEXT: abd!==
// TOP_LEVEL_1-NEXT: abd.base()
// TOP_LEVEL_1-NEXT: ]

func test003(x: FooBar) {
x.#^FOOBAR_QUALIFIED,pro,prop,prop.^#
}
// RUN: %complete-test %s -group=none -add-inner-results -tok=FOOBAR_QUALIFIED | %FileCheck %s -check-prefix=FOOBAR_QUALIFIED
// FOOBAR_QUALIFIED-LABEL: Results for filterText: pro [
// FOOBAR_QUALIFIED-NEXT: prop
// FOOBAR_QUALIFIED-NEXT: ]

// FOOBAR_QUALIFIED-LABEL: Results for filterText: prop [
// FOOBAR_QUALIFIED-NEXT: prop
// FOOBAR_QUALIFIED-NEXT: prop.
// FOOBAR_QUALIFIED: prop.method()
// FOOBAR_QUALIFIED-NEXT: prop.prop
// FOOBAR_QUALIFIED-NEXT: ]

// Just don't explode. We generally expect to get a new session here.
// FOOBAR_QUALIFIED-LABEL: Results for filterText: prop. [
// FOOBAR_QUALIFIED-NEXT: ]

// RUN: %complete-test %s -group=none -no-inner-results -inner-operators -tok=FOOBAR_QUALIFIED | %FileCheck %s -check-prefix=FOOBAR_QUALIFIED_OP
// FOOBAR_QUALIFIED_OP-LABEL: Results for filterText: pro [
// FOOBAR_QUALIFIED_OP-NEXT: prop
// FOOBAR_QUALIFIED_OP-NEXT: ]
// FOOBAR_QUALIFIED_OP-LABEL: Results for filterText: prop [
// FOOBAR_QUALIFIED_OP-NEXT: prop
// FOOBAR_QUALIFIED_OP-NEXT: prop.
// FOOBAR_QUALIFIED_OP: ]

// RUN: %complete-test %s -group=none -add-inner-results -no-inner-operators -tok=FOOBAR_QUALIFIED | %FileCheck %s -check-prefix=FOOBAR_QUALIFIED_NOOP
// FOOBAR_QUALIFIED_NOOP-LABEL: Results for filterText: pro [
// FOOBAR_QUALIFIED_NOOP-NEXT: prop
// FOOBAR_QUALIFIED_NOOP-NEXT: ]
// FOOBAR_QUALIFIED_NOOP-LABEL: Results for filterText: prop [
// FOOBAR_QUALIFIED_NOOP-NEXT: prop
// FOOBAR_QUALIFIED_NOOP-NEXT: prop.method()
// FOOBAR_QUALIFIED_NOOP-NEXT: prop.prop
// FOOBAR_QUALIFIED_NOOP-NEXT: ]

// RUN: %complete-test %s -group=none -no-include-exact-match -add-inner-results -no-inner-operators -tok=FOOBAR_QUALIFIED | %FileCheck %s -check-prefix=FOOBAR_QUALIFIED_NOEXACT
// FOOBAR_QUALIFIED_NOEXACT-LABEL: Results for filterText: prop [
// FOOBAR_QUALIFIED_NOEXACT-NEXT: prop.method()
// FOOBAR_QUALIFIED_NOEXACT-NEXT: prop.prop
// FOOBAR_QUALIFIED_NOEXACT-NEXT: ]

func test004() {
FooBar#^FOOBAR_POSTFIX^#
}
// RUN: %complete-test %s -group=none -no-inner-results -inner-operators -tok=FOOBAR_POSTFIX | %FileCheck %s -check-prefix=FOOBAR_POSTFIX_OP
// FOOBAR_POSTFIX_OP: {{^}}.{{$}}
// FOOBAR_POSTFIX_OP: {{^}}({{$}}

func test005(x: FooBar) {
x#^FOOBAR_INSTANCE_POSTFIX^#
}
// RUN: %complete-test %s -group=none -no-inner-results -inner-operators -tok=FOOBAR_INSTANCE_POSTFIX | %FileCheck %s -check-prefix=FOOBAR_INSTANCE_POSTFIX_OP
// FOOBAR_INSTANCE_POSTFIX_OP: .
// FIXME: We should probably just have '[' here - rdar://22702955
// FOOBAR_INSTANCE_POSTFIX_OP: [Foo]

func test005(x: Base?) {
x#^OPTIONAL_POSTFIX^#
}
// RUN: %complete-test %s -group=none -no-inner-results -inner-operators -tok=OPTIONAL_POSTFIX | %FileCheck %s -check-prefix=OPTIONAL_POSTFIX_OP
// OPTIONAL_POSTFIX_OP: .
// OPTIONAL_POSTFIX_OP: ?.

// RUN: %complete-test %s -group=none -no-inner-results -inner-operators -tok=KEYWORD_0 | %FileCheck %s -check-prefix=KEYWORD_0
func test006() {
#^KEYWORD_0,for^#
}
// KEYWORD_0-NOT: for_
// KEYWORD_0-NOT: fortest
// KEYWORD_0-NOT: for.

enum E0 {
case case0
}

// RUN: %complete-test %s -group=none -no-inner-results -no-inner-operators -tok=LEADING_DOT_0 | %FileCheck %s -check-prefix=LEADING_NODOT_E0
// RUN: %complete-test %s -group=none -no-inner-results -inner-operators -tok=LEADING_DOT_0 | %FileCheck %s -check-prefix=LEADING_DOT_E0
func test007() {
var e: E0
e = #^LEADING_DOT_0^#
}
// LEADING_NODOT_E0-NOT: .
// LEADING_DOT_E0: .

struct WithLeading {
static var foo: WithLeading = WithLeading()
}

// RUN: %complete-test %s -group=none -no-inner-results -inner-operators -tok=LEADING_DOT_1 | %FileCheck %s -check-prefix=LEADING_DOT_S
func test009() {
var e: WithLeading
e = #^LEADING_DOT_1^#
}
// FIXME: should have leading dot.
// LEADING_DOT_S-NOT: .
24 changes: 24 additions & 0 deletions Fixtures/LineIterator/cursor_getter.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
var t1 : Bool { return true }
var t2 : Bool { get { return true } }
var t3 : Bool { get { return true } set {} }

struct S1 {
subscript(i: Int) -> Bool { return true }
}

// Checks that we don't crash.
// RUN: %sourcekitd-test -req=cursor -pos=1:15 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=1:17 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=2:15 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=2:17 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=2:21 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=2:23 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=3:15 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=3:17 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=3:21 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=3:23 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=3:37 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=3:41 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=6:29 %s -- %s | %FileCheck %s
// RUN: %sourcekitd-test -req=cursor -pos=6:31 %s -- %s | %FileCheck %s
// CHECK: <empty cursor info>
2 changes: 2 additions & 0 deletions Fixtures/LineIterator/main.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
let x = Bar(x: 1, y: "Ryan")
print(x.y)
4 changes: 2 additions & 2 deletions Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ let package = Package(
.target(
name: "LanguageServerProtocol",
dependencies: [
"AEXML",
"BaseProtocol",
"SourceKitter",
"SwiftPM",
"AEXML",
"SwiftPM"
]
),
.target(
Expand Down
73 changes: 0 additions & 73 deletions Sources/LanguageServerProtocol/Types/LineCollection.swift

This file was deleted.

Loading