コード例 #1
0
        /// <inheritdoc />
        public override int Run(Args arguments)
        {
            if (arguments.Help)
            {
                return(0);
            }

            // TODO: Don't assume particular hash types (this is particularly seen in WorkspaceNugetModuleResolver.TryGetExpectedContentHash).
            ContentHashingUtilities.SetDefaultHashType();

            using (Logger.SetupEventListener(EventLevel.Informational))
            {
                PathTable pathTable = new PathTable();

                var logger = Logger.CreateLogger();

                if (!WorkspaceBuilder.TryBuildWorkspaceAndCollectFilesToAnalyze(
                        logger,
                        pathTable,
                        arguments.Analyzers.Max(a => a.RequiredPhases),
                        arguments.Config,
                        arguments.Filter,
                        arguments.OutputDirectory,
                        arguments.ObjectDirectory,
                        out var workspace,
                        out var pipGraph,
                        out var filesToAnalyze,
                        out var context))
                {
                    return(1);
                }

                foreach (var analyzer in arguments.Analyzers)
                {
                    if (!analyzer.SetSharedState(arguments, context, logger, workspace, pipGraph))
                    {
                        return(1);
                    }
                }

                if (arguments.Fix && arguments.Analyzers.Last().Kind != AnalyzerKind.PrettyPrint)
                {
                    logger.FixRequiresPrettyPrint(context.LoggingContext);
                }

                int errorCount = 0;

                // TODO: Make this multi-threaded. For now since we are developing keeping simple loop to maintain easy debugging.
                foreach (var kv in filesToAnalyze)
                {
                    foreach (var analyzer in arguments.Analyzers)
                    {
                        if (!analyzer.AnalyzeSourceFile(workspace, kv.Key, kv.Value))
                        {
                            Interlocked.Increment(ref errorCount);
                        }
                    }
                }

                foreach (var analyzer in arguments.Analyzers)
                {
                    analyzer.FinalizeAnalysis();
                }

                if (errorCount > 0)
                {
                    logger.AnalysisErrorSummary(context.LoggingContext, errorCount, arguments.Analyzers.Count);
                    return(1);
                }

                return(0);
            }
        }
コード例 #2
0
        /// <inheritdoc />
        private int RunInner(Args arguments)
        {
            if (arguments.Help)
            {
                return(0);
            }

            // TODO: Don't assume particular hash types (this is particularly seen in WorkspaceNugetModuleResolver.TryGetExpectedContentHash).
            ContentHashingUtilities.SetDefaultHashType();

            using (Logger.SetupEventListener(EventLevel.Informational))
            {
                var logger = Logger.CreateLogger();

                arguments.CommandLineConfig.Engine.Phase = arguments.Analyzers.Max(a => a.RequiredPhases);
                // This needs to be passed in as a path through environment variable because it changes every
                if (!WorkspaceBuilder.TryBuildWorkspaceAndCollectFilesToAnalyze(
                        logger,
                        m_pathTable,
                        arguments.CommandLineConfig,
                        arguments.Analyzers.Any(a => a.SerializeUsingTopSort),
                        out var workspace,
                        out var pipGraph,
                        out var filesToAnalyze,
                        out var context))
                {
                    return(1);
                }

                foreach (var analyzer in arguments.Analyzers)
                {
                    if (!analyzer.SetSharedState(arguments, context, logger, workspace, pipGraph))
                    {
                        return(1);
                    }
                }

                if (arguments.Fix && arguments.Analyzers.Last().Kind != AnalyzerKind.PrettyPrint)
                {
                    logger.FixRequiresPrettyPrint(context.LoggingContext);
                }

                int errorCount = 0;

                // TODO: Make this multi-threaded. For now since we are developing keeping simple loop to maintain easy debugging.
                foreach (var kv in filesToAnalyze)
                {
                    foreach (var analyzer in arguments.Analyzers)
                    {
                        if (!analyzer.AnalyzeSourceFile(workspace, kv.Key, kv.Value))
                        {
                            Interlocked.Increment(ref errorCount);
                        }
                    }
                }

                foreach (var analyzer in arguments.Analyzers)
                {
                    analyzer.FinalizeAnalysis();
                }

                if (errorCount > 0)
                {
                    logger.AnalysisErrorSummary(context.LoggingContext, errorCount, arguments.Analyzers.Count);
                    return(1);
                }

                return(0);
            }
        }