Merge from vscode 4c9161a3f125f5a788aafa73a4ecfcb27dcfc319 (#9143)

* Merge from vscode 4c9161a3f125f5a788aafa73a4ecfcb27dcfc319

* minor spacing fix
This commit is contained in:
Anthony Dresser
2020-02-13 21:20:36 -06:00
committed by GitHub
parent 0c56d44e4f
commit 71375808b9
57 changed files with 706 additions and 510 deletions

View File

@@ -105,8 +105,6 @@ suite('suggest, word distance', function () {
}
test('Suggest locality bonus can boost current word #90515', function () {
this.skip();
const pos = { lineNumber: 2, column: 2 };
const d1 = distance.distance(pos, createSuggestItem('a', 1, pos).completion);
const d2 = distance.distance(pos, createSuggestItem('aa', 1, pos).completion);

View File

@@ -35,14 +35,23 @@ export abstract class WordDistance {
return WordDistance.None;
}
const ranges = await new BracketSelectionRangeProvider().provideSelectionRanges(model, [position]);
if (!ranges || ranges.length === 0 || ranges[0].length === 0) {
const [ranges] = await new BracketSelectionRangeProvider().provideSelectionRanges(model, [position]);
if (ranges.length === 0) {
return WordDistance.None;
}
const wordRanges = await service.computeWordRanges(model.uri, ranges[0][0].range);
const wordRanges = await service.computeWordRanges(model.uri, ranges[0].range);
if (!wordRanges) {
return WordDistance.None;
}
// remove current word
const wordUntilPos = model.getWordUntilPosition(position);
delete wordRanges[wordUntilPos.word];
return new class extends WordDistance {
distance(anchor: IPosition, suggestion: CompletionItem) {
if (!wordRanges || !position.equals(editor.getPosition())) {
if (!position.equals(editor.getPosition())) {
return 0;
}
if (suggestion.kind === CompletionItemKind.Keyword) {
@@ -56,7 +65,7 @@ export abstract class WordDistance {
let idx = binarySearch(wordLines, Range.fromPositions(anchor), Range.compareRangesUsingStarts);
let bestWordRange = idx >= 0 ? wordLines[idx] : wordLines[Math.max(0, ~idx - 1)];
let blockDistance = ranges.length;
for (const range of ranges[0]) {
for (const range of ranges) {
if (!Range.containsRange(range.range, bestWordRange)) {
break;
}