Skip to content

Commit b6a46ab

Browse files
authored
Fix preview results. (#4365)
* Fix preview results. * Refactoring.
1 parent 6c0eaea commit b6a46ab

File tree

5 files changed

+31
-16
lines changed

5 files changed

+31
-16
lines changed

Extension/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# C/C++ for Visual Studio Code Change Log
22

3-
## Version 0.26.0-insiders: September 30, 2019
3+
## Version 0.26.0-insiders: October 1, 2019
44
### New Features
55
* Add localization support (translated text) via `Configure Display Language`. [#7](https://github.com/microsoft/vscode-cpptools/issues/7)
66
* Add `Rename Symbol` with a pending rename UI. [#296](https://github.com/microsoft/vscode-cpptools/issues/296), [PR #4277](https://github.com/microsoft/vscode-cpptools/pull/4277)

Extension/src/LanguageServer/client.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -628,9 +628,8 @@ export class DefaultClient implements Client {
628628
return;
629629
}
630630
referencesRequestPending = true;
631-
this.client.languageClient.sendNotification(FindAllReferencesNotification, params);
632631
// Register a single-fire handler for the reply.
633-
this.client.references.setResultsCallback((result) => {
632+
let resultCallback: refs.ReferencesResultCallback = (result: refs.ReferencesResult) => {
634633
referencesRequestPending = false;
635634
if (referencesPendingCancellations.length > 0) {
636635
while (referencesPendingCancellations.length > 1) {
@@ -643,15 +642,22 @@ export class DefaultClient implements Client {
643642
pendingCancel.callback();
644643
}
645644
let locations: vscode.Location[] = [];
646-
result.referenceInfos.forEach(referenceInfo => {
645+
result.referenceInfos.forEach((referenceInfo: refs.ReferenceInfo) => {
647646
if (referenceInfo.type === refs.ReferenceType.Confirmed) {
648647
let uri: vscode.Uri = vscode.Uri.file(referenceInfo.file);
649648
let range: vscode.Range = new vscode.Range(referenceInfo.position.line, referenceInfo.position.character, referenceInfo.position.line, referenceInfo.position.character + result.text.length);
650649
locations.push(new vscode.Location(uri, range));
651650
}
652651
});
653652
resolve(locations);
654-
});
653+
};
654+
if (this.client.references.lastResults) {
655+
resultCallback(this.client.references.lastResults);
656+
this.client.references.lastResults = null;
657+
} else {
658+
this.client.languageClient.sendNotification(FindAllReferencesNotification, params);
659+
this.client.references.setResultsCallback(resultCallback);
660+
}
655661
});
656662
token.onCancellationRequested(e => {
657663
if (params === referencesParams) {
@@ -710,7 +716,7 @@ export class DefaultClient implements Client {
710716
}
711717
referencesRequestPending = true;
712718
this.client.languageClient.sendNotification(RenameNotification, params);
713-
this.client.references.setResultsCallback((referencesResult) => {
719+
this.client.references.setResultsCallback((referencesResult: refs.ReferencesResult) => {
714720
referencesRequestPending = false;
715721
--renameRequestsPending;
716722
let workspaceEdit: vscode.WorkspaceEdit = new vscode.WorkspaceEdit();

Extension/src/LanguageServer/references.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ export interface ReferencesResult {
3636
isFinished: boolean;
3737
}
3838

39+
export type ReferencesResultCallback = (result: ReferencesResult) => void;
40+
3941
export interface ReferencesResultMessage {
4042
referencesResult: ReferencesResult;
4143
}
@@ -149,7 +151,7 @@ export class ReferencesManager {
149151
private visibleRangesDecreasedTicks: number = 0;
150152
private readonly ticksForDetectingPeek: number = 1000; // TODO: Might need tweeking?
151153

152-
private resultsCallback: (results: ReferencesResult) => void;
154+
private resultsCallback: ReferencesResultCallback;
153155
private currentUpdateProgressTimer: NodeJS.Timeout;
154156
private currentUpdateProgressResolve: () => void;
155157

@@ -385,11 +387,18 @@ export class ReferencesManager {
385387
} else if (currentReferenceCommandMode === ReferencesCommandMode.Find) {
386388
this.findAllRefsView.show(true);
387389
}
388-
this.resultsCallback(referencesResult);
390+
if (referencesResult.isFinished && this.referencesRequestHasOccurred) {
391+
this.lastResults = referencesResult;
392+
vscode.commands.executeCommand("references-view.refresh");
393+
} else {
394+
this.resultsCallback(referencesResult);
395+
}
389396
}
390397
}
391398

392-
public setResultsCallback(callback: (results: ReferencesResult) => void): void {
399+
public lastResults: ReferencesResult = null; // Saved for the final request after a preview occurs.
400+
401+
public setResultsCallback(callback: ReferencesResultCallback): void {
393402
this.symbolSearchInProgress = true;
394403
this.resultsCallback = callback;
395404
}

Extension/src/LanguageServer/renameModel.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* ------------------------------------------------------------------------------------------ */
55
'use strict';
66
import * as vscode from 'vscode';
7-
import { ReferenceType, ReferencesResult, ReferenceInfo } from './references';
7+
import { ReferenceType, ReferencesResult, ReferenceInfo, ReferencesResultCallback } from './references';
88
import { RenameDataProvider } from './renameDataProvider';
99

1010
export class RenamePendingItem {
@@ -237,10 +237,10 @@ let currentRenameModel: RenameModel;
237237
export class RenameModel {
238238
private pendingGroup: RenamePendingFilesGroupItem;
239239
private candidatesGroup: RenameCandidateReferenceTypeGroupItem;
240-
private renameResultsCallback: (results: ReferencesResult) => void;
240+
private renameResultsCallback: ReferencesResultCallback;
241241
private originalText: string;
242242

243-
constructor(resultsInput: ReferencesResult, readonly pendingProvider: RenameDataProvider, readonly candidateProvider: RenameDataProvider, resultsCallback: (results: ReferencesResult) => void) {
243+
constructor(resultsInput: ReferencesResult, readonly pendingProvider: RenameDataProvider, readonly candidateProvider: RenameDataProvider, resultsCallback: ReferencesResultCallback) {
244244
currentRenameModel = this;
245245
this.originalText = resultsInput.text;
246246
this.renameResultsCallback = resultsCallback;
@@ -284,7 +284,7 @@ export class RenameModel {
284284

285285
cancel(): void {
286286
if (this.renameResultsCallback) {
287-
let callback: (results: ReferencesResult) => void = this.renameResultsCallback;
287+
let callback: ReferencesResultCallback = this.renameResultsCallback;
288288
this.renameResultsCallback = null;
289289
callback(null);
290290
}
@@ -308,7 +308,7 @@ export class RenameModel {
308308
text: this.originalText,
309309
isFinished: true
310310
};
311-
let callback: (results: ReferencesResult) => void = this.renameResultsCallback;
311+
let callback: ReferencesResultCallback = this.renameResultsCallback;
312312
this.renameResultsCallback = null;
313313
callback(results);
314314
}

Extension/src/LanguageServer/renameView.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* ------------------------------------------------------------------------------------------ */
55
'use strict';
66
import * as vscode from 'vscode';
7-
import { ReferencesResult } from './references';
7+
import { ReferencesResult, ReferencesResultCallback } from './references';
88
import { RenameDataProvider } from './renameDataProvider';
99
import { RenameModel } from './renameModel';
1010

@@ -39,7 +39,7 @@ export class RenameView {
3939
}
4040
}
4141

42-
setData(results: ReferencesResult, resultsCallback: (results: ReferencesResult) => void): void {
42+
setData(results: ReferencesResult, resultsCallback: ReferencesResultCallback): void {
4343
this.model = new RenameModel(results, this.renamePendingDataProvider, this.renameCandidatesDataProvider, resultsCallback);
4444
this.renamePendingDataProvider.setModel(this.model);
4545
this.renameCandidatesDataProvider.setModel(this.model);

0 commit comments

Comments
 (0)