1- import { commands , ExtensionContext , LogOutputChannel , Terminal , Uri , window } from 'vscode' ;
1+ import { commands , extensions , ExtensionContext , LogOutputChannel , Terminal , Uri , window , workspace } from 'vscode' ;
22import { PythonEnvironment , PythonEnvironmentApi , PythonProjectCreator } from './api' ;
33import { ensureCorrectVersion } from './common/extVersion' ;
44import { registerLogger , traceError , traceInfo } from './common/logging' ;
@@ -32,7 +32,6 @@ import {
3232 refreshPackagesCommand ,
3333 removeEnvironmentCommand ,
3434 removePythonProject ,
35- resetEnvironmentCommand ,
3635 runAsTaskCommand ,
3736 runInDedicatedTerminalCommand ,
3837 runInTerminalCommand ,
@@ -61,6 +60,7 @@ import { EnvManagerView } from './features/views/envManagersView';
6160import { ProjectView } from './features/views/projectView' ;
6261import { PythonStatusBarImpl } from './features/views/pythonStatusBar' ;
6362import { updateViewsAndStatus } from './features/views/revealHandler' ;
63+ import { ProjectItem } from './features/views/treeViewItems' ;
6464import { EnvironmentManagers , ProjectCreators , PythonProjectManager } from './internal.api' ;
6565import { registerSystemPythonFeatures } from './managers/builtin/main' ;
6666import { SysPythonManager } from './managers/builtin/sysPythonManager' ;
@@ -69,6 +69,85 @@ import { registerCondaFeatures } from './managers/conda/main';
6969import { registerPoetryFeatures } from './managers/poetry/main' ;
7070import { registerPyenvFeatures } from './managers/pyenv/main' ;
7171
72+ /**
73+ * Collects relevant Python environment information for issue reporting
74+ */
75+ async function collectEnvironmentInfo (
76+ context : ExtensionContext ,
77+ envManagers : EnvironmentManagers ,
78+ projectManager : PythonProjectManager
79+ ) : Promise < string > {
80+ const info : string [ ] = [ ] ;
81+
82+ try {
83+ // Extension version
84+ const extensionVersion = context . extension ?. packageJSON ?. version || 'unknown' ;
85+ info . push ( `Extension Version: ${ extensionVersion } ` ) ;
86+
87+ // Python extension version
88+ const pythonExtension = extensions . getExtension ( 'ms-python.python' ) ;
89+ const pythonVersion = pythonExtension ?. packageJSON ?. version || 'not installed' ;
90+ info . push ( `Python Extension Version: ${ pythonVersion } ` ) ;
91+
92+ // Environment managers
93+ const managers = envManagers . managers ;
94+ info . push ( `\nRegistered Environment Managers (${ managers . length } ):` ) ;
95+ managers . forEach ( manager => {
96+ info . push ( ` - ${ manager . id } (${ manager . displayName } )` ) ;
97+ } ) ;
98+
99+ // Available environments
100+ const allEnvironments : PythonEnvironment [ ] = [ ] ;
101+ for ( const manager of managers ) {
102+ try {
103+ const envs = await manager . getEnvironments ( 'all' ) ;
104+ allEnvironments . push ( ...envs ) ;
105+ } catch ( err ) {
106+ info . push ( ` Error getting environments from ${ manager . id } : ${ err } ` ) ;
107+ }
108+ }
109+
110+ info . push ( `\nTotal Available Environments: ${ allEnvironments . length } ` ) ;
111+ if ( allEnvironments . length > 0 ) {
112+ info . push ( 'Environment Details:' ) ;
113+ allEnvironments . slice ( 0 , 10 ) . forEach ( ( env , index ) => {
114+ info . push ( ` ${ index + 1 } . ${ env . displayName } (${ env . version } ) - ${ env . displayPath } ` ) ;
115+ } ) ;
116+ if ( allEnvironments . length > 10 ) {
117+ info . push ( ` ... and ${ allEnvironments . length - 10 } more environments` ) ;
118+ }
119+ }
120+
121+ // Python projects
122+ const projects = projectManager . getProjects ( ) ;
123+ info . push ( `\nPython Projects (${ projects . length } ):` ) ;
124+ for ( let index = 0 ; index < projects . length ; index ++ ) {
125+ const project = projects [ index ] ;
126+ info . push ( ` ${ index + 1 } . ${ project . uri . fsPath } ` ) ;
127+ try {
128+ const env = await envManagers . getEnvironment ( project . uri ) ;
129+ if ( env ) {
130+ info . push ( ` Environment: ${ env . displayName } ` ) ;
131+ }
132+ } catch ( err ) {
133+ info . push ( ` Error getting environment: ${ err } ` ) ;
134+ }
135+ }
136+
137+ // Current settings (non-sensitive)
138+ const config = workspace . getConfiguration ( 'python-envs' ) ;
139+ info . push ( '\nExtension Settings:' ) ;
140+ info . push ( ` Default Environment Manager: ${ config . get ( 'defaultEnvManager' ) } ` ) ;
141+ info . push ( ` Default Package Manager: ${ config . get ( 'defaultPackageManager' ) } ` ) ;
142+ info . push ( ` Terminal Auto Activation: ${ config . get ( 'terminal.autoActivationType' ) } ` ) ;
143+
144+ } catch ( err ) {
145+ info . push ( `\nError collecting environment information: ${ err } ` ) ;
146+ }
147+
148+ return info . join ( '\n' ) ;
149+ }
150+
72151export async function activate ( context : ExtensionContext ) : Promise < PythonEnvironmentApi > {
73152 const start = new StopWatch ( ) ;
74153
@@ -119,7 +198,7 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
119198 projectCreators . registerPythonProjectCreator ( new ExistingProjects ( projectManager ) ) ,
120199 projectCreators . registerPythonProjectCreator ( new AutoFindProjects ( projectManager ) ) ,
121200 projectCreators . registerPythonProjectCreator ( new NewPackageProject ( envManagers , projectManager ) ) ,
122- projectCreators . registerPythonProjectCreator ( new NewScriptProject ( ) ) ,
201+ projectCreators . registerPythonProjectCreator ( new NewScriptProject ( projectManager ) ) ,
123202 ) ;
124203
125204 setPythonApi ( envManagers , projectManager , projectCreators , terminalManager , envVarManager ) ;
@@ -186,9 +265,6 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
186265 commands . registerCommand ( 'python-envs.setEnv' , async ( item ) => {
187266 await setEnvironmentCommand ( item , envManagers , projectManager ) ;
188267 } ) ,
189- commands . registerCommand ( 'python-envs.reset' , async ( item ) => {
190- await resetEnvironmentCommand ( item , envManagers , projectManager ) ;
191- } ) ,
192268 commands . registerCommand ( 'python-envs.setEnvManager' , async ( ) => {
193269 await setEnvManagerCommand ( envManagers , projectManager ) ;
194270 } ) ,
@@ -206,7 +282,16 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
206282 await addPythonProjectCommand ( resource , projectManager , envManagers , projectCreators ) ;
207283 } ) ,
208284 commands . registerCommand ( 'python-envs.removePythonProject' , async ( item ) => {
209- await resetEnvironmentCommand ( item , envManagers , projectManager ) ;
285+ // Clear environment association before removing project
286+ if ( item instanceof ProjectItem ) {
287+ const uri = item . project . uri ;
288+ const manager = envManagers . getEnvironmentManager ( uri ) ;
289+ if ( manager ) {
290+ manager . set ( uri , undefined ) ;
291+ } else {
292+ traceError ( `No environment manager found for ${ uri . fsPath } ` ) ;
293+ }
294+ }
210295 await removePythonProject ( item , projectManager ) ;
211296 } ) ,
212297 commands . registerCommand ( 'python-envs.clearCache' , async ( ) => {
@@ -278,6 +363,19 @@ export async function activate(context: ExtensionContext): Promise<PythonEnviron
278363 }
279364 } ,
280365 ) ,
366+ commands . registerCommand ( 'python-envs.reportIssue' , async ( ) => {
367+ try {
368+ const issueData = await collectEnvironmentInfo ( context , envManagers , projectManager ) ;
369+
370+ await commands . executeCommand ( 'workbench.action.openIssueReporter' , {
371+ extensionId : 'ms-python.vscode-python-envs' ,
372+ issueTitle : '[Python Environments] ' ,
373+ issueBody : `<!-- Please describe the issue you're experiencing -->\n\n<!-- The following information was automatically generated -->\n\n<details>\n<summary>Environment Information</summary>\n\n\`\`\`\n${ issueData } \n\`\`\`\n\n</details>`
374+ } ) ;
375+ } catch ( error ) {
376+ window . showErrorMessage ( `Failed to open issue reporter: ${ error } ` ) ;
377+ }
378+ } ) ,
281379 terminalActivation . onDidChangeTerminalActivationState ( async ( e ) => {
282380 await setActivateMenuButtonContext ( e . terminal , e . environment , e . activated ) ;
283381 } ) ,
0 commit comments