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