diff --git a/Contributor Documentation/Modules.md b/Contributor Documentation/Modules.md index 0e2bd877..cc5be680 100644 --- a/Contributor Documentation/Modules.md +++ b/Contributor Documentation/Modules.md @@ -55,8 +55,7 @@ Configuration options to change how SourceKit-LSP behaves, based on [Configurati ### SKSupport -Contains SourceKit-LSP-specific helper functions. These fall into three different categories: -- Extensions on top of `swift-tools-support-core` +Contains SourceKit-LSP-specific helper functions. These fall into two different categories: - Functionality that can only be implemented by combining two lower-level modules that don't have a shared dependency, like `SKLogging` + `LanguageServerProtocol` - Types that should be sharable by the different modules that implement SourceKit-LSP but that are not generic enough to fit into `SwiftExtensions`, like `ExperimentalFeatures`. @@ -83,3 +82,7 @@ Extensions to the Swift standard library and Foundation. Should not have any oth #### ToolchainRegistry Discovers Swift toolchains on the system. + +### TSCExtensions + +Extensions on top of `swift-tools-support-core` that might integrate with modules from sourcekit-lsp. diff --git a/Package.swift b/Package.swift index 901a6499..2f00378c 100644 --- a/Package.swift +++ b/Package.swift @@ -78,6 +78,7 @@ var targets: [Target] = [ "SourceKitD", "SwiftExtensions", "ToolchainRegistry", + "TSCExtensions", .product(name: "SwiftPM-auto", package: "swift-package-manager"), .product(name: "SwiftPMDataModel-auto", package: "swift-package-manager"), .product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"), @@ -135,6 +136,7 @@ var targets: [Target] = [ "SourceKitLSP", "SwiftExtensions", "ToolchainRegistry", + "TSCExtensions", .product(name: "ArgumentParser", package: "swift-argument-parser"), .product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"), ] + swiftSyntaxDependencies(["SwiftIDEUtils", "SwiftSyntax", "SwiftParser"]), @@ -167,6 +169,7 @@ var targets: [Target] = [ "SKOptions", "SourceKitLSP", "ToolchainRegistry", + "TSCExtensions", ], exclude: ["CMakeLists.txt"], swiftSettings: globalSwiftSettings @@ -222,6 +225,7 @@ var targets: [Target] = [ "SKLogging", "SwiftExtensions", "ToolchainRegistry", + "TSCExtensions", .product(name: "IndexStoreDB", package: "indexstore-db"), ], exclude: ["CMakeLists.txt"], @@ -316,6 +320,7 @@ var targets: [Target] = [ "SourceKitLSP", "SwiftExtensions", "ToolchainRegistry", + "TSCExtensions", .product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"), ], resources: [.copy("INPUTS")], @@ -364,6 +369,7 @@ var targets: [Target] = [ "SourceKitD", "SwiftExtensions", "ToolchainRegistry", + "TSCExtensions", .product(name: "IndexStoreDB", package: "indexstore-db"), .product(name: "Crypto", package: "swift-crypto"), .product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"), @@ -416,6 +422,7 @@ var targets: [Target] = [ "SKLogging", "SKSupport", "SwiftExtensions", + "TSCExtensions", .product(name: "SwiftPMDataModel-auto", package: "swift-package-manager"), .product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"), ], @@ -433,6 +440,30 @@ var targets: [Target] = [ ], swiftSettings: globalSwiftSettings ), + + // MARK: TSCExtensions + + .target( + name: "TSCExtensions", + dependencies: [ + "SKLogging", + "SwiftExtensions", + .product(name: "SwiftToolsSupport-auto", package: "swift-tools-support-core"), + ], + exclude: ["CMakeLists.txt"], + swiftSettings: globalSwiftSettings + ), + + .testTarget( + name: "TSCExtensionsTests", + dependencies: [ + "SKTestSupport", + "SwiftExtensions", + "TSCExtensions", + ], + exclude: ["CMakeLists.txt"], + swiftSettings: globalSwiftSettings + ), ] if buildOnlyTests { diff --git a/Sources/BuildSystemIntegration/BuildSystemManager.swift b/Sources/BuildSystemIntegration/BuildSystemManager.swift index 86a47796..8b8929e2 100644 --- a/Sources/BuildSystemIntegration/BuildSystemManager.swift +++ b/Sources/BuildSystemIntegration/BuildSystemManager.swift @@ -20,6 +20,7 @@ package import SKOptions package import SKSupport package import SwiftExtensions package import ToolchainRegistry +import TSCExtensions package import struct TSCBasic.AbsolutePath package import struct TSCBasic.RelativePath @@ -33,6 +34,7 @@ import SKOptions import SKSupport import SwiftExtensions import ToolchainRegistry +import TSCExtensions import struct TSCBasic.AbsolutePath import struct TSCBasic.RelativePath diff --git a/Sources/BuildSystemIntegration/CMakeLists.txt b/Sources/BuildSystemIntegration/CMakeLists.txt index 2b0a41ca..0586dc8b 100644 --- a/Sources/BuildSystemIntegration/CMakeLists.txt +++ b/Sources/BuildSystemIntegration/CMakeLists.txt @@ -37,3 +37,6 @@ target_link_libraries(BuildSystemIntegration PUBLIC TSCBasic Build SourceKitLSPAPI) + +target_link_libraries(BuildSystemIntegration PUBLIC + TSCExtensions) diff --git a/Sources/BuildSystemIntegration/CompilationDatabase.swift b/Sources/BuildSystemIntegration/CompilationDatabase.swift index f49eeba3..06dba6f3 100644 --- a/Sources/BuildSystemIntegration/CompilationDatabase.swift +++ b/Sources/BuildSystemIntegration/CompilationDatabase.swift @@ -17,6 +17,7 @@ package import LanguageServerProtocol import SKLogging import SKSupport import SwiftExtensions +import TSCExtensions package import struct TSCBasic.AbsolutePath package import protocol TSCBasic.FileSystem @@ -29,6 +30,7 @@ import LanguageServerProtocol import SKLogging import SKSupport import SwiftExtensions +import TSCExtensions import struct TSCBasic.AbsolutePath import protocol TSCBasic.FileSystem diff --git a/Sources/BuildSystemIntegration/CompilationDatabaseBuildSystem.swift b/Sources/BuildSystemIntegration/CompilationDatabaseBuildSystem.swift index 6203a6ba..c9a37c08 100644 --- a/Sources/BuildSystemIntegration/CompilationDatabaseBuildSystem.swift +++ b/Sources/BuildSystemIntegration/CompilationDatabaseBuildSystem.swift @@ -18,6 +18,7 @@ import SKLogging package import SKOptions import SKSupport import ToolchainRegistry +import TSCExtensions import struct Foundation.URL package import struct TSCBasic.AbsolutePath @@ -32,6 +33,7 @@ import SKLogging import SKOptions import SKSupport import ToolchainRegistry +import TSCExtensions import struct Foundation.URL import struct TSCBasic.AbsolutePath diff --git a/Sources/BuildSystemIntegration/ExternalBuildSystemAdapter.swift b/Sources/BuildSystemIntegration/ExternalBuildSystemAdapter.swift index 216fa40c..604f5a71 100644 --- a/Sources/BuildSystemIntegration/ExternalBuildSystemAdapter.swift +++ b/Sources/BuildSystemIntegration/ExternalBuildSystemAdapter.swift @@ -18,6 +18,7 @@ import SKLogging import SKOptions import SKSupport import SwiftExtensions +import TSCExtensions import struct TSCBasic.AbsolutePath import func TSCBasic.getEnvSearchPaths diff --git a/Sources/BuildSystemIntegration/FallbackBuildSettings.swift b/Sources/BuildSystemIntegration/FallbackBuildSettings.swift index d32eb67b..a9876ed6 100644 --- a/Sources/BuildSystemIntegration/FallbackBuildSettings.swift +++ b/Sources/BuildSystemIntegration/FallbackBuildSettings.swift @@ -15,6 +15,7 @@ import Foundation package import LanguageServerProtocol package import SKOptions import SKSupport +import TSCExtensions import enum PackageLoading.Platform import struct TSCBasic.AbsolutePath @@ -24,6 +25,7 @@ import Foundation import LanguageServerProtocol import SKOptions import SKSupport +import TSCExtensions import enum PackageLoading.Platform import struct TSCBasic.AbsolutePath diff --git a/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift b/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift index 3d509f1c..381550da 100644 --- a/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift +++ b/Sources/BuildSystemIntegration/SwiftPMBuildSystem.swift @@ -28,6 +28,7 @@ import SourceControl package import SourceKitLSPAPI import SwiftExtensions package import ToolchainRegistry +import TSCExtensions @preconcurrency import Workspace package import struct Basics.AbsolutePath @@ -56,6 +57,7 @@ import SourceControl import SourceKitLSPAPI import SwiftExtensions import ToolchainRegistry +import TSCExtensions @preconcurrency import Workspace import struct Basics.AbsolutePath diff --git a/Sources/Diagnose/CMakeLists.txt b/Sources/Diagnose/CMakeLists.txt index 080599e9..3fd82a0f 100644 --- a/Sources/Diagnose/CMakeLists.txt +++ b/Sources/Diagnose/CMakeLists.txt @@ -38,3 +38,7 @@ target_link_libraries(Diagnose PUBLIC SwiftSyntax::SwiftParser TSCBasic ) + +target_link_libraries(Diagnose PRIVATE + TSCExtensions +) diff --git a/Sources/Diagnose/DiagnoseCommand.swift b/Sources/Diagnose/DiagnoseCommand.swift index eeb3436a..fc586f72 100644 --- a/Sources/Diagnose/DiagnoseCommand.swift +++ b/Sources/Diagnose/DiagnoseCommand.swift @@ -16,6 +16,7 @@ import Foundation import ToolchainRegistry import SKSupport import SwiftExtensions +import TSCExtensions import struct TSCBasic.AbsolutePath import class TSCBasic.Process @@ -26,6 +27,7 @@ import Foundation import ToolchainRegistry import SKSupport import SwiftExtensions +import TSCExtensions import struct TSCBasic.AbsolutePath import class TSCBasic.Process diff --git a/Sources/InProcessClient/CMakeLists.txt b/Sources/InProcessClient/CMakeLists.txt index 7e445e96..6a524e75 100644 --- a/Sources/InProcessClient/CMakeLists.txt +++ b/Sources/InProcessClient/CMakeLists.txt @@ -12,3 +12,7 @@ target_link_libraries(InProcessClient PUBLIC SourceKitLSP ToolchainRegistry ) + +target_link_libraries(InProcessClient PRIVATE + TSCExtensions +) diff --git a/Sources/InProcessClient/InProcessSourceKitLSPClient.swift b/Sources/InProcessClient/InProcessSourceKitLSPClient.swift index 561a1fc9..9f163839 100644 --- a/Sources/InProcessClient/InProcessSourceKitLSPClient.swift +++ b/Sources/InProcessClient/InProcessSourceKitLSPClient.swift @@ -19,6 +19,7 @@ import SKSupport import SourceKitLSP import SwiftExtensions import ToolchainRegistry +import TSCExtensions import struct TSCBasic.AbsolutePath #else @@ -30,6 +31,7 @@ import SKSupport import SourceKitLSP import SwiftExtensions import ToolchainRegistry +import TSCExtensions import struct TSCBasic.AbsolutePath #endif diff --git a/Sources/SKTestSupport/FindTool.swift b/Sources/SKTestSupport/FindTool.swift index e34bbd99..8b93f28f 100644 --- a/Sources/SKTestSupport/FindTool.swift +++ b/Sources/SKTestSupport/FindTool.swift @@ -13,11 +13,13 @@ #if compiler(>=6) package import Foundation import SKSupport +import TSCExtensions import class TSCBasic.Process #else import Foundation import SKSupport +import TSCExtensions import class TSCBasic.Process #endif diff --git a/Sources/SKTestSupport/SkipUnless.swift b/Sources/SKTestSupport/SkipUnless.swift index 02368a66..00a4b630 100644 --- a/Sources/SKTestSupport/SkipUnless.swift +++ b/Sources/SKTestSupport/SkipUnless.swift @@ -17,6 +17,7 @@ import SKLogging import SKSupport import SourceKitLSP import SwiftExtensions +import TSCExtensions import ToolchainRegistry import XCTest diff --git a/Sources/SemanticIndex/CMakeLists.txt b/Sources/SemanticIndex/CMakeLists.txt index 433a6d98..22f2b9c7 100644 --- a/Sources/SemanticIndex/CMakeLists.txt +++ b/Sources/SemanticIndex/CMakeLists.txt @@ -18,5 +18,6 @@ target_link_libraries(SemanticIndex PRIVATE SKLogging SwiftExtensions ToolchainRegistry + TSCExtensions IndexStoreDB $<$>:Foundation>) diff --git a/Sources/SemanticIndex/UpdateIndexStoreTaskDescription.swift b/Sources/SemanticIndex/UpdateIndexStoreTaskDescription.swift index c27b6c62..64897981 100644 --- a/Sources/SemanticIndex/UpdateIndexStoreTaskDescription.swift +++ b/Sources/SemanticIndex/UpdateIndexStoreTaskDescription.swift @@ -19,6 +19,7 @@ import SKLogging import SKSupport import SwiftExtensions import ToolchainRegistry +import TSCExtensions import struct TSCBasic.AbsolutePath import class TSCBasic.Process @@ -32,6 +33,7 @@ import SKLogging import SKSupport import SwiftExtensions import ToolchainRegistry +import TSCExtensions import struct TSCBasic.AbsolutePath import class TSCBasic.Process diff --git a/Sources/SourceKitLSP/CMakeLists.txt b/Sources/SourceKitLSP/CMakeLists.txt index 27cd1a73..37acb53f 100644 --- a/Sources/SourceKitLSP/CMakeLists.txt +++ b/Sources/SourceKitLSP/CMakeLists.txt @@ -92,5 +92,6 @@ target_link_libraries(SourceKitLSP PUBLIC SwiftSyntax::SwiftSyntax) target_link_libraries(SourceKitLSP PRIVATE PackageModelSyntax + TSCExtensions $<$>:FoundationXML>) diff --git a/Sources/SourceKitLSP/Clang/ClangLanguageService.swift b/Sources/SourceKitLSP/Clang/ClangLanguageService.swift index 542d932b..ccc30042 100644 --- a/Sources/SourceKitLSP/Clang/ClangLanguageService.swift +++ b/Sources/SourceKitLSP/Clang/ClangLanguageService.swift @@ -19,6 +19,7 @@ import SKOptions import SKSupport import SwiftExtensions import SwiftSyntax +import TSCExtensions import ToolchainRegistry import struct TSCBasic.AbsolutePath diff --git a/Sources/SourceKitLSP/Swift/DocumentFormatting.swift b/Sources/SourceKitLSP/Swift/DocumentFormatting.swift index 8b02a984..cc7bde8a 100644 --- a/Sources/SourceKitLSP/Swift/DocumentFormatting.swift +++ b/Sources/SourceKitLSP/Swift/DocumentFormatting.swift @@ -17,6 +17,7 @@ import SKLogging import SKSupport import SwiftParser import SwiftSyntax +import TSCExtensions import struct TSCBasic.AbsolutePath import class TSCBasic.Process @@ -28,6 +29,7 @@ import SKLogging import SKSupport import SwiftParser import SwiftSyntax +import TSCExtensions import struct TSCBasic.AbsolutePath import class TSCBasic.Process diff --git a/Sources/SourceKitLSP/Workspace.swift b/Sources/SourceKitLSP/Workspace.swift index d98203b0..1e222d16 100644 --- a/Sources/SourceKitLSP/Workspace.swift +++ b/Sources/SourceKitLSP/Workspace.swift @@ -22,6 +22,7 @@ import SKSupport package import SemanticIndex import SwiftExtensions import ToolchainRegistry +import TSCExtensions import struct TSCBasic.AbsolutePath import struct TSCBasic.RelativePath @@ -37,6 +38,7 @@ import SKSupport import SemanticIndex import SwiftExtensions import ToolchainRegistry +import TSCExtensions import struct TSCBasic.AbsolutePath import struct TSCBasic.RelativePath diff --git a/Sources/SKSupport/AbsolutePath+Init.swift b/Sources/TSCExtensions/AbsolutePath+Init.swift similarity index 100% rename from Sources/SKSupport/AbsolutePath+Init.swift rename to Sources/TSCExtensions/AbsolutePath+Init.swift diff --git a/Sources/SKSupport/ByteString.swift b/Sources/TSCExtensions/ByteString.swift similarity index 100% rename from Sources/SKSupport/ByteString.swift rename to Sources/TSCExtensions/ByteString.swift diff --git a/Sources/TSCExtensions/CMakeLists.txt b/Sources/TSCExtensions/CMakeLists.txt new file mode 100644 index 00000000..7cc1a57d --- /dev/null +++ b/Sources/TSCExtensions/CMakeLists.txt @@ -0,0 +1,14 @@ + +add_library(TSCExtensions STATIC + AbsolutePath+Init.swift + ByteString.swift + Process+Run.swift + SwitchableProcessResultExitStatus.swift +) +set_target_properties(TSCExtensions PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_Swift_MODULE_DIRECTORY}) +target_link_libraries(TSCExtensions PRIVATE + SKLogging + SwiftExtensions + TSCBasic + $<$>:Foundation>) diff --git a/Sources/SKSupport/Process+Run.swift b/Sources/TSCExtensions/Process+Run.swift similarity index 100% rename from Sources/SKSupport/Process+Run.swift rename to Sources/TSCExtensions/Process+Run.swift diff --git a/Sources/SKSupport/SwitchableProcessResultExitStatus.swift b/Sources/TSCExtensions/SwitchableProcessResultExitStatus.swift similarity index 100% rename from Sources/SKSupport/SwitchableProcessResultExitStatus.swift rename to Sources/TSCExtensions/SwitchableProcessResultExitStatus.swift diff --git a/Sources/ToolchainRegistry/CMakeLists.txt b/Sources/ToolchainRegistry/CMakeLists.txt index 6c71b9e0..077aa9ad 100644 --- a/Sources/ToolchainRegistry/CMakeLists.txt +++ b/Sources/ToolchainRegistry/CMakeLists.txt @@ -11,3 +11,6 @@ target_link_libraries(ToolchainRegistry PUBLIC SwiftExtensions PackageModel TSCBasic) + +target_link_libraries(ToolchainRegistry PUBLIC + TSCExtensions) diff --git a/Sources/ToolchainRegistry/XCToolchainPlist.swift b/Sources/ToolchainRegistry/XCToolchainPlist.swift index 94f9c990..d133deb2 100644 --- a/Sources/ToolchainRegistry/XCToolchainPlist.swift +++ b/Sources/ToolchainRegistry/XCToolchainPlist.swift @@ -12,6 +12,7 @@ import Foundation import SKSupport +import TSCExtensions import struct TSCBasic.AbsolutePath import protocol TSCBasic.FileSystem diff --git a/Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift b/Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift index 63d8008e..a6e84e65 100644 --- a/Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift +++ b/Tests/BuildSystemIntegrationTests/SwiftPMBuildSystemTests.swift @@ -21,6 +21,7 @@ import SKTestSupport import SourceKitLSP import SwiftExtensions import TSCBasic +import TSCExtensions import ToolchainRegistry import XCTest diff --git a/Tests/SKSupportTests/SupportTests.swift b/Tests/SKSupportTests/SupportTests.swift index 0d3d16cd..625240c6 100644 --- a/Tests/SKSupportTests/SupportTests.swift +++ b/Tests/SKSupportTests/SupportTests.swift @@ -220,15 +220,6 @@ final class SupportTests: XCTestCase { XCTAssertEqual(t, LineTable("abp\nq\ngh")) } - func testByteStringWithUnsafeData() { - ByteString(encodingAsUTF8: "").withUnsafeData { data in - XCTAssertEqual(data.count, 0) - } - ByteString(encodingAsUTF8: "abc").withUnsafeData { data in - XCTAssertEqual(data.count, 3) - } - } - func testExpandingTilde() throws { XCTAssertEqual(try AbsolutePath(expandingTilde: "~/foo").basename, "foo") XCTAssertNotEqual(try AbsolutePath(expandingTilde: "~/foo").parentDirectory, .root) diff --git a/Tests/SourceKitLSPTests/BackgroundIndexingTests.swift b/Tests/SourceKitLSPTests/BackgroundIndexingTests.swift index 311ce973..23d851f7 100644 --- a/Tests/SourceKitLSPTests/BackgroundIndexingTests.swift +++ b/Tests/SourceKitLSPTests/BackgroundIndexingTests.swift @@ -19,6 +19,7 @@ import SemanticIndex import SourceKitLSP import SourceKitLSPAPI import SwiftExtensions +import TSCExtensions import ToolchainRegistry import XCTest diff --git a/Tests/TSCExtensionsTests/ByteStringTests.swift b/Tests/TSCExtensionsTests/ByteStringTests.swift new file mode 100644 index 00000000..b08f3435 --- /dev/null +++ b/Tests/TSCExtensionsTests/ByteStringTests.swift @@ -0,0 +1,30 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +import TSCExtensions +import XCTest + +// import SKSupport +// import SwiftExtensions +import struct TSCBasic.ByteString + +final class ByteStringTests: XCTestCase { + func testByteStringWithUnsafeData() { + ByteString(encodingAsUTF8: "").withUnsafeData { data in + XCTAssertEqual(data.count, 0) + } + ByteString(encodingAsUTF8: "abc").withUnsafeData { data in + XCTAssertEqual(data.count, 3) + } + } + +} diff --git a/Tests/SKSupportTests/ProcessRunTests.swift b/Tests/TSCExtensionsTests/ProcessRunTests.swift similarity index 98% rename from Tests/SKSupportTests/ProcessRunTests.swift rename to Tests/TSCExtensionsTests/ProcessRunTests.swift index 9ebab515..0bda5bea 100644 --- a/Tests/SKSupportTests/ProcessRunTests.swift +++ b/Tests/TSCExtensionsTests/ProcessRunTests.swift @@ -10,9 +10,9 @@ // //===----------------------------------------------------------------------===// -import SKSupport import SKTestSupport import SwiftExtensions +import TSCExtensions import XCTest import struct TSCBasic.AbsolutePath