@@ -10,12 +10,14 @@ import { LanguageServerType } from '../activation/types';
1010import { AppinsightsKey , PYLANCE_EXTENSION_ID } from '../common/constants' ;
1111import { EventName } from '../telemetry/constants' ;
1212import { createStatusItem } from './intellisenseStatus' ;
13+ import { PylanceApi } from '../activation/node/pylanceApi' ;
1314
1415interface BrowserConfig {
1516 distUrl : string ; // URL to Pylance's dist folder.
1617}
1718
1819let languageClient : LanguageClient | undefined ;
20+ let pylanceApi : PylanceApi | undefined ;
1921
2022export async function activate ( context : vscode . ExtensionContext ) : Promise < void > {
2123 const pylanceExtension = vscode . extensions . getExtension ( PYLANCE_EXTENSION_ID ) ;
@@ -34,17 +36,35 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
3436}
3537
3638export async function deactivate ( ) : Promise < void > {
37- const client = languageClient ;
38- languageClient = undefined ;
39+ if ( pylanceApi ) {
40+ const api = pylanceApi ;
41+ pylanceApi = undefined ;
42+ await api . client ! . stop ( ) ;
43+ }
44+
45+ if ( languageClient ) {
46+ const client = languageClient ;
47+ languageClient = undefined ;
3948
40- await client ?. stop ( ) ;
41- await client ?. dispose ( ) ;
49+ await client . stop ( ) ;
50+ await client . dispose ( ) ;
51+ }
4252}
4353
4454async function runPylance (
4555 context : vscode . ExtensionContext ,
4656 pylanceExtension : vscode . Extension < unknown > ,
4757) : Promise < void > {
58+ context . subscriptions . push ( createStatusItem ( ) ) ;
59+
60+ pylanceExtension = await getActivatedExtension ( pylanceExtension ) ;
61+ const api = pylanceExtension . exports as PylanceApi ;
62+ if ( api . client && api . client . isEnabled ( ) ) {
63+ pylanceApi = api ;
64+ await api . client . start ( ) ;
65+ return ;
66+ }
67+
4868 const { extensionUri, packageJSON } = pylanceExtension ;
4969 const distUrl = vscode . Uri . joinPath ( extensionUri , 'dist' ) ;
5070
@@ -111,8 +131,6 @@ async function runPylance(
111131 ) ;
112132
113133 await client . start ( ) ;
114-
115- context . subscriptions . push ( createStatusItem ( ) ) ;
116134 } catch ( e ) {
117135 console . log ( e ) ;
118136 }
@@ -196,3 +214,11 @@ function sendTelemetryEventBrowser(
196214 reporter . sendTelemetryEvent ( eventNameSent , customProperties , measures ) ;
197215 }
198216}
217+
218+ async function getActivatedExtension < T > ( extension : vscode . Extension < T > ) : Promise < vscode . Extension < T > > {
219+ if ( ! extension . isActive ) {
220+ await extension . activate ( ) ;
221+ }
222+
223+ return extension ;
224+ }
0 commit comments