public CLangAnalyzer(ITelemetryManager telemetryManager, ISonarLintSettings settings, ICFamilyRulesConfigProvider cFamilyRulesConfigProvider, ILogger logger)
 {
     this.telemetryManager           = telemetryManager;
     this.settings                   = settings;
     this.cFamilyRulesConfigProvider = cFamilyRulesConfigProvider;
     this.logger = logger;
 }
Пример #2
0
 public CLangAnalyzer(ITelemetryManager telemetryManager, ISonarLintSettings settings, ICFamilyRulesConfigProvider cFamilyRulesConfigProvider, [Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider, IAnalysisStatusNotifier analysisStatusNotifier, ILogger logger, ICFamilyIssueToAnalysisIssueConverter issueConverter)
 {
     this.telemetryManager           = telemetryManager;
     this.settings                   = settings;
     this.cFamilyRulesConfigProvider = cFamilyRulesConfigProvider;
     this.analysisStatusNotifier     = analysisStatusNotifier;
     this.logger         = logger;
     this.issueConverter = issueConverter;
     this.dte            = serviceProvider.GetService <DTE>();
 }
        public CFamilyRuleConfigProvider(IHost host, IActiveSolutionBoundTracker activeSolutionBoundTracker, IUserSettingsProvider userSettingsProvider,
                                         ILogger logger, ICFamilyRulesConfigProvider sonarWayProvider, IFileSystem fileSystem)
        {
            this.activeSolutionBoundTracker = activeSolutionBoundTracker;
            this.userSettingsProvider       = userSettingsProvider;
            this.logger = logger;

            this.sonarWayProvider = sonarWayProvider;
            this.serializer       = new RulesSettingsSerializer(fileSystem, logger);

            this.effectiveConfigCalculator = new EffectiveRulesConfigCalculator(logger);
        }
Пример #4
0
        public CFamilyRuleConfigProvider(IHost host, IActiveSolutionBoundTracker activeSolutionBoundTracker, IUserSettingsProvider userSettingsProvider,
                                         ILogger logger, ICFamilyRulesConfigProvider sonarWayProvider, IFileSystem fileSystem)
        {
            this.activeSolutionBoundTracker = activeSolutionBoundTracker;
            this.userSettingsProvider       = userSettingsProvider;
            this.logger = logger;

            solutionInfoProvider = host.GetService <ISolutionRuleSetsInformationProvider>();
            solutionInfoProvider.AssertLocalServiceIsNotNull();

            this.sonarWayProvider = sonarWayProvider;
            this.serializer       = new RulesSettingsSerializer(fileSystem, logger);

            this.effectiveConfigCalculator = new EffectiveRulesConfigCalculator(logger);
        }
Пример #5
0
 protected /* for testing */ virtual Request CreateRequest(ILogger logger, ProjectItem projectItem, string absoluteFilePath, ICFamilyRulesConfigProvider cFamilyRulesConfigProvider, IAnalyzerOptions analyzerOptions) =>
 CFamilyHelper.CreateRequest(logger, projectItem, absoluteFilePath, cFamilyRulesConfigProvider, analyzerOptions);
        private static Request CreateRequest(FileConfig fileConfig, string absoluteFilePath, ICFamilyRulesConfigProvider cFamilyRulesConfigProvider, IAnalyzerOptions analyzerOptions)
        {
            var request = ToRequest(fileConfig, absoluteFilePath);

            if (request?.File == null || request?.CFamilyLanguage == null)
            {
                return(null);
            }

            request.PchFile = PchFilePath;

            bool isPCHBuild = false;

            if (analyzerOptions is CFamilyAnalyzerOptions cFamilyAnalyzerOptions)
            {
                Debug.Assert(!(cFamilyAnalyzerOptions.CreateReproducer && cFamilyAnalyzerOptions.CreatePreCompiledHeaders), "Only one flag (CreateReproducer, CreatePreCompiledHeaders) can be set at a time");

                if (cFamilyAnalyzerOptions.CreateReproducer)
                {
                    request.Flags |= Request.CreateReproducer;
                }

                if (cFamilyAnalyzerOptions.CreatePreCompiledHeaders)
                {
                    request.Flags |= Request.BuildPreamble;
                    isPCHBuild     = true;
                }
            }

            if (!isPCHBuild)
            {
                // We don't need to calculate / set the rules configuration for PCH builds
                request.RulesConfiguration = cFamilyRulesConfigProvider.GetRulesConfiguration(request.CFamilyLanguage);
                Debug.Assert(request.RulesConfiguration != null, "RulesConfiguration should be set for the analysis request");
                request.Options = GetKeyValueOptionsList(request.RulesConfiguration);
            }

            return(request);
        }
        public static Request CreateRequest(ILogger logger, ProjectItem projectItem, string absoluteFilePath, ICFamilyRulesConfigProvider cFamilyRulesConfigProvider, IAnalyzerOptions analyzerOptions)
        {
            if (analyzerOptions is CFamilyAnalyzerOptions cFamilyAnalyzerOptions && cFamilyAnalyzerOptions.CreatePreCompiledHeaders)
            {
                // In case the requeset is coming from PCH generation, we don't log failures.
                // This is to avoid redundant messages while navigating unsupoported files.
                logger = noOpLogger;
            }

            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(null);
            }

            var fileConfig = TryGetConfig(logger, projectItem, absoluteFilePath, analyzerOptions);

            if (fileConfig == null)
            {
                return(null);
            }

            return(CreateRequest(fileConfig, absoluteFilePath, cFamilyRulesConfigProvider, analyzerOptions));
        }
 protected override Request CreateRequest(ILogger logger, ProjectItem projectItem, string absoluteFilePath, ICFamilyRulesConfigProvider cFamilyRulesConfigProvider, IAnalyzerOptions analyzerOptions)
 {
     CreateRequestCallCount++;
     return(RequestToReturn);
 }
 public TestableCLangAnalyzer(ITelemetryManager telemetryManager, ISonarLintSettings settings, ICFamilyRulesConfigProvider cFamilyRulesConfigProvider,
                              IServiceProvider serviceProvider, IAnalysisStatusNotifier analysisStatusNotifier, ILogger logger, ICFamilyIssueToAnalysisIssueConverter cFamilyIssueConverter)
     : base(telemetryManager, settings, cFamilyRulesConfigProvider, serviceProvider, analysisStatusNotifier, logger, cFamilyIssueConverter)
 {
 }
Пример #10
0
        private static Request CreateRequest(FileConfig fileConfig, string absoluteFilePath, ICFamilyRulesConfigProvider cFamilyRulesConfigProvider, IAnalyzerOptions analyzerOptions)
        {
            var request = fileConfig.ToRequest(absoluteFilePath);

            if (request?.File == null || request?.CFamilyLanguage == null)
            {
                return(null);
            }

            request.RulesConfiguration = cFamilyRulesConfigProvider.GetRulesConfiguration(request.CFamilyLanguage);
            Debug.Assert(request.RulesConfiguration != null, "RulesConfiguration should be set for the analysis request");
            request.Options = GetKeyValueOptionsList(request.RulesConfiguration);

            if (analyzerOptions is CFamilyAnalyzerOptions cFamilyAnalyzerOptions && cFamilyAnalyzerOptions.CreateReproducer)
            {
                request.Flags |= Request.CreateReproducer;
            }

            return(request);
        }
Пример #11
0
        public static Request CreateRequest(ILogger logger, ProjectItem projectItem, string absoluteFilePath, ICFamilyRulesConfigProvider cFamilyRulesConfigProvider, IAnalyzerOptions analyzerOptions)
        {
            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(null);
            }

            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(null);
            }

            var fileConfig = TryGetConfig(logger, projectItem, absoluteFilePath);

            if (fileConfig == null)
            {
                return(null);
            }

            return(CreateRequest(fileConfig, absoluteFilePath, cFamilyRulesConfigProvider, analyzerOptions));
        }