private async Task<IMemberMetric> CalculateMemberMetric(SyntaxNode syntaxNode)
{
var analyzer = new HalsteadAnalyzer();
var halsteadMetrics = analyzer.Calculate(syntaxNode);
var memberName = _nameResolver.TryResolveMemberSignatureString(syntaxNode);
var source = CalculateClassCoupling(syntaxNode);
var complexity = CalculateCyclomaticComplexity(syntaxNode);
var linesOfCode = CalculateLinesOfCode(syntaxNode);
var numberOfParameters = CalculateNumberOfParameters(syntaxNode);
var numberOfLocalVariables = CalculateNumberOfLocalVariables(syntaxNode);
var maintainabilityIndex = CalculateMaintainablityIndex(complexity, linesOfCode, halsteadMetrics);
var afferentCoupling = await CalculateAfferentCoupling(syntaxNode).ConfigureAwait(false);
var location = syntaxNode.GetLocation();
var lineNumber = location.GetLineSpan().StartLinePosition.Line;
var filePath = location.SourceTree == null ? string.Empty : location.SourceTree.FilePath;
var accessModifier = GetAccessModifier(syntaxNode);
IMemberDocumentation documentation = null;
if (syntaxNode.SyntaxTree == Model.SyntaxTree)
{
var symbol = Model.GetDeclaredSymbol(syntaxNode);
documentation = await _documentationFactory.Create(symbol, CancellationToken.None);
}
return new MemberMetric(
filePath,
accessModifier,
halsteadMetrics,
lineNumber,
linesOfCode,
maintainabilityIndex,
complexity,
memberName,
source.AsArray(),
numberOfParameters,
numberOfLocalVariables,
afferentCoupling,
documentation);
}