SwiftLSPClient

A Swift library for interacting with Language Server Protocol implementations

Showing:

Popularity

Downloads/wk

0

GitHub Stars

89

Maintenance

Last Commit

21d ago

Contributors

4

Package

Dependencies

0

License

BSD-3-Clause

Categories

Readme

Github CI Carthage compatible CocoaPods

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.

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.

FeatureSupported
window/showMessage
window/showMessageRequest
window/logMessage
window/workDoneProgress/create-
window/workDoneProgress/cancel-
telemetry/event-
client/registerCapability-
client/unregisterCapability-
workspace/workspaceFolders-
workspace/didChangeWorkspaceFolders-
workspace/didChangeConfiguration-
workspace/configuration-
workspace/didChangeWatchedFiles-
workspace/symbol-
workspace/executeCommand-
workspace/applyEdit-
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
textDocument/codeLens-
codeLens/resolve-
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-
textDocument/linkedEditingRange-
textDocument/moniker-

Integration

Swift Package Manager

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

Carthage

github "ChimeHQ/SwiftLSPClient"

CocoaPods

pod '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.

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100