Пример #1
0
 protected FunctionIndexBasedTest(AssemblyMefCatalogFixture catalog)
 {
     _exportProvider = catalog.CreateExportProvider();
     _editorShell    = _exportProvider.GetExportedValue <IEditorShell>();
     _packageIndex   = _exportProvider.GetExportedValue <IPackageIndex>();
     _functionIndex  = _exportProvider.GetExportedValue <IFunctionIndex>();
 }
Пример #2
0
        public async Task BuildIndexAsync(IPackageIndex packageIndex = null)
        {
            packageIndex = packageIndex ?? _coreShell.ExportProvider.GetExportedValue <IPackageIndex>();
            var ready = await _buildIndexLock.WaitAsync();

            try {
                if (!ready)
                {
                    // First populate index for popular packages that are commonly preloaded
                    foreach (var pi in packageIndex.Packages)
                    {
                        foreach (var f in pi.Functions)
                        {
                            // Avoid duplicates. Packages are normally populated from base (intrinsic)
                            // to user so we don't want new packages to override base function information
                            if (!_functionToPackageMap.ContainsKey(f.Name))
                            {
                                _functionToPackageMap[f.Name] = pi.Name;
                            }
                        }
                    }
                }
            } finally {
                _buildIndexLock.Release();
            }
        }
Пример #3
0
        /// <summary>
        /// Builds function index
        /// </summary>
        /// <param name="packageIndex">Package index, if available. If not available,
        /// index builder will attempt to obtain it from the service container</param>
        public async Task BuildIndexAsync(IPackageIndex packageIndex = null, CancellationToken ct = default(CancellationToken))
        {
            packageIndex = packageIndex ?? Services.GetService <IPackageIndex>();
            var lockToken = await _buildIndexLock.WaitAsync(ct);

            try {
                if (!lockToken.IsSet)
                {
                    // First populate index for popular packages that are commonly preloaded
                    foreach (var pi in packageIndex.Packages)
                    {
                        if (ct.IsCancellationRequested)
                        {
                            break;
                        }
                        foreach (var f in pi.Functions)
                        {
                            if (ct.IsCancellationRequested)
                            {
                                break;
                            }
                            RegisterFunction(f.Name, pi.Name, f.IsInternal);
                        }
                    }
                }
            } finally {
                lockToken.Set();
            }
        }
Пример #4
0
 public static void Initialize(IPackageIndex packageIndex, IRToolsSettings settings, IREditorSettings editorSettings, ITelemetryService service = null)
 {
     if (Current == null)
     {
         Current = new RtvsTelemetry(packageIndex, settings, editorSettings, service);
     }
 }
Пример #5
0
 public FunctionInfoTest(IExportProvider exportProvider)
 {
     _exportProvider = exportProvider;
     _workflow       = UIThreadHelper.Instance.Invoke(() => _exportProvider.GetExportedValue <IRInteractiveWorkflowProvider>().GetOrCreate());
     _packageIndex   = _exportProvider.GetExportedValue <IPackageIndex>();
     _functionIndex  = _exportProvider.GetExportedValue <IFunctionIndex>();
 }
Пример #6
0
 public static void Initialize(IPackageIndex packageIndex, ITelemetryService service = null)
 {
     if (Current == null)
     {
         Current = new RtvsTelemetry(packageIndex, service);
     }
 }
Пример #7
0
 public FunctionInfoTest(RSupportMefCatalogFixture catalog)
 {
     _exportProvider = catalog.CreateExportProvider();
     UIThreadHelper.Instance.Invoke(() => _exportProvider.GetExportedValue <IRInteractiveWorkflowProvider>().GetOrCreate());
     _packageIndex  = _exportProvider.GetExportedValue <IPackageIndex>();
     _functionIndex = _exportProvider.GetExportedValue <IFunctionIndex>();
 }
Пример #8
0
 public FunctionInfoTest(IServiceContainer services)
 {
     _shell         = services.GetService <ICoreShell>();
     _workflow      = UIThreadHelper.Instance.Invoke(() => _shell.GetService <IRInteractiveWorkflowProvider>().GetOrCreate());
     _packageIndex  = _shell.GetService <IPackageIndex>();
     _functionIndex = _shell.GetService <IFunctionIndex>();
 }
Пример #9
0
 public RtvsTelemetry(IPackageIndex packageIndex, IRToolsSettings settings, IREditorSettings editorSettings, ITelemetryService service = null)
 {
     _packageIndex    = packageIndex;
     _settings        = settings;
     _editorSettings  = editorSettings;
     TelemetryService = service ?? VsAppShell.Current.GetService <ITelemetryService>();
 }
Пример #10
0
 public RtvsTelemetry(IPackageIndex packageIndex, IRSettings settings, IREditorSettings editorSettings, ITelemetryService telemetryService = null, ToolWindowTracker toolWindowTracker = null)
 {
     _packageIndex      = packageIndex;
     _settings          = settings;
     _editorSettings    = editorSettings;
     TelemetryService   = telemetryService;
     _toolWindowTracker = toolWindowTracker;
 }
Пример #11
0
 public static void Initialize(IPackageIndex packageIndex, IServiceContainer services)
 {
     if (Current == null)
     {
         var settings         = services.GetService <IRSettings>();
         var editorSettings   = services.GetService <IREditorSettings>();
         var telemetryService = services.GetService <ITelemetryService>();
         Current = new RtvsTelemetry(packageIndex, settings, editorSettings, telemetryService, new ToolWindowTracker(services));
     }
 }
Пример #12
0
        public static async Task DisposeAsync(this IPackageIndex packageIndex, ICoreShell coreShell)
        {
            var sessionProvider = coreShell.GetService <IRInteractiveWorkflowProvider>().GetOrCreate().RSessions;

            if (sessionProvider != null)
            {
                await sessionProvider.RemoveBrokerAsync();
            }
            packageIndex?.Dispose();
        }
Пример #13
0
 private bool TryExtractIndex(IPackage package, out IPackageIndex packageIndex)
 {
     packageIndex = null;
     if (package.Index == null)
     {
         return(false);
     }
     packageIndex = IndexExtractor.ExtractIndex(package);
     return(packageIndex != null);
 }
Пример #14
0
        public static async Task DisposeAsync(this IPackageIndex packageIndex, IExportProvider exportProvider)
        {
            IRSessionProvider sessionProvider = exportProvider.GetExportedValue <IRSessionProvider>();

            if (sessionProvider != null)
            {
                await Task.WhenAll(sessionProvider.GetSessions().Select(s => s.StopHostAsync()));
            }
            packageIndex?.Dispose();
        }
Пример #15
0
        public static async Task DisposeAsync(this IPackageIndex packageIndex, IExportProvider exportProvider)
        {
            var sessionProvider = exportProvider.GetExportedValue <IRInteractiveWorkflowProvider>().GetOrCreate().RSessions;

            if (sessionProvider != null)
            {
                await Task.WhenAll(sessionProvider.GetSessions().Select(s => s.StopHostAsync()));
            }
            packageIndex?.Dispose();
        }
Пример #16
0
        public TelemetryTest() {
            _packageIndex = Substitute.For<IPackageIndex>();

            var package1 = Substitute.For<IPackageInfo>();
            package1.Name.Returns("base");
            var package2 = Substitute.For<IPackageInfo>();
            package1.Name.Returns("user_package");

            _packageIndex.Packages.Returns(new IPackageInfo[] { package1, package2 });
        }
Пример #17
0
        public static async Task DisposeAsync(this IPackageIndex packageIndex, IExportProvider exportProvider)
        {
            var sessionProvider = exportProvider.GetExportedValue <IRInteractiveWorkflowProvider>().GetOrCreate().RSessions;

            if (sessionProvider != null)
            {
                await sessionProvider.RemoveBrokerAsync();
            }
            packageIndex?.Dispose();
        }
Пример #18
0
        public PackageFunctionCompletionProvider(IServiceContainer serviceContainer)
        {
            _session = serviceContainer.GetService <IIntellisenseRSession>();
            _snippetInformationSource = serviceContainer.GetService <ISnippetInformationSourceProvider>();
            _packageIndex             = serviceContainer.GetService <IPackageIndex>();
            _functionIndex            = serviceContainer.GetService <IFunctionIndex>();

            var imageService = serviceContainer.GetService <IImageService>();

            _functionGlyph = imageService.GetImage(ImageType.Method);
            _constantGlyph = imageService.GetImage(ImageType.Constant);
        }
Пример #19
0
        public TelemetryTest()
        {
            _packageIndex = Substitute.For <IPackageIndex>();

            var package1 = Substitute.For <IPackageInfo>();

            package1.Name.Returns("base");
            var package2 = Substitute.For <IPackageInfo>();

            package1.Name.Returns("user_package");

            _packageIndex.Packages.Returns(new IPackageInfo[] { package1, package2 });
        }
Пример #20
0
 public PackageFunctionCompletionProvider(
     ILoadedPackagesProvider loadedPackagesProvider,
     [Import(AllowDefault = true)] ISnippetInformationSourceProvider snippetInformationSource,
     IPackageIndex packageIndex,
     IFunctionIndex functionIndex,
     ICoreShell shell)
 {
     _loadedPackagesProvider   = loadedPackagesProvider;
     _snippetInformationSource = snippetInformationSource;
     _shell         = shell;
     _packageIndex  = packageIndex;
     _functionIndex = functionIndex;
 }
        public PackageFunctionCompletionProvider(
            ILoadedPackagesProvider loadedPackagesProvider,
            [Import(AllowDefault = true)] ISnippetInformationSourceProvider snippetInformationSource,
            IPackageIndex packageIndex,
            IFunctionIndex functionIndex,
            IGlyphService glyphService) {
            _loadedPackagesProvider = loadedPackagesProvider;
            _snippetInformationSource = snippetInformationSource;
            _packageIndex = packageIndex;
            _functionIndex = functionIndex;

            _functionGlyph = glyphService.GetGlyphThreadSafe(StandardGlyphGroup.GlyphGroupMethod, StandardGlyphItem.GlyphItemPublic);
            _constantGlyph = glyphService.GetGlyphThreadSafe(StandardGlyphGroup.GlyphGroupConstant, StandardGlyphItem.GlyphItemPublic);
        }
Пример #22
0
        private async Task ConnectAsync(CancellationToken ct)
        {
            var provider = _services.GetService <IRInteractiveWorkflowProvider>();

            _workflow = provider.GetOrCreate();
            _ui       = _services.GetService <IHostUIService>();
            _ui.SetLogLevel(MessageType.Info);

            var e = GetREngine();

            if (e == null)
            {
                return;
            }

            var log   = _services.Log();
            var info  = BrokerConnectionInfo.Create("(local)", e.InstallPath, e.Architecture, string.Empty);
            var start = DateTime.Now;

            _ui.LogMessageAsync($"Starting R Process with {e.InstallPath}...", MessageType.Info).DoNotWait();

            try {
                if (await _workflow.RSessions.TrySwitchBrokerAsync("(local)", info, ct))
                {
                    try {
                        await _workflow.RSession.StartHostAsync(new RHostStartupInfo(), new RSessionCallback(), _services.UI(), Debugger.IsAttached? 1000000 : 20000, ct);
                    } catch (Exception ex) {
                        _ui.ShowMessageAsync($"Unable to start Microsoft.R.Host process. Exception: {ex.Message}", MessageType.Error).DoNotWait();
                        return;
                    }

                    // Start package building
                    _ui.LogMessageAsync($"complete in {FormatElapsed(DateTime.Now - start)}", MessageType.Info).DoNotWait();
                    start = DateTime.Now;
                    _ui.LogMessageAsync("Building IntelliSense index...", MessageType.Info).DoNotWait();

                    _packageIndex = _services.GetService <IPackageIndex>();
                    _packageIndex.BuildIndexAsync(ct).ContinueWith(t => {
                        _ui.LogMessageAsync($"complete in {FormatElapsed(DateTime.Now - start)}", MessageType.Info).DoNotWait();
                    }, ct, TaskContinuationOptions.None, TaskScheduler.Default).DoNotWait();
                }
                else
                {
                    _ui.ShowMessageAsync($"Unable to connect to broker.", MessageType.Error).DoNotWait();
                }
            } catch (Exception ex) {
                _ui.ShowMessageAsync($"Unable to connect to broker. Exception: {ex.Message}", MessageType.Error).DoNotWait();
            }
        }
Пример #23
0
        public TelemetryTest()
        {
            _packageIndex = Substitute.For <IPackageIndex>();

            var package1 = Substitute.For <IPackageInfo>();

            package1.Name.Returns("base");
            var package2 = Substitute.For <IPackageInfo>();

            package1.Name.Returns("user_package");

            _packageIndex.Packages.Returns(new IPackageInfo[] { package1, package2 });

            _settings = new REditorSettings(new TestSettingsStorage());
        }
Пример #24
0
        public PackageFunctionCompletionProvider(
            ILoadedPackagesProvider loadedPackagesProvider,
            [Import(AllowDefault = true)] ISnippetInformationSourceProvider snippetInformationSource,
            IPackageIndex packageIndex,
            IFunctionIndex functionIndex,
            IGlyphService glyphService)
        {
            _loadedPackagesProvider   = loadedPackagesProvider;
            _snippetInformationSource = snippetInformationSource;
            _packageIndex             = packageIndex;
            _functionIndex            = functionIndex;

            _functionGlyph = glyphService.GetGlyphThreadSafe(StandardGlyphGroup.GlyphGroupMethod, StandardGlyphItem.GlyphItemPublic);
            _constantGlyph = glyphService.GetGlyphThreadSafe(StandardGlyphGroup.GlyphGroupConstant, StandardGlyphItem.GlyphItemPublic);
        }
Пример #25
0
        private async Task ConnectAsync(CancellationToken ct)
        {
            var provider = _services.GetService <IRInteractiveWorkflowProvider>();

            _workflow = provider.GetOrCreate();
            _ui       = _services.GetService <IUIService>();
            _ui.SetLogLevel(MessageType.Info);

            var e = GetREngine();

            if (e == null)
            {
                return;
            }

            var log  = _services.Log();
            var info = BrokerConnectionInfo.Create(_services.Security(), "VSCR", e.InstallPath, string.Empty, false);

            var start   = DateTime.Now;
            var message = $"Starting R Process with {e.InstallPath}...";

            _ui.LogMessageAsync(message, MessageType.Info).DoNotWait();

            log.Write(LogVerbosity.Normal, MessageCategory.General, $"Switching local broker to {e.InstallPath}");
            if (await _workflow.RSessions.TrySwitchBrokerAsync("VSCR", info, ct))
            {
                try {
                    await _workflow.RSession.StartHostAsync(new RHostStartupInfo(), new RSessionCallback(), Debugger.IsAttached? 100000 : 20000, ct);
                } catch (Exception ex) {
                    _ui.ShowMessageAsync($"Unable to start R process. Exception: {ex.Message}", MessageType.Error).DoNotWait();
                    return;
                }

                // Start package building
                _ui.LogMessageAsync($"complete in {FormatElapsed(DateTime.Now - start)}", MessageType.Info).DoNotWait();
                start = DateTime.Now;
                _ui.LogMessageAsync("Building IntelliSense index...", MessageType.Info).DoNotWait();

                _packageIndex = _services.GetService <IPackageIndex>();
                _packageIndex.BuildIndexAsync(ct).ContinueWith(t => {
                    _ui.LogMessageAsync($"complete in {FormatElapsed(DateTime.Now - start)}", MessageType.Info).DoNotWait();
                }, ct, TaskContinuationOptions.None, TaskScheduler.Default).DoNotWait();
            }
            else
            {
                _ui.ShowMessageAsync("Unable to start R process", MessageType.Error).DoNotWait();
            }
        }
Пример #26
0
 public async Task BuildIndexAsync(IPackageIndex packageIndex = null) {
     packageIndex = packageIndex ?? _coreShell.ExportProvider.GetExportedValue<IPackageIndex>();
     var lockToken = await _buildIndexLock.WaitAsync();
     try {
         if (!lockToken.IsSet) {
             // First populate index for popular packages that are commonly preloaded
             foreach (var pi in packageIndex.Packages) {
                 foreach (var f in pi.Functions) {
                     RegisterFunction(f.Name, pi.Name);
                 }
             }
         }
     } finally {
         lockToken.Set();
     }
 }
        public PackageFunctionCompletionProvider(
            IIntellisenseRSession session,
            [Import(AllowDefault = true)] ISnippetInformationSourceProvider snippetInformationSource,
            IPackageIndex packageIndex,
            IFunctionIndex functionIndex,
            ICoreShell coreShell)
        {
            _session = session;
            _snippetInformationSource = snippetInformationSource;
            _packageIndex             = packageIndex;
            _functionIndex            = functionIndex;

            var imageService = coreShell.GetService <IImageService>();

            _functionGlyph = imageService.GetImage(ImageType.Method) as ImageSource;
            _constantGlyph = imageService.GetImage(ImageType.Constant) as ImageSource;;
        }
Пример #28
0
        /// <summary>
        /// Builds function index
        /// </summary>
        /// <param name="packageIndex">Package index, if available. If not available,
        /// index builder will attempt to obtain it from the service container</param>
        public async Task BuildIndexAsync(IPackageIndex packageIndex = null)
        {
            packageIndex = packageIndex ?? Services.GetService <IPackageIndex>();
            var lockToken = await _buildIndexLock.WaitAsync();

            try {
                if (!lockToken.IsSet)
                {
                    // First populate index for popular packages that are commonly preloaded
                    foreach (var pi in packageIndex.Packages)
                    {
                        foreach (var f in pi.Functions)
                        {
                            RegisterFunction(f.Name, pi.Name);
                        }
                    }
                }
            } finally {
                lockToken.Set();
            }
        }
Пример #29
0
 public PackagesCompletionProvider(IPackageIndex packageIndex, IGlyphService glyphService) {
     _packageIndex = packageIndex;
     _glyph = glyphService.GetGlyphThreadSafe(StandardGlyphGroup.GlyphLibrary, StandardGlyphItem.GlyphItemPublic);
 }
Пример #30
0
 public FunctionInfoTest(RSupportMefCatalogFixture catalog) {
     _exportProvider = catalog.CreateExportProvider();
     _workflow = UIThreadHelper.Instance.Invoke(() => _exportProvider.GetExportedValue<IRInteractiveWorkflowProvider>().GetOrCreate());
     _packageIndex = _exportProvider.GetExportedValue<IPackageIndex>();
     _functionIndex = _exportProvider.GetExportedValue<IFunctionIndex>();
 }
Пример #31
0
 private void BuildFunctionIndex()
 {
     _packageIndex = VsAppShell.Current.ExportProvider.GetExportedValue <IPackageIndex>();
     _packageIndex.BuildIndexAsync().DoNotWait();
 }
Пример #32
0
 private void BuildFunctionIndex() => _packageIndex = Services.GetService <IPackageIndex>();
Пример #33
0
 public static Task InitializeAsync(this IPackageIndex packageIndex, IFunctionIndex functionIndex)
 {
     RToolsSettings.Current = new TestRToolsSettings();
     return(packageIndex.BuildIndexAsync());
 }
Пример #34
0
 public static void Initialize(IPackageIndex packageIndex, IRSettings settings, ITelemetryService service = null) {
     if (Current == null) {
         Current = new RtvsTelemetry(packageIndex, settings, service);
     }
 }
Пример #35
0
 public PackagesCompletionProvider(IPackageIndex packageIndex, IImageService imageService)
 {
     _packageIndex = packageIndex;
     _glyph        = imageService.GetImage(ImageType.Library) as ImageSource;
 }
        /// <summary>
        /// Performs a cleanup and consistency check for the package store.
        /// </summary>
        /// <param name="packageIndex">Interface used to ensure that the package index is correct.</param>
        /// <exception cref="ArgumentNullException"><paramref name="packageIndex"/> is null.</exception>
        public override void Clean(IPackageIndex packageIndex)
        {
            if (packageIndex == null)
            {
                throw new ArgumentNullException("packageIndex");
            }

            InitPackageStore();

            _logger.Debug("Clean('" + packageIndex + "') called");

            if (_fileSystemOperations.DirectoryExists(RootPath))
            {
                _logger.DebugFormat("Enumerating directories in {0}...", RootPath);

                IEnumerable <string> packageDirectories;
                try
                {
                    packageDirectories = _fileSystemOperations.EnumerateDirectories(RootPath);
                }
                catch (Exception ex)
                {
                    _logger.Error(string.Format("Could not access RootPath '{0}'. Skipping feed cleanup.", RootPath), ex);
                    return;
                }

                foreach (var packageDirectory in packageDirectories)
                {
                    _logger.DebugFormat("Enumerating all nupkg files in packageDirectory '{0}'", packageDirectory);

                    bool any = false;
                    var  packageFileNames = _fileSystemOperations.EnumerateFiles(packageDirectory, "*.nupkg");
                    foreach (var fileName in packageFileNames)
                    {
                        _logger.DebugFormat("Inspecting package '{0}'", fileName);
                        var localFileName = _fileSystemOperations.GetFileName(fileName);

                        any = true;
                        try
                        {
                            using (var stream = TryOpenStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete))
                            {
                                if (stream != null)
                                {
                                    _logger.DebugFormat("Validating {0}...", localFileName);
                                    if (packageIndex.ValidatePackage(stream))
                                    {
                                        _logger.DebugFormat("Verifying that {0} is the correct file name...", localFileName);
                                        stream.Position = 0;
                                        var package          = NuGetPackage.ReadFromNupkgFile(stream);
                                        var expectedFileName = package.Id + "." + package.Version + ".nupkg";
                                        if (!string.Equals(localFileName, expectedFileName, StringComparison.OrdinalIgnoreCase))
                                        {
                                            _logger.WarnFormat("File {0} has incorrect name; should be {1}", localFileName, expectedFileName);
                                            _logger.DebugFormat("Renaming {0} to {1}...", localFileName, expectedFileName);

                                            var fullExpectedFileName = Path.Combine(packageDirectory, expectedFileName);
                                            if (File.Exists(fullExpectedFileName))
                                            {
                                                try
                                                {
                                                    _logger.Debug("Deleting target file '" + fullExpectedFileName + "'");
                                                    _fileSystemOperations.DeleteFile(fullExpectedFileName);
                                                }
                                                catch (Exception ex)
                                                {
                                                    _logger.Error("Exception while deleting target file '" + fullExpectedFileName + "'", ex);
                                                }
                                            }
                                            try
                                            {
                                                _logger.DebugFormat("Moving package from '{0}' to '{1}'.", fileName, fullExpectedFileName);
                                                _fileSystemOperations.MoveFile(fileName, fullExpectedFileName);
                                                _logger.Debug("Package renamed.");
                                            }
                                            catch (Exception ex)
                                            {
                                                _logger.Error("Could not rename package.", ex);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            _logger.Error(string.Format("Could not validate '{0}'", fileName), ex);
                            StoredProcs.PackageIndexingErrors_LogIndexingError(FeedId, localFileName, ex.Message,
                                                                               Encoding.UTF8.GetBytes(ex.StackTrace ?? string.Empty)
                                                                               ).Execute();
                        }
                    }

                    if (!any)
                    {
                        try
                        {
                            _logger.DebugFormat("Deleting empty directory {0}...", packageDirectory);
                            _fileSystemOperations.DeleteDirectory(packageDirectory);
                        }
                        catch
                        {
                            _logger.Warn("Directory could not be deleted; it may not be empty.");
                        }
                    }
                }

                packageIndex.RemoveRemaining();
            }
            else
            {
                _logger.DebugFormat("Package root path '{0}' not found. Nothing to do.", RootPath);
            }
        }
Пример #37
0
 public RtvsTelemetry(IPackageIndex packageIndex, IRSettings settings, ITelemetryService service = null) {
     _packageIndex = packageIndex;
     _settings = settings;
     TelemetryService = service ?? VsAppShell.Current.ExportProvider.GetExportedValue<ITelemetryService>();
 }