Skip to content

Commit

Permalink
Merge pull request #4 from CodinGame/update-languageserver-libs
Browse files Browse the repository at this point in the history
Update languageserver libs
  • Loading branch information
CGNonofr authored May 13, 2022
2 parents 5c8480a + 4dcf6ec commit fa0a7e0
Show file tree
Hide file tree
Showing 9 changed files with 2,047 additions and 1,749 deletions.
3,587 changes: 1,887 additions & 1,700 deletions package-lock.json

Large diffs are not rendered by default.

20 changes: 10 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@codingame/languageserver-mutualized",
"version": "0.0.0-semantic-release",
"version": "1.2.2",
"description": "A tool to plug multiple clients over a single language server implementation",
"main": "dist/index.js",
"types": "dist/index.d.ts",
Expand All @@ -22,39 +22,39 @@
"author": "",
"license": "ISC",
"dependencies": {
"@codingame/monaco-jsonrpc": "^0.3.1",
"debounce": "^1.2.1",
"delay": "^5.0.0",
"fast-diff": "^1.2.0",
"glob-to-regexp": "^0.4.1",
"object-hash": "^3.0.0",
"set-value": "^4.1.0",
"url": "^0.11.0",
"vscode-languageserver": "^7.0.0",
"vscode-languageserver-protocol": "^3.16.0",
"vscode-jsonrpc": "^8.0.1",
"vscode-languageserver": "^8.0.1",
"vscode-languageserver-protocol": "^3.17.1",
"vscode-languageserver-textdocument": "^1.0.4",
"winston": "^3.6.0"
},
"devDependencies": {
"@types/debounce": "^1.2.1",
"@types/glob-to-regexp": "^0.4.1",
"@types/jest": "^27.5.0",
"@types/jest": "^27.5.1",
"@types/ms": "^0.7.31",
"@types/object-hash": "^2.2.1",
"@types/set-value": "^4.0.1",
"@typescript-eslint/eslint-plugin": "^5.22.0",
"@typescript-eslint/parser": "^5.22.0",
"@typescript-eslint/eslint-plugin": "^5.23.0",
"@typescript-eslint/parser": "^5.23.0",
"conventional-changelog-conventionalcommits": "^4.6.3",
"eslint": "^8.14.0",
"eslint": "^8.15.0",
"eslint-config-standard": "^17.0.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-jest": "^26.1.5",
"eslint-plugin-n": "^15.2.0",
"eslint-plugin-promise": "^6.0.0",
"eslint-plugin-unused-imports": "^2.0.0",
"jest": "^28.0.3",
"jest": "^28.1.0",
"standard": "^17.0.0",
"ts-jest": "^28.0.1",
"ts-jest": "^28.0.2",
"typescript": "^4.6.4"
},
"volta": {
Expand Down
23 changes: 17 additions & 6 deletions src/capabilities.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { DisposableCollection } from '@codingame/monaco-jsonrpc'
import {
Disposable, Emitter, Event, Registration, RegistrationParams, RegistrationRequest, RegistrationType,
UnregistrationParams, UnregistrationRequest
Expand All @@ -12,10 +11,11 @@ import {
SaveOptions,
ServerCapabilities, TextDocumentRegistrationOptions, TextDocumentSaveRegistrationOptions, TextDocumentSyncKind, TextDocumentSyncOptions, WillSaveTextDocumentNotification, WillSaveTextDocumentWaitUntilRequest, WorkspaceFoldersRequest
} from 'vscode-languageserver-protocol'
import * as rpc from '@codingame/monaco-jsonrpc'
import * as rpc from 'vscode-jsonrpc'
import winston from 'winston'
import { TextDocument } from 'vscode-languageserver-textdocument'
import { matchDocument, matchFileSystemEventKind, testGlob } from './tools/lsp'
import { matchDocument, matchFileSystemEventKind, testGlobPattern } from './tools/lsp'
import { DisposableCollection } from './tools/disposable'

export function isNumber (value: unknown): value is number {
return typeof value === 'number' || value instanceof Number
Expand Down Expand Up @@ -62,8 +62,19 @@ export function transformServerCapabilities<T> (serverCapabilities: ServerCapabi
}
}

export function transformClientCapabilities (capabilities: ClientCapabilities): ClientCapabilities {
return capabilities
export function transformClientCapabilities (clientCapabilities: ClientCapabilities, addDidWatchedCapabilities: boolean): ClientCapabilities {
return {
...clientCapabilities,
workspace: {
...(clientCapabilities.workspace ?? {}),
didChangeWatchedFiles: addDidWatchedCapabilities
? {
dynamicRegistration: true,
relativePatternSupport: true
}
: undefined
}
}
}

export function adaptRegistration (registration: Registration): Registration {
Expand Down Expand Up @@ -257,7 +268,7 @@ export class WatchableServerCapabilities {

public isPathWatched (path: string, type: FileChangeType): boolean {
for (const watcher of this.getFileSystemWatchers()) {
if ((matchFileSystemEventKind(watcher.kind ?? 7, type)) && testGlob(watcher.globPattern, path)) {
if ((matchFileSystemEventKind(watcher.kind ?? 7, type)) && testGlobPattern(watcher.globPattern, path)) {
return true
}
}
Expand Down
8 changes: 5 additions & 3 deletions src/constants/lsp.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { SemanticTokensDeltaRequest, SemanticTokensRangeRequest } from 'vscode-languageserver'
import {
CodeActionRequest, CodeActionResolveRequest, CodeLensRequest, CodeLensResolveRequest, CompletionRequest,
CompletionResolveRequest, DefinitionRequest, DocumentColorRequest, DocumentFormattingRequest, DocumentHighlightRequest, DocumentLinkRequest,
CompletionResolveRequest, DefinitionRequest, DocumentColorRequest, DocumentDiagnosticRequest, DocumentFormattingRequest, DocumentHighlightRequest, DocumentLinkRequest,
DocumentLinkResolveRequest, DocumentOnTypeFormattingRequest, DocumentRangeFormattingRequest, ExecuteCommandRequest,
FoldingRangeRequest, HoverRequest, PrepareRenameRequest, ReferencesRequest, RenameRequest, RequestType, SemanticTokensRequest,
SignatureHelpRequest, WorkspaceSymbolRequest
SignatureHelpRequest, WorkspaceDiagnosticRequest, WorkspaceSymbolRequest
} from 'vscode-languageserver-protocol'

export const forwardedClientRequests: RequestType<unknown, unknown, unknown>[] = [
Expand Down Expand Up @@ -33,5 +33,7 @@ export const forwardedClientRequests: RequestType<unknown, unknown, unknown>[] =
DocumentLinkRequest.type,
DocumentLinkResolveRequest.type,
FoldingRangeRequest.type,
DocumentColorRequest.type
DocumentColorRequest.type,
WorkspaceDiagnosticRequest.type,
DocumentDiagnosticRequest.type
]
24 changes: 20 additions & 4 deletions src/language-client-mutualization.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import * as rpc from '@codingame/monaco-jsonrpc'
import * as rpc from 'vscode-jsonrpc'
import {
ClientCapabilities,
CodeLensRefreshRequest,
DiagnosticRefreshRequest,
DidChangeConfigurationNotification,
InitializedNotification,
InitializedParams,
Expand All @@ -20,14 +21,15 @@ import {
ServerRequestHandler
} from 'vscode-languageserver/lib/common/api'
import { DocumentUri, TextDocument } from 'vscode-languageserver-textdocument'
import { CancellationToken, Disposable, DisposableCollection, Emitter, HandlerResult } from '@codingame/monaco-jsonrpc'
import { CancellationToken, Disposable, Emitter, HandlerResult } from 'vscode-jsonrpc'
import ms from 'ms'
import winston from 'winston'
import { forwardedClientRequests } from './constants/lsp'
import { synchronizeLanguageServerCapabilities, transformServerCapabilities } from './capabilities'
import { BindContext, LanguageClient, LanguageClientDisposeReason } from './language-client'
import pDefer from './tools/p-defer'
import { timeout, TimeoutError } from './tools/promise'
import { DisposableCollection } from './tools/disposable'

export class ConnectionClosedError extends Error {
constructor (message: string = 'Connection closed') {
Expand Down Expand Up @@ -179,6 +181,8 @@ function bindClientToServer (
clientConnection.sendNotification(PublishDiagnosticsNotification.type, {
uri: e.document.uri,
diagnostics: existingDiagnostics
}).catch(error => {
options.logger?.error('Unable to send notification to client', error)
})
}
})
Expand All @@ -191,7 +195,9 @@ function bindClientToServer (

disposableCollection.push(languageClient.onDiagnostics(bindContext((diag) => {
if (isDocumentOpen(diag.uri)) {
clientConnection.sendNotification(PublishDiagnosticsNotification.type, diag)
clientConnection.sendNotification(PublishDiagnosticsNotification.type, diag).catch(error => {
options.logger?.error('Unable to send notification to client', error)
})
}
})))

Expand All @@ -208,13 +214,21 @@ function bindClientToServer (
const sendSemanticTokensRefresh = bindContext(() => {
if (semanticTokenRefreshSupport) {
clientConnection.sendRequest(SemanticTokensRefreshRequest.type).catch(error => {
options.logger?.error('Unable to send Codelens token refresh to client', { error })
options.logger?.error('Unable to send semantic token refresh to client', { error })
})
}
})
const sendDiagnosticsRefresh = bindContext(() => {
if (semanticTokenRefreshSupport) {
clientConnection.sendRequest(DiagnosticRefreshRequest.type).catch(error => {
options.logger?.error('Unable to send Diagnostics refresh to client', { error })
})
}
})

disposableCollection.push(languageClient.onCodeLensRefresh(sendCodeLensRefresh))
disposableCollection.push(languageClient.onSemanticTokensRefresh(sendSemanticTokensRefresh))
disposableCollection.push(languageClient.onSemanticTokensRefresh(sendDiagnosticsRefresh))
disposableCollection.push(languageClient.onWorkspaceApplyEdit(bindContext(params => {
return clientConnection.sendRequest(ApplyWorkspaceEditRequest.type, {
label: params.label,
Expand All @@ -241,6 +255,8 @@ function bindClientToServer (
uri: e.document.uri
},
reason: e.reason
}).catch(error => {
options.logger?.error('Unable to send notification to server', error)
})
})))
}
Expand Down
Loading

0 comments on commit fa0a7e0

Please sign in to comment.