Skip to content

Commit 1668d06

Browse files
authored
Made browser to expose pylance api. (#20847)
This will let pylance to create LS Client on browser
1 parent 0735876 commit 1668d06

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

src/client/browser/api.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
'use strict';
5+
6+
import { BaseLanguageClient } from 'vscode-languageclient';
7+
import { LanguageClient } from 'vscode-languageclient/browser';
8+
import { PYTHON_LANGUAGE } from '../common/constants';
9+
10+
export interface IBrowserExtensionApi {
11+
/**
12+
* @deprecated Temporarily exposed for Pylance until we expose this API generally. Will be removed in an
13+
* iteration or two.
14+
*/
15+
pylance: {
16+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
17+
createClient(...args: any[]): BaseLanguageClient;
18+
start(client: BaseLanguageClient): Promise<void>;
19+
stop(client: BaseLanguageClient): Promise<void>;
20+
};
21+
}
22+
23+
export function buildApi(): IBrowserExtensionApi {
24+
const api: IBrowserExtensionApi = {
25+
pylance: {
26+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
27+
createClient: (...args: any[]): BaseLanguageClient =>
28+
new LanguageClient(PYTHON_LANGUAGE, 'Python Language Server', args[0], args[1]),
29+
start: (client: BaseLanguageClient): Promise<void> => client.start(),
30+
stop: (client: BaseLanguageClient): Promise<void> => client.stop(),
31+
},
32+
};
33+
34+
return api;
35+
}

src/client/browser/extension.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { AppinsightsKey, PYLANCE_EXTENSION_ID } from '../common/constants';
1111
import { EventName } from '../telemetry/constants';
1212
import { createStatusItem } from './intellisenseStatus';
1313
import { PylanceApi } from '../activation/node/pylanceApi';
14+
import { buildApi, IBrowserExtensionApi } from './api';
1415

1516
interface BrowserConfig {
1617
distUrl: string; // URL to Pylance's dist folder.
@@ -19,11 +20,11 @@ interface BrowserConfig {
1920
let languageClient: LanguageClient | undefined;
2021
let pylanceApi: PylanceApi | undefined;
2122

22-
export async function activate(context: vscode.ExtensionContext): Promise<void> {
23+
export async function activate(context: vscode.ExtensionContext): Promise<IBrowserExtensionApi> {
2324
const pylanceExtension = vscode.extensions.getExtension<PylanceApi>(PYLANCE_EXTENSION_ID);
2425
if (pylanceExtension) {
2526
await runPylance(context, pylanceExtension);
26-
return;
27+
return buildApi();
2728
}
2829

2930
const changeDisposable = vscode.extensions.onDidChange(async () => {
@@ -33,6 +34,8 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
3334
await runPylance(context, newPylanceExtension);
3435
}
3536
});
37+
38+
return buildApi();
3639
}
3740

3841
export async function deactivate(): Promise<void> {

0 commit comments

Comments
 (0)