Skip to content

Commit 33a1062

Browse files
Merge branch 'browntarik/adjustCompilerDialogs' of https://github.com/Microsoft/vscode-cpptools into browntarik/adjustCompilerDialogs
2 parents fa20f29 + 4283899 commit 33a1062

11 files changed

+207
-184
lines changed

Extension/src/LanguageServer/Providers/codeActionProvider.ts

Lines changed: 129 additions & 122 deletions
Large diffs are not rendered by default.

Extension/src/LanguageServer/Providers/documentFormattingEditProvider.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* See 'LICENSE' in the project root for license information.
44
* ------------------------------------------------------------------------------------------ */
55
import * as vscode from 'vscode';
6-
import { DefaultClient, FormatParams, FormatDocumentRequest } from '../client';
6+
import { DefaultClient, FormatParams, FormatDocumentRequest, FormatResult } from '../client';
77
import { CppSettings, getEditorConfigSettings, OtherSettings } from '../settings';
88
import { makeVscodeTextEdits } from '../utils';
99

@@ -69,7 +69,11 @@ export class DocumentFormattingEditProvider implements vscode.DocumentFormatting
6969
// because there is not currently cancellation logic for formatting
7070
// in the native process. Formatting is currently done directly in
7171
// message handling thread.
72-
const results: vscode.TextEdit[] = makeVscodeTextEdits(await this.client.languageClient.sendRequest(FormatDocumentRequest, params));
72+
const response: FormatResult = await this.client.languageClient.sendRequest(FormatDocumentRequest, params, token);
73+
if (token.isCancellationRequested || response.edits === undefined) {
74+
throw new vscode.CancellationError();
75+
}
76+
const results: vscode.TextEdit[] = makeVscodeTextEdits(response.edits);
7377
// Apply insert_final_newline from .editorconfig
7478
if (document.lineCount > 0 && editorConfigSettings !== undefined && editorConfigSettings.insert_final_newline) {
7579
// Check if there is already a newline at the end. If so, formatting edits should not replace it.

Extension/src/LanguageServer/Providers/documentRangeFormattingEditProvider.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* See 'LICENSE' in the project root for license information.
44
* ------------------------------------------------------------------------------------------ */
55
import * as vscode from 'vscode';
6-
import { DefaultClient, FormatParams, FormatRangeRequest } from '../client';
6+
import { DefaultClient, FormatParams, FormatRangeRequest, FormatResult } from '../client';
77
import { CppSettings, getEditorConfigSettings } from '../settings';
88
import { makeVscodeTextEdits } from '../utils';
99

@@ -45,7 +45,11 @@ export class DocumentRangeFormattingEditProvider implements vscode.DocumentRange
4545
// because there is not currently cancellation logic for formatting
4646
// in the native process. Formatting is currently done directly in
4747
// message handling thread.
48-
return makeVscodeTextEdits(await this.client.languageClient.sendRequest(FormatRangeRequest, params));
48+
const response: FormatResult = await this.client.languageClient.sendRequest(FormatRangeRequest, params, token);
49+
if (token.isCancellationRequested || response.edits === undefined) {
50+
throw new vscode.CancellationError();
51+
}
52+
return makeVscodeTextEdits(response.edits);
4953
};
5054
if (!useVcFormat) {
5155
return configCallBack(undefined);

Extension/src/LanguageServer/Providers/documentSymbolProvider.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* See 'LICENSE' in the project root for license information.
44
* ------------------------------------------------------------------------------------------ */
55
import * as vscode from 'vscode';
6-
import { DefaultClient, LocalizeDocumentSymbol, GetDocumentSymbolRequestParams, GetDocumentSymbolRequest, SymbolScope, Client } from '../client';
6+
import { DefaultClient, LocalizeDocumentSymbol, GetDocumentSymbolRequestParams, GetDocumentSymbolRequest, SymbolScope, Client, GetDocumentSymbolResult } from '../client';
77
import { clients, processDelayedDidOpen } from '../extension';
88
import { makeVscodeRange } from '../utils';
99
import { getLocalizedString, getLocalizedSymbolScope } from '../localization';
@@ -60,14 +60,16 @@ export class DocumentSymbolProvider implements vscode.DocumentSymbolProvider {
6060
if (!defaultClient.TrackedDocuments.has(document)) {
6161
processDelayedDidOpen(document);
6262
}
63-
return defaultClient.requestWhenReady(async () => {
64-
const params: GetDocumentSymbolRequestParams = {
65-
uri: document.uri.toString()
66-
};
67-
const symbols: LocalizeDocumentSymbol[] = await defaultClient.languageClient.sendRequest(GetDocumentSymbolRequest, params, token);
68-
const resultSymbols: vscode.DocumentSymbol[] = this.getChildrenSymbols(symbols);
69-
return resultSymbols;
70-
});
63+
await defaultClient.awaitUntilLanguageClientReady();
64+
const params: GetDocumentSymbolRequestParams = {
65+
uri: document.uri.toString()
66+
};
67+
const response: GetDocumentSymbolResult = await defaultClient.languageClient.sendRequest(GetDocumentSymbolRequest, params, token);
68+
if (token.isCancellationRequested || response.symbols === undefined) {
69+
throw new vscode.CancellationError();
70+
};
71+
const resultSymbols: vscode.DocumentSymbol[] = this.getChildrenSymbols(response.symbols);
72+
return resultSymbols;
7173
}
7274
return [];
7375
}

Extension/src/LanguageServer/Providers/foldingRangeProvider.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ export class FoldingRangeProvider implements vscode.FoldingRangeProvider {
2323
uri: document.uri.toString()
2424
};
2525
await this.client.awaitUntilLanguageClientReady();
26-
const ranges: GetFoldingRangesResult = await this.client.languageClient.sendRequest(GetFoldingRangesRequest, params, token);
27-
if (ranges.canceled) {
28-
return undefined;
26+
const response: GetFoldingRangesResult = await this.client.languageClient.sendRequest(GetFoldingRangesRequest, params, token);
27+
if (token.isCancellationRequested || response.ranges === undefined) {
28+
throw new vscode.CancellationError();
2929
}
3030
const result: vscode.FoldingRange[] = [];
31-
ranges.ranges.forEach((r: CppFoldingRange) => {
31+
response.ranges.forEach((r: CppFoldingRange) => {
3232
const foldingRange: vscode.FoldingRange = {
3333
start: r.range.startLine,
3434
end: r.range.endLine

Extension/src/LanguageServer/Providers/inlayHintProvider.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ interface CppInlayHint {
2929

3030
interface GetInlayHintsResult {
3131
fileVersion: number;
32-
canceled: boolean;
3332
inlayHints: CppInlayHint[];
3433
}
3534

@@ -59,25 +58,22 @@ export class InlayHintsProvider implements vscode.InlayHintsProvider {
5958
const uriString: string = document.uri.toString();
6059

6160
// Get results from cache if available.
62-
const cacheEntry: InlayHintsCacheEntry | undefined = this.cache.get(uriString);
61+
let cacheEntry: InlayHintsCacheEntry | undefined = this.cache.get(uriString);
6362
if (cacheEntry?.FileVersion === document.version) {
6463
return this.buildVSCodeHints(document.uri, cacheEntry);
6564
}
6665

6766
// Get new results from the language server
6867
const params: GetInlayHintsParams = { uri: uriString };
6968
const inlayHintsResult: GetInlayHintsResult = await this.client.languageClient.sendRequest(GetInlayHintsRequest, params, token);
70-
if (!inlayHintsResult.canceled) {
71-
if (inlayHintsResult.fileVersion === openFileVersions.get(uriString)) {
72-
const cacheEntry: InlayHintsCacheEntry = this.createCacheEntry(inlayHintsResult);
73-
this.cache.set(uriString, cacheEntry);
74-
return this.buildVSCodeHints(document.uri, cacheEntry);
75-
} else {
76-
// Force another request because file versions do not match.
77-
this.onDidChangeInlayHintsEvent.fire();
78-
}
69+
if (token.isCancellationRequested || inlayHintsResult.inlayHints === undefined || inlayHintsResult.fileVersion !== openFileVersions.get(uriString)) {
70+
throw new vscode.CancellationError();
7971
}
80-
return undefined;
72+
73+
cacheEntry = this.createCacheEntry(inlayHintsResult);
74+
this.cache.set(uriString, cacheEntry);
75+
return this.buildVSCodeHints(document.uri, cacheEntry);
76+
8177
}
8278

8379
public invalidateFile(uri: string): void {

Extension/src/LanguageServer/Providers/onTypeFormattingEditProvider.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* See 'LICENSE' in the project root for license information.
44
* ------------------------------------------------------------------------------------------ */
55
import * as vscode from 'vscode';
6-
import { DefaultClient, FormatParams, FormatOnTypeRequest } from '../client';
6+
import { DefaultClient, FormatParams, FormatOnTypeRequest, FormatResult } from '../client';
77
import { CppSettings, getEditorConfigSettings } from '../settings';
88
import { makeVscodeTextEdits } from '../utils';
99

@@ -45,7 +45,11 @@ export class OnTypeFormattingEditProvider implements vscode.OnTypeFormattingEdit
4545
// because there is not currently cancellation logic for formatting
4646
// in the native process. Formatting is currently done directly in
4747
// message handling thread.
48-
return makeVscodeTextEdits(await this.client.languageClient.sendRequest(FormatOnTypeRequest, params));
48+
const response: FormatResult = await this.client.languageClient.sendRequest(FormatOnTypeRequest, params, token);
49+
if (token.isCancellationRequested || response.edits === undefined) {
50+
throw new vscode.CancellationError();
51+
}
52+
return makeVscodeTextEdits(response.edits);
4953
};
5054
if (!useVcFormat) {
5155
// If not using vcFormat, only process on-type requests for ';'

Extension/src/LanguageServer/Providers/semanticTokensProvider.ts

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,21 @@ export class SemanticTokensProvider implements vscode.DocumentSemanticTokensProv
2323
const cache: [number, vscode.SemanticTokens] | undefined = this.tokenCaches.get(uriString);
2424
if (cache && cache[0] === document.version) {
2525
return cache[1];
26-
} else {
27-
const params: GetSemanticTokensParams = {
28-
uri: uriString
29-
};
30-
const tokensResult: GetSemanticTokensResult = await this.client.languageClient.sendRequest(GetSemanticTokensRequest, params, token);
31-
if (tokensResult.canceled) {
32-
throw new vscode.CancellationError();
33-
} else {
34-
if (tokensResult.fileVersion !== openFileVersions.get(uriString)) {
35-
throw new vscode.CancellationError();
36-
} else {
37-
const builder: vscode.SemanticTokensBuilder = new vscode.SemanticTokensBuilder(semanticTokensLegend);
38-
tokensResult.tokens.forEach((semanticToken) => {
39-
builder.push(semanticToken.line, semanticToken.character, semanticToken.length, semanticToken.type, semanticToken.modifiers);
40-
});
41-
const tokens: vscode.SemanticTokens = builder.build();
42-
this.tokenCaches.set(uriString, [tokensResult.fileVersion, tokens]);
43-
return tokens;
44-
}
45-
}
4626
}
27+
const params: GetSemanticTokensParams = {
28+
uri: uriString
29+
};
30+
const tokensResult: GetSemanticTokensResult = await this.client.languageClient.sendRequest(GetSemanticTokensRequest, params, token);
31+
if (token.isCancellationRequested || tokensResult.tokens === undefined || tokensResult.fileVersion !== openFileVersions.get(uriString)) {
32+
throw new vscode.CancellationError();
33+
}
34+
const builder: vscode.SemanticTokensBuilder = new vscode.SemanticTokensBuilder(semanticTokensLegend);
35+
tokensResult.tokens.forEach((semanticToken) => {
36+
builder.push(semanticToken.line, semanticToken.character, semanticToken.length, semanticToken.type, semanticToken.modifiers);
37+
});
38+
const tokens: vscode.SemanticTokens = builder.build();
39+
this.tokenCaches.set(uriString, [tokensResult.fileVersion, tokens]);
40+
return tokens;
4741
}
4842

4943
public invalidateFile(uri: string): void {

Extension/src/LanguageServer/Providers/workspaceSymbolProvider.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ export class WorkspaceSymbolProvider implements vscode.WorkspaceSymbolProvider {
2020

2121
const symbols: LocalizeSymbolInformation[] = await this.client.languageClient.sendRequest(GetSymbolInfoRequest, params, token);
2222
const resultSymbols: vscode.SymbolInformation[] = [];
23+
if (token.isCancellationRequested) {
24+
throw new vscode.CancellationError();
25+
}
2326

2427
// Convert to vscode.Command array
2528
symbols.forEach((symbol) => {

Extension/src/LanguageServer/client.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,10 @@ export interface LocalizeDocumentSymbol {
338338
children: LocalizeDocumentSymbol[];
339339
}
340340

341+
export interface GetDocumentSymbolResult {
342+
symbols: LocalizeDocumentSymbol[];
343+
}
344+
341345
export interface LocalizeSymbolInformation {
342346
name: string;
343347
kind: vscode.SymbolKind;
@@ -369,6 +373,10 @@ export interface FormatParams {
369373
onChanges: boolean;
370374
}
371375

376+
export interface FormatResult {
377+
edits: TextEdit[];
378+
}
379+
372380
export interface GetFoldingRangesParams {
373381
uri: string;
374382
}
@@ -386,7 +394,6 @@ export interface CppFoldingRange {
386394
}
387395

388396
export interface GetFoldingRangesResult {
389-
canceled: boolean;
390397
ranges: CppFoldingRange[];
391398
}
392399

@@ -404,7 +411,6 @@ interface SemanticToken {
404411

405412
export interface GetSemanticTokensResult {
406413
fileVersion: number;
407-
canceled: boolean;
408414
tokens: SemanticToken[];
409415
}
410416

@@ -532,16 +538,17 @@ const QueryCompilerDefaultsRequest: RequestType<QueryDefaultCompilerParams, conf
532538
const QueryTranslationUnitSourceRequest: RequestType<QueryTranslationUnitSourceParams, QueryTranslationUnitSourceResult, void> = new RequestType<QueryTranslationUnitSourceParams, QueryTranslationUnitSourceResult, void>('cpptools/queryTranslationUnitSource');
533539
const SwitchHeaderSourceRequest: RequestType<SwitchHeaderSourceParams, string, void> = new RequestType<SwitchHeaderSourceParams, string, void>('cpptools/didSwitchHeaderSource');
534540
const GetDiagnosticsRequest: RequestType<void, GetDiagnosticsResult, void> = new RequestType<void, GetDiagnosticsResult, void>('cpptools/getDiagnostics');
535-
export const GetDocumentSymbolRequest: RequestType<GetDocumentSymbolRequestParams, LocalizeDocumentSymbol[], void> = new RequestType<GetDocumentSymbolRequestParams, LocalizeDocumentSymbol[], void>('cpptools/getDocumentSymbols');
541+
export const GetDocumentSymbolRequest: RequestType<GetDocumentSymbolRequestParams, GetDocumentSymbolResult, void> = new RequestType<GetDocumentSymbolRequestParams, GetDocumentSymbolResult, void>('cpptools/getDocumentSymbols');
536542
export const GetSymbolInfoRequest: RequestType<WorkspaceSymbolParams, LocalizeSymbolInformation[], void> = new RequestType<WorkspaceSymbolParams, LocalizeSymbolInformation[], void>('cpptools/getWorkspaceSymbols');
537543
export const GetFoldingRangesRequest: RequestType<GetFoldingRangesParams, GetFoldingRangesResult, void> = new RequestType<GetFoldingRangesParams, GetFoldingRangesResult, void>('cpptools/getFoldingRanges');
538544
export const GetSemanticTokensRequest: RequestType<GetSemanticTokensParams, GetSemanticTokensResult, void> = new RequestType<GetSemanticTokensParams, GetSemanticTokensResult, void>('cpptools/getSemanticTokens');
539-
export const FormatDocumentRequest: RequestType<FormatParams, TextEdit[], void> = new RequestType<FormatParams, TextEdit[], void>('cpptools/formatDocument');
540-
export const FormatRangeRequest: RequestType<FormatParams, TextEdit[], void> = new RequestType<FormatParams, TextEdit[], void>('cpptools/formatRange');
541-
export const FormatOnTypeRequest: RequestType<FormatParams, TextEdit[], void> = new RequestType<FormatParams, TextEdit[], void>('cpptools/formatOnType');
545+
export const FormatDocumentRequest: RequestType<FormatParams, FormatResult, void> = new RequestType<FormatParams, FormatResult, void>('cpptools/formatDocument');
546+
export const FormatRangeRequest: RequestType<FormatParams, FormatResult, void> = new RequestType<FormatParams, FormatResult, void>('cpptools/formatRange');
547+
export const FormatOnTypeRequest: RequestType<FormatParams, FormatResult, void> = new RequestType<FormatParams, FormatResult, void>('cpptools/formatOnType');
542548
const CreateDeclarationOrDefinitionRequest: RequestType<CreateDeclarationOrDefinitionParams, CreateDeclarationOrDefinitionResult, void> = new RequestType<CreateDeclarationOrDefinitionParams, CreateDeclarationOrDefinitionResult, void>('cpptools/createDeclDef');
543549
const GoToDirectiveInGroupRequest: RequestType<GoToDirectiveInGroupParams, Position | undefined, void> = new RequestType<GoToDirectiveInGroupParams, Position | undefined, void>('cpptools/goToDirectiveInGroup');
544550
const GenerateDoxygenCommentRequest: RequestType<GenerateDoxygenCommentParams, GenerateDoxygenCommentResult | undefined, void> = new RequestType<GenerateDoxygenCommentParams, GenerateDoxygenCommentResult, void>('cpptools/generateDoxygenComment');
551+
const ChangeCppPropertiesRequest: RequestType<CppPropertiesParams, void, void> = new RequestType<CppPropertiesParams, void, void>('cpptools/didChangeCppProperties');
545552

546553
// Notifications to the server
547554
const DidOpenNotification: NotificationType<DidOpenTextDocumentParams> = new NotificationType<DidOpenTextDocumentParams>('textDocument/didOpen');
@@ -554,7 +561,6 @@ const ResumeParsingNotification: NotificationType<void> = new NotificationType<v
554561
const ActiveDocumentChangeNotification: NotificationType<TextDocumentIdentifier> = new NotificationType<TextDocumentIdentifier>('cpptools/activeDocumentChange');
555562
const RestartIntelliSenseForFileNotification: NotificationType<TextDocumentIdentifier> = new NotificationType<TextDocumentIdentifier>('cpptools/restartIntelliSenseForFile');
556563
const TextEditorSelectionChangeNotification: NotificationType<Range> = new NotificationType<Range>('cpptools/textEditorSelectionChange');
557-
const ChangeCppPropertiesNotification: NotificationType<CppPropertiesParams> = new NotificationType<CppPropertiesParams>('cpptools/didChangeCppProperties');
558564
const ChangeCompileCommandsNotification: NotificationType<FileChangedParams> = new NotificationType<FileChangedParams>('cpptools/didChangeCompileCommands');
559565
const ChangeSelectedSettingNotification: NotificationType<FolderSelectedSettingParams> = new NotificationType<FolderSelectedSettingParams>('cpptools/didChangeSelectedSetting');
560566
const IntervalTimerNotification: NotificationType<IntervalTimerParams> = new NotificationType<IntervalTimerParams>('cpptools/onIntervalTimer');
@@ -1697,7 +1703,8 @@ export class DefaultClient implements Client {
16971703
}
16981704

16991705
public async logDiagnostics(): Promise<void> {
1700-
const response: GetDiagnosticsResult = await this.requestWhenReady(() => this.languageClient.sendRequest(GetDiagnosticsRequest, null));
1706+
await this.awaitUntilLanguageClientReady();
1707+
const response: GetDiagnosticsResult = await this.languageClient.sendRequest(GetDiagnosticsRequest, null);
17011708
const diagnosticsChannel: vscode.OutputChannel = getDiagnosticsChannel();
17021709
diagnosticsChannel.clear();
17031710

@@ -2593,7 +2600,7 @@ export class DefaultClient implements Client {
25932600

25942601
private doneInitialCustomBrowseConfigurationCheck: boolean = false;
25952602

2596-
private onConfigurationsChanged(cppProperties: configs.CppProperties): void {
2603+
private async onConfigurationsChanged(cppProperties: configs.CppProperties): Promise<void> {
25972604
if (!cppProperties.Configurations) {
25982605
return;
25992606
}
@@ -2623,7 +2630,7 @@ export class DefaultClient implements Client {
26232630
params.configurations.push(modifiedConfig);
26242631
});
26252632

2626-
this.languageClient.sendNotification(ChangeCppPropertiesNotification, params);
2633+
await this.languageClient.sendRequest(ChangeCppPropertiesRequest, params);
26272634
const lastCustomBrowseConfigurationProviderId: PersistentFolderState<string | undefined> | undefined = cppProperties.LastCustomBrowseConfigurationProviderId;
26282635
const lastCustomBrowseConfigurationProviderVersion: PersistentFolderState<Version> | undefined = cppProperties.LastCustomBrowseConfigurationProviderVersion;
26292636
const lastCustomBrowseConfiguration: PersistentFolderState<WorkspaceBrowseConfiguration | undefined> | undefined = cppProperties.LastCustomBrowseConfiguration;

0 commit comments

Comments
 (0)