public IEnumerable<ParameterSyntax> GetUnusedParameters(BaseMethodDeclarationSyntax method) { if (method.ParameterList.Parameters.Count == 0 || method.Body == null || !method.Body.ChildNodes().Any()) { return new ParameterSyntax[0]; } var bodyNodes = method.Body.ChildNodes(); var dataflow = _model.AnalyzeDataFlow(bodyNodes.First(), bodyNodes.Last()); var usedParameterNames = dataflow.DataFlowsIn .Where(x => x.Kind == SymbolKind.Parameter) .Select(x => x.Name) .AsArray(); var unusedParameters = method.ParameterList.Parameters .Where(p => !usedParameterNames.Contains(p.Identifier.ValueText)) .AsArray(); return unusedParameters; }
protected override Task<EvaluationResult> EvaluateImpl(SyntaxNode node, SemanticModel semanticModel, Solution solution) { var method = (MethodDeclarationSyntax)node; var analyzer = new SemanticAnalyzer(semanticModel); if (analyzer.GetUnusedParameters(method).Any()) { var snippet = method.ToFullString(); return Task.FromResult(new EvaluationResult { Snippet = snippet }); } return Task.FromResult((EvaluationResult)null); }