diff --git a/lib/adapters/autocomplete-adapter.ts b/lib/adapters/autocomplete-adapter.ts index ccc905e4..b34c6b70 100644 --- a/lib/adapters/autocomplete-adapter.ts +++ b/lib/adapters/autocomplete-adapter.ts @@ -103,7 +103,7 @@ export default class AutocompleteAdapter { // We must update the replacement prefix as characters are added and removed const cache = this._suggestionCache.get(server)!; - const replacementPrefix = request.editor.getTextInBufferRange([cache.originalBufferPoint, request.bufferPosition]); + const replacementPrefix = request.editor.getTextInBufferRange([[cache.triggerPoint.row, cache.triggerPoint.column + cache.triggerChar.length], request.bufferPosition]); for (const suggestion of suggestions) { if (suggestion.customReplacmentPrefix) { // having this property means a custom range was provided const len = replacementPrefix.length; diff --git a/test/adapters/autocomplete-adapter.test.ts b/test/adapters/autocomplete-adapter.test.ts index 4e833b3f..34117817 100644 --- a/test/adapters/autocomplete-adapter.test.ts +++ b/test/adapters/autocomplete-adapter.test.ts @@ -504,6 +504,27 @@ describe('AutoCompleteAdapter', () => { result = (await autoCompleteAdapter.getSuggestions(server, customRequest))[0]; expect(result.replacementPrefix).equals('ba'); }); + + it('includes non trigger character prefix in replacementPrefix', async () => { + const customRequest = createRequest({ prefix: 'foo', position: new Point(0, 3) }); + customRequest.editor.setText('foo'); + sinon.stub(server.connection, 'completion').resolves([ + createCompletionItem('foobar'), + ]); + let result = (await autoCompleteAdapter.getSuggestions(server, customRequest))[0]; + + expect(result.replacementPrefix).equals('foo'); + customRequest.editor.setTextInBufferRange([[0, 3], [0, 3]], 'b'); + customRequest.prefix = 'foob'; + customRequest.bufferPosition = new Point(0, 4); + result = (await autoCompleteAdapter.getSuggestions(server, customRequest))[0]; + expect(result.replacementPrefix).equals('foob'); + customRequest.editor.setTextInBufferRange([[0, 4], [0, 4]], 'a'); + customRequest.prefix = 'fooba'; + customRequest.bufferPosition = new Point(0, 5); + result = (await autoCompleteAdapter.getSuggestions(server, customRequest))[0]; + expect(result.replacementPrefix).equals('fooba'); + }); }); describe('completionKindToSuggestionType', () => {