public async Task <CodacyMetricsResult> Analyze(string file, CancellationToken cancellationToken) { var result = new CodacyMetricsResult { Filename = file }; var solution = CompilationHelper.GetSolutionFromFile(DefaultSourceFolder + file); var compilation = await solution.Projects.First().GetCompilationAsync(cancellationToken); var syntaxTree = compilation.SyntaxTrees.First(); var document = solution.GetDocument(syntaxTree); var semanticModel = await document.GetSemanticModelAsync(cancellationToken); var metrics = new CSharpMetrics(syntaxTree, semanticModel); result.Loc = metrics.CodeLines.Count(); result.Cloc = metrics.GetComments(true).NonBlank.Count(); result.NrMethods = metrics.FunctionCount; result.NrClasses = metrics.ClassCount; result.LineComplexities = metrics.FunctionNodes.GroupBy(row => row.GetLocation().GetMappedLineSpan().Span.Start.Line + 1) .Select(nodeGroup => { var lineComplexity = nodeGroup.Max(num => metrics.GetCyclomaticComplexity(num)); result.Complexity = Math.Max(result.Complexity, lineComplexity); return(new LineComplexity { Line = nodeGroup.Key, Value = lineComplexity }); }) .ToList(); return(result); }