private async Task<Tuple<Compilation, IEnumerable<IMemberMetric>>> CalculateMemberMetrics(Compilation compilation, TypeDeclaration typeNodes, Solution solution)
		{
			var comp = compilation;
			var metrics = typeNodes.SyntaxNodes
				.Select(async info =>
				{
					var tuple = await VerifyCompilation(comp, info).ConfigureAwait(false);
					var semanticModel = tuple.Item2;
					comp = tuple.Item1;
					var calculator = new MemberMetricsCalculator(semanticModel, solution, _memberDocumentationFactory);

					return await calculator.Calculate(info).ConfigureAwait(false);
				});
			var results = await Task.WhenAll(metrics).ConfigureAwait(false);
			return new Tuple<Compilation, IEnumerable<IMemberMetric>>(comp, results.SelectMany(x => x).AsArray());
		}
		private async Task<Tuple<Compilation, ITypeMetric>> CalculateTypeMetrics(Solution solution, Compilation compilation, TypeDeclaration typeNodes, IEnumerable<IMemberMetric> memberMetrics)
		{
			if (typeNodes.SyntaxNodes.Any())
			{
				var tuple = await VerifyCompilation(compilation, typeNodes.SyntaxNodes.First()).ConfigureAwait(false);
				var semanticModel = tuple.Item2;
				compilation = tuple.Item1;
				var typeNode = tuple.Item3;
				var calculator = new TypeMetricsCalculator(semanticModel, solution, _typeDocumentationFactory);
				var metrics = await calculator.CalculateFrom(typeNode, memberMetrics);
				return new Tuple<Compilation, ITypeMetric>(
					compilation,
					metrics);
			}

			return null;
		}