예제 #1
0
        public static Boolean CheckCompilationErrors(String filename, Compilation compilation, OutputImpl output)
        {
            output.WriteInfoLine("Checking compilation for errors and warnings:");
            IList <Diagnostic> diagnostics = compilation.GetDiagnostics();

            Diagnostic[] diagnosticErrors   = diagnostics.Where(d => d.Severity == DiagnosticSeverity.Error).ToArray();
            Diagnostic[] diagnosticWarnings = diagnostics.Where(d => d.Severity == DiagnosticSeverity.Warning).ToArray();
            Boolean      hasErrors          = false;

            output.WriteInfoLine($"Found {diagnosticErrors.Length} errors in the compilation");
            foreach (Diagnostic diagnostic in diagnosticErrors)
            {
                output.WriteErrorLine($"Found following error in the compilation of the {filename} entity: {diagnostic.GetMessage()}");
                hasErrors = true;
            }
            output.WriteInfoLine($"Found {diagnosticWarnings.Length} warnings in the compilation");
            foreach (Diagnostic diagnostic in diagnosticWarnings)
            {
                output.WriteWarningLine($"Found following warning in the compilation: {diagnostic.GetMessage()}");
            }
            return(!hasErrors);
        }
예제 #2
0
        private static Boolean MainImpl(String[] args)
        {
            AppArgs appArgs = AppArgsParser.Parse(args);

            switch (appArgs.Mode)
            {
            case AppUsageMode.Help:
                Console.WriteLine(AppDescription);
                return(true);

            case AppUsageMode.Version:
                Console.WriteLine(VersionNumber);
                return(true);

            case AppUsageMode.Analysis:
                Console.OutputEncoding = Encoding.UTF8;
                IConfig externalConfig = ConfigFactory.Create(appArgs);
                if (externalConfig == null)
                {
                    Console.Error.WriteLine(BadConfigMessage);
                    return(false);
                }
                OutputImpl            output    = new OutputImpl(Console.Out, Console.Error, appArgs.OutputLevel);
                ISourceProcessor      processor = SourceProcessorFactory.Create(appArgs.Source, externalConfig, output);
                IList <IFileAnalyzer> analyzers = AnalyzersFactory.Create(output);
                Boolean processResult           = processor.Process(analyzers);
                output.WriteInfoLine($"Result of analysis: analysis is {(processResult ? "succeeded" : "failed")}");
                return(processResult);

            case AppUsageMode.BadSource:
                Console.Error.WriteLine(BadSourceMessage);
                return(false);

            case AppUsageMode.BadConfig:
                Console.Error.WriteLine(BadConfigMessage);
                return(false);

            case AppUsageMode.BadAppUsage:
            case AppUsageMode.Unknown:
                Console.Error.WriteLine(BadUsageMessage);
                Console.WriteLine(AppDescription);
                return(false);

            default:
                throw new InvalidOperationException();
            }
        }