private static SubpatternSyntax?TrySimplify(SubpatternSyntax currentSubpattern) { if (!SimplifyPropertyPatternHelpers.IsSimplifiable(currentSubpattern, out var innerSubpattern, out var outerExpressionColon)) { return(null); } // attempt to simplify the inner pattern we're pointing at as well (that way if the user // invokes the fix on a top level property, we collapse as far inwards as possible). innerSubpattern = TrySimplify(innerSubpattern) ?? innerSubpattern; var innerExpressionColon = innerSubpattern.ExpressionColon; if (!SimplifyPropertyPatternHelpers.IsMergable(outerExpressionColon.Expression) || !SimplifyPropertyPatternHelpers.IsMergable(innerExpressionColon?.Expression)) { return(null); } var merged = Merge(outerExpressionColon, innerExpressionColon); if (merged == null) { return(null); } return(currentSubpattern.WithExpressionColon(merged) .WithPattern(innerSubpattern.Pattern) .WithAdditionalAnnotations(Formatter.Annotation)); }
private void AnalyzeSubpattern(SyntaxNodeAnalysisContext syntaxContext) { // Bail immediately if the user has disabled this feature. var styleOption = syntaxContext.GetCSharpAnalyzerOptions().PreferExtendedPropertyPattern; if (!styleOption.Value) { return; } var severity = styleOption.Notification.Severity; var subpattern = (SubpatternSyntax)syntaxContext.Node; if (!SimplifyPropertyPatternHelpers.IsSimplifiable(subpattern, out _, out var expressionColon)) { return; } // If the diagnostic is not hidden, then just place the user visible part // on the local being initialized with the lambda. syntaxContext.ReportDiagnostic(DiagnosticHelper.Create( Descriptor, expressionColon.GetLocation(), severity, ImmutableArray.Create(subpattern.GetLocation()), properties: null)); }