* initial shit Signed-off-by: Jess Frazelle <github@jessfraz.com> more stuff Signed-off-by: Jess Frazelle <github@jessfraz.com> more stuff Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> add lsp here Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> less than a million restarts but still 3 Signed-off-by: Jess Frazelle <github@jessfraz.com> only start once Signed-off-by: Jess Frazelle <github@jessfraz.com> some better stuff Signed-off-by: Jess Frazelle <github@jessfraz.com> initial working Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> working but jank Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> cleanup Signed-off-by: Jess Frazelle <github@jessfraz.com> cleaner Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> operator types Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> bump version Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> udpates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> hover working Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> diagnosticcs Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> more capabilities Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> fix clippy Signed-off-by: Jess Frazelle <github@jessfraz.com> huge refactor Signed-off-by: Jess Frazelle <github@jessfraz.com> cleanup Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> remove debugging Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> u[dates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> version Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> u[dates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fix ups Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> bump Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> fix Signed-off-by: Jess Frazelle <github@jessfraz.com> fix tests Signed-off-by: Jess Frazelle <github@jessfraz.com> more passing tests Signed-off-by: Jess Frazelle <github@jessfraz.com> more fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> more fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fmt Signed-off-by: Jess Frazelle <github@jessfraz.com> start of parser Signed-off-by: Jess Frazelle <github@jessfraz.com> syntax highlighting is back Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> remove prints Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fix clippy Signed-off-by: Jess Frazelle <github@jessfraz.com> refactor recast Signed-off-by: Jess Frazelle <github@jessfraz.com> fix cljippuy Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates; Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fix whitespace tests Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> Revert "updates" This reverts commit c2c6dceb441ab8d98a590cb27bb462738f7c6df4. fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> bump Signed-off-by: Jess Frazelle <github@jessfraz.com> fixups Signed-off-by: Jess Frazelle <github@jessfraz.com> updaetgs Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> remove printlns Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> whitespace Signed-off-by: Jess Frazelle <github@jessfraz.com> udpates Signed-off-by: Jess Frazelle <github@jessfraz.com> fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> up[dates Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanups Signed-off-by: Jess Frazelle <github@jessfraz.com> * some style changes Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * remove things Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updares Signed-off-by: Jess Frazelle <github@jessfraz.com> * syntax highlighting fix Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * remove console log --------- Signed-off-by: Jess Frazelle <github@jessfraz.com> Co-authored-by: Kurt Hutten <k.hutten@protonmail.ch>
186 lines
5.1 KiB
TypeScript
186 lines
5.1 KiB
TypeScript
import * as jsrpc from 'json-rpc-2.0'
|
|
import * as LSP from 'vscode-languageserver-protocol'
|
|
|
|
import {
|
|
registerServerCapability,
|
|
unregisterServerCapability,
|
|
} from './server-capability-registration'
|
|
import { Codec, FromServer, IntoServer } from './codec'
|
|
|
|
const client_capabilities: LSP.ClientCapabilities = {
|
|
textDocument: {
|
|
hover: {
|
|
dynamicRegistration: true,
|
|
contentFormat: ['plaintext', 'markdown'],
|
|
},
|
|
moniker: {},
|
|
synchronization: {
|
|
dynamicRegistration: true,
|
|
willSave: false,
|
|
didSave: false,
|
|
willSaveWaitUntil: false,
|
|
},
|
|
completion: {
|
|
dynamicRegistration: true,
|
|
completionItem: {
|
|
snippetSupport: false,
|
|
commitCharactersSupport: true,
|
|
documentationFormat: ['plaintext', 'markdown'],
|
|
deprecatedSupport: false,
|
|
preselectSupport: false,
|
|
},
|
|
contextSupport: false,
|
|
},
|
|
signatureHelp: {
|
|
dynamicRegistration: true,
|
|
signatureInformation: {
|
|
documentationFormat: ['plaintext', 'markdown'],
|
|
},
|
|
},
|
|
declaration: {
|
|
dynamicRegistration: true,
|
|
linkSupport: true,
|
|
},
|
|
definition: {
|
|
dynamicRegistration: true,
|
|
linkSupport: true,
|
|
},
|
|
typeDefinition: {
|
|
dynamicRegistration: true,
|
|
linkSupport: true,
|
|
},
|
|
implementation: {
|
|
dynamicRegistration: true,
|
|
linkSupport: true,
|
|
},
|
|
},
|
|
workspace: {
|
|
didChangeConfiguration: {
|
|
dynamicRegistration: true,
|
|
},
|
|
},
|
|
}
|
|
|
|
export default class Client extends jsrpc.JSONRPCServerAndClient {
|
|
afterInitializedHooks: (() => Promise<void>)[] = []
|
|
#fromServer: FromServer
|
|
private serverCapabilities: LSP.ServerCapabilities<any> = {}
|
|
|
|
constructor(fromServer: FromServer, intoServer: IntoServer) {
|
|
super(
|
|
new jsrpc.JSONRPCServer(),
|
|
new jsrpc.JSONRPCClient(async (json: jsrpc.JSONRPCRequest) => {
|
|
const encoded = Codec.encode(json)
|
|
intoServer.enqueue(encoded)
|
|
if (null != json.id) {
|
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
const response = await fromServer.responses.get(json.id)!
|
|
this.client.receive(response as jsrpc.JSONRPCResponse)
|
|
}
|
|
})
|
|
)
|
|
this.#fromServer = fromServer
|
|
}
|
|
|
|
async start(): Promise<void> {
|
|
// process "window/logMessage": client <- server
|
|
this.addMethod(LSP.LogMessageNotification.type.method, (params) => {
|
|
const { type, message } = params as {
|
|
type: LSP.MessageType
|
|
message: string
|
|
}
|
|
let messageString = ''
|
|
switch (type) {
|
|
case LSP.MessageType.Error: {
|
|
messageString += '[error] '
|
|
break
|
|
}
|
|
case LSP.MessageType.Warning: {
|
|
messageString += ' [warn] '
|
|
break
|
|
}
|
|
case LSP.MessageType.Info: {
|
|
messageString += ' [info] '
|
|
break
|
|
}
|
|
case LSP.MessageType.Log: {
|
|
messageString += ' [log] '
|
|
break
|
|
}
|
|
}
|
|
messageString += message
|
|
// console.log(messageString)
|
|
return
|
|
})
|
|
|
|
// process "client/registerCapability": client <- server
|
|
this.addMethod(LSP.RegistrationRequest.type.method, (params) => {
|
|
// Register a server capability.
|
|
params.registrations.forEach(
|
|
(capabilityRegistration: LSP.Registration) => {
|
|
this.serverCapabilities = registerServerCapability(
|
|
this.serverCapabilities,
|
|
capabilityRegistration
|
|
)
|
|
}
|
|
)
|
|
})
|
|
|
|
// process "client/unregisterCapability": client <- server
|
|
this.addMethod(LSP.UnregistrationRequest.type.method, (params) => {
|
|
// Unregister a server capability.
|
|
params.unregisterations.forEach(
|
|
(capabilityUnregistration: LSP.Unregistration) => {
|
|
this.serverCapabilities = unregisterServerCapability(
|
|
this.serverCapabilities,
|
|
capabilityUnregistration
|
|
)
|
|
}
|
|
)
|
|
})
|
|
|
|
// request "initialize": client <-> server
|
|
const { capabilities } = await this.request(
|
|
LSP.InitializeRequest.type.method,
|
|
{
|
|
processId: null,
|
|
clientInfo: {
|
|
name: 'kcl-language-client',
|
|
},
|
|
capabilities: client_capabilities,
|
|
rootUri: null,
|
|
} as LSP.InitializeParams
|
|
)
|
|
|
|
this.serverCapabilities = capabilities
|
|
|
|
// notify "initialized": client --> server
|
|
this.notify(LSP.InitializedNotification.type.method, {})
|
|
|
|
await Promise.all(
|
|
this.afterInitializedHooks.map((f: () => Promise<void>) => f())
|
|
)
|
|
await Promise.all([this.processNotifications(), this.processRequests()])
|
|
}
|
|
|
|
getServerCapabilities(): LSP.ServerCapabilities<any> {
|
|
return this.serverCapabilities
|
|
}
|
|
|
|
async processNotifications(): Promise<void> {
|
|
for await (const notification of this.#fromServer.notifications) {
|
|
await this.receiveAndSend(notification)
|
|
}
|
|
}
|
|
|
|
async processRequests(): Promise<void> {
|
|
for await (const request of this.#fromServer.requests) {
|
|
await this.receiveAndSend(request)
|
|
}
|
|
}
|
|
|
|
pushAfterInitializeHook(...hooks: (() => Promise<void>)[]): void {
|
|
this.afterInitializedHooks.push(...hooks)
|
|
}
|
|
}
|