private void OnWorkspaceClosed(object sender, PythonWorkspaceContextEventArgs e)
        {
            _firstLoad = true;
            _isRefresh = false;
            if (_testFilesUpdateWatcher != null)
            {
                _testFilesUpdateWatcher.FileChangedEvent -= OnWorkspaceFileChanged;
                _testFilesUpdateWatcher.Dispose();
                _testFilesUpdateWatcher = null;
            }

            if (_workspaceContextProvider.Workspace != null)
            {
                _workspaceContextProvider.Workspace.SearchPathsSettingChanged -= OnWorkspaceSettingsChange;
                _workspaceContextProvider.Workspace.InterpreterSettingChanged -= OnWorkspaceSettingsChange;
                _workspaceContextProvider.Workspace.TestSettingChanged        -= OnWorkspaceSettingsChange;
                _workspaceContextProvider.Workspace.ActiveInterpreterChanged  -= OnActiveInterpreterChanged;

                if (_projectMap.TryRemove(_workspaceContextProvider.Workspace.Location, out ProjectInfo projToRemove))
                {
                    projToRemove.Dispose();
                }
            }

            _projectMap.Clear();
            _packageManagerEventSink.InstalledPackagesChanged -= OnInstalledPackagesChanged;
            _packageManagerEventSink.UnwatchAll();
        }
Пример #2
0
        private void OnWorkspaceOpening(object sender, PythonWorkspaceContextEventArgs e)
        {
            var workspace = e.Workspace;

            _untrustedWorkspaceInfoBar  = new UntrustedWorkspaceInfoBar(_serviceProvider, workspace);
            workspace.IsTrustedQueried += TriggerUntrustedWorkspaceInfoBar;
        }
Пример #3
0
        private void OnWorkspaceInitialized(object sender, PythonWorkspaceContextEventArgs e)
        {
            var workspace = e.Workspace;

            _infoBarCheckTriggered = false;

            _packageInstallInfoBar            = new PackageInstallWorkspaceInfoBar(_serviceProvider, workspace);
            _condaEnvCreateInfoBar            = new CondaEnvCreateWorkspaceInfoBar(_serviceProvider, workspace);
            _virtualEnvCreateInfoBar          = new VirtualEnvCreateWorkspaceInfoBar(_serviceProvider, workspace);
            _testFrameworkInfoBar             = new TestFrameworkWorkspaceInfoBar(_serviceProvider, workspace);
            _pythonVersionNotSupportedInfoBar = new PythonNotSupportedInfoBar(_serviceProvider, InfoBarContexts.Workspace, () => workspace.CurrentFactory);

            workspace.AddActionOnClose(_packageInstallInfoBar, (obj => ((PythonInfoBar)obj).Dispose()));
            workspace.AddActionOnClose(_condaEnvCreateInfoBar, (obj => ((PythonInfoBar)obj).Dispose()));
            workspace.AddActionOnClose(_virtualEnvCreateInfoBar, (obj => ((PythonInfoBar)obj).Dispose()));
            workspace.AddActionOnClose(_testFrameworkInfoBar, (obj => ((PythonInfoBar)obj).Dispose()));
            workspace.AddActionOnClose(
                _pythonVersionNotSupportedInfoBar,
                obj => { ((PythonInfoBar)obj).Dispose(); workspace.ActiveInterpreterChanged -= TriggerPythonNotSupportedInforBar; }
                );
            workspace.AddActionOnClose(
                _untrustedWorkspaceInfoBar,
                obj => { ((PythonInfoBar)obj).Dispose(); workspace.IsTrustedQueried -= TriggerUntrustedWorkspaceInfoBar; }
                );

            workspace.ActiveInterpreterChanged += TriggerPythonNotSupportedInforBar;

            // When we see a Python file opened in the workspace, we trigger info bar checks.
            // Python files may have already been opened by the time this runs, so we'll check
            // the already loaded files first. If there are no Python file that trigger info bar
            // checks, then we'll register to be notified when files are opened.
            if (ErrorHandler.Succeeded(_docTable.GetRunningDocumentsEnum(out var pEnumRdt)))
            {
                if (ErrorHandler.Succeeded(pEnumRdt.Reset()))
                {
                    uint[] cookie = new uint[1];
                    while (VSConstants.S_OK == pEnumRdt.Next(1, cookie, out _))
                    {
                        var docFilePath = GetDocumentFilePath(cookie[0]);
                        if (IsWorkspacePythonFile(docFilePath))
                        {
                            TriggerInfoBar();
                            break;
                        }
                    }
                }
            }

            if (!_infoBarCheckTriggered)
            {
                if (ErrorHandler.Succeeded(_docTable.AdviseRunningDocTableEvents(this, out uint eventCookie)))
                {
                    workspace.AddActionOnClose(_docTable, obj => _docTable.UnadviseRunningDocTableEvents(eventCookie));
                }
            }
        }
        private void OnWorkspaceLoaded(object sender, PythonWorkspaceContextEventArgs e)
        {
            if (e.Workspace == null)
            {
                return;
            }

            // guard against duplicate loaded triggers
            e.Workspace.SearchPathsSettingChanged -= OnWorkspaceSettingsChange;
            e.Workspace.InterpreterSettingChanged -= OnWorkspaceSettingsChange;
            e.Workspace.TestSettingChanged        -= OnWorkspaceSettingsChange;

            e.Workspace.SearchPathsSettingChanged += OnWorkspaceSettingsChange;
            e.Workspace.InterpreterSettingChanged += OnWorkspaceSettingsChange;
            e.Workspace.TestSettingChanged        += OnWorkspaceSettingsChange;
        }
Пример #5
0
 private void OnWorkspaceChanged(object sender, PythonWorkspaceContextEventArgs e)
 {
     EvaluatorsChanged?.Invoke(this, EventArgs.Empty);
 }
Пример #6
0
 private void OnWorkspaceClosing(object sender, PythonWorkspaceContextEventArgs e)
 {
     _site.GetUIThread().Invoke(() => {
         CloseAnalyzer(e.Workspace);
     });
 }