mirror of
https://github.com/apple/sourcekit-lsp.git
synced 2026-03-02 18:23:24 +01:00
In preparation for injecting doing more during registration, pass through the same parameters (add language) so that we can call settings as necessary.
95 lines
2.9 KiB
Swift
95 lines
2.9 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2020 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 BuildServerProtocol
|
|
import LanguageServerProtocol
|
|
import TSCBasic
|
|
import enum TSCUtility.Platform
|
|
|
|
/// A simple BuildSystem suitable as a fallback when accurate settings are unknown.
|
|
public final class FallbackBuildSystem: BuildSystem {
|
|
|
|
public init() {}
|
|
|
|
/// The path to the SDK.
|
|
public lazy var sdkpath: AbsolutePath? = {
|
|
if case .darwin? = Platform.currentPlatform,
|
|
let str = try? Process.checkNonZeroExit(
|
|
args: "/usr/bin/xcrun", "--show-sdk-path", "--sdk", "macosx"),
|
|
let path = try? AbsolutePath(validating: str.spm_chomp())
|
|
{
|
|
return path
|
|
}
|
|
return nil
|
|
}()
|
|
|
|
/// Delegate to handle any build system events.
|
|
public weak var delegate: BuildSystemDelegate? = nil
|
|
|
|
public var indexStorePath: AbsolutePath? { return nil }
|
|
|
|
public var indexDatabasePath: AbsolutePath? { return nil }
|
|
|
|
public func settings(for uri: DocumentURI, _ language: Language) -> FileBuildSettings? {
|
|
switch language {
|
|
case .swift:
|
|
return settingsSwift(uri.pseudoPath)
|
|
case .c, .cpp, .objective_c, .objective_cpp:
|
|
return settingsClang(uri.pseudoPath, language)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
/// We don't support change watching.
|
|
public func registerForChangeNotifications(for: DocumentURI, language: Language) {}
|
|
|
|
/// We don't support change watching.
|
|
public func unregisterForChangeNotifications(for: DocumentURI) {}
|
|
|
|
public func buildTargets(reply: @escaping (LSPResult<[BuildTarget]>) -> Void) {
|
|
reply(.failure(buildTargetsNotSupported))
|
|
}
|
|
|
|
public func buildTargetSources(targets: [BuildTargetIdentifier], reply: @escaping (LSPResult<[SourcesItem]>) -> Void) {
|
|
reply(.failure(buildTargetsNotSupported))
|
|
}
|
|
|
|
public func buildTargetOutputPaths(targets: [BuildTargetIdentifier], reply: @escaping (LSPResult<[OutputsItem]>) -> Void) {
|
|
reply(.failure(buildTargetsNotSupported))
|
|
}
|
|
|
|
func settingsSwift(_ file: String) -> FileBuildSettings {
|
|
var args: [String] = []
|
|
if let sdkpath = sdkpath {
|
|
args += [
|
|
"-sdk",
|
|
sdkpath.pathString,
|
|
]
|
|
}
|
|
args.append(file)
|
|
return FileBuildSettings(compilerArguments: args, language: .swift)
|
|
}
|
|
|
|
func settingsClang(_ file: String, _ language: Language) -> FileBuildSettings {
|
|
var args: [String] = []
|
|
if let sdkpath = sdkpath {
|
|
args += [
|
|
"-isysroot",
|
|
sdkpath.pathString,
|
|
]
|
|
}
|
|
args.append(file)
|
|
return FileBuildSettings(compilerArguments: args, language: language)
|
|
}
|
|
}
|