@@ -32,6 +32,7 @@ import {
32
32
IInterpreterQuickPick ,
33
33
IInterpreterQuickPickItem ,
34
34
IInterpreterSelector ,
35
+ InterpreterQuickPickParams ,
35
36
IPythonPathUpdaterServiceManager ,
36
37
ISpecialQuickPickItem ,
37
38
} from '../../types' ;
@@ -127,12 +128,12 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
127
128
input : IMultiStepInput < InterpreterStateArgs > ,
128
129
state : InterpreterStateArgs ,
129
130
filter ?: ( i : PythonEnvironment ) => boolean ,
130
- params ?: { placeholder ?: string | null ; title ?: string | null } ,
131
+ params ?: InterpreterQuickPickParams ,
131
132
) : Promise < void | InputStep < InterpreterStateArgs > > {
132
133
// If the list is refreshing, it's crucial to maintain sorting order at all
133
134
// times so that the visible items do not change.
134
135
const preserveOrderWhenFiltering = ! ! this . interpreterService . refreshPromise ;
135
- const suggestions = this . _getItems ( state . workspace , filter ) ;
136
+ const suggestions = this . _getItems ( state . workspace , filter , params ) ;
136
137
state . path = undefined ;
137
138
const currentInterpreterPathDisplay = this . pathUtils . getDisplayName (
138
139
this . configurationService . getSettings ( state . workspace ) . pythonPath ,
@@ -183,10 +184,10 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
183
184
// Items are in the final state as all previous callbacks have finished executing.
184
185
quickPick . busy = false ;
185
186
// 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 ) ;
187
188
} ) ;
188
189
}
189
- this . updateQuickPickItems ( quickPick , event , state . workspace , filter ) ;
190
+ this . updateQuickPickItems ( quickPick , event , state . workspace , filter , params ) ;
190
191
} ,
191
192
} ,
192
193
} ) ;
@@ -208,21 +209,26 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
208
209
return undefined ;
209
210
}
210
211
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 [ ] {
212
217
const suggestions : QuickPickType [ ] = [ this . manualEntrySuggestion ] ;
213
218
const defaultInterpreterPathSuggestion = this . getDefaultInterpreterPathSuggestion ( resource ) ;
214
219
if ( defaultInterpreterPathSuggestion ) {
215
220
suggestions . push ( defaultInterpreterPathSuggestion ) ;
216
221
}
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 ) ;
219
224
suggestions . push ( ...interpreterSuggestions ) ;
220
225
return suggestions ;
221
226
}
222
227
223
228
private getSuggestions (
224
229
resource : Resource ,
225
230
filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ,
231
+ params ?: InterpreterQuickPickParams ,
226
232
) : QuickPickType [ ] {
227
233
const workspaceFolder = this . workspaceService . getWorkspaceFolder ( resource ) ;
228
234
const items = this . interpreterSelector
@@ -235,10 +241,13 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
235
241
const itemsWithFullName = this . interpreterSelector
236
242
. getSuggestions ( resource , true )
237
243
. 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
+ }
242
251
if ( recommended && items [ 0 ] . interpreter . id === recommended . interpreter . id ) {
243
252
items . shift ( ) ;
244
253
}
@@ -289,10 +298,11 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
289
298
event : PythonEnvironmentsChangedEvent ,
290
299
resource : Resource ,
291
300
filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ,
301
+ params ?: InterpreterQuickPickParams ,
292
302
) {
293
303
// Active items are reset once we replace the current list with updated items, so save it.
294
304
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 ) ;
296
306
// Ensure we maintain the same active item as before.
297
307
const activeItem = activeItemBeforeUpdate
298
308
? quickPick . items . find ( ( item ) => {
@@ -317,6 +327,7 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
317
327
event : PythonEnvironmentsChangedEvent ,
318
328
resource : Resource ,
319
329
filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ,
330
+ params ?: InterpreterQuickPickParams ,
320
331
) : QuickPickType [ ] {
321
332
const updatedItems = [ ...items . values ( ) ] ;
322
333
const areItemsGrouped = items . find ( ( item ) => isSeparatorItem ( item ) ) ;
@@ -364,16 +375,18 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
364
375
if ( envIndex !== - 1 && event . new === undefined ) {
365
376
updatedItems . splice ( envIndex , 1 ) ;
366
377
}
367
- this . finalizeItems ( updatedItems , resource ) ;
378
+ this . finalizeItems ( updatedItems , resource , params ) ;
368
379
return updatedItems ;
369
380
}
370
381
371
- private finalizeItems ( items : QuickPickType [ ] , resource : Resource ) {
382
+ private finalizeItems ( items : QuickPickType [ ] , resource : Resource , params ?: InterpreterQuickPickParams ) {
372
383
const interpreterSuggestions = this . interpreterSelector . getSuggestions ( resource , true ) ;
373
384
const r = this . interpreterService . refreshPromise ;
374
385
if ( ! r ) {
375
386
if ( interpreterSuggestions . length ) {
376
- this . setRecommendedItem ( interpreterSuggestions , items , resource ) ;
387
+ if ( ! params ?. skipRecommended ) {
388
+ this . setRecommendedItem ( interpreterSuggestions , items , resource ) ;
389
+ }
377
390
// Add warning label to certain environments
378
391
items . forEach ( ( item , i ) => {
379
392
if ( isInterpreterQuickPickItem ( item ) && isProblematicCondaEnvironment ( item . interpreter ) ) {
@@ -513,7 +526,7 @@ export class SetInterpreterCommand extends BaseInterpreterSelectorCommand implem
513
526
public async getInterpreterViaQuickPick (
514
527
workspace : Resource ,
515
528
filter : ( ( i : PythonEnvironment ) => boolean ) | undefined ,
516
- params ?: { placeholder ?: string | null ; title ?: string | null } ,
529
+ params ?: InterpreterQuickPickParams ,
517
530
) : Promise < string | undefined > {
518
531
const interpreterState : InterpreterStateArgs = { path : undefined , workspace } ;
519
532
const multiStep = this . multiStepFactory . create < InterpreterStateArgs > ( ) ;
0 commit comments