Skip to content

Commit 7740983

Browse files
committed
Split up Request.swift.
1 parent bfa7dfc commit 7740983

16 files changed

+695
-525
lines changed

Source/SourceKittenFramework/Request.swift

Lines changed: 0 additions & 524 deletions
Large diffs are not rendered by default.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
//
2+
// Request+CodeCompletion.swift
3+
// SourceKittenFramework
4+
//
5+
// Created by Zheng Li on 25/11/2017.
6+
// Copyright © 2017 SourceKitten. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
// swiftlint:disable nesting
12+
extension Request {
13+
/// A `codecomplete` request by passing in the file name, contents, offset
14+
/// for which to generate code completion options and array of compiler arguments.
15+
public struct CodeComplete: RequestType {
16+
public struct Source {
17+
public let sourceFile: String?
18+
public let sourceText: String?
19+
20+
public static func path(_ path: String) -> Source {
21+
return Source(sourceFile: path, sourceText: nil)
22+
}
23+
24+
public static func text(_ text: String, name: String? = nil) -> Source {
25+
return Source(sourceFile: name, sourceText: text)
26+
}
27+
}
28+
public let source: Source
29+
public let offset: Int64
30+
public let arguments: [String]
31+
32+
public func sourcekitObject() -> sourcekitd_object_t {
33+
let requestBuilder = RequestBuilder(type: .codeComplete)
34+
requestBuilder[.sourceFile] = source.sourceFile
35+
requestBuilder[.sourceText] = source.sourceText
36+
requestBuilder[.offset] = offset
37+
requestBuilder[.compilerArgs] = arguments
38+
return requestBuilder.makeRequest()
39+
}
40+
}
41+
42+
public static func codeCompletionRequest(file: String, contents: String, offset: Int64, arguments: [String]) -> Request {
43+
return .codeComplete(source: .text(contents, name: file), offset: offset, arguments: arguments)
44+
}
45+
46+
public static func codeComplete(source: CodeComplete.Source, offset: Int64, arguments: [String]) -> Request {
47+
return Request(type: CodeComplete(source: source, offset: offset, arguments: arguments))
48+
}
49+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
//
2+
// Request+CursorInfo.swift
3+
// SourceKittenFramework
4+
//
5+
// Created by Zheng Li on 25/11/2017.
6+
// Copyright © 2017 SourceKitten. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
// swiftlint:disable nesting
12+
extension Request {
13+
/// A `cursorinfo` request for an offset or an usr in the given file, using the `arguments` given.
14+
public struct CursorInfo: RequestType {
15+
public let name: String
16+
public let sourceFile: String
17+
18+
public struct Location {
19+
public let usr: String?
20+
public let offset: Int64?
21+
public let length: Int64?
22+
public let retrieveRefactorActions: Bool?
23+
24+
public static func offset(_ offset: Int64, length: Int64? = nil, retrieveRefactorActions: Bool? = nil) -> Location {
25+
return Location(usr: nil, offset: offset, length: length, retrieveRefactorActions: retrieveRefactorActions)
26+
}
27+
28+
public static func usr(_ usr: String) -> Location {
29+
return Location(usr: usr, offset: nil, length: nil, retrieveRefactorActions: nil)
30+
}
31+
}
32+
public let location: Location
33+
public let cancelOnSubsequentRequest: Bool?
34+
public let arguments: [String]
35+
36+
public func sourcekitObject() -> sourcekitd_object_t {
37+
let requestBuilder = RequestBuilder(type: .cursorInfo)
38+
requestBuilder[.name] = name
39+
requestBuilder[.sourceFile] = sourceFile
40+
requestBuilder[.cancelOnSubsequentRequest] = cancelOnSubsequentRequest
41+
requestBuilder[.uSR] = location.usr
42+
requestBuilder[.offset] = location.offset
43+
requestBuilder[.length] = location.length
44+
requestBuilder[.retrieveRefactorActions] = location.retrieveRefactorActions
45+
requestBuilder[.compilerArgs] = arguments
46+
return requestBuilder.makeRequest()
47+
}
48+
}
49+
50+
public static func cursorInfo(file: String, offset: Int64, arguments: [String]) -> Request {
51+
return .cursorInfo(name: file, file: file, location: .offset(offset), arguments: arguments)
52+
}
53+
54+
public static func cursorInfo(
55+
name: String,
56+
file: String,
57+
location: CursorInfo.Location,
58+
cancelOnSubsequentRequest: Bool? = nil,
59+
arguments: [String]
60+
) -> Request {
61+
return Request(type: CursorInfo(
62+
name: name,
63+
sourceFile: file,
64+
location: location,
65+
cancelOnSubsequentRequest: cancelOnSubsequentRequest,
66+
arguments: arguments
67+
))
68+
}
69+
}
70+
71+
// MARK: - CursorInfo reuse
72+
73+
extension Request {
74+
75+
/**
76+
Create a Request.CursorInfo.sourcekitObject() from a file path and compiler arguments.
77+
78+
- parameter filePath: Path of the file to create request.
79+
- parameter arguments: Compiler arguments.
80+
81+
- returns: sourcekitd_object_t representation of the Request, if successful.
82+
*/
83+
internal static func cursorInfoRequest(filePath: String?, arguments: [String]) -> sourcekitd_object_t? {
84+
if let path = filePath {
85+
return Request.cursorInfo(file: path, offset: 0, arguments: arguments).type.sourcekitObject()
86+
}
87+
return nil
88+
}
89+
90+
/**
91+
Send a Request.CursorInfo by updating its offset. Returns SourceKit response if successful.
92+
93+
- parameter cursorInfoRequest: sourcekitd_object_t representation of Request.CursorInfo
94+
- parameter offset: Offset to update request.
95+
96+
- returns: SourceKit response if successful.
97+
*/
98+
internal static func send(cursorInfoRequest: sourcekitd_object_t, atOffset offset: Int64) -> [String: SourceKitRepresentable]? {
99+
if offset == 0 {
100+
return nil
101+
}
102+
sourcekitd_request_dictionary_set_int64(cursorInfoRequest, sourcekitd_uid_get_from_cstr(SwiftDocKey.offset.rawValue)!, offset)
103+
return try? Request.customRequest(request: cursorInfoRequest).failableSend()
104+
}
105+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
//
2+
// Request+Custom.swift
3+
// SourceKittenFramework
4+
//
5+
// Created by Zheng Li on 25/11/2017.
6+
// Copyright © 2017 SourceKitten. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
extension Request {
12+
/// A custom request by passing in the sourcekitd_object_t directly.
13+
public struct Custom: RequestType {
14+
public let request: sourcekitd_object_t
15+
16+
public func sourcekitObject() -> sourcekitd_object_t {
17+
return request
18+
}
19+
}
20+
21+
public static func customRequest(request: sourcekitd_object_t) -> Request {
22+
return Request(type: Custom(request: request))
23+
}
24+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//
2+
// Request+Demangle.swift
3+
// SourceKittenFramework
4+
//
5+
// Created by Zheng Li on 25/11/2017.
6+
// Copyright © 2017 SourceKitten. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
extension Request {
12+
/// Demangle swift names
13+
public struct Demangle: RequestType {
14+
public let names: [String]
15+
16+
public func sourcekitObject() -> sourcekitd_object_t {
17+
let requestBuilder = RequestBuilder(type: .demangle)
18+
requestBuilder[.names] = names
19+
20+
return requestBuilder.makeRequest()
21+
}
22+
}
23+
24+
public static func demangle(names: [String]) -> Request {
25+
return Request(type: Demangle(names: names))
26+
}
27+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
//
2+
// Request+DocInfo.swift
3+
// SourceKittenFramework
4+
//
5+
// Created by Zheng Li on 25/11/2017.
6+
// Copyright © 2017 SourceKitten. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
extension Request {
12+
/// A documentation request for the given source text.
13+
/// Or a documentation request for the given module.
14+
public struct DocInfo: RequestType {
15+
public let name: String
16+
17+
public struct Source {
18+
public let sourceText: String?
19+
public let moduleName: String?
20+
21+
public static func text(_ sourceText: String) -> Source {
22+
return Source(sourceText: sourceText, moduleName: nil)
23+
}
24+
25+
public static func module(name moduleName: String) -> Source {
26+
return Source(sourceText: nil, moduleName: moduleName)
27+
}
28+
}
29+
public let source: Source
30+
public let arguments: [String]
31+
32+
public func sourcekitObject() -> sourcekitd_object_t {
33+
let requestBuilder = RequestBuilder(type: .docInfo)
34+
requestBuilder[.name] = name
35+
requestBuilder[.sourceText] = source.sourceText
36+
requestBuilder[.moduleName] = source.moduleName
37+
requestBuilder[.compilerArgs] = arguments
38+
39+
return requestBuilder.makeRequest()
40+
}
41+
}
42+
43+
public static func docInfo(text: String, arguments: [String]) -> Request {
44+
return Request(type: DocInfo(name: NSUUID().uuidString, source: .text(text), arguments: arguments))
45+
}
46+
47+
public static func moduleInfo(module: String, arguments: [String]) -> Request {
48+
return Request(type: DocInfo(name: NSUUID().uuidString, source: .module(name: module), arguments: arguments))
49+
}
50+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//
2+
// Request+EditorFindUSR.swift
3+
// SourceKittenFramework
4+
//
5+
// Created by Zheng Li on 25/11/2017.
6+
// Copyright © 2017 SourceKitten. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
extension Request {
12+
/// Find USR
13+
public struct EditorFindUSR: RequestType {
14+
public let sourceFile: String
15+
public let usr: String
16+
17+
public func sourcekitObject() -> sourcekitd_object_t {
18+
let requestBuilder = RequestBuilder(type: .editorFindUSR)
19+
requestBuilder[.sourceFile] = sourceFile
20+
requestBuilder[.uSR] = usr
21+
return requestBuilder.makeRequest()
22+
}
23+
}
24+
25+
public static func findUSR(file: String, usr: String) -> Request {
26+
return Request(type: EditorFindUSR(sourceFile: file, usr: usr))
27+
}
28+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
//
2+
// Request+EditorFormat.swift
3+
// SourceKittenFramework
4+
//
5+
// Created by Zheng Li on 25/11/2017.
6+
// Copyright © 2017 SourceKitten. All rights reserved.
7+
//
8+
9+
import Foundation
10+
11+
extension Request {
12+
/// Format
13+
public struct EditorFormatText: RequestType {
14+
public let name: String
15+
public let line: Int64
16+
17+
public struct Options {
18+
public let indentWidth: Int64
19+
public let tabWidth: Int64
20+
public let useTabs: Bool
21+
}
22+
public let options: Options
23+
24+
public func sourcekitObject() -> sourcekitd_object_t {
25+
let requestBuilder = RequestBuilder(type: .editorFormatText)
26+
requestBuilder[.name] = name
27+
requestBuilder[.line] = line
28+
29+
let formatOptions: [String: Any] = [
30+
"key.editor.format.indentwidth": options.indentWidth,
31+
"key.editor.format.tabwidth": options.tabWidth,
32+
"key.editor.format.usetabs": options.useTabs
33+
]
34+
requestBuilder[.formatOptions] = formatOptions
35+
36+
return requestBuilder.makeRequest()
37+
}
38+
}
39+
40+
public static func format(file: String, line: Int64, useTabs: Bool, indentWidth: Int64) -> Request {
41+
let options = EditorFormatText.Options(
42+
indentWidth: indentWidth,
43+
tabWidth: indentWidth,
44+
useTabs: useTabs
45+
)
46+
return Request(type: EditorFormatText(name: file, line: line, options: options))
47+
}
48+
}

0 commit comments

Comments
 (0)