Swiftpack.co - ChimeHQ/SwiftLSPClient as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
ChimeHQ/SwiftLSPClient
A Swift library for interacting with Language Server Protocol implementations
.package(url: "https://github.com/ChimeHQ/SwiftLSPClient.git", from: "v0.5.4")

Github CI

SwiftLSPClient

This is a Swift library for interacting with Language Server Protocol implementations.

An LSP server provides rich information about source code. An LSP client consumes this information. This library is all about the client side. It is low-level, and provides only the core abstractions around the types and messages passed between a client and server.

Example

import SwiftLSPClient

let executablePath = "path/to/your/lsp-server-executable"
let host = LanguageServerProcessHost(path: executablePath, arguments: [],
    environment: [/* the environment your lsp server requires e.g. PATH */])

host.start { (server) in
    guard let server = server else {
        Swift.print("unable to launch server")
        return
    }
    
    // Set-up notificationResponder to see log/error messages from LSP server
    server.notificationResponder = <object conforming to NotificationResponder>

    let processId = Int(ProcessInfo.processInfo.processIdentifier)
    let capabilities = ClientCapabilities(workspace: nil, textDocument: nil, experimental: nil)

    let params = InitializeParams(processId: processId,
                                  rootPath: nil,
                                  rootURI: nil,
                                  initializationOptions: nil,
                                  capabilities: capabilities,
                                  trace: Tracing.off,
                                  workspaceFolders: nil)

    server.initialize(params: params, block: { (result) in
        switch result {
        case .failure(let error):
            Swift.print("unable to initialize \(error)")
        case .success(let value):
            Swift.print("initialized \(value)")
        }
    })
}

Supported Features

The LSP specification is large, and this library currently does not implement it all. The intention is to support the 3.x specification, but be as backwards-compatible as possible with pre-3.0 servers.

Feature Supported
window/showMessage
window/showMessageRequest
window/showDocument -
window/logMessage
window/workDoneProgress/create -
window/workDoneProgress/cancel -
$/cancelRequest -
$/progress -
initialize
shutdown -
exit -
telemetry/event -
$/logTrace -
$/setTrace -
client/registerCapability
client/unregisterCapability
workspace/workspaceFolders -
workspace/didChangeWorkspaceFolders -
workspace/didChangeConfiguration -
workspace/configuration
workspace/didChangeWatchedFiles -
workspace/symbol -
workspace/executeCommand -
workspace/applyEdit -
workspace/willCreateFiles -
workspace/didCreateFiles -
workspace/willRenameFiles -
workspace/didRenameFiles -
workspace/willDeleteFiles -
workspace/didDeleteFiles -
textDocument/didOpen
textDocument/didChange
textDocument/willSave
textDocument/willSaveWaitUntil
textDocument/didSave
textDocument/didClose
textDocument/publishDiagnostics
textDocument/completion
completionItem/resolve -
textDocument/hover
textDocument/signatureHelp
textDocument/declaration
textDocument/definition
textDocument/typeDefinition
textDocument/implementation
textDocument/references
textDocument/documentHighlight -
textDocument/documentSymbol
textDocument/codeAction
codeLens/resolve -
textDocument/codeLens -
workspace/codeLens/refresh -
textDocument/documentLink -
documentLink/resolve -
textDocument/documentColor -
textDocument/colorPresentation -
textDocument/formatting
textDocument/rangeFormatting
textDocument/onTypeFormatting
textDocument/rename
textDocument/prepareRename
textDocument/foldingRange
textDocument/selectionRange -
textDocument/prepareCallHierarchy -
textDocument/prepareCallHierarchy -
callHierarchy/incomingCalls -
callHierarchy/outgoingCalls -
textDocument/semanticTokens/full
textDocument/semanticTokens/full/delta
textDocument/semanticTokens/range
workspace/semanticTokens/refresh
textDocument/linkedEditingRange -
textDocument/moniker -

Integration

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/ChimeHQ/SwiftLSPClient")
]

Suggestions or Feedback

We'd love to hear from you! Get in touch via twitter, an issue, or a pull request.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

GitHub

link
Stars: 91
Last commit: 1 week ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Submit a free job ad (while I'm testing this). The analytics numbers for this website are here.

Release Notes

v0.9.0
12 weeks ago
  • Migrate to using JSONRPC

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics