@@ -27,17 +27,48 @@ export async function registerSystemPythonFeatures(
2727 const venvDebouncedRefresh = createSimpleDebounce ( 500 , ( ) => {
2828 venvManager . watcherRefresh ( ) ;
2929 } ) ;
30- const watcher = createFileSystemWatcher ( '{**/activate}' , false , true , false ) ;
30+ const activationWatcher = createFileSystemWatcher ( '{**/activate}' , false , true , false ) ;
3131 disposables . push (
32- watcher ,
33- watcher . onDidCreate ( ( ) => {
32+ activationWatcher ,
33+ activationWatcher . onDidCreate ( ( ) => {
3434 venvDebouncedRefresh . trigger ( ) ;
3535 } ) ,
36- watcher . onDidDelete ( ( ) => {
36+ activationWatcher . onDidDelete ( ( ) => {
3737 venvDebouncedRefresh . trigger ( ) ;
3838 } ) ,
3939 onDidDeleteFiles ( ( ) => {
4040 venvDebouncedRefresh . trigger ( ) ;
4141 } ) ,
4242 ) ;
43+
44+ const packageDebouncedRefresh = createSimpleDebounce ( 500 , async ( ) => {
45+ // Get all projects and refresh their packages
46+ const projects = await api . getPythonProjects ( ) ;
47+ for ( const project of projects ) {
48+ const env = await api . getEnvironment ( project . uri ) ;
49+ if ( env ) {
50+ try {
51+ await api . refreshPackages ( env ) ;
52+ } catch ( ex ) {
53+ log . error ( `Failed to refresh packages for environment ${ env . id } : ${ ex instanceof Error ? ex . message : String ( ex ) } ` ) ;
54+ }
55+ }
56+ }
57+ } ) ;
58+ const packageWatcher = createFileSystemWatcher (
59+ '**/site-packages/*.dist-info/METADATA' ,
60+ false , // don't ignore create events (pip install)
61+ true , // ignore change events (content changes in METADATA don't affect package list)
62+ false // don't ignore delete events (pip uninstall)
63+ ) ;
64+ disposables . push (
65+ packageDebouncedRefresh ,
66+ packageWatcher ,
67+ packageWatcher . onDidCreate ( ( ) => {
68+ packageDebouncedRefresh . trigger ( ) ;
69+ } ) ,
70+ packageWatcher . onDidDelete ( ( ) => {
71+ packageDebouncedRefresh . trigger ( ) ;
72+ } ) ,
73+ ) ;
4374}
0 commit comments