Skip to content

Commit 1dd5ec7

Browse files
authored
Merge pull request microsoft#131958 from microsoft/hediet/fix-131942
Fix truncation of common suffixes that overlap with the common prefix.
2 parents 50680d6 + 1876faf commit 1dd5ec7

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/vs/editor/contrib/inlineCompletions/suggestWidgetPreviewModel.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ function lengthOfLongestCommonSuffix(str1: string, str2: string): number {
172172
return i;
173173
}
174174

175-
function minimizeInlineCompletion(model: ITextModel, inlineCompletion: NormalizedInlineCompletion | undefined): NormalizedInlineCompletion | undefined {
175+
export function minimizeInlineCompletion(model: ITextModel, inlineCompletion: NormalizedInlineCompletion | undefined): NormalizedInlineCompletion | undefined {
176176
if (!inlineCompletion) {
177177
return inlineCompletion;
178178
}
@@ -181,7 +181,8 @@ function minimizeInlineCompletion(model: ITextModel, inlineCompletion: Normalize
181181
const startOffset = model.getOffsetAt(inlineCompletion.range.getStartPosition()) + commonPrefixLength;
182182
const start = model.getPositionAt(startOffset);
183183

184-
const commonSuffixLength = lengthOfLongestCommonSuffix(valueToReplace, inlineCompletion.text);
184+
const remainingValueToReplace = valueToReplace.substr(commonPrefixLength);
185+
const commonSuffixLength = lengthOfLongestCommonSuffix(remainingValueToReplace, inlineCompletion.text);
185186
const end = model.getPositionAt(Math.max(startOffset, model.getOffsetAt(inlineCompletion.range.getEndPosition()) - commonSuffixLength));
186187

187188
return {

src/vs/editor/contrib/inlineCompletions/test/suggestWidgetModel.test.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { SuggestWidgetPreviewModel } from 'vs/editor/contrib/inlineCompletions/suggestWidgetPreviewModel';
6+
import { minimizeInlineCompletion, SuggestWidgetPreviewModel } from 'vs/editor/contrib/inlineCompletions/suggestWidgetPreviewModel';
77
import { SuggestController } from 'vs/editor/contrib/suggest/suggestController';
88
import { SnippetController2 } from 'vs/editor/contrib/snippet/snippetController2';
99
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
@@ -28,6 +28,7 @@ import { GhostTextContext } from 'vs/editor/contrib/inlineCompletions/test/utils
2828
import { Range } from 'vs/editor/common/core/range';
2929
import { runWithFakedTimers } from 'vs/base/test/common/timeTravelScheduler';
3030
import { SharedInlineCompletionCache } from 'vs/editor/contrib/inlineCompletions/ghostTextModel';
31+
import { createTextModel } from 'vs/editor/test/common/editorTestUtils';
3132

3233
suite('Suggest Widget Model', () => {
3334
test('Active', async () => {
@@ -83,6 +84,19 @@ suite('Suggest Widget Model', () => {
8384
}
8485
);
8586
});
87+
88+
test('minimizeInlineCompletion', async () => {
89+
const model = createTextModel('fun');
90+
const result = minimizeInlineCompletion(model, { range: new Range(1, 1, 1, 4), text: 'function' })!;
91+
92+
assert.deepStrictEqual({
93+
range: result.range.toString(),
94+
text: result.text
95+
}, {
96+
range: '[1,4 -> 1,4]',
97+
text: 'ction'
98+
});
99+
});
86100
});
87101

88102
const provider: CompletionItemProvider = {

0 commit comments

Comments
 (0)