예제 #1
0
        public GeneralOptionsDialogControl(ISonarLintSettings settings, ISonarLintDaemon daemon, IDaemonInstaller installer, ICommand openSettingsFileCommand, ILogger logger)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }
            if (daemon == null)
            {
                throw new ArgumentNullException(nameof(daemon));
            }
            if (installer == null)
            {
                throw new ArgumentNullException(nameof(installer));
            }
            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }
            if (openSettingsFileCommand == null)
            {
                throw new ArgumentNullException(nameof(openSettingsFileCommand));
            }

            this.settings  = settings;
            this.daemon    = daemon;
            this.installer = installer;
            this.logger    = logger;

            InitializeComponent();

            this.OpenSettingsButton.Command = openSettingsFileCommand;
        }
        internal TaggerProvider(ITableManagerProvider provider,
                                ITextDocumentFactoryService textDocumentFactoryService,
                                IContentTypeRegistryService contentTypeRegistryService,
                                IFileExtensionRegistryService fileExtensionRegistryService,
                                ISonarLintDaemon daemon,
                                SVsServiceProvider serviceProvider,
                                ISonarLintSettings settings)
        {
            this.ErrorTableManager            = provider.GetTableManager(StandardTables.ErrorsTable);
            this.TextDocumentFactoryService   = textDocumentFactoryService;
            this.ContentTypeRegistryService   = contentTypeRegistryService;
            this.FileExtensionRegistryService = fileExtensionRegistryService;

            this.ErrorTableManager.AddSource(this, StandardTableColumnDefinitions.DetailsExpander,
                                             StandardTableColumnDefinitions.ErrorSeverity, StandardTableColumnDefinitions.ErrorCode,
                                             StandardTableColumnDefinitions.ErrorSource, StandardTableColumnDefinitions.BuildTool,
                                             StandardTableColumnDefinitions.ErrorSource, StandardTableColumnDefinitions.ErrorCategory,
                                             StandardTableColumnDefinitions.Text, StandardTableColumnDefinitions.DocumentName,
                                             StandardTableColumnDefinitions.Line, StandardTableColumnDefinitions.Column,
                                             StandardTableColumnDefinitions.ProjectName);

            this.daemon   = daemon;
            this.dte      = (_DTE)serviceProvider.GetService(typeof(_DTE));
            this.settings = settings;
        }
        internal TaggerProvider(ITableManagerProvider tableManagerProvider,
                                ITextDocumentFactoryService textDocumentFactoryService,
                                ISonarLintDaemon daemon,
                                [Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider,
                                ISonarLintSettings settings,
                                ISonarLanguageRecognizer languageRecognizer,
                                ILogger logger)
        {
            this.errorTableManager          = tableManagerProvider.GetTableManager(StandardTables.ErrorsTable);
            this.textDocumentFactoryService = textDocumentFactoryService;

            this.errorTableManager.AddSource(this, StandardTableColumnDefinitions.DetailsExpander,
                                             StandardTableColumnDefinitions.ErrorSeverity, StandardTableColumnDefinitions.ErrorCode,
                                             StandardTableColumnDefinitions.ErrorSource, StandardTableColumnDefinitions.BuildTool,
                                             StandardTableColumnDefinitions.ErrorSource, StandardTableColumnDefinitions.ErrorCategory,
                                             StandardTableColumnDefinitions.Text, StandardTableColumnDefinitions.DocumentName,
                                             StandardTableColumnDefinitions.Line, StandardTableColumnDefinitions.Column,
                                             StandardTableColumnDefinitions.ProjectName);

            this.daemon             = daemon;
            this.dte                = serviceProvider.GetService <DTE>();
            this.settings           = settings;
            this.languageRecognizer = languageRecognizer;
            this.logger             = logger;
        }
예제 #4
0
        public static void ProcessFile(ISonarLintDaemon daemon, IIssueConsumer issueConsumer, ILogger logger,
                                       ProjectItem projectItem, string absoluteFilePath, string charset)
        {
            if (IsHeaderFile(absoluteFilePath))
            {
                // We can't analyze header files currently because we can't get all
                // of the required configuration information
                logger.WriteLine($"Cannot analyze header files. File: '{absoluteFilePath}'");
                return;
            }

            if (!IsFileInSolution(projectItem))
            {
                logger.WriteLine($"Unable to retrieve the configuration for file '{absoluteFilePath}'. Check the file is part of a project in the current solution.");
                return;
            }

            string sqLanguage;
            string json = TryGetConfig(logger, projectItem, absoluteFilePath, out sqLanguage);

            if (json != null && sqLanguage != null)
            {
                daemon.RequestAnalysis(absoluteFilePath, charset, sqLanguage, json, issueConsumer);
            }
        }
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            if (disposing)
            {
                this.daemon?.Dispose();
                this.daemon = null;
            }
        }
        /// <summary>
        /// Initialization of the package; this method is called right after the package is sited, so this is the place
        /// where you can put all the initialization code that rely on services provided by VisualStudio.
        /// </summary>
        protected override void Initialize()
        {
            base.Initialize();

            var dte = (EnvDTE.DTE)GetService(typeof(EnvDTE.DTE));

            this.dteEvents = dte.Events.DTEEvents;
            this.dteEvents.OnStartupComplete += OnIdeStartupComplete;
            this.daemon = this.GetMefService <ISonarLintDaemon>();
        }
예제 #7
0
 public DelayedRequest(DaemonAnalyzer daemonAnalyzer, string path, string charset, IEnumerable <AnalysisLanguage> detectedLanguages,
                       IIssueConsumer consumer)
 {
     this.daemonAnalyzer    = daemonAnalyzer;
     this.daemon            = daemonAnalyzer.daemon;
     this.daemonInstaller   = daemonAnalyzer.installer;
     this.path              = path;
     this.charset           = charset;
     this.detectedLanguages = detectedLanguages;
     this.consumer          = consumer;
 }
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            if (disposing)
            {
                this.dteEvents.OnStartupComplete -= OnIdeStartupComplete;
                this.daemon?.Dispose();
                this.daemon = null;
            }
        }
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            if (disposing)
            {
                this.daemon?.Dispose();
                this.daemon = null;
                statusBarDownloadProgressHandler?.Dispose();
                statusBarDownloadProgressHandler = null;
            }
        }
        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);

            if (disposing)
            {
                this.daemon?.Dispose();
                this.daemon = null;
                statusBarDownloadProgressHandler?.Dispose();
                statusBarDownloadProgressHandler = null;
                cFamilyPreCompiledHeadersEventListener?.Dispose();
                cFamilyPreCompiledHeadersEventListener = null;
            }
        }
        private async System.Threading.Tasks.Task InitAsync()
        {
            ILogger logger = null;

            try
            {
                logger = await this.GetMefServiceAsync <ILogger>();

                logger.WriteLine(Resources.Strings.Daemon_Initializing);

                daemon = await this.GetMefServiceAsync <ISonarLintDaemon>();

                var settings = await this.GetMefServiceAsync <ISonarLintSettings>();

                LegacyInstallationCleanup.CleanupDaemonFiles(logger);

                if (daemon.IsInstalled)
                {
                    if (settings.IsActivateMoreEnabled && !daemon.IsRunning)
                    {
                        daemon.Start();
                    }
                }
                else
                {
                    if (settings.IsActivateMoreEnabled)
                    {
                        // User already agreed to have the daemon installed, so directly start download
                        await JoinableTaskFactory.SwitchToMainThreadAsync();

                        new SonarLintDaemonInstaller(settings, daemon, logger).Show();
                    }
                    else if (!settings.SkipActivateMoreDialog)
                    {
                        await JoinableTaskFactory.SwitchToMainThreadAsync();

                        var result = new SonarLintDaemonSplashscreen(settings).ShowDialog();
                        if (result == true)
                        {
                            new SonarLintDaemonInstaller(settings, daemon, logger).Show();
                        }
                    }
                }
            }
            catch (Exception ex) when(!ErrorHandler.IsCriticalException(ex))
            {
                logger?.WriteLine(Resources.Strings.ERROR_InitializingDaemon, ex);
            }
            logger?.WriteLine(Resources.Strings.Daemon_InitializationComplete);
        }
        private async System.Threading.Tasks.Task InitAsync()
        {
            try
            {
                logger = await this.GetMefServiceAsync <ILogger>();

                logger.WriteLine(Resources.Strings.Daemon_Initializing);

                await DisableRuleCommand.InitializeAsync(this, logger);

                await CFamilyReproducerCommand.InitializeAsync(this, logger);

                cFamilyPreCompiledHeadersEventListener = await this.GetMefServiceAsync <IPreCompiledHeadersEventListener>();

                daemon = await this.GetMefServiceAsync <ISonarLintDaemon>();

                LegacyInstallationCleanup.CleanupDaemonFiles(logger);

                // Set up the solution tracker so we can shut down the daemon when a solution is closed
                var solutionTracker = await this.GetMefServiceAsync <IActiveSolutionTracker>();

                solutionTracker.ActiveSolutionChanged += HandleActiveSolutionChanged;

                IDaemonInstaller installer = await this.GetMefServiceAsync <IDaemonInstaller>();

                if (!installer.IsInstalled())
                {
                    // Set up the status bar download handler in case the user enables
                    // support for additional languages during the VS session
                    var sbService = await this.GetServiceAsync(typeof(IVsStatusbar)) as IVsStatusbar;

                    statusBarDownloadProgressHandler = new StatusBarDownloadProgressHandler(sbService, installer, logger);

                    var settings = await this.GetMefServiceAsync <ISonarLintSettings>();

                    if (settings.IsActivateMoreEnabled)
                    {
                        // User already agreed to have the daemon installed so directly start download.
                        // No UI interation so we don't need to be on the UI thread.
                        installer.Install();
                    }
                }
            }
            catch (Exception ex) when(!ErrorHandler.IsCriticalException(ex))
            {
                logger?.WriteLine(Resources.Strings.ERROR_InitializingDaemon, ex);
            }
            logger?.WriteLine(Resources.Strings.Daemon_InitializationComplete);
        }
예제 #13
0
        internal TaggerProvider([Import] ITableManagerProvider provider, [Import] ITextDocumentFactoryService textDocumentFactoryService, [Import] ISonarLintDaemon daemon)
        {
            this.ErrorTableManager          = provider.GetTableManager(StandardTables.ErrorsTable);
            this.TextDocumentFactoryService = textDocumentFactoryService;

            this.ErrorTableManager.AddSource(this, StandardTableColumnDefinitions.DetailsExpander,
                                             StandardTableColumnDefinitions.ErrorSeverity, StandardTableColumnDefinitions.ErrorCode,
                                             StandardTableColumnDefinitions.ErrorSource, StandardTableColumnDefinitions.BuildTool,
                                             StandardTableColumnDefinitions.ErrorSource, StandardTableColumnDefinitions.ErrorCategory,
                                             StandardTableColumnDefinitions.Text, StandardTableColumnDefinitions.DocumentName,
                                             StandardTableColumnDefinitions.Line, StandardTableColumnDefinitions.Column,
                                             StandardTableColumnDefinitions.ProjectName);

            this.daemon = daemon;
        }
        public SonarLintDaemonInstaller(ISonarLintSettings settings, ISonarLintDaemon daemon)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }
            if (daemon == null)
            {
                throw new ArgumentNullException(nameof(daemon));
            }

            this.settings = settings;
            this.daemon   = daemon;

            InitializeComponent();
        }
        public GeneralOptionsDialogControl(ISonarLintSettings settings, ISonarLintDaemon daemon)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }
            if (daemon == null)
            {
                throw new ArgumentNullException(nameof(daemon));
            }

            this.settings = settings;
            this.daemon   = daemon;

            InitializeComponent();
        }
예제 #16
0
        private async System.Threading.Tasks.Task Init()
        {
            try
            {
                this.daemon = await this.GetMefServiceAsync <ISonarLintDaemon>();

                var settings = await this.GetMefServiceAsync <ISonarLintSettings>();

                var logger = await this.GetMefServiceAsync <ILogger>();

                LegacyInstallationCleanup.CleanupDaemonFiles(logger);

                if (settings.IsActivateMoreEnabled && daemon.IsInstalled)
                {
                    if (!daemon.IsRunning)
                    {
                        daemon.Start();
                    }
                }
                else if (settings.IsActivateMoreEnabled)
                {
                    // User already agreed to have the daemon installed, so directly start download
                    await JoinableTaskFactory.SwitchToMainThreadAsync();

                    new SonarLintDaemonInstaller(settings, daemon).Show();
                }
                else if (!settings.SkipActivateMoreDialog)
                {
                    await JoinableTaskFactory.SwitchToMainThreadAsync();

                    var result = new SonarLintDaemonSplashscreen(settings).ShowDialog();
                    if (result == true)
                    {
                        new SonarLintDaemonInstaller(settings, daemon).Show();
                    }
                }
            }
            catch (Exception)
            {
                // Log this
            }
        }
예제 #17
0
        public void SetUp()
        {
            // minimal setup to create a tagger

            this.mockDaemon = new Mock <ISonarLintDaemon>();
            mockDaemon.Setup(d => d.IsRunning).Returns(true);
            this.daemon = mockDaemon.Object;

            var mockTableManagerProvider = new Mock <ITableManagerProvider>();

            mockTableManagerProvider.Setup(t => t.GetTableManager(StandardTables.ErrorsTable))
            .Returns(new Mock <ITableManager>().Object);
            var tableManagerProvider = mockTableManagerProvider.Object;

            var mockTextDocumentFactoryService = new Mock <ITextDocumentFactoryService>();
            var textDocumentFactoryService     = mockTextDocumentFactoryService.Object;

            var mockTextBuffer = new Mock <ITextBuffer>();

            this.textBuffer = mockTextBuffer.Object;

            var mockTextDataModel = new Mock <ITextDataModel>();
            var textDataModel     = mockTextDataModel.Object;

            var mockTextView = new Mock <ITextView>();

            mockTextView.Setup(t => t.TextBuffer).Returns(textBuffer);
            mockTextView.Setup(t => t.TextDataModel).Returns(textDataModel);
            this.textView = mockTextView.Object;

            this.mockTextDocument = new Mock <ITextDocument>();
            mockTextDocument.Setup(d => d.FilePath).Returns(filename);
            mockTextDocument.Setup(d => d.Encoding).Returns(Encoding.UTF8);
            var textDocument = mockTextDocument.Object;

            mockTextDocumentFactoryService
            .Setup(t => t.TryGetTextDocument(It.IsAny <ITextBuffer>(), out textDocument))
            .Returns(true);

            this.provider = new TaggerProvider(tableManagerProvider, textDocumentFactoryService, daemon);
        }
 public DaemonAnalyzer(ISonarLintDaemon daemon, IDaemonInstaller daemonInstaller, ITelemetryManager telemetryManager)
 {
     this.daemon           = daemon;
     this.installer        = daemonInstaller;
     this.telemetryManager = telemetryManager;
 }
예제 #19
0
        public void SetUp()
        {
            // minimal setup to create a tagger

            this.mockDaemon = new Mock <ISonarLintDaemon>();
            mockDaemon.Setup(d => d.IsRunning).Returns(true);
            this.daemon = mockDaemon.Object;

            var mockTableManagerProvider = new Mock <ITableManagerProvider>();

            mockTableManagerProvider.Setup(t => t.GetTableManager(StandardTables.ErrorsTable))
            .Returns(new Mock <ITableManager>().Object);
            var tableManagerProvider = mockTableManagerProvider.Object;

            var mockTextDocumentFactoryService = new Mock <ITextDocumentFactoryService>();
            var textDocumentFactoryService     = mockTextDocumentFactoryService.Object;

            var mockContentTypeRegistryService = new Mock <IContentTypeRegistryService>();

            mockContentTypeRegistryService.Setup(c => c.ContentTypes).Returns(Enumerable.Empty <IContentType>());
            var contentTypeRegistryService = mockContentTypeRegistryService.Object;

            var mockProject = new Mock <Project>();

            mockProject.Setup(p => p.Name).Returns("MyProject");
            var project = mockProject.Object;

            var mockProjectItem = new Mock <ProjectItem>();

            mockProjectItem.Setup(s => s.ContainingProject).Returns(project);
            var projectItem = mockProjectItem.Object;

            var mockSolution = new Mock <Solution>();

            mockSolution.Setup(s => s.FindProjectItem(It.IsAny <string>())).Returns(projectItem);
            var solution = mockSolution.Object;

            var mockDTE = new Mock <DTE>();

            mockDTE.Setup(d => d.Solution).Returns(solution);
            var dte = mockDTE.Object;

            var mockServiceProvider = new Mock <IServiceProvider>();

            mockServiceProvider.Setup(s => s.GetService(typeof(DTE))).Returns(dte);
            var serviceProvider = mockServiceProvider.Object;

            var mockFileExtensionRegistryService = new Mock <IFileExtensionRegistryService>();
            var fileExtensionRegistryService     = mockFileExtensionRegistryService.Object;

            var mockJsContentType = new Mock <IContentType>();

            mockJsContentType.Setup(c => c.IsOfType(It.IsAny <string>())).Returns(false);
            mockJsContentType.Setup(c => c.IsOfType("JavaScript")).Returns(true);
            this.jsContentType = mockJsContentType.Object;


            this.mockTextDocument = new Mock <ITextDocument>();
            mockTextDocument.Setup(d => d.FilePath).Returns(filename);
            mockTextDocument.Setup(d => d.Encoding).Returns(Encoding.UTF8);
            var textDocument = mockTextDocument.Object;

            mockISonarLintSettings = new Mock <ISonarLintSettings>();
            mockISonarLintSettings.Setup(s => s.IsActivateMoreEnabled).Returns(true);
            var sonarLintSettings = mockISonarLintSettings.Object;

            mockTextDocumentFactoryService
            .Setup(t => t.TryGetTextDocument(It.IsAny <ITextBuffer>(), out textDocument))
            .Returns(true);

            mockLogger = new Mock <ILogger>();

            var sonarLanguageRecognizer = new SonarLanguageRecognizer(contentTypeRegistryService, fileExtensionRegistryService);

            this.provider = new TaggerProvider(tableManagerProvider, textDocumentFactoryService, daemon, serviceProvider,
                                               sonarLintSettings, sonarLanguageRecognizer, mockLogger.Object);
        }
        private static void ConfigureSiteMock(GeneralOptionsDialogPage testSubject, ISonarLintSettings settings, ISonarLintDaemon daemon, IDaemonInstaller installer)
        {
            var mefHostMock = new Mock <IComponentModel>();

            mefHostMock.Setup(m => m.GetExtensions <ISonarLintDaemon>()).Returns(() => new[] { daemon });
            mefHostMock.Setup(m => m.GetExtensions <IDaemonInstaller>()).Returns(() => new[] { installer });
            mefHostMock.Setup(m => m.GetExtensions <ISonarLintSettings>()).Returns(() => new[] { settings });
            mefHostMock.Setup(m => m.GetExtensions <ILogger>()).Returns(() => new[] { new TestLogger() });
            mefHostMock.Setup(m => m.GetExtensions <IUserSettingsProvider>()).Returns(() => new[] { new Mock <IUserSettingsProvider>().Object });

            var siteMock = new Mock <ISite>();

            siteMock.As <IServiceProvider>().Setup(m => m.GetService(It.Is <Type>(t => t == typeof(SComponentModel)))).Returns(mefHostMock.Object);

            testSubject.Site = siteMock.Object;
        }