Skip to content

Commit 632f127

Browse files
committed
break SwiftSyntax's dependency on SwiftSourceKit
1 parent 480ac36 commit 632f127

File tree

7 files changed

+28
-24
lines changed

7 files changed

+28
-24
lines changed

test/SwiftSyntax/DeserializeFile.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import StdlibUnittest
77
import Foundation
88
import SwiftSyntax
9+
import SwiftSourceKit
910

1011
func getInput(_ file: String) -> URL {
1112
var result = URL(fileURLWithPath: #file)

test/SwiftSyntax/ParseFile.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import Foundation
77
import StdlibUnittest
88
import SwiftSyntax
9+
import SwiftSourceKit
910

1011
var ParseFile = TestSuite("ParseFile")
1112

@@ -30,7 +31,8 @@ ParseFile.test("ParseSingleFile") {
3031
let currentFile = URL(fileURLWithPath: #file)
3132
expectDoesNotThrow({
3233
let currentFileContents = try String(contentsOf: currentFile)
33-
let parsed = try SourceFileSyntax.parse(currentFile)
34+
let parsed = SourceFileSyntax.decodeSourceFileSyntax(try SourceKitdService.
35+
encodeSourceFileSyntax(currentFile))
3436
expectEqual("\(parsed)", currentFileContents)
3537
})
3638
}

test/SwiftSyntax/VisitorTest.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import StdlibUnittest
77
import Foundation
88
import SwiftSyntax
9+
import SwiftSourceKit
910

1011
func getInput(_ file: String) -> URL {
1112
var result = URL(fileURLWithPath: #file)
@@ -26,7 +27,8 @@ VisitorTests.test("Basic") {
2627
}
2728
}
2829
expectDoesNotThrow({
29-
let parsed = try SourceFileSyntax.parse(getInput("visitor.swift"))
30+
let parsed = SourceFileSyntax.decodeSourceFileSyntax(try SourceKitdService.
31+
encodeSourceFileSyntax(getInput("visitor.swift")))
3032
let counter = FuncCounter()
3133
let hashBefore = parsed.hashValue
3234
counter.visit(parsed)

tools/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ if(SWIFT_HOST_VARIANT STREQUAL "macosx")
3535
# SwiftSyntax depends on both the standard library (because it's a
3636
# Swift module), and the SDK overlays (because it depends on Foundation).
3737
# Ensure we only build SwiftSyntax when we're building both.
38-
if(BUILD_SOURCEKIT_SWIFT_CLIENT)
38+
if(SWIFT_BUILD_STDLIB AND SWIFT_BUILD_SDK_OVERLAY)
3939
add_subdirectory(SwiftSyntax)
4040
endif()
4141
endif()

tools/SwiftSourceKitClient/SourceKitdClient.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,22 @@ public class SourceKitdService {
2626
return SourceKitdResponse(resp: sourcekitd_send_request_sync(request.rawRequest))
2727
}
2828
}
29+
30+
extension SourceKitdService {
31+
/// Parses the Swift file at the provided URL into a `Syntax` tree in Json
32+
/// serialization format by querying SourceKitd service.
33+
/// - Parameter url: The URL you wish to parse.
34+
/// - Returns: The syntax tree in Json format string.
35+
public static func encodeSourceFileSyntax(_ url: URL) throws -> String {
36+
let Service = SourceKitdService()
37+
let Request = SourceKitdRequest(uid: .source_request_editor_open)
38+
let Path = url.path
39+
Request.addParameter(.key_sourcefile, value: Path)
40+
Request.addParameter(.key_name, value: Path)
41+
Request.addParameter(.key_enable_syntax_tree, value: 1)
42+
43+
// FIXME: SourceKitd error handling.
44+
let Resp = Service.sendSyn(request: Request)
45+
return Resp.value.getString(.key_serialized_syntax_tree)
46+
}
47+
}

tools/SwiftSyntax/CMakeLists.txt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
set(EXTRA_COMPILE_FLAGS "-F" "${SWIFT_LIBRARY_OUTPUT_INTDIR}")
2-
set(EXTRA_LINKER_FLAGS "-Xlinker" "-rpath" "-Xlinker" "${SWIFT_LIBRARY_OUTPUT_INTDIR}"
3-
"-Xlinker" "-F" "-Xlinker" "${SWIFT_LIBRARY_OUTPUT_INTDIR}")
4-
51
add_swift_library(swiftSwiftSyntax SHARED
62
# This file should be listed the first. Module name is inferred from the
73
# filename.
@@ -27,9 +23,7 @@ add_swift_library(swiftSwiftSyntax SHARED
2723
TokenKind.swift.gyb
2824
Trivia.swift
2925

30-
SWIFT_COMPILE_FLAGS ${EXTRA_COMPILE_FLAGS}
31-
LINK_FLAGS ${EXTRA_LINKER_FLAGS}
32-
SWIFT_MODULE_DEPENDS SwiftSourceKit
26+
SWIFT_MODULE_DEPENDS Foundation
3327
INSTALL_IN_COMPONENT swift-syntax
3428
TARGET_SDKS OSX
3529
IS_STDLIB)

tools/SwiftSyntax/SwiftSyntax.swift

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import Foundation
1616

1717
#if os(macOS)
1818
import Darwin
19-
import SwiftSourceKit
2019
#elseif os(Linux)
2120
import Glibc
2221
#endif
@@ -30,25 +29,12 @@ public enum ParserError: Error {
3029

3130
extension Syntax {
3231
fileprivate static func encodeSourceFileSyntaxInternal(_ url: URL) throws -> Data {
33-
#if os(macOS)
34-
let Service = SourceKitdService()
35-
let Request = SourceKitdRequest(uid: .source_request_editor_open)
36-
let Path = url.path
37-
Request.addParameter(.key_sourcefile, value: Path)
38-
Request.addParameter(.key_name, value: Path)
39-
Request.addParameter(.key_enable_syntax_tree, value: 1)
40-
41-
// FIXME: SourceKitd error handling.
42-
let Resp = Service.sendSyn(request: Request)
43-
return Resp.value.getString(.key_serialized_syntax_tree).data(using: .utf8)!
44-
#else
4532
let swiftcRunner = try SwiftcRunner(sourceFile: url)
4633
let result = try swiftcRunner.invoke()
4734
guard result.wasSuccessful else {
4835
throw ParserError.swiftcFailed(result.exitCode, result.stderr)
4936
}
5037
return result.stdoutData
51-
#endif
5238
}
5339

5440
/// Parses the Swift file at the provided URL into a `Syntax` tree in Json

0 commit comments

Comments
 (0)