diff --git a/ReSharper.FSharp/src/FSharp.Psi/src/Resolve/FSharpParameterUtil.cs b/ReSharper.FSharp/src/FSharp.Psi/src/Resolve/FSharpParameterUtil.cs index 92524ca1ab..2ac4395e30 100644 --- a/ReSharper.FSharp/src/FSharp.Psi/src/Resolve/FSharpParameterUtil.cs +++ b/ReSharper.FSharp/src/FSharp.Psi/src/Resolve/FSharpParameterUtil.cs @@ -145,5 +145,19 @@ public static IEnumerable> GetParameterNames(this ITypeUsage ITupleTypeUsage tuplePat => tuplePat.Items.SelectMany(GetParameterNames), _ => EmptyList>.Enumerable }; + + public static IReadOnlyList> GetParametersGroups(this IBinding binding) + { + var parameters = binding.ParameterPatterns.Select(GetParameterNames); + var bodyExpr = binding.Expression; + + while (bodyExpr.IgnoreInnerParens() is ILambdaExpr lambdaExpr) + { + parameters = parameters.Union(lambdaExpr.Patterns.Select(GetParameterNames)); + bodyExpr = lambdaExpr.Expression; + } + + return parameters.Select(t => t.ToIReadOnlyList()).ToIReadOnlyList(); + } } }