diff --git a/SourceKitLSPDevUtils/Package.swift b/SourceKitLSPDevUtils/Package.swift new file mode 100644 index 00000000..c2b01fb1 --- /dev/null +++ b/SourceKitLSPDevUtils/Package.swift @@ -0,0 +1,28 @@ +// swift-tools-version: 6.0 + +import PackageDescription + +let package = Package( + name: "SourceKitLSPDevUtils", + platforms: [.macOS(.v10_15)], + products: [ + .executable(name: "sourcekit-lsp-dev-utils", targets: ["SourceKitLSPDevUtils"]), + ], + dependencies: [ + .package(url: "https://github.com/swiftlang/swift-syntax.git", from: "600.0.1"), + .package(url: "https://github.com/apple/swift-argument-parser.git", from: "1.5.0"), + ], + targets: [ + .executableTarget(name: "SourceKitLSPDevUtils", dependencies: [ + "ConfigSchemaGen", + .product(name: "ArgumentParser", package: "swift-argument-parser"), + ]), + .target( + name: "ConfigSchemaGen", + dependencies: [ + .product(name: "SwiftSyntax", package: "swift-syntax"), + .product(name: "SwiftParser", package: "swift-syntax"), + ] + ) + ] +) diff --git a/SourceKitLSPDevUtils/README.md b/SourceKitLSPDevUtils/README.md new file mode 100644 index 00000000..424827ac --- /dev/null +++ b/SourceKitLSPDevUtils/README.md @@ -0,0 +1,3 @@ +# sourcekit-lsp-dev-utils + +This directory contains utilities for developing SourceKit-LSP. diff --git a/Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/ConfigSchemaGen.swift b/SourceKitLSPDevUtils/Sources/ConfigSchemaGen/ConfigSchemaGen.swift similarity index 90% rename from Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/ConfigSchemaGen.swift rename to SourceKitLSPDevUtils/Sources/ConfigSchemaGen/ConfigSchemaGen.swift index eddc2bfa..0cef6465 100644 --- a/Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/ConfigSchemaGen.swift +++ b/SourceKitLSPDevUtils/Sources/ConfigSchemaGen/ConfigSchemaGen.swift @@ -2,14 +2,16 @@ import Foundation import SwiftParser import SwiftSyntax -@main -struct ConfigSchemaGen { +/// The main entry point for generating a JSON schema and Markdown documentation +/// for the SourceKit-LSP configuration file format +/// (`.sourcekit-lsp/config.json`) from the Swift type definitions in +/// `SKOptions` Swift module. +public struct ConfigSchemaGen { static let projectRoot = URL(fileURLWithPath: #filePath) .deletingLastPathComponent() .deletingLastPathComponent() .deletingLastPathComponent() .deletingLastPathComponent() - .deletingLastPathComponent() static let sourceDir = projectRoot .appendingPathComponent("Sources") @@ -22,7 +24,7 @@ struct ConfigSchemaGen { .appendingPathComponent("Documentation") .appendingPathComponent("Configuration File.md") - static func main() throws { + public static func generate() throws { let sourceFiles = FileManager.default.enumerator(at: sourceDir, includingPropertiesForKeys: nil)! let typeNameResolver = TypeDeclResolver() diff --git a/Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/JSONSchema.swift b/SourceKitLSPDevUtils/Sources/ConfigSchemaGen/JSONSchema.swift similarity index 100% rename from Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/JSONSchema.swift rename to SourceKitLSPDevUtils/Sources/ConfigSchemaGen/JSONSchema.swift diff --git a/Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/OptionDocument.swift b/SourceKitLSPDevUtils/Sources/ConfigSchemaGen/OptionDocument.swift similarity index 100% rename from Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/OptionDocument.swift rename to SourceKitLSPDevUtils/Sources/ConfigSchemaGen/OptionDocument.swift diff --git a/Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/OptionSchema.swift b/SourceKitLSPDevUtils/Sources/ConfigSchemaGen/OptionSchema.swift similarity index 100% rename from Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/OptionSchema.swift rename to SourceKitLSPDevUtils/Sources/ConfigSchemaGen/OptionSchema.swift diff --git a/Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/TypeDeclResolver.swift b/SourceKitLSPDevUtils/Sources/ConfigSchemaGen/TypeDeclResolver.swift similarity index 100% rename from Utilities/ConfigSchemaGen/Sources/ConfigSchemaGen/TypeDeclResolver.swift rename to SourceKitLSPDevUtils/Sources/ConfigSchemaGen/TypeDeclResolver.swift diff --git a/SourceKitLSPDevUtils/Sources/SourceKitLSPDevUtils/Commands/GenerateConfigSchema.swift b/SourceKitLSPDevUtils/Sources/SourceKitLSPDevUtils/Commands/GenerateConfigSchema.swift new file mode 100644 index 00000000..27d581f8 --- /dev/null +++ b/SourceKitLSPDevUtils/Sources/SourceKitLSPDevUtils/Commands/GenerateConfigSchema.swift @@ -0,0 +1,13 @@ +import ArgumentParser +import ConfigSchemaGen + +struct GenerateConfigSchema: ParsableCommand { + static let configuration = CommandConfiguration( + commandName: "generate-config-schema", + abstract: "Generate a JSON schema and documentation for the SourceKit-LSP configuration file" + ) + + func run() throws { + try ConfigSchemaGen.generate() + } +} diff --git a/SourceKitLSPDevUtils/Sources/SourceKitLSPDevUtils/SourceKitLSPDevUtils.swift b/SourceKitLSPDevUtils/Sources/SourceKitLSPDevUtils/SourceKitLSPDevUtils.swift new file mode 100644 index 00000000..1714c38e --- /dev/null +++ b/SourceKitLSPDevUtils/Sources/SourceKitLSPDevUtils/SourceKitLSPDevUtils.swift @@ -0,0 +1,12 @@ +import ArgumentParser + +@main +struct SourceKitLSPDevUtils: ParsableCommand { + static let configuration = CommandConfiguration( + commandName: "sourcekit-lsp-dev-utils", + abstract: "Utilities for developing SourceKit-LSP", + subcommands: [ + GenerateConfigSchema.self, + ] + ) +} diff --git a/Utilities/ConfigSchemaGen/Package.swift b/Utilities/ConfigSchemaGen/Package.swift deleted file mode 100644 index e77cd39a..00000000 --- a/Utilities/ConfigSchemaGen/Package.swift +++ /dev/null @@ -1,20 +0,0 @@ -// swift-tools-version: 6.0 - -import PackageDescription - -let package = Package( - name: "ConfigSchemaGen", - platforms: [.macOS(.v10_15)], - dependencies: [ - .package(url: "https://github.com/swiftlang/swift-syntax.git", from: "600.0.1") - ], - targets: [ - .executableTarget( - name: "ConfigSchemaGen", - dependencies: [ - .product(name: "SwiftSyntax", package: "swift-syntax"), - .product(name: "SwiftParser", package: "swift-syntax"), - ] - ) - ] -) diff --git a/Utilities/ConfigSchemaGen/README.md b/Utilities/ConfigSchemaGen/README.md deleted file mode 100644 index 89940a8e..00000000 --- a/Utilities/ConfigSchemaGen/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Configuration Schema Generation for SourceKit-LSP - -This directory contains a tool to generate a JSON schema and Markdown -documentation for the SourceKit-LSP configuration file format -(`.sourcekit-lsp/config.json`) from the Swift type definitions in `SKOptions` -Swift module. - -To regenerate the schema and documentation, run the following command from the -root of the repository: - -```sh -swift run --package-path Utilities/ConfigSchemaGen -``` -