コード例 #1
0
        public static ImmutableDictionary <ProjectId, CodeMetricsInfo> CountLinesInParallel(
            IEnumerable <Project> projects,
            LinesOfCodeKind kind,
            CodeMetricsOptions options          = null,
            CancellationToken cancellationToken = default)
        {
            var codeMetrics = new ConcurrentBag <(ProjectId projectId, CodeMetricsInfo codeMetrics)>();

            Parallel.ForEach(projects, project =>
            {
                ICodeMetricsService service = MefWorkspaceServices.Default.GetService <ICodeMetricsService>(project.Language);

                CodeMetricsInfo projectMetrics = (service != null)
                    ? service.CountLinesAsync(project, kind, options, cancellationToken).Result
                    : CodeMetricsInfo.NotAvailable;

                codeMetrics.Add((project.Id, codeMetrics: projectMetrics));
            });
コード例 #2
0
        private static async Task CountLogicalLinesAsync(Project project, ICodeMetricsService service, CodeMetricsOptions options, CancellationToken cancellationToken)
        {
            WriteLine($"Count logical lines for '{project.Name}'", ConsoleColor.Cyan, Verbosity.Minimal);

            Stopwatch stopwatch = Stopwatch.StartNew();

            CodeMetricsInfo codeMetrics = await service.CountLinesAsync(project, LinesOfCodeKind.Logical, options, cancellationToken);

            stopwatch.Stop();

            WriteLine(Verbosity.Minimal);

            WriteMetrics(
                codeMetrics.CodeLineCount,
                codeMetrics.WhitespaceLineCount,
                codeMetrics.CommentLineCount,
                codeMetrics.PreprocessorDirectiveLineCount,
                codeMetrics.TotalLineCount);

            WriteLine(Verbosity.Minimal);
            WriteLine($"Done counting logical lines for '{project.FilePath}' in {stopwatch.Elapsed:mm\\:ss\\.ff}", Verbosity.Normal);
        }