@@ -24,8 +24,8 @@ import { isTestExecution, STANDARD_OUTPUT_CHANNEL } from '../common/constants';
2424import { IFileSystem , IPlatformService } from '../common/platform/types' ;
2525import {
2626 BANNER_NAME_LS_SURVEY , DeprecatedFeatureInfo , IConfigurationService ,
27- IExtensionContext , IFeatureDeprecationManager , ILogger , IOutputChannel ,
28- IPathUtils , IPythonExtensionBanner , IPythonSettings
27+ IDisposableRegistry , IExtensionContext , IFeatureDeprecationManager , ILogger ,
28+ IOutputChannel , IPathUtils , IPythonExtensionBanner , IPythonSettings
2929} from '../common/types' ;
3030import { IEnvironmentVariablesProvider } from '../common/variables/types' ;
3131import { IServiceContainer } from '../ioc/types' ;
@@ -40,13 +40,11 @@ import { LanguageServerDownloader } from './downloader';
4040import { InterpreterData , InterpreterDataService } from './interpreterDataService' ;
4141import { PlatformData } from './platformData' ;
4242import { ProgressReporting } from './progress' ;
43- import { RequestWithProxy } from './requestWithProxy' ;
44- import { IExtensionActivator } from './types' ;
43+ import { IExtensionActivator , ILanguageServerFolderService } from './types' ;
4544
4645const PYTHON = 'python' ;
4746const dotNetCommand = 'dotnet' ;
4847const languageClientName = 'Python Tools' ;
49- const languageServerFolder = 'languageServer' ;
5048const loadExtensionCommand = 'python._loadLanguageServerExtension' ;
5149const buildSymbolsCmdDeprecatedInfo : DeprecatedFeatureInfo = {
5250 doNotDisplayPromptStateKey : 'SHOW_DEPRECATED_FEATURE_PROMPT_BUILD_WORKSPACE_SYMBOLS' ,
@@ -75,8 +73,8 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
7573 private typeshedPaths : string [ ] = [ ] ;
7674 private loadExtensionArgs : { } | undefined ;
7775 private surveyBanner : IPythonExtensionBanner ;
78- // tslint:disable-next-line:no-unused-variable
79- private progressReporting : ProgressReporting | undefined ;
76+ private languageServerFolder ! : string ;
77+ private languageServerFolderService : ILanguageServerFolderService ;
8078
8179 constructor ( @inject ( IServiceContainer ) private readonly services : IServiceContainer ) {
8280 this . context = this . services . get < IExtensionContext > ( IExtensionContext ) ;
@@ -86,6 +84,7 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
8684 this . fs = this . services . get < IFileSystem > ( IFileSystem ) ;
8785 this . platformData = new PlatformData ( services . get < IPlatformService > ( IPlatformService ) , this . fs ) ;
8886 this . workspace = this . services . get < IWorkspaceService > ( IWorkspaceService ) ;
87+ this . languageServerFolderService = this . services . get < ILanguageServerFolderService > ( ILanguageServerFolderService ) ;
8988 const deprecationManager : IFeatureDeprecationManager =
9089 this . services . get < IFeatureDeprecationManager > ( IFeatureDeprecationManager ) ;
9190
@@ -116,6 +115,7 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
116115
117116 public async activate ( ) : Promise < boolean > {
118117 this . sw . reset ( ) ;
118+ this . languageServerFolder = await this . languageServerFolderService . getLanguageServerFolderName ( ) ;
119119 const clientOptions = await this . getAnalysisOptions ( ) ;
120120 if ( ! clientOptions ) {
121121 return false ;
@@ -155,18 +155,13 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
155155 return true ;
156156 }
157157
158- const mscorlib = path . join ( this . context . extensionPath , languageServerFolder , 'mscorlib.dll' ) ;
158+ const mscorlib = path . join ( this . context . extensionPath , this . languageServerFolder , 'mscorlib.dll' ) ;
159159 if ( ! await this . fs . fileExists ( mscorlib ) ) {
160- const downloader = new LanguageServerDownloader (
161- this . output ,
162- this . fs ,
163- this . platformData ,
164- new RequestWithProxy ( this . workspace . getConfiguration ( 'http' ) . get ( 'proxy' , '' ) ) ,
165- languageServerFolder ) ;
160+ const downloader = new LanguageServerDownloader ( this . platformData , this . languageServerFolder , this . services ) ;
166161 await downloader . downloadLanguageServer ( this . context ) ;
167162 }
168163
169- const serverModule = path . join ( this . context . extensionPath , languageServerFolder , this . platformData . getEngineExecutableName ( ) ) ;
164+ const serverModule = path . join ( this . context . extensionPath , this . languageServerFolder , this . platformData . getEngineExecutableName ( ) ) ;
170165 this . languageClient = this . createSelfContainedLanguageClient ( serverModule , clientOptions ) ;
171166 try {
172167 await this . startLanguageClient ( ) ;
@@ -181,7 +176,9 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
181176 private async startLanguageClient ( ) : Promise < void > {
182177 this . context . subscriptions . push ( this . languageClient ! . start ( ) ) ;
183178 await this . serverReady ( ) ;
184- this . progressReporting = new ProgressReporting ( this . languageClient ! ) ;
179+ const disposables = this . services . get < Disposable [ ] > ( IDisposableRegistry ) ;
180+ const progressReporting = new ProgressReporting ( this . languageClient ! ) ;
181+ disposables . push ( progressReporting ) ;
185182 }
186183
187184 private async serverReady ( ) : Promise < void > {
@@ -197,7 +194,7 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
197194
198195 private createSimpleLanguageClient ( clientOptions : LanguageClientOptions ) : LanguageClient {
199196 const commandOptions = { stdio : 'pipe' } ;
200- const serverModule = path . join ( this . context . extensionPath , languageServerFolder , this . platformData . getEngineDllName ( ) ) ;
197+ const serverModule = path . join ( this . context . extensionPath , this . languageServerFolder , this . platformData . getEngineDllName ( ) ) ;
201198 const serverOptions : ServerOptions = {
202199 run : { command : dotNetCommand , args : [ serverModule ] , options : commandOptions } ,
203200 debug : { command : dotNetCommand , args : [ serverModule , '--debug' ] , options : commandOptions }
@@ -240,7 +237,7 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
240237 }
241238
242239 // tslint:disable-next-line:no-string-literal
243- properties [ 'DatabasePath' ] = path . join ( this . context . extensionPath , languageServerFolder ) ;
240+ properties [ 'DatabasePath' ] = path . join ( this . context . extensionPath , this . languageServerFolder ) ;
244241
245242 let searchPaths = interpreterData ? interpreterData . searchPaths . split ( path . delimiter ) : [ ] ;
246243 const settings = this . configuration . getSettings ( ) ;
@@ -310,8 +307,7 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
310307 this . getVsCodeExcludeSection ( 'search.exclude' , list ) ;
311308 this . getVsCodeExcludeSection ( 'files.exclude' , list ) ;
312309 this . getVsCodeExcludeSection ( 'files.watcherExclude' , list ) ;
313- this . getPythonExcludeSection ( 'linting.ignorePatterns' , list ) ;
314- this . getPythonExcludeSection ( 'workspaceSymbols.exclusionPattern' , list ) ;
310+ this . getPythonExcludeSection ( list ) ;
315311 return list ;
316312 }
317313
@@ -324,7 +320,7 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
324320 }
325321 }
326322
327- private getPythonExcludeSection ( setting : string , list : string [ ] ) : void {
323+ private getPythonExcludeSection ( list : string [ ] ) : void {
328324 const pythonSettings = this . configuration . getSettings ( this . root ) ;
329325 const paths = pythonSettings && pythonSettings . linting ? pythonSettings . linting . ignorePatterns : undefined ;
330326 if ( paths && Array . isArray ( paths ) ) {
@@ -337,7 +333,7 @@ export class LanguageServerExtensionActivator implements IExtensionActivator {
337333 private getTypeshedPaths ( settings : IPythonSettings ) : string [ ] {
338334 return settings . analysis . typeshedPaths && settings . analysis . typeshedPaths . length > 0
339335 ? settings . analysis . typeshedPaths
340- : [ path . join ( this . context . extensionPath , 'languageServer' , 'Typeshed' ) ] ;
336+ : [ path . join ( this . context . extensionPath , this . languageServerFolder , 'Typeshed' ) ] ;
341337 }
342338
343339 private async onSettingsChanged ( ) : Promise < void > {
0 commit comments