Skip to content

Commit 74c4642

Browse files
authored
Merge branch 'main' into coleng/remove_system_includes_from_defaults
2 parents 0da20f1 + e1d824f commit 74c4642

File tree

12 files changed

+1259
-734
lines changed

12 files changed

+1259
-734
lines changed

Extension/CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# C/C++ for Visual Studio Code Changelog
22

3+
## Version 1.23.6: February 6, 2025
4+
### Bug Fixes
5+
* Fix a bug with remote attach debugging. [#13137](https://github.com/microsoft/vscode-cpptools/issues/13137)
6+
* Fix symlink-related regression bugs. [#13214](https://github.com/microsoft/vscode-cpptools/issues/13214), [#13228](https://github.com/microsoft/vscode-cpptools/issues/13228)
7+
* Fix a regression bug when using 'Select IntelliSense Configuration'. [#13220](https://github.com/microsoft/vscode-cpptools/issues/13220)
8+
* Fix a regression bug with `files.associations` handling. [#13223](https://github.com/microsoft/vscode-cpptools/issues/13223)
9+
310
## Version 1.23.5: January 28, 2025
411
### Enhancements
512
* Modifications to the snippet completions to more closely match the snippets provided by TypeScript. [#4482](https://github.com/microsoft/vscode-cpptools/issues/4482)

Extension/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "cpptools",
33
"displayName": "C/C++",
44
"description": "C/C++ IntelliSense, debugging, and code browsing.",
5-
"version": "1.23.5-main",
5+
"version": "1.23.6-main",
66
"publisher": "ms-vscode",
77
"icon": "LanguageCCPP_color_128x.png",
88
"readme": "README.md",
@@ -6590,6 +6590,7 @@
65906590
"xml2js": "^0.6.2"
65916591
},
65926592
"dependencies": {
6593+
"@github/copilot-language-server": "^1.253.0",
65936594
"@vscode/extension-telemetry": "^0.9.6",
65946595
"chokidar": "^3.6.0",
65956596
"comment-json": "^4.2.3",

Extension/src/LanguageServer/Providers/CopilotHoverProvider.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import * as vscode from 'vscode';
66
import { Position, ResponseError } from 'vscode-languageclient';
77
import * as nls from 'vscode-nls';
8+
import { modelSelector } from '../../constants';
9+
import * as telemetry from '../../telemetry';
810
import { DefaultClient, GetCopilotHoverInfoParams, GetCopilotHoverInfoRequest, GetCopilotHoverInfoResult } from '../client';
911
import { RequestCancelled, ServerCancelled } from '../protocolFilter';
1012
import { CppSettings } from '../settings';
@@ -35,6 +37,22 @@ export class CopilotHoverProvider implements vscode.HoverProvider {
3537
return undefined;
3638
}
3739

40+
// Ensure the user has access to Copilot.
41+
const vscodelm = (vscode as any).lm;
42+
if (vscodelm) {
43+
const [model] = await vscodelm.selectChatModels(modelSelector);
44+
if (!model) {
45+
return undefined;
46+
}
47+
}
48+
49+
if (settings.copilotHover === "default") {
50+
// Check flight to make sure the feature is enabled.
51+
if (!await telemetry.isFlightEnabled("CppCopilotHover")) {
52+
return undefined;
53+
}
54+
}
55+
3856
const newHover = this.isNewHover(document, position);
3957
if (newHover) {
4058
this.reset();

Extension/src/LanguageServer/client.ts

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import {
5454
} from './codeAnalysis';
5555
import { Location, TextEdit, WorkspaceEdit } from './commonTypes';
5656
import * as configs from './configurations';
57+
import { CopilotCompletionContextFeatures, CopilotCompletionContextProvider, SnippetEntry } from './copilotCompletionContextProvider';
5758
import { DataBinding } from './dataBinding';
5859
import { cachedEditorConfigSettings, getEditorConfigSettings } from './editorConfig';
5960
import { CppSourceStr, clients, configPrefix, updateLanguageConfigurations, usesCrashHandler, watchForCrashes } from './extension';
@@ -183,6 +184,7 @@ interface TelemetryPayload {
183184
event: string;
184185
properties?: Record<string, string>;
185186
metrics?: Record<string, number>;
187+
signedMetrics?: Record<string, number>;
186188
}
187189

188190
interface ReportStatusNotificationBody extends WorkspaceFolderParams {
@@ -576,6 +578,21 @@ interface FilesEncodingChanged {
576578
foldersFilesEncoding: FolderFilesEncodingChanged[];
577579
}
578580

581+
export interface CopilotCompletionContextResult {
582+
requestId: number;
583+
isResultMissing: boolean;
584+
snippets: SnippetEntry[];
585+
translationUnitUri: string;
586+
caretOffset: number;
587+
featureFlag: CopilotCompletionContextFeatures;
588+
}
589+
590+
export interface CopilotCompletionContextParams {
591+
uri: string;
592+
caretOffset: number;
593+
featureFlag: CopilotCompletionContextFeatures;
594+
}
595+
579596
// Requests
580597
const PreInitializationRequest: RequestType<void, string, void> = new RequestType<void, string, void>('cpptools/preinitialize');
581598
const InitializationRequest: RequestType<CppInitializationParams, void, void> = new RequestType<CppInitializationParams, void, void>('cpptools/initialize');
@@ -598,6 +615,7 @@ const ChangeCppPropertiesRequest: RequestType<CppPropertiesParams, void, void> =
598615
const IncludesRequest: RequestType<GetIncludesParams, GetIncludesResult, void> = new RequestType<GetIncludesParams, GetIncludesResult, void>('cpptools/getIncludes');
599616
const CppContextRequest: RequestType<TextDocumentIdentifier, ChatContextResult, void> = new RequestType<TextDocumentIdentifier, ChatContextResult, void>('cpptools/getChatContext');
600617
const ProjectContextRequest: RequestType<TextDocumentIdentifier, ProjectContextResult, void> = new RequestType<TextDocumentIdentifier, ProjectContextResult, void>('cpptools/getProjectContext');
618+
const CopilotCompletionContextRequest: RequestType<CopilotCompletionContextParams, CopilotCompletionContextResult, void> = new RequestType<CopilotCompletionContextParams, CopilotCompletionContextResult, void>('cpptools/getCompletionContext');
601619

602620
// Notifications to the server
603621
const DidOpenNotification: NotificationType<DidOpenTextDocumentParams> = new NotificationType<DidOpenTextDocumentParams>('textDocument/didOpen');
@@ -833,6 +851,7 @@ export interface Client {
833851
getChatContext(uri: vscode.Uri, token: vscode.CancellationToken): Promise<ChatContextResult>;
834852
getProjectContext(uri: vscode.Uri): Promise<ProjectContextResult>;
835853
filesEncodingChanged(filesEncodingChanged: FilesEncodingChanged): void;
854+
getCompletionContext(fileName: vscode.Uri, caretOffset: number, featureFlag: CopilotCompletionContextFeatures, token: vscode.CancellationToken): Promise<CopilotCompletionContextResult>;
836855
}
837856

838857
export function createClient(workspaceFolder?: vscode.WorkspaceFolder): Client {
@@ -867,6 +886,7 @@ export class DefaultClient implements Client {
867886
private configurationProvider?: string;
868887
private hoverProvider: HoverProvider | undefined;
869888
private copilotHoverProvider: CopilotHoverProvider | undefined;
889+
private copilotCompletionProvider?: CopilotCompletionContextProvider;
870890

871891
public lastCustomBrowseConfiguration: PersistentFolderState<WorkspaceBrowseConfiguration | undefined> | undefined;
872892
public lastCustomBrowseConfigurationProviderId: PersistentFolderState<string | undefined> | undefined;
@@ -1316,8 +1336,7 @@ export class DefaultClient implements Client {
13161336

13171337
const settings: CppSettings = new CppSettings();
13181338
this.currentCopilotHoverEnabled = new PersistentWorkspaceState<string>("cpp.copilotHover", settings.copilotHover);
1319-
if (settings.copilotHover === "enabled" ||
1320-
(settings.copilotHover === "default" && await telemetry.isFlightEnabled("CppCopilotHover"))) {
1339+
if (settings.copilotHover !== "disabled") {
13211340
this.copilotHoverProvider = new CopilotHoverProvider(this);
13221341
this.disposables.push(vscode.languages.registerHoverProvider(util.documentSelector, this.copilotHoverProvider));
13231342
}
@@ -1344,6 +1363,9 @@ export class DefaultClient implements Client {
13441363
this.semanticTokensProviderDisposable = vscode.languages.registerDocumentSemanticTokensProvider(util.documentSelector, this.semanticTokensProvider, semanticTokensLegend);
13451364
}
13461365

1366+
this.copilotCompletionProvider = await CopilotCompletionContextProvider.Create();
1367+
this.disposables.push(this.copilotCompletionProvider);
1368+
13471369
// Listen for messages from the language server.
13481370
this.registerNotifications();
13491371

@@ -1876,6 +1898,7 @@ export class DefaultClient implements Client {
18761898
if (diagnosticsCollectionIntelliSense) {
18771899
diagnosticsCollectionIntelliSense.delete(document.uri);
18781900
}
1901+
this.copilotCompletionProvider?.removeFile(uri);
18791902
openFileVersions.delete(uri);
18801903
}
18811904

@@ -2257,7 +2280,6 @@ export class DefaultClient implements Client {
22572280
return util.extractCompilerPathAndArgs(!!settings.legacyCompilerArgsBehavior,
22582281
this.configuration.CurrentConfiguration?.compilerPath,
22592282
this.configuration.CurrentConfiguration?.compilerArgs);
2260-
22612283
}
22622284

22632285
public async getVcpkgInstalled(): Promise<boolean> {
@@ -2326,6 +2348,14 @@ export class DefaultClient implements Client {
23262348
() => this.languageClient.sendRequest(CppContextRequest, params, token), token);
23272349
}
23282350

2351+
public async getCompletionContext(file: vscode.Uri, caretOffset: number, featureFlag: CopilotCompletionContextFeatures,
2352+
token: vscode.CancellationToken): Promise<CopilotCompletionContextResult> {
2353+
await withCancellation(this.ready, token);
2354+
return DefaultClient.withLspCancellationHandling(
2355+
() => this.languageClient.sendRequest(CopilotCompletionContextRequest,
2356+
{ uri: file.toString(), caretOffset, featureFlag }, token), token);
2357+
}
2358+
23292359
/**
23302360
* a Promise that can be awaited to know when it's ok to proceed.
23312361
*
@@ -2698,7 +2728,8 @@ export class DefaultClient implements Client {
26982728
if (notificationBody.event === "includeSquiggles" && this.configurationProvider && notificationBody.properties) {
26992729
notificationBody.properties["providerId"] = this.configurationProvider;
27002730
}
2701-
telemetry.logLanguageServerEvent(notificationBody.event, notificationBody.properties, notificationBody.metrics);
2731+
const metrics_unified: Record<string, number> = { ...notificationBody.metrics, ...notificationBody.signedMetrics };
2732+
telemetry.logLanguageServerEvent(notificationBody.event, notificationBody.properties, metrics_unified);
27022733
}
27032734

27042735
private async updateStatus(notificationBody: ReportStatusNotificationBody): Promise<void> {
@@ -4260,4 +4291,5 @@ class NullClient implements Client {
42604291
getChatContext(uri: vscode.Uri, token: vscode.CancellationToken): Promise<ChatContextResult> { return Promise.resolve({} as ChatContextResult); }
42614292
getProjectContext(uri: vscode.Uri): Promise<ProjectContextResult> { return Promise.resolve({} as ProjectContextResult); }
42624293
filesEncodingChanged(filesEncodingChanged: FilesEncodingChanged): void { }
4294+
getCompletionContext(file: vscode.Uri, caretOffset: number, featureFlag: CopilotCompletionContextFeatures, token: vscode.CancellationToken): Promise<CopilotCompletionContextResult> { return Promise.resolve({} as CopilotCompletionContextResult); }
42634295
}

0 commit comments

Comments
 (0)