@@ -32,6 +32,7 @@ import {
3232 IInterpreterQuickPick ,
3333 IInterpreterQuickPickItem ,
3434 IInterpreterSelector ,
35+ InterpreterQuickPickParams ,
3536 IPythonPathUpdaterServiceManager ,
3637 ISpecialQuickPickItem ,
3738} from '../../types' ;
@@ -127,12 +128,12 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
127128 input : IMultiStepInput < InterpreterStateArgs > ,
128129 state : InterpreterStateArgs ,
129130 filter ?: ( i : PythonEnvironment ) => boolean ,
130- params ?: { placeholder ?: string | null ; title ?: string | null } ,
131+ params ?: InterpreterQuickPickParams ,
131132 ) : Promise < void | InputStep < InterpreterStateArgs > > {
132133 // If the list is refreshing, it's crucial to maintain sorting order at all
133134 // times so that the visible items do not change.
134135 const preserveOrderWhenFiltering = ! ! this . interpreterService . refreshPromise ;
135- const suggestions = this . _getItems ( state . workspace , filter ) ;
136+ const suggestions = this . _getItems ( state . workspace , filter , params ) ;
136137 state . path = undefined ;
137138 const currentInterpreterPathDisplay = this . pathUtils . getDisplayName (
138139 this . configurationService . getSettings ( state . workspace ) . pythonPath ,
@@ -183,10 +184,10 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
183184 // Items are in the final state as all previous callbacks have finished executing.
184185 quickPick . busy = false ;
185186 // Ensure we set a recommended item after refresh has finished.
186- this . updateQuickPickItems ( quickPick , { } , state . workspace , filter ) ;
187+ this . updateQuickPickItems ( quickPick , { } , state . workspace , filter , params ) ;
187188 } ) ;
188189 }
189- this . updateQuickPickItems ( quickPick , event , state . workspace , filter ) ;
190+ this . updateQuickPickItems ( quickPick , event , state . workspace , filter , params ) ;
190191 } ,
191192 } ,
192193 } ) ;
@@ -208,21 +209,26 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
208209 return undefined ;
209210 }
210211
211- public _getItems ( resource : Resource , filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ) : QuickPickType [ ] {
212+ public _getItems (
213+ resource : Resource ,
214+ filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ,
215+ params ?: InterpreterQuickPickParams ,
216+ ) : QuickPickType [ ] {
212217 const suggestions : QuickPickType [ ] = [ this . manualEntrySuggestion ] ;
213218 const defaultInterpreterPathSuggestion = this . getDefaultInterpreterPathSuggestion ( resource ) ;
214219 if ( defaultInterpreterPathSuggestion ) {
215220 suggestions . push ( defaultInterpreterPathSuggestion ) ;
216221 }
217- const interpreterSuggestions = this . getSuggestions ( resource , filter ) ;
218- this . finalizeItems ( interpreterSuggestions , resource ) ;
222+ const interpreterSuggestions = this . getSuggestions ( resource , filter , params ) ;
223+ this . finalizeItems ( interpreterSuggestions , resource , params ) ;
219224 suggestions . push ( ...interpreterSuggestions ) ;
220225 return suggestions ;
221226 }
222227
223228 private getSuggestions (
224229 resource : Resource ,
225230 filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ,
231+ params ?: InterpreterQuickPickParams ,
226232 ) : QuickPickType [ ] {
227233 const workspaceFolder = this . workspaceService . getWorkspaceFolder ( resource ) ;
228234 const items = this . interpreterSelector
@@ -235,10 +241,13 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
235241 const itemsWithFullName = this . interpreterSelector
236242 . getSuggestions ( resource , true )
237243 . filter ( ( i ) => ! filter || filter ( i . interpreter ) ) ;
238- const recommended = this . interpreterSelector . getRecommendedSuggestion (
239- itemsWithFullName ,
240- this . workspaceService . getWorkspaceFolder ( resource ) ?. uri ,
241- ) ;
244+ let recommended : IInterpreterQuickPickItem | undefined ;
245+ if ( ! params ?. skipRecommended ) {
246+ recommended = this . interpreterSelector . getRecommendedSuggestion (
247+ itemsWithFullName ,
248+ this . workspaceService . getWorkspaceFolder ( resource ) ?. uri ,
249+ ) ;
250+ }
242251 if ( recommended && items [ 0 ] . interpreter . id === recommended . interpreter . id ) {
243252 items . shift ( ) ;
244253 }
@@ -289,10 +298,11 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
289298 event : PythonEnvironmentsChangedEvent ,
290299 resource : Resource ,
291300 filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ,
301+ params ?: InterpreterQuickPickParams ,
292302 ) {
293303 // Active items are reset once we replace the current list with updated items, so save it.
294304 const activeItemBeforeUpdate = quickPick . activeItems . length > 0 ? quickPick . activeItems [ 0 ] : undefined ;
295- quickPick . items = this . getUpdatedItems ( quickPick . items , event , resource , filter ) ;
305+ quickPick . items = this . getUpdatedItems ( quickPick . items , event , resource , filter , params ) ;
296306 // Ensure we maintain the same active item as before.
297307 const activeItem = activeItemBeforeUpdate
298308 ? quickPick . items . find ( ( item ) => {
@@ -317,6 +327,7 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
317327 event : PythonEnvironmentsChangedEvent ,
318328 resource : Resource ,
319329 filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ,
330+ params ?: InterpreterQuickPickParams ,
320331 ) : QuickPickType [ ] {
321332 const updatedItems = [ ...items . values ( ) ] ;
322333 const areItemsGrouped = items . find ( ( item ) => isSeparatorItem ( item ) ) ;
@@ -364,16 +375,18 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
364375 if ( envIndex !== - 1 && event . new === undefined ) {
365376 updatedItems . splice ( envIndex , 1 ) ;
366377 }
367- this . finalizeItems ( updatedItems , resource ) ;
378+ this . finalizeItems ( updatedItems , resource , params ) ;
368379 return updatedItems ;
369380 }
370381
371- private finalizeItems ( items : QuickPickType [ ] , resource : Resource ) {
382+ private finalizeItems ( items : QuickPickType [ ] , resource : Resource , params ?: InterpreterQuickPickParams ) {
372383 const interpreterSuggestions = this . interpreterSelector . getSuggestions ( resource , true ) ;
373384 const r = this . interpreterService . refreshPromise ;
374385 if ( ! r ) {
375386 if ( interpreterSuggestions . length ) {
376- this . setRecommendedItem ( interpreterSuggestions , items , resource ) ;
387+ if ( ! params ?. skipRecommended ) {
388+ this . setRecommendedItem ( interpreterSuggestions , items , resource ) ;
389+ }
377390 // Add warning label to certain environments
378391 items . forEach ( ( item , i ) => {
379392 if ( isInterpreterQuickPickItem ( item ) && isProblematicCondaEnvironment ( item . interpreter ) ) {
@@ -513,7 +526,7 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
513526 public async getInterpreterViaQuickPick (
514527 workspace : Resource ,
515528 filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ,
516- params ?: { placeholder ?: string | null ; title ?: string | null } ,
529+ params ?: InterpreterQuickPickParams ,
517530 ) : Promise < string | undefined > {
518531 const interpreterState : InterpreterStateArgs = { path : undefined , workspace } ;
519532 const multiStep = this . multiStepFactory . create < InterpreterStateArgs > ( ) ;
0 commit comments