@@ -27,17 +27,52 @@ 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+ const projects = await api . getPythonProjects ( ) ;
46+ await Promise . all (
47+ projects . map ( async ( project ) => {
48+ const env = await api . getEnvironment ( project . uri ) ;
49+ if ( ! env ) {
50+ return ;
51+ }
52+ try {
53+ await api . refreshPackages ( env ) ;
54+ } catch ( ex ) {
55+ log . error (
56+ `Failed to refresh packages for environment ${ env . envId } : ${ ex instanceof Error ? ex . message : String ( ex ) } ` ,
57+ ) ;
58+ }
59+ } ) ,
60+ ) ;
61+ } ) ;
62+ const packageWatcher = createFileSystemWatcher (
63+ '**/site-packages/*.dist-info/METADATA' ,
64+ false , // don't ignore create events (pip install)
65+ true , // ignore change events (content changes in METADATA don't affect package list)
66+ false // don't ignore delete events (pip uninstall)
67+ ) ;
68+ disposables . push (
69+ packageDebouncedRefresh ,
70+ packageWatcher ,
71+ packageWatcher . onDidCreate ( ( ) => {
72+ packageDebouncedRefresh . trigger ( ) ;
73+ } ) ,
74+ packageWatcher . onDidDelete ( ( ) => {
75+ packageDebouncedRefresh . trigger ( ) ;
76+ } ) ,
77+ ) ;
4378}
0 commit comments