Skip to content

Commit ee8cafc

Browse files
Merge branch 'main' into main
2 parents 7af1bce + 926e65e commit ee8cafc

File tree

8 files changed

+118
-307
lines changed

8 files changed

+118
-307
lines changed

build/azure-pipeline.stable.yml

+3
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ extends:
8484

8585
- script: npm run package
8686
displayName: Build extension
87+
8788
tsa:
8889
enabled: true
8990
options:
@@ -97,3 +98,5 @@ extends:
9798
9899
99100
101+
102+
apiScanSoftwareVersion: '2024'

package-lock.json

+23-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+6-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"debugpy"
2424
],
2525
"engines": {
26-
"vscode": "^1.86.0"
26+
"vscode": "^1.87.0"
2727
},
2828
"categories": [
2929
"Debuggers"
@@ -492,6 +492,9 @@
492492
}
493493
]
494494
},
495+
"extensionDependencies": [
496+
"ms-python.python"
497+
],
495498
"scripts": {
496499
"vscode:prepublish": "npm run package",
497500
"compile": "webpack",
@@ -516,7 +519,7 @@
516519
"@types/node": "18.x",
517520
"@types/semver": "^7.3.13",
518521
"@types/sinon": "^10.0.13",
519-
"@types/vscode": "^1.78.0",
522+
"@types/vscode": "^1.87.0",
520523
"@typescript-eslint/eslint-plugin": "^5.31.0",
521524
"@typescript-eslint/parser": "^5.62.0",
522525
"@vscode/test-electron": "^2.3.9",
@@ -540,6 +543,7 @@
540543
},
541544
"dependencies": {
542545
"@vscode/extension-telemetry": "^0.8.5",
546+
"@vscode/python-extension": "^1.0.5",
543547
"fs-extra": "^11.2.0",
544548
"iconv-lite": "^0.6.3",
545549
"inversify": "^6.0.1",

src/extension/common/python.ts

+33-61
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,13 @@
22
// Licensed under the MIT License.
33

44
/* eslint-disable @typescript-eslint/naming-convention */
5-
import { commands, Disposable, Event, EventEmitter, extensions, Uri } from 'vscode';
6-
import { traceError, traceLog } from './log/logging';
7-
import { EnvironmentVariables } from './variables/types';
8-
import {
9-
ActiveEnvironmentPathChangeEvent,
10-
Environment,
11-
EnvironmentPath,
12-
EnvironmentsChangeEvent,
13-
RefreshOptions,
14-
ResolvedEnvironment,
15-
Resource,
16-
} from './pythonTypes';
5+
import { Environment, EnvironmentPath, PythonExtension, Resource } from '@vscode/python-extension';
6+
import { commands, EventEmitter, extensions, Uri, Event, Disposable } from 'vscode';
177
import { createDeferred } from './utils/async';
8+
import { traceError, traceLog } from './log/logging';
189

1910
interface IExtensionApi {
2011
ready: Promise<void>;
21-
debug: {
22-
getRemoteLauncherCommand(host: string, port: number, waitUntilDebuggerAttaches: boolean): Promise<string[]>;
23-
getDebuggerPackagePath(): Promise<string | undefined>;
24-
};
25-
environments: {
26-
known: Environment[];
27-
getActiveEnvironmentPath(resource?: Resource): EnvironmentPath;
28-
resolveEnvironment(
29-
environment: Environment | EnvironmentPath | string | undefined,
30-
): Promise<ResolvedEnvironment | undefined>;
31-
readonly onDidChangeActiveEnvironmentPath: Event<ActiveEnvironmentPathChangeEvent>;
32-
getEnvironmentVariables(resource?: Resource): EnvironmentVariables;
33-
refreshEnvironments(options?: RefreshOptions): Promise<void>;
34-
readonly onDidChangeEnvironments: Event<EnvironmentsChangeEvent>;
35-
};
3612
settings: {
3713
getExecutionDetails(resource?: Resource): { execCommand: string[] | undefined };
3814
};
@@ -45,7 +21,6 @@ export interface IInterpreterDetails {
4521

4622
const onDidChangePythonInterpreterEvent = new EventEmitter<IInterpreterDetails>();
4723
export const onDidChangePythonInterpreter: Event<IInterpreterDetails> = onDidChangePythonInterpreterEvent.event;
48-
4924
async function activateExtension() {
5025
const extension = extensions.getExtension('ms-python.python');
5126
if (extension) {
@@ -61,9 +36,15 @@ async function getPythonExtensionAPI(): Promise<IExtensionApi | undefined> {
6136
return extension?.exports as IExtensionApi;
6237
}
6338

39+
async function getPythonExtensionEnviromentAPI(): Promise<PythonExtension> {
40+
// Load the Python extension API
41+
await activateExtension();
42+
return await PythonExtension.api();
43+
}
44+
6445
export async function initializePython(disposables: Disposable[]): Promise<void> {
6546
try {
66-
const api = await getPythonExtensionAPI();
47+
const api = await getPythonExtensionEnviromentAPI();
6748

6849
if (api) {
6950
disposables.push(
@@ -80,11 +61,6 @@ export async function initializePython(disposables: Disposable[]): Promise<void>
8061
}
8162
}
8263

83-
export async function getDebuggerPath(): Promise<string | undefined> {
84-
const api = await getPythonExtensionAPI();
85-
return api?.debug.getDebuggerPackagePath();
86-
}
87-
8864
export async function runPythonExtensionCommand(command: string, ...rest: any[]) {
8965
await activateExtension();
9066
return await commands.executeCommand(command, ...rest);
@@ -96,51 +72,47 @@ export async function getSettingsPythonPath(resource?: Uri): Promise<string[] |
9672
}
9773

9874
export async function getEnvironmentVariables(resource?: Resource) {
99-
const api = await getPythonExtensionAPI();
100-
return api?.environments.getEnvironmentVariables(resource);
75+
const api = await getPythonExtensionEnviromentAPI();
76+
return api.environments.getEnvironmentVariables(resource);
10177
}
10278

103-
export async function resolveEnvironment(env: Environment | EnvironmentPath | string | undefined) {
104-
const api = await getPythonExtensionAPI();
105-
return api?.environments.resolveEnvironment(env);
79+
export async function resolveEnvironment(env: Environment | EnvironmentPath | string) {
80+
const api = await getPythonExtensionEnviromentAPI();
81+
return api.environments.resolveEnvironment(env);
10682
}
10783

10884
export async function getActiveEnvironmentPath(resource?: Resource) {
109-
const api = await getPythonExtensionAPI();
110-
return api?.environments.getActiveEnvironmentPath(resource);
85+
const api = await getPythonExtensionEnviromentAPI();
86+
return api.environments.getActiveEnvironmentPath(resource);
11187
}
11288

11389
export async function getInterpreterDetails(resource?: Uri): Promise<IInterpreterDetails> {
114-
const api = await getPythonExtensionAPI();
115-
const environment = await api?.environments.resolveEnvironment(
116-
api?.environments.getActiveEnvironmentPath(resource),
117-
);
90+
const api = await getPythonExtensionEnviromentAPI();
91+
const environment = await api.environments.resolveEnvironment(api.environments.getActiveEnvironmentPath(resource));
11892
if (environment?.executable.uri) {
11993
return { path: [environment?.executable.uri.fsPath], resource };
12094
}
12195
return { path: undefined, resource };
12296
}
12397

12498
export async function hasInterpreters() {
125-
const api = await getPythonExtensionAPI();
126-
if (api) {
127-
const onAddedToCollection = createDeferred();
128-
api?.environments.onDidChangeEnvironments(async () => {
129-
if (api.environments.known) {
130-
onAddedToCollection.resolve();
131-
}
132-
});
133-
const initialEnvs = api.environments.known;
134-
if (initialEnvs.length > 0) {
135-
return true;
99+
const api = await getPythonExtensionEnviromentAPI();
100+
const onAddedToCollection = createDeferred();
101+
api.environments.onDidChangeEnvironments(async () => {
102+
if (api.environments.known) {
103+
onAddedToCollection.resolve();
136104
}
137-
await Promise.race([onAddedToCollection.promise, api?.environments.refreshEnvironments()]);
138-
139-
return api.environments.known.length > 0;
105+
});
106+
const initialEnvs = api.environments.known;
107+
if (initialEnvs.length > 0) {
108+
return true;
140109
}
110+
await Promise.race([onAddedToCollection.promise, api?.environments.refreshEnvironments()]);
111+
112+
return api.environments.known.length > 0;
141113
}
142114

143115
export async function getInterpreters() {
144-
const api = await getPythonExtensionAPI();
145-
return api?.environments.known || [];
116+
const api = await getPythonExtensionEnviromentAPI();
117+
return api.environments.known || [];
146118
}

0 commit comments

Comments
 (0)