@@ -7,6 +7,7 @@ import { inject, injectable } from 'inversify';
7
7
import { CancellationToken } from 'vscode' ;
8
8
import { PYTHON_LANGUAGE } from '../../../common/constants' ;
9
9
import { IFileSystem } from '../../../common/platform/types' ;
10
+ import { IPathUtils } from '../../../common/types' ;
10
11
import * as localize from '../../../common/utils/localize' ;
11
12
import { IInterpreterSelector } from '../../../interpreter/configuration/types' ;
12
13
import { IJupyterKernel , IJupyterKernelSpec , IJupyterSessionManager } from '../../types' ;
@@ -22,9 +23,11 @@ import { IKernelSelectionListProvider, IKernelSpecQuickPickItem } from './types'
22
23
* @param {IJupyterKernelSpec } kernelSpec
23
24
* @returns {IKernelSpecQuickPickItem }
24
25
*/
25
- function getQuickPickItemForKernelSpec ( kernelSpec : IJupyterKernelSpec ) : IKernelSpecQuickPickItem {
26
+ function getQuickPickItemForKernelSpec ( kernelSpec : IJupyterKernelSpec , pathUtils : IPathUtils ) : IKernelSpecQuickPickItem {
26
27
return {
27
28
label : kernelSpec . display_name ,
29
+ // If we have a matching interpreter, then display that path in the dropdown else path of the kernelspec.
30
+ detail : pathUtils . getDisplayName ( kernelSpec . metadata ?. interpreter ?. path || kernelSpec . path ) ,
28
31
selection : { kernelModel : undefined , kernelSpec : kernelSpec , interpreter : undefined }
29
32
} ;
30
33
}
@@ -35,9 +38,12 @@ function getQuickPickItemForKernelSpec(kernelSpec: IJupyterKernelSpec): IKernelS
35
38
* @param {(IJupyterKernel & Partial<IJupyterKernelSpec>) } kernel
36
39
* @returns {IKernelSpecQuickPickItem }
37
40
*/
38
- function getQuickPickItemForActiveKernel ( kernel : IJupyterKernel & Partial < IJupyterKernelSpec > ) : IKernelSpecQuickPickItem {
41
+ function getQuickPickItemForActiveKernel ( kernel : IJupyterKernel & Partial < IJupyterKernelSpec > , pathUtils : IPathUtils ) : IKernelSpecQuickPickItem {
42
+ const path = kernel . metadata ?. interpreter ?. path || kernel . path ;
39
43
return {
40
44
label : kernel . display_name || kernel . name || '' ,
45
+ // If we have a matching interpreter, then display that path in the dropdown else path of the kernelspec.
46
+ detail : path ? pathUtils . getDisplayName ( path ) : '' ,
41
47
description : localize . DataScience . jupyterSelectURIRunningDetailFormat ( ) . format ( kernel . lastActivityTime . toLocaleString ( ) , kernel . numberOfConnections . toString ( ) ) ,
42
48
selection : { kernelModel : kernel , kernelSpec : undefined , interpreter : undefined }
43
49
} ;
@@ -51,7 +57,7 @@ function getQuickPickItemForActiveKernel(kernel: IJupyterKernel & Partial<IJupyt
51
57
* @implements {IKernelSelectionListProvider}
52
58
*/
53
59
export class ActiveJupyterSessionKernelSelectionListProvider implements IKernelSelectionListProvider {
54
- constructor ( private readonly sessionManager : IJupyterSessionManager ) { }
60
+ constructor ( private readonly sessionManager : IJupyterSessionManager , private readonly pathUtils : IPathUtils ) { }
55
61
public async getKernelSelections ( _cancelToken ?: CancellationToken | undefined ) : Promise < IKernelSpecQuickPickItem [ ] > {
56
62
const [ activeKernels , kernelSpecs ] = await Promise . all ( [ this . sessionManager . getRunningKernels ( ) , this . sessionManager . getKernelSpecs ( ) ] ) ;
57
63
const items = activeKernels . map ( item => {
@@ -64,7 +70,7 @@ export class ActiveJupyterSessionKernelSelectionListProvider implements IKernelS
64
70
return items
65
71
. filter ( item => item . display_name || item . name )
66
72
. filter ( item => ( item . language || '' ) . toLowerCase ( ) === PYTHON_LANGUAGE . toLowerCase ( ) )
67
- . map ( getQuickPickItemForActiveKernel ) ;
73
+ . map ( item => getQuickPickItemForActiveKernel ( item , this . pathUtils ) ) ;
68
74
}
69
75
}
70
76
@@ -76,13 +82,13 @@ export class ActiveJupyterSessionKernelSelectionListProvider implements IKernelS
76
82
* @implements {IKernelSelectionListProvider}
77
83
*/
78
84
export class InstalledJupyterKernelSelectionListProvider implements IKernelSelectionListProvider {
79
- constructor ( private readonly kernelService : KernelService , private readonly sessionManager ?: IJupyterSessionManager ) { }
85
+ constructor ( private readonly kernelService : KernelService , private readonly pathUtils : IPathUtils , private readonly sessionManager ?: IJupyterSessionManager ) { }
80
86
public async getKernelSelections ( cancelToken ?: CancellationToken | undefined ) : Promise < IKernelSpecQuickPickItem [ ] > {
81
87
const items = await this . kernelService . getKernelSpecs ( this . sessionManager , cancelToken ) ;
82
88
return items
83
89
. filter ( item => ( item . language || '' ) . toLowerCase ( ) === PYTHON_LANGUAGE . toLowerCase ( ) )
84
- . map ( getQuickPickItemForKernelSpec ) ;
85
- }
90
+ . map ( item => getQuickPickItemForKernelSpec ( item , this . pathUtils ) ) ;
91
+ }
86
92
}
87
93
88
94
/**
@@ -100,8 +106,7 @@ export class InterpreterKernelSelectionListProvider implements IKernelSelectionL
100
106
return items . map ( item => {
101
107
return {
102
108
...item ,
103
- // We don't want details & descriptions.
104
- detail : '' ,
109
+ // We don't want descriptions.
105
110
description : '' ,
106
111
selection : { kernelModel : undefined , interpreter : item . interpreter , kernelSpec : undefined }
107
112
} ;
@@ -122,7 +127,8 @@ export class KernelSelectionProvider {
122
127
constructor (
123
128
@inject ( KernelService ) private readonly kernelService : KernelService ,
124
129
@inject ( IInterpreterSelector ) private readonly interpreterSelector : IInterpreterSelector ,
125
- @inject ( IFileSystem ) private readonly fileSystem : IFileSystem ) { }
130
+ @inject ( IFileSystem ) private readonly fileSystem : IFileSystem ,
131
+ @inject ( IPathUtils ) private readonly pathUtils : IPathUtils ) { }
126
132
/**
127
133
* Gets a selection of kernel specs from a remote session.
128
134
*
@@ -132,7 +138,7 @@ export class KernelSelectionProvider {
132
138
* @memberof KernelSelectionProvider
133
139
*/
134
140
public async getKernelSelectionsForRemoteSession ( sessionManager : IJupyterSessionManager , cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
135
- const liveItems = new ActiveJupyterSessionKernelSelectionListProvider ( sessionManager ) . getKernelSelections ( cancelToken ) . then ( items => {
141
+ const liveItems = new ActiveJupyterSessionKernelSelectionListProvider ( sessionManager , this . pathUtils ) . getKernelSelections ( cancelToken ) . then ( items => {
136
142
// Sorty by name.
137
143
items . sort ( ( a , b ) => a . label === b . label ? 0 : ( a . label > b . label ? 1 : - 1 ) ) ;
138
144
this . remoteSuggestionsCache = items ;
@@ -153,7 +159,7 @@ export class KernelSelectionProvider {
153
159
*/
154
160
public async getKernelSelectionsForLocalSession ( sessionManager ?: IJupyterSessionManager , cancelToken ?: CancellationToken ) : Promise < IKernelSpecQuickPickItem [ ] > {
155
161
const getSelections = async ( ) => {
156
- const installedKernelsPromise = new InstalledJupyterKernelSelectionListProvider ( this . kernelService , sessionManager ) . getKernelSelections ( cancelToken ) ;
162
+ const installedKernelsPromise = new InstalledJupyterKernelSelectionListProvider ( this . kernelService , this . pathUtils , sessionManager ) . getKernelSelections ( cancelToken ) ;
157
163
const interpretersPromise = new InterpreterKernelSelectionListProvider ( this . interpreterSelector ) . getKernelSelections ( cancelToken ) ;
158
164
159
165
// tslint:disable-next-line: prefer-const
@@ -168,8 +174,8 @@ export class KernelSelectionProvider {
168
174
}
169
175
return true ;
170
176
} ) . map ( item => {
171
- // We don't want details & descriptions.
172
- return { ...item , detail : '' , description : '' } ;
177
+ // We don't want descriptions.
178
+ return { ...item , description : '' } ;
173
179
} ) ;
174
180
175
181
const unifiedList = [ ...installedKernels ! , ...interpreters ] ;
0 commit comments