vscode-languageclient
Advanced tools
Comparing version 8.1.0-next.2 to 8.1.0-next.3
@@ -43,2 +43,1 @@ "use strict"; | ||
exports.LanguageClient = LanguageClient; | ||
//# sourceMappingURL=main.js.map |
@@ -28,2 +28,1 @@ "use strict"; | ||
__exportStar(require("./client"), exports); | ||
//# sourceMappingURL=api.js.map |
@@ -98,2 +98,1 @@ "use strict"; | ||
exports.CallHierarchyFeature = CallHierarchyFeature; | ||
//# sourceMappingURL=callHierarchy.js.map |
@@ -278,2 +278,5 @@ import { TextDocument, Disposable, OutputChannel, DiagnosticCollection, Diagnostic as VDiagnostic, Uri, CancellationToken, WorkspaceFolder as VWorkspaceFolder, FileCreateEvent, FileRenameEvent, FileDeleteEvent, FileWillCreateEvent, FileWillRenameEvent, FileWillDeleteEvent, CompletionItemProvider, HoverProvider, SignatureHelpProvider, DefinitionProvider, ReferenceProvider, DocumentHighlightProvider, CodeActionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, OnTypeFormattingEditProvider, RenameProvider, DocumentSymbolProvider, DocumentLinkProvider, DeclarationProvider, FoldingRangeProvider, ImplementationProvider, DocumentColorProvider, SelectionRangeProvider, TypeDefinitionProvider, CallHierarchyProvider, LinkedEditingRangeProvider, TypeHierarchyProvider, WorkspaceSymbolProvider, ProviderResult, TextEdit as VTextEdit } from 'vscode'; | ||
private _syncedDocuments; | ||
private _didChangeTextDocumentFeature; | ||
private readonly _pendingChangeSemaphore; | ||
private readonly _pendingChangeDelayer; | ||
private _fileEvents; | ||
@@ -352,4 +355,4 @@ private _fileEventDelayer; | ||
private notifyFileEvent; | ||
private _didChangeTextDocumentFeature; | ||
private forceDocumentSync; | ||
private sendPendingFullTextDocumentChanges; | ||
private triggerPendingChangeDelivery; | ||
private _diagnosticQueue; | ||
@@ -356,0 +359,0 @@ private _diagnosticQueueState; |
@@ -100,2 +100,1 @@ "use strict"; | ||
exports.CodeActionFeature = CodeActionFeature; | ||
//# sourceMappingURL=codeAction.js.map |
@@ -819,2 +819,1 @@ "use strict"; | ||
exports.createConverter = createConverter; | ||
//# sourceMappingURL=codeConverter.js.map |
@@ -79,2 +79,1 @@ "use strict"; | ||
exports.CodeLensFeature = CodeLensFeature; | ||
//# sourceMappingURL=codeLens.js.map |
@@ -75,2 +75,1 @@ "use strict"; | ||
exports.ColorProviderFeature = ColorProviderFeature; | ||
//# sourceMappingURL=colorProvider.js.map |
@@ -127,2 +127,1 @@ "use strict"; | ||
exports.CompletionItemFeature = CompletionItemFeature; | ||
//# sourceMappingURL=completion.js.map |
@@ -209,2 +209,1 @@ "use strict"; | ||
exports.SyncConfigurationFeature = SyncConfigurationFeature; | ||
//# sourceMappingURL=configuration.js.map |
@@ -55,2 +55,1 @@ "use strict"; | ||
exports.DeclarationFeature = DeclarationFeature; | ||
//# sourceMappingURL=declaration.js.map |
@@ -56,2 +56,1 @@ "use strict"; | ||
exports.DefinitionFeature = DefinitionFeature; | ||
//# sourceMappingURL=definition.js.map |
@@ -537,7 +537,3 @@ "use strict"; | ||
const key = DocumentOrUri.asKey(document); | ||
if (this.documents.has(key)) { | ||
this.documents.delete(key); | ||
// Do a last pull | ||
this.diagnosticRequestor.pull(document); | ||
} | ||
this.documents.delete(key); | ||
// No more documents. Stop background activity. | ||
@@ -664,3 +660,7 @@ if (this.documents.size === 0) { | ||
disposables.push(openFeature.onNotificationSent((event) => { | ||
const textDocument = event.original; | ||
const textDocument = event.textDocument; | ||
// We already know about this document. This can happen via a tab open. | ||
if (this.diagnosticRequestor.knows(PullState.document, textDocument)) { | ||
return; | ||
} | ||
if (matches(textDocument)) { | ||
@@ -670,2 +670,26 @@ this.diagnosticRequestor.pull(textDocument, () => { addToBackgroundIfNeeded(textDocument); }); | ||
})); | ||
tabs.onOpen((opened) => { | ||
for (const resource of opened) { | ||
// We already know about this document. This can happen via a document open. | ||
if (this.diagnosticRequestor.knows(PullState.document, resource)) { | ||
continue; | ||
} | ||
const uriStr = resource.toString(); | ||
let textDocument; | ||
for (const item of vscode_1.workspace.textDocuments) { | ||
if (uriStr === item.uri.toString()) { | ||
textDocument = item; | ||
break; | ||
} | ||
} | ||
// We have an open document for the resource behind the tab. | ||
if (textDocument !== undefined && matches(textDocument)) { | ||
this.diagnosticRequestor.pull(textDocument, () => { addToBackgroundIfNeeded(textDocument); }); | ||
} | ||
else if (matches(resource)) { | ||
// Check if the resource matches | ||
this.diagnosticRequestor.pull(resource, () => { addToBackgroundIfNeeded(resource); }); | ||
} | ||
} | ||
}); | ||
// Pull all diagnostics for documents that are already open | ||
@@ -693,4 +717,4 @@ const pulledTextDocuments = new Set(); | ||
disposables.push(changeFeature.onNotificationSent(async (event) => { | ||
const textDocument = event.original.document; | ||
if ((diagnosticPullOptions.filter === undefined || !diagnosticPullOptions.filter(textDocument, DiagnosticPullMode.onType)) && this.diagnosticRequestor.knows(PullState.document, textDocument) && event.original.contentChanges.length > 0) { | ||
const textDocument = event.textDocument; | ||
if ((diagnosticPullOptions.filter === undefined || !diagnosticPullOptions.filter(textDocument, DiagnosticPullMode.onType)) && this.diagnosticRequestor.knows(PullState.document, textDocument)) { | ||
this.diagnosticRequestor.pull(textDocument, () => { this.backgroundScheduler.trigger(); }); | ||
@@ -703,5 +727,5 @@ } | ||
disposables.push(saveFeature.onNotificationSent((event) => { | ||
const textDocument = event.original; | ||
const textDocument = event.textDocument; | ||
if ((diagnosticPullOptions.filter === undefined || !diagnosticPullOptions.filter(textDocument, DiagnosticPullMode.onSave)) && this.diagnosticRequestor.knows(PullState.document, textDocument)) { | ||
this.diagnosticRequestor.pull(event.original, () => { this.backgroundScheduler.trigger(); }); | ||
this.diagnosticRequestor.pull(event.textDocument, () => { this.backgroundScheduler.trigger(); }); | ||
} | ||
@@ -713,3 +737,3 @@ })); | ||
disposables.push(closeFeature.onNotificationSent((event) => { | ||
this.cleanUpDocument(event.original); | ||
this.cleanUpDocument(event.textDocument); | ||
})); | ||
@@ -791,2 +815,1 @@ // Same when a tabs closes. | ||
exports.DiagnosticFeature = DiagnosticFeature; | ||
//# sourceMappingURL=diagnostic.js.map |
@@ -51,2 +51,1 @@ "use strict"; | ||
exports.DocumentHighlightFeature = DocumentHighlightFeature; | ||
//# sourceMappingURL=documentHighlight.js.map |
@@ -72,2 +72,1 @@ "use strict"; | ||
exports.DocumentLinkFeature = DocumentLinkFeature; | ||
//# sourceMappingURL=documentLink.js.map |
@@ -71,4 +71,5 @@ "use strict"; | ||
const client = this._client; | ||
const _provideDocumentSymbols = (document, token) => { | ||
return client.sendRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, client.code2ProtocolConverter.asDocumentSymbolParams(document), token).then(async (data) => { | ||
const _provideDocumentSymbols = async (document, token) => { | ||
try { | ||
const data = await client.sendRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, client.code2ProtocolConverter.asDocumentSymbolParams(document), token); | ||
if (token.isCancellationRequested || data === undefined || data === null) { | ||
@@ -89,5 +90,6 @@ return null; | ||
} | ||
}, (error) => { | ||
} | ||
catch (error) { | ||
return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, token, error, null); | ||
}); | ||
} | ||
}; | ||
@@ -105,2 +107,1 @@ const middleware = client.middleware; | ||
exports.DocumentSymbolFeature = DocumentSymbolFeature; | ||
//# sourceMappingURL=documentSymbol.js.map |
@@ -73,2 +73,1 @@ "use strict"; | ||
exports.ExecuteCommandFeature = ExecuteCommandFeature; | ||
//# sourceMappingURL=executeCommand.js.map |
import { TextDocument, Event as VEvent, DocumentSelector as VDocumentSelector, Event, Disposable, CancellationToken, ProviderResult, TextEdit as VTextEdit, ReferenceProvider, DefinitionProvider, SignatureHelpProvider, HoverProvider, CompletionItemProvider, WorkspaceSymbolProvider, DocumentHighlightProvider, CodeActionProvider, DocumentFormattingEditProvider, DocumentRangeFormattingEditProvider, OnTypeFormattingEditProvider, RenameProvider, DocumentSymbolProvider, DocumentLinkProvider, DocumentColorProvider, DeclarationProvider, FoldingRangeProvider, ImplementationProvider, SelectionRangeProvider, TypeDefinitionProvider, CallHierarchyProvider, LinkedEditingRangeProvider, TypeHierarchyProvider, FileCreateEvent, FileRenameEvent, FileDeleteEvent, FileWillCreateEvent, FileWillRenameEvent, FileWillDeleteEvent, CancellationError } from 'vscode'; | ||
import { CallHierarchyPrepareRequest, ClientCapabilities, CodeActionRequest, CodeLensRequest, CompletionRequest, DeclarationRequest, DefinitionRequest, DidChangeTextDocumentNotification, DidCloseTextDocumentNotification, DidCreateFilesNotification, DidDeleteFilesNotification, DidOpenTextDocumentNotification, DidRenameFilesNotification, DidSaveTextDocumentNotification, DocumentColorRequest, DocumentDiagnosticRequest, DocumentFormattingRequest, DocumentHighlightRequest, DocumentLinkRequest, DocumentOnTypeFormattingRequest, DocumentRangeFormattingRequest, DocumentSelector, DocumentSymbolRequest, FileOperationRegistrationOptions, FoldingRangeRequest, GenericNotificationHandler, GenericRequestHandler, HoverRequest, ImplementationRequest, InitializeParams, InlayHintRequest, InlineValueRequest, LinkedEditingRangeRequest, MessageSignature, NotebookDocumentSyncRegistrationOptions, NotebookDocumentSyncRegistrationType, NotificationHandler, NotificationHandler0, NotificationType, NotificationType0, ProgressType, ProtocolNotificationType, ProtocolNotificationType0, ProtocolRequestType, ProtocolRequestType0, ReferencesRequest, RegistrationType, RenameRequest, RequestHandler, RequestHandler0, RequestType, RequestType0, SelectionRangeRequest, SemanticTokensRegistrationType, ServerCapabilities, SignatureHelpRequest, StaticRegistrationOptions, TextDocumentRegistrationOptions, TypeDefinitionRequest, TypeHierarchyPrepareRequest, WillCreateFilesRequest, WillDeleteFilesRequest, WillRenameFilesRequest, WillSaveTextDocumentNotification, WillSaveTextDocumentWaitUntilRequest, WorkspaceSymbolRequest } from 'vscode-languageserver-protocol'; | ||
import { CallHierarchyPrepareRequest, ClientCapabilities, CodeActionRequest, CodeLensRequest, CompletionRequest, DeclarationRequest, DefinitionRequest, DidChangeTextDocumentNotification, DidCloseTextDocumentNotification, DidCreateFilesNotification, DidDeleteFilesNotification, DidOpenTextDocumentNotification, DidRenameFilesNotification, DidSaveTextDocumentNotification, DocumentColorRequest, DocumentDiagnosticRequest, DocumentFormattingRequest, DocumentHighlightRequest, DocumentLinkRequest, DocumentOnTypeFormattingRequest, DocumentRangeFormattingRequest, DocumentSelector, DocumentSymbolRequest, FileOperationRegistrationOptions, FoldingRangeRequest, GenericNotificationHandler, GenericRequestHandler, HoverRequest, ImplementationRequest, InitializeParams, InlayHintRequest, InlineValueRequest, LinkedEditingRangeRequest, MessageSignature, NotebookDocumentSyncRegistrationOptions, NotebookDocumentSyncRegistrationType, NotificationHandler, NotificationHandler0, NotificationType, NotificationType0, ProgressType, ProtocolNotificationType, ProtocolNotificationType0, ProtocolRequestType, ProtocolRequestType0, ReferencesRequest, RegistrationType, RenameRequest, RequestHandler, RequestHandler0, RequestType, RequestType0, SelectionRangeRequest, SemanticTokensRegistrationType, ServerCapabilities, SignatureHelpRequest, StaticRegistrationOptions, TextDocumentIdentifier, TextDocumentRegistrationOptions, TypeDefinitionRequest, TypeHierarchyPrepareRequest, WillCreateFilesRequest, WillDeleteFilesRequest, WillRenameFilesRequest, WillSaveTextDocumentNotification, WillSaveTextDocumentWaitUntilRequest, WorkspaceSymbolRequest } from 'vscode-languageserver-protocol'; | ||
import type * as c2p from './codeConverter'; | ||
@@ -178,9 +178,13 @@ import type * as p2c from './protocolConverter'; | ||
} | ||
export interface NotificationSendEvent<E, P> { | ||
original: E; | ||
export interface NotificationSendEvent<P extends { | ||
textDocument: TextDocumentIdentifier; | ||
}> { | ||
textDocument: TextDocument; | ||
type: ProtocolNotificationType<P, TextDocumentRegistrationOptions>; | ||
params: P; | ||
} | ||
export interface NotifyingFeature<E, P> { | ||
onNotificationSent: VEvent<NotificationSendEvent<E, P>>; | ||
export interface NotifyingFeature<P extends { | ||
textDocument: TextDocumentIdentifier; | ||
}> { | ||
onNotificationSent: VEvent<NotificationSendEvent<P>>; | ||
} | ||
@@ -222,3 +226,5 @@ /** | ||
*/ | ||
export declare abstract class TextDocumentEventFeature<P, E, M> extends DynamicDocumentFeature<TextDocumentRegistrationOptions, M> implements TextDocumentSendFeature<(data: E) => Promise<void>>, NotifyingFeature<E, P> { | ||
export declare abstract class TextDocumentEventFeature<P extends { | ||
textDocument: TextDocumentIdentifier; | ||
}, E, M> extends DynamicDocumentFeature<TextDocumentRegistrationOptions, M> implements TextDocumentSendFeature<(data: E) => Promise<void>>, NotifyingFeature<P> { | ||
private readonly _event; | ||
@@ -238,6 +244,7 @@ protected readonly _type: ProtocolNotificationType<P, TextDocumentRegistrationOptions>; | ||
register(data: RegistrationData<TextDocumentRegistrationOptions>): void; | ||
private callback; | ||
protected callback(data: E): Promise<void>; | ||
private matches; | ||
get onNotificationSent(): VEvent<NotificationSendEvent<E, P>>; | ||
protected notificationSent(data: E, type: ProtocolNotificationType<P, TextDocumentRegistrationOptions>, params: P): void; | ||
get onNotificationSent(): VEvent<NotificationSendEvent<P>>; | ||
protected notificationSent(textDocument: TextDocument, type: ProtocolNotificationType<P, TextDocumentRegistrationOptions>, params: P): void; | ||
protected abstract getTextDocument(data: E): TextDocument; | ||
unregister(id: string): void; | ||
@@ -244,0 +251,0 @@ dispose(): void; |
@@ -121,3 +121,3 @@ "use strict"; | ||
await this._client.sendNotification(this._type, params); | ||
this.notificationSent(data, this._type, params); | ||
this.notificationSent(this.getTextDocument(data), this._type, params); | ||
}; | ||
@@ -138,4 +138,4 @@ if (this.matches(data)) { | ||
} | ||
notificationSent(data, type, params) { | ||
this._onNotificationSent.fire({ original: data, type, params }); | ||
notificationSent(textDocument, type, params) { | ||
this._onNotificationSent.fire({ textDocument, type, params }); | ||
} | ||
@@ -294,2 +294,1 @@ unregister(id) { | ||
exports.WorkspaceFeature = WorkspaceFeature; | ||
//# sourceMappingURL=features.js.map |
@@ -334,2 +334,1 @@ "use strict"; | ||
exports.WillDeleteFilesFeature = WillDeleteFilesFeature; | ||
//# sourceMappingURL=fileOperations.js.map |
@@ -96,2 +96,1 @@ "use strict"; | ||
exports.FileSystemWatcherFeature = FileSystemWatcherFeature; | ||
//# sourceMappingURL=fileSystemWatcher.js.map |
@@ -58,2 +58,1 @@ "use strict"; | ||
exports.FoldingRangeFeature = FoldingRangeFeature; | ||
//# sourceMappingURL=foldingRange.js.map |
@@ -157,2 +157,1 @@ "use strict"; | ||
exports.DocumentOnTypeFormattingFeature = DocumentOnTypeFormattingFeature; | ||
//# sourceMappingURL=formatting.js.map |
@@ -59,2 +59,1 @@ "use strict"; | ||
exports.HoverFeature = HoverFeature; | ||
//# sourceMappingURL=hover.js.map |
@@ -55,2 +55,1 @@ "use strict"; | ||
exports.ImplementationFeature = ImplementationFeature; | ||
//# sourceMappingURL=implementation.js.map |
@@ -93,2 +93,1 @@ "use strict"; | ||
exports.InlayHintsFeature = InlayHintsFeature; | ||
//# sourceMappingURL=inlayHint.js.map |
@@ -66,2 +66,1 @@ "use strict"; | ||
exports.InlineValueFeature = InlineValueFeature; | ||
//# sourceMappingURL=inlineValue.js.map |
@@ -54,2 +54,1 @@ "use strict"; | ||
exports.LinkedEditingFeature = LinkedEditingFeature; | ||
//# sourceMappingURL=linkedEditingRange.js.map |
@@ -852,2 +852,1 @@ "use strict"; | ||
NotebookDocumentSyncFeature.CellScheme = 'vscode-notebook-cell'; | ||
//# sourceMappingURL=notebook.js.map |
@@ -45,2 +45,1 @@ "use strict"; | ||
exports.ProgressFeature = ProgressFeature; | ||
//# sourceMappingURL=progress.js.map |
@@ -97,2 +97,1 @@ "use strict"; | ||
exports.ProgressPart = ProgressPart; | ||
//# sourceMappingURL=progressPart.js.map |
@@ -17,2 +17,1 @@ "use strict"; | ||
exports.default = ProtocolCallHierarchyItem; | ||
//# sourceMappingURL=protocolCallHierarchyItem.js.map |
@@ -15,2 +15,1 @@ "use strict"; | ||
exports.default = ProtocolCodeAction; | ||
//# sourceMappingURL=protocolCodeAction.js.map |
@@ -14,2 +14,1 @@ "use strict"; | ||
exports.default = ProtocolCodeLens; | ||
//# sourceMappingURL=protocolCodeLens.js.map |
@@ -14,2 +14,1 @@ "use strict"; | ||
exports.default = ProtocolCompletionItem; | ||
//# sourceMappingURL=protocolCompletionItem.js.map |
@@ -1102,2 +1102,1 @@ "use strict"; | ||
exports.createConverter = createConverter; | ||
//# sourceMappingURL=protocolConverter.js.map |
@@ -26,2 +26,1 @@ "use strict"; | ||
exports.ProtocolDiagnostic = ProtocolDiagnostic; | ||
//# sourceMappingURL=protocolDiagnostic.js.map |
@@ -14,2 +14,1 @@ "use strict"; | ||
exports.default = ProtocolDocumentLink; | ||
//# sourceMappingURL=protocolDocumentLink.js.map |
@@ -14,2 +14,1 @@ "use strict"; | ||
exports.default = ProtocolInlayHint; | ||
//# sourceMappingURL=protocolInlayHint.js.map |
@@ -17,2 +17,1 @@ "use strict"; | ||
exports.default = ProtocolTypeHierarchyItem; | ||
//# sourceMappingURL=protocolTypeHierarchyItem.js.map |
@@ -19,2 +19,1 @@ "use strict"; | ||
exports.default = WorkspaceSymbol; | ||
//# sourceMappingURL=protocolWorkspaceSymbol.js.map |
@@ -54,2 +54,1 @@ "use strict"; | ||
exports.ReferencesFeature = ReferencesFeature; | ||
//# sourceMappingURL=reference.js.map |
@@ -114,2 +114,1 @@ "use strict"; | ||
exports.RenameFeature = RenameFeature; | ||
//# sourceMappingURL=rename.js.map |
@@ -58,2 +58,1 @@ "use strict"; | ||
exports.SelectionRangeFeature = SelectionRangeFeature; | ||
//# sourceMappingURL=selectionRange.js.map |
@@ -180,2 +180,1 @@ "use strict"; | ||
exports.SemanticTokensFeature = SemanticTokensFeature; | ||
//# sourceMappingURL=semanticTokens.js.map |
@@ -72,2 +72,1 @@ "use strict"; | ||
exports.SignatureHelpFeature = SignatureHelpFeature; | ||
//# sourceMappingURL=signatureHelp.js.map |
@@ -12,3 +12,3 @@ import { TextDocument, TextDocumentChangeEvent, TextDocumentWillSaveEvent, TextEdit as VTextEdit, DocumentSelector as VDocumentSelector, Event } from 'vscode'; | ||
} | ||
export interface DidOpenTextDocumentFeatureShape extends DynamicFeature<TextDocumentRegistrationOptions>, TextDocumentSendFeature<(textDocument: TextDocument) => Promise<void>>, NotifyingFeature<TextDocument, DidOpenTextDocumentParams> { | ||
export interface DidOpenTextDocumentFeatureShape extends DynamicFeature<TextDocumentRegistrationOptions>, TextDocumentSendFeature<(textDocument: TextDocument) => Promise<void>>, NotifyingFeature<DidOpenTextDocumentParams> { | ||
openDocuments: Iterable<TextDocument>; | ||
@@ -27,16 +27,20 @@ } | ||
register(data: RegistrationData<TextDocumentRegistrationOptions>): void; | ||
protected getTextDocument(data: TextDocument): TextDocument; | ||
protected notificationSent(textDocument: TextDocument, type: ProtocolNotificationType<DidOpenTextDocumentParams, TextDocumentRegistrationOptions>, params: DidOpenTextDocumentParams): void; | ||
} | ||
export interface DidCloseTextDocumentFeatureShape extends DynamicFeature<TextDocumentRegistrationOptions>, TextDocumentSendFeature<(textDocument: TextDocument) => Promise<void>>, NotifyingFeature<TextDocument, DidCloseTextDocumentParams> { | ||
export interface DidCloseTextDocumentFeatureShape extends DynamicFeature<TextDocumentRegistrationOptions>, TextDocumentSendFeature<(textDocument: TextDocument) => Promise<void>>, NotifyingFeature<DidCloseTextDocumentParams> { | ||
} | ||
export declare class DidCloseTextDocumentFeature extends TextDocumentEventFeature<DidCloseTextDocumentParams, TextDocument, TextDocumentSynchronizationMiddleware> implements DidCloseTextDocumentFeatureShape { | ||
private readonly _syncedDocuments; | ||
constructor(client: FeatureClient<TextDocumentSynchronizationMiddleware>, syncedDocuments: Map<string, TextDocument>); | ||
private readonly _pendingTextDocumentChanges; | ||
constructor(client: FeatureClient<TextDocumentSynchronizationMiddleware>, syncedDocuments: Map<string, TextDocument>, pendingTextDocumentChanges: Map<string, TextDocument>); | ||
get registrationType(): RegistrationType<TextDocumentRegistrationOptions>; | ||
fillClientCapabilities(capabilities: ClientCapabilities): void; | ||
initialize(capabilities: ServerCapabilities, documentSelector: DocumentSelector): void; | ||
protected callback(data: TextDocument): Promise<void>; | ||
protected getTextDocument(data: TextDocument): TextDocument; | ||
protected notificationSent(textDocument: TextDocument, type: ProtocolNotificationType<DidCloseTextDocumentParams, TextDocumentRegistrationOptions>, params: DidCloseTextDocumentParams): void; | ||
unregister(id: string): void; | ||
} | ||
export interface DidChangeTextDocumentFeatureShape extends DynamicFeature<TextDocumentChangeRegistrationOptions>, TextDocumentSendFeature<(event: TextDocumentChangeEvent) => Promise<void>>, NotifyingFeature<TextDocumentChangeEvent, DidChangeTextDocumentParams> { | ||
export interface DidChangeTextDocumentFeatureShape extends DynamicFeature<TextDocumentChangeRegistrationOptions>, TextDocumentSendFeature<(event: TextDocumentChangeEvent) => Promise<void>>, NotifyingFeature<DidChangeTextDocumentParams> { | ||
} | ||
@@ -46,7 +50,8 @@ export declare class DidChangeTextDocumentFeature extends DynamicDocumentFeature<TextDocumentChangeRegistrationOptions, TextDocumentSynchronizationMiddleware> implements DidChangeTextDocumentFeatureShape { | ||
private readonly _changeData; | ||
private _forcingDelivery; | ||
private _changeDelayer; | ||
private readonly _onNotificationSent; | ||
private readonly _syncedDocuments; | ||
constructor(client: FeatureClient<TextDocumentSynchronizationMiddleware>, syncedDocuments: Map<string, TextDocument>); | ||
private readonly _onPendingChangeAdded; | ||
private readonly _pendingTextDocumentChanges; | ||
constructor(client: FeatureClient<TextDocumentSynchronizationMiddleware>, pendingTextDocumentChanges: Map<string, TextDocument>); | ||
get onNotificationSent(): Event<NotificationSendEvent<DidChangeTextDocumentParams>>; | ||
get onPendingChangeAdded(): Event<void>; | ||
get registrationType(): RegistrationType<TextDocumentChangeRegistrationOptions>; | ||
@@ -58,7 +63,6 @@ fillClientCapabilities(capabilities: ClientCapabilities): void; | ||
private callback; | ||
get onNotificationSent(): Event<NotificationSendEvent<TextDocumentChangeEvent, DidChangeTextDocumentParams>>; | ||
private notificationSent; | ||
notificationSent(textDocument: TextDocument, type: ProtocolNotificationType<DidChangeTextDocumentParams, TextDocumentRegistrationOptions>, params: DidChangeTextDocumentParams): void; | ||
unregister(id: string): void; | ||
dispose(): void; | ||
forceDelivery(): Promise<void>; | ||
getPendingDocumentChanges(exclude?: string): TextDocument[]; | ||
getProvider(document: TextDocument): { | ||
@@ -73,2 +77,3 @@ send: (event: TextDocumentChangeEvent) => Promise<void>; | ||
initialize(capabilities: ServerCapabilities, documentSelector: DocumentSelector): void; | ||
protected getTextDocument(data: TextDocumentWillSaveEvent): TextDocument; | ||
} | ||
@@ -88,3 +93,3 @@ export declare class WillSaveWaitUntilFeature extends DynamicDocumentFeature<TextDocumentRegistrationOptions, TextDocumentSynchronizationMiddleware> { | ||
} | ||
export interface DidSaveTextDocumentFeatureShape extends DynamicFeature<TextDocumentRegistrationOptions>, TextDocumentSendFeature<(textDocument: TextDocument) => Promise<void>>, NotifyingFeature<TextDocument, DidSaveTextDocumentParams> { | ||
export interface DidSaveTextDocumentFeatureShape extends DynamicFeature<TextDocumentRegistrationOptions>, TextDocumentSendFeature<(textDocument: TextDocument) => Promise<void>>, NotifyingFeature<DidSaveTextDocumentParams> { | ||
} | ||
@@ -98,2 +103,3 @@ export declare class DidSaveTextDocumentFeature extends TextDocumentEventFeature<DidSaveTextDocumentParams, TextDocument, TextDocumentSynchronizationMiddleware> implements DidSaveTextDocumentFeatureShape { | ||
register(data: RegistrationData<TextDocumentSaveRegistrationOptions>): void; | ||
protected getTextDocument(data: TextDocument): TextDocument; | ||
} |
@@ -11,3 +11,2 @@ "use strict"; | ||
const features_1 = require("./features"); | ||
const async_1 = require("./utils/async"); | ||
const UUID = require("./utils/uuid"); | ||
@@ -57,5 +56,8 @@ class DidOpenTextDocumentFeature extends features_1.TextDocumentEventFeature { | ||
} | ||
getTextDocument(data) { | ||
return data; | ||
} | ||
notificationSent(textDocument, type, params) { | ||
this._syncedDocuments.set(textDocument.uri.toString(), textDocument); | ||
super.notificationSent(textDocument, type, params); | ||
this._syncedDocuments.set(textDocument.uri.toString(), textDocument); | ||
} | ||
@@ -65,5 +67,6 @@ } | ||
class DidCloseTextDocumentFeature extends features_1.TextDocumentEventFeature { | ||
constructor(client, syncedDocuments) { | ||
constructor(client, syncedDocuments, pendingTextDocumentChanges) { | ||
super(client, vscode_1.workspace.onDidCloseTextDocument, vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, () => client.middleware.didClose, (textDocument) => client.code2ProtocolConverter.asCloseTextDocumentParams(textDocument), (data) => data, features_1.TextDocumentEventFeature.textDocumentFilter); | ||
this._syncedDocuments = syncedDocuments; | ||
this._pendingTextDocumentChanges = pendingTextDocumentChanges; | ||
} | ||
@@ -82,5 +85,12 @@ get registrationType() { | ||
} | ||
async callback(data) { | ||
await super.callback(data); | ||
this._pendingTextDocumentChanges.delete(data.uri.toString()); | ||
} | ||
getTextDocument(data) { | ||
return data; | ||
} | ||
notificationSent(textDocument, type, params) { | ||
this._syncedDocuments.delete(textDocument.uri.toString()); | ||
super.notificationSent(textDocument, type, params); | ||
this._syncedDocuments.delete(textDocument.uri.toString()); | ||
} | ||
@@ -109,9 +119,15 @@ unregister(id) { | ||
class DidChangeTextDocumentFeature extends features_1.DynamicDocumentFeature { | ||
constructor(client, syncedDocuments) { | ||
constructor(client, pendingTextDocumentChanges) { | ||
super(client); | ||
this._forcingDelivery = false; | ||
this._changeData = new Map(); | ||
this._onNotificationSent = new vscode_1.EventEmitter(); | ||
this._syncedDocuments = syncedDocuments; | ||
this._onPendingChangeAdded = new vscode_1.EventEmitter(); | ||
this._pendingTextDocumentChanges = pendingTextDocumentChanges; | ||
} | ||
get onNotificationSent() { | ||
return this._onNotificationSent.event; | ||
} | ||
get onPendingChangeAdded() { | ||
return this._onPendingChangeAdded.event; | ||
} | ||
get registrationType() { | ||
@@ -164,3 +180,3 @@ return vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type; | ||
await this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params); | ||
this.notificationSent(event, vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params); | ||
this.notificationSent(event.document, vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params); | ||
}; | ||
@@ -171,30 +187,5 @@ promises.push(middleware.didChange ? middleware.didChange(event, event => didChange(event)) : didChange(event)); | ||
const didChange = async (event) => { | ||
const doSend = async (event) => { | ||
const params = this._client.code2ProtocolConverter.asChangeTextDocumentParams(event.document); | ||
await this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params); | ||
this.notificationSent(event, vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params); | ||
}; | ||
if (this._changeDelayer) { | ||
if (this._changeDelayer.uri !== event.document.uri.toString()) { | ||
// Use this force delivery to track boolean state. Otherwise we might call two times. | ||
await this.forceDelivery(); | ||
this._changeDelayer.uri = event.document.uri.toString(); | ||
} | ||
// Usually we return the promise that signals that the data has been | ||
// handed of to the network. With delayed change notification we can't | ||
// do that since it would make the sendNotification call wait until the | ||
// change delayer resolves and would therefore defeat the purpose. We | ||
// instead return the change delayer and ensure via forceDocumentSync | ||
// that before sending other notification / request the document sync | ||
// has actually happened. | ||
return this._changeDelayer.delayer.trigger(() => doSend(event)); | ||
} | ||
else { | ||
this._changeDelayer = { | ||
uri: event.document.uri.toString(), | ||
delayer: new async_1.Delayer(200) | ||
}; | ||
// See comment above. | ||
return this._changeDelayer.delayer.trigger(() => doSend(event), -1); | ||
} | ||
const eventUri = event.document.uri.toString(); | ||
this._pendingTextDocumentChanges.set(eventUri, event.document); | ||
this._onPendingChangeAdded.fire(); | ||
}; | ||
@@ -210,8 +201,5 @@ promises.push(middleware.didChange ? middleware.didChange(event, event => didChange(event)) : didChange(event)); | ||
} | ||
get onNotificationSent() { | ||
return this._onNotificationSent.event; | ||
notificationSent(textDocument, type, params) { | ||
this._onNotificationSent.fire({ textDocument, type, params }); | ||
} | ||
notificationSent(changeEvent, type, params) { | ||
this._onNotificationSent.fire({ original: changeEvent, type, params }); | ||
} | ||
unregister(id) { | ||
@@ -225,7 +213,3 @@ this._changeData.delete(id); | ||
dispose() { | ||
if (this._changeDelayer !== undefined) { | ||
this._changeDelayer.delayer.cancel(); | ||
} | ||
this._changeDelayer = undefined; | ||
this._forcingDelivery = false; | ||
this._pendingTextDocumentChanges.clear(); | ||
this._changeData.clear(); | ||
@@ -237,16 +221,21 @@ if (this._listener) { | ||
} | ||
async forceDelivery() { | ||
// See https://github.com/microsoft/vscode-languageserver-node/issues/1105 | ||
// If we have a change delayer and its URI is not yet synced then the open | ||
// event has not been delivered yet. So don't force the sync. | ||
if (this._forcingDelivery || !this._changeDelayer || !this._syncedDocuments.has(this._changeDelayer.uri)) { | ||
return; | ||
getPendingDocumentChanges(exclude) { | ||
if (this._pendingTextDocumentChanges.size === 0) { | ||
return []; | ||
} | ||
try { | ||
this._forcingDelivery = true; | ||
return this._changeDelayer.delayer.forceDelivery(); | ||
let result; | ||
if (exclude === undefined) { | ||
result = Array.from(this._pendingTextDocumentChanges.values()); | ||
this._pendingTextDocumentChanges.clear(); | ||
} | ||
finally { | ||
this._forcingDelivery = false; | ||
else { | ||
result = []; | ||
for (const entry of this._pendingTextDocumentChanges) { | ||
if (entry[0] !== exclude) { | ||
result.push(entry[1]); | ||
this._pendingTextDocumentChanges.delete(entry[0]); | ||
} | ||
} | ||
} | ||
return result; | ||
} | ||
@@ -287,2 +276,5 @@ getProvider(document) { | ||
} | ||
getTextDocument(data) { | ||
return data.document; | ||
} | ||
} | ||
@@ -380,4 +372,6 @@ exports.WillSaveFeature = WillSaveFeature; | ||
} | ||
getTextDocument(data) { | ||
return data; | ||
} | ||
} | ||
exports.DidSaveTextDocumentFeature = DidSaveTextDocumentFeature; | ||
//# sourceMappingURL=textSynchronization.js.map |
@@ -56,2 +56,1 @@ "use strict"; | ||
exports.TypeDefinitionFeature = TypeDefinitionFeature; | ||
//# sourceMappingURL=typeDefinition.js.map |
@@ -97,2 +97,1 @@ "use strict"; | ||
exports.TypeHierarchyFeature = TypeHierarchyFeature; | ||
//# sourceMappingURL=typeHierarchy.js.map |
@@ -277,2 +277,1 @@ "use strict"; | ||
exports.forEach = forEach; | ||
//# sourceMappingURL=async.js.map |
@@ -58,2 +58,1 @@ "use strict"; | ||
exports.asPromise = asPromise; | ||
//# sourceMappingURL=is.js.map |
@@ -98,2 +98,1 @@ "use strict"; | ||
exports.generateUuid = generateUuid; | ||
//# sourceMappingURL=uuid.js.map |
@@ -149,2 +149,1 @@ "use strict"; | ||
exports.WorkspaceFoldersFeature = WorkspaceFoldersFeature; | ||
//# sourceMappingURL=workspaceFolder.js.map |
@@ -80,2 +80,1 @@ "use strict"; | ||
exports.WorkspaceSymbolFeature = WorkspaceSymbolFeature; | ||
//# sourceMappingURL=workspaceSymbol.js.map |
@@ -576,2 +576,1 @@ "use strict"; | ||
} | ||
//# sourceMappingURL=main.js.map |
@@ -48,2 +48,1 @@ "use strict"; | ||
exports.terminate = terminate; | ||
//# sourceMappingURL=processes.js.map |
{ | ||
"name": "vscode-languageclient", | ||
"description": "VSCode Language client implementation", | ||
"version": "8.1.0-next.2", | ||
"version": "8.1.0-next.3", | ||
"author": "Microsoft Corporation", | ||
@@ -33,10 +33,10 @@ "license": "MIT", | ||
"semver": "^7.3.7", | ||
"vscode-languageserver-protocol": "3.17.3-next.2" | ||
"vscode-languageserver-protocol": "3.17.3-next.3" | ||
}, | ||
"scripts": { | ||
"prepublishOnly": "echo \"⛔ Can only publish from a secure pipeline ⛔\" && node ../build/npm/fail", | ||
"prepack": "git clean -xfd . && npm install && node ./bin/updateVSCode.js && npm run all:pack", | ||
"prepack": "npm run all:publish", | ||
"compile": "node ../build/bin/tsc -b ./tsconfig.json && shx cp src/node/terminateProcess.sh lib/node/terminateProcess.sh", | ||
"compile:clean": "git clean -xfd . && npm install && npm run clean && npm run compile", | ||
"watch": "node ../build/bin/tsc -b ./tsconfig-watch.json -w", | ||
"watch": "node ../build/bin/tsc -b ./tsconfig.watch.json -w", | ||
"lint": "node ../node_modules/eslint/bin/eslint.js --ext ts src", | ||
@@ -46,3 +46,4 @@ "test": "cd ../client-node-tests && npm test && cd ../client", | ||
"all": "npm run clean && npm run compile && npm run lint && npm test", | ||
"all:pack": "npm run clean && npm run compile && npm run lint && cd ../client-node-tests && npm run all:pack && cd ..", | ||
"compile:publish": "node ../build/bin/tsc -b ./tsconfig.publish.json && shx cp src/node/terminateProcess.sh lib/node/terminateProcess.sh", | ||
"all:publish": "git clean -xfd . && npm install && npm run updateVSCodeVersion && npm run compile:publish && npm run lint && cd ../client-node-tests && npm run all:publish && cd ..", | ||
"preversion": "npm test", | ||
@@ -49,0 +50,0 @@ "updateVSCodeVersion": "node ./bin/updateVSCode.js" |
Sorry, the diff of this file is too big to display
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Mixed license
License(Experimental) Package contains multiple licenses.
Found 1 instance in 1 package
0
12621
2
631007
119
+ Addedvscode-jsonrpc@8.1.0-next.4(transitive)
+ Addedvscode-languageserver-protocol@3.17.3-next.3(transitive)
+ Addedvscode-languageserver-types@3.17.3-next.1(transitive)
- Removedvscode-jsonrpc@8.1.0-next.3(transitive)
- Removedvscode-languageserver-protocol@3.17.3-next.2(transitive)
- Removedvscode-languageserver-types@3.17.2(transitive)