Beispiel #1
0
        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));
        }