Skip to content

Commit d8c5456

Browse files
committed
feat(lsp): inlineCompletion
Closes #5071
1 parent 33d0a52 commit d8c5456

11 files changed

+271
-129
lines changed

package-lock.json

+22-18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
"eslint-plugin-jsdoc": "^48.5.0",
8282
"jest": "29.7.0",
8383
"typescript": "^5.5.3",
84-
"vscode-languageserver": "^9.0.1"
84+
"vscode-languageserver": "^10.0.0-next.7"
8585
},
8686
"dependencies": {
8787
"@chemzqm/neovim": "^6.1.2",
@@ -108,9 +108,9 @@
108108
"unidecode": "^1.0.1",
109109
"unzip-stream": "^0.3.4",
110110
"uuid": "^9.0.1",
111-
"vscode-languageserver-protocol": "^3.17.5",
111+
"vscode-languageserver-protocol": "^3.17.6-next.7",
112112
"vscode-languageserver-textdocument": "^1.0.11",
113-
"vscode-languageserver-types": "^3.17.5",
113+
"vscode-languageserver-types": "^3.17.6-next.4",
114114
"vscode-uri": "^3.0.8",
115115
"which": "^4.0.0"
116116
}

src/__tests__/client/features.test.ts

+24-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as assert from 'assert'
22
import path from 'path'
3-
import { CallHierarchyIncomingCall, CallHierarchyItem, CallHierarchyOutgoingCall, CallHierarchyPrepareRequest, CancellationToken, CancellationTokenSource, CodeAction, CodeActionRequest, CodeLensRequest, Color, ColorInformation, ColorPresentation, CompletionItem, CompletionRequest, CompletionTriggerKind, ConfigurationRequest, DeclarationRequest, DefinitionRequest, DidChangeConfigurationNotification, DidChangeTextDocumentNotification, DidChangeWatchedFilesNotification, DidCloseTextDocumentNotification, DidCreateFilesNotification, DidDeleteFilesNotification, DidOpenTextDocumentNotification, DidRenameFilesNotification, DidSaveTextDocumentNotification, Disposable, DocumentColorRequest, DocumentDiagnosticReport, DocumentDiagnosticReportKind, DocumentDiagnosticRequest, DocumentFormattingRequest, DocumentHighlight, DocumentHighlightKind, DocumentHighlightRequest, DocumentLink, DocumentLinkRequest, DocumentOnTypeFormattingRequest, DocumentRangeFormattingRequest, DocumentSelector, DocumentSymbolRequest, FoldingRange, FoldingRangeRequest, FullDocumentDiagnosticReport, Hover, HoverRequest, ImplementationRequest, InlayHintKind, InlayHintLabelPart, InlayHintRequest, InlineValueEvaluatableExpression, InlineValueRequest, InlineValueText, InlineValueVariableLookup, LinkedEditingRangeRequest, Location, NotificationType0, ParameterInformation, Position, ProgressToken, ProtocolRequestType, Range, ReferencesRequest, RenameRequest, SelectionRange, SelectionRangeRequest, SemanticTokensRegistrationType, SignatureHelpRequest, SignatureHelpTriggerKind, SignatureInformation, TextDocumentEdit, TextDocumentSyncKind, TextEdit, TypeDefinitionRequest, TypeHierarchyPrepareRequest, WillCreateFilesRequest, WillDeleteFilesRequest, WillRenameFilesRequest, WillSaveTextDocumentNotification, WillSaveTextDocumentWaitUntilRequest, WorkDoneProgressBegin, WorkDoneProgressCreateRequest, WorkDoneProgressEnd, WorkDoneProgressReport, WorkspaceEdit, WorkspaceSymbolRequest } from 'vscode-languageserver-protocol'
3+
import { CallHierarchyIncomingCall, CallHierarchyItem, CallHierarchyOutgoingCall, CallHierarchyPrepareRequest, CancellationToken, CancellationTokenSource, CodeAction, CodeActionRequest, CodeLensRequest, Color, ColorInformation, ColorPresentation, CompletionItem, CompletionRequest, CompletionTriggerKind, ConfigurationRequest, DeclarationRequest, DefinitionRequest, DidChangeConfigurationNotification, DidChangeTextDocumentNotification, DidChangeWatchedFilesNotification, DidCloseTextDocumentNotification, DidCreateFilesNotification, DidDeleteFilesNotification, DidOpenTextDocumentNotification, DidRenameFilesNotification, DidSaveTextDocumentNotification, Disposable, DocumentColorRequest, DocumentDiagnosticReport, DocumentDiagnosticReportKind, DocumentDiagnosticRequest, DocumentFormattingRequest, DocumentHighlight, DocumentHighlightKind, DocumentHighlightRequest, DocumentLink, DocumentLinkRequest, DocumentOnTypeFormattingRequest, DocumentRangeFormattingRequest, DocumentSelector, DocumentSymbolRequest, FoldingRange, FoldingRangeRequest, FullDocumentDiagnosticReport, Hover, HoverRequest, ImplementationRequest, InlayHintKind, InlayHintLabelPart, InlayHintRequest, InlineCompletionItem, InlineCompletionRequest, InlineValueEvaluatableExpression, InlineValueRequest, InlineValueText, InlineValueVariableLookup, LinkedEditingRangeRequest, Location, NotificationType0, ParameterInformation, Position, ProgressToken, ProtocolRequestType, Range, ReferencesRequest, RenameRequest, SelectionRange, SelectionRangeRequest, SemanticTokensRegistrationType, SignatureHelpRequest, SignatureHelpTriggerKind, SignatureInformation, TextDocumentEdit, TextDocumentSyncKind, TextEdit, TypeDefinitionRequest, TypeHierarchyPrepareRequest, WillCreateFilesRequest, WillDeleteFilesRequest, WillRenameFilesRequest, WillSaveTextDocumentNotification, WillSaveTextDocumentWaitUntilRequest, WorkDoneProgressBegin, WorkDoneProgressCreateRequest, WorkDoneProgressEnd, WorkDoneProgressReport, WorkspaceEdit, WorkspaceSymbolRequest } from 'vscode-languageserver-protocol'
44
import { TextDocument } from 'vscode-languageserver-textdocument'
55
import { URI } from 'vscode-uri'
66
import commands from '../../commands'
@@ -154,6 +154,7 @@ describe('Client integration', () => {
154154
documentSelector: [{ language: '*' }]
155155
},
156156
selectionRangeProvider: true,
157+
inlineCompletionProvider: true,
157158
inlineValueProvider: {},
158159
inlayHintProvider: {
159160
resolveProvider: true
@@ -270,6 +271,7 @@ describe('Client integration', () => {
270271
testFeature(SemanticTokensRegistrationType.method, 'document')
271272
testFeature(LinkedEditingRangeRequest.method, 'document')
272273
testFeature(TypeHierarchyPrepareRequest.method, 'document')
274+
testFeature(InlineCompletionRequest.method, 'document')
273275
testFeature(InlineValueRequest.method, 'document')
274276
testFeature(InlayHintRequest.method, 'document')
275277
testFeature(WorkspaceSymbolRequest.method, 'workspace')
@@ -1351,6 +1353,27 @@ describe('Client integration', () => {
13511353
}, true)
13521354
})
13531355

1356+
test('Inline Completions', async () => {
1357+
const provider = client.getFeature(InlineCompletionRequest.method)?.getProvider(document)
1358+
isDefined(provider)
1359+
const results = (await provider.provideInlineCompletionItems(document, position, { triggerKind: 1, selectedCompletionInfo: { range, text: 'text' } }, tokenSource.token)) as InlineCompletionItem[]
1360+
1361+
isArray(results, InlineCompletionItem, 1)
1362+
1363+
rangeEqual(results[0].range!, 1, 2, 3, 4)
1364+
assert.strictEqual(results[0].filterText!, 'te')
1365+
assert.strictEqual(results[0].insertText, 'text inline')
1366+
1367+
let middlewareCalled = false
1368+
middleware.provideInlineCompletionItems = (d, r, c, t, n) => {
1369+
middlewareCalled = true
1370+
return n(d, r, c, t)
1371+
}
1372+
await provider.provideInlineCompletionItems(document, position, { triggerKind: 1, selectedCompletionInfo: undefined }, tokenSource.token)
1373+
middleware.provideInlineCompletionItems = undefined
1374+
assert.strictEqual(middlewareCalled, true)
1375+
})
1376+
13541377
test('Workspace symbols', async () => {
13551378
const providers = client.getFeature(WorkspaceSymbolRequest.method).getProviders()
13561379
isDefined(providers)

0 commit comments

Comments
 (0)