Exemple #1
0
        private static bool CanRefactor(
            SeparatedSyntaxListSelection <ArgumentSyntax> selection,
            SemanticModel semanticModel,
            CancellationToken cancellationToken)
        {
            for (int i = selection.StartIndex; i <= selection.EndIndex; i++)
            {
                ArgumentSyntax argument = selection.Items[i];

                NameColonSyntax nameColon = argument.NameColon;

                if (nameColon == null ||
                    nameColon.IsMissing)
                {
                    IParameterSymbol parameterSymbol = semanticModel.DetermineParameter(
                        argument,
                        allowParams: false,
                        cancellationToken: cancellationToken);

                    if (parameterSymbol != null)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Exemple #2
0
        private void ReportDiagnosticsIfNeeded(NameColonSyntax nameColon, SyntaxNodeAnalysisContext context, AnalyzerOptions options, SyntaxTree syntaxTree, CancellationToken cancellationToken)
        {
            if (!nameColon.Parent.IsKind(SyntaxKind.Argument, out ArgumentSyntax? argument))
            {
                return;
            }

            var parseOptions = (CSharpParseOptions)syntaxTree.Options;
            var preference   = options.GetOption(
                CodeStyleOptions.PreferInferredTupleNames, context.Compilation.Language, syntaxTree, cancellationToken);

            if (!preference.Value ||
                !CSharpInferredMemberNameReducer.CanSimplifyTupleElementName(argument, parseOptions))
            {
                return;
            }

            // Create a normal diagnostic
            context.ReportDiagnostic(
                DiagnosticHelper.Create(
                    Descriptor,
                    nameColon.GetLocation(),
                    preference.Notification.Severity,
                    additionalLocations: null,
                    properties: null));

            // Also fade out the part of the name-colon syntax
            RoslynDebug.AssertNotNull(UnnecessaryWithoutSuggestionDescriptor);
            var fadeSpan = TextSpan.FromBounds(nameColon.Name.SpanStart, nameColon.ColonToken.Span.End);

            context.ReportDiagnostic(
                Diagnostic.Create(
                    UnnecessaryWithoutSuggestionDescriptor,
                    syntaxTree.GetLocation(fadeSpan)));
        }
Exemple #3
0
        private void ReportDiagnosticsIfNeeded(NameColonSyntax nameColon, SyntaxNodeAnalysisContext context, OptionSet optionSet, SyntaxTree syntaxTree)
        {
            if (!nameColon.IsParentKind(SyntaxKind.Argument))
            {
                return;
            }

            var argument     = (ArgumentSyntax)nameColon.Parent;
            var parseOptions = (CSharpParseOptions)syntaxTree.Options;

            if (!optionSet.GetOption(CSharpCodeStyleOptions.PreferInferredTupleNames).Value ||
                !CSharpInferredMemberNameReducer.CanSimplifyTupleElementName(argument, parseOptions))
            {
                return;
            }

            // Create a normal diagnostic
            context.ReportDiagnostic(
                Diagnostic.Create(GetDescriptorWithSeverity(
                                      optionSet.GetOption(CSharpCodeStyleOptions.PreferInferredTupleNames).Notification.Value),
                                  nameColon.GetLocation()));

            // Also fade out the part of the name-colon syntax
            var fadeSpan = TextSpan.FromBounds(nameColon.Name.SpanStart, nameColon.ColonToken.Span.End);

            context.ReportDiagnostic(
                Diagnostic.Create(
                    UnnecessaryWithoutSuggestionDescriptor,
                    syntaxTree.GetLocation(fadeSpan)));
        }
Exemple #4
0
 private Doc PrintNameColonSyntax(NameColonSyntax node)
 {
     return(Concat(
                this.PrintSyntaxToken(node.Name.Identifier),
                this.PrintSyntaxToken(node.ColonToken, " ")
                ));
 }
        private void ReportDiagnosticsIfNeeded(NameColonSyntax nameColon, SyntaxNodeAnalysisContext context, AnalyzerOptions options, SyntaxTree syntaxTree, CancellationToken cancellationToken)
        {
            if (!nameColon.Parent.IsKind(SyntaxKind.Argument, out ArgumentSyntax? argument))
            {
                return;
            }

            var parseOptions = (CSharpParseOptions)syntaxTree.Options;
            var preference   = options.GetOption(
                CodeStyleOptions2.PreferInferredTupleNames, context.Compilation.Language, syntaxTree, cancellationToken);

            if (!preference.Value ||
                !CSharpInferredMemberNameSimplifier.CanSimplifyTupleElementName(argument, parseOptions))
            {
                return;
            }

            // Create a normal diagnostic
            var fadeSpan = TextSpan.FromBounds(nameColon.Name.SpanStart, nameColon.ColonToken.Span.End);

            context.ReportDiagnostic(
                DiagnosticHelper.CreateWithLocationTags(
                    Descriptor,
                    nameColon.GetLocation(),
                    preference.Notification.Severity,
                    additionalLocations: ImmutableArray <Location> .Empty,
                    additionalUnnecessaryLocations: ImmutableArray.Create(syntaxTree.GetLocation(fadeSpan))));
        }
Exemple #6
0
 public static Doc Print(NameColonSyntax node)
 {
     return(Doc.Concat(
                Token.Print(node.Name.Identifier),
                Token.PrintWithSuffix(node.ColonToken, " ")
                ));
 }
Exemple #7
0
 public override void AddChildren()
 {
     Kind                      = Node.Kind();
     _nameColon                = ((ArgumentSyntax)Node).NameColon;
     _nameColonIsChanged       = false;
     _refOrOutKeyword          = ((ArgumentSyntax)Node).RefOrOutKeyword;
     _refOrOutKeywordIsChanged = false;
     _expression               = ((ArgumentSyntax)Node).Expression;
     _expressionIsChanged      = false;
 }
 public override void AddChildren()
 {
     Kind                 = Node.Kind();
     _nameEquals          = ((AttributeArgumentSyntax)Node).NameEquals;
     _nameEqualsIsChanged = false;
     _nameColon           = ((AttributeArgumentSyntax)Node).NameColon;
     _nameColonIsChanged  = false;
     _expression          = ((AttributeArgumentSyntax)Node).Expression;
     _expressionIsChanged = false;
 }
Exemple #9
0
        public override void VisitNameColon(NameColonSyntax node)
        {
            if (!PreVisit(node))
            {
                return;
            }

            node.Name?.Accept(this);

            base.VisitNameColon(node);

            PostVisit(node);
        }
        private static bool CanRefactor(SeparatedSyntaxListSelection <ArgumentSyntax> selection)
        {
            for (int i = 0; i < selection.Count; i++)
            {
                NameColonSyntax nameColon = selection[i].NameColon;

                if (nameColon?.IsMissing == false)
                {
                    return(true);
                }
            }

            return(false);
        }
        private static bool CanRefactor(SeparatedSyntaxListSelection <ArgumentSyntax> selection)
        {
            for (int i = selection.StartIndex; i <= selection.EndIndex; i++)
            {
                NameColonSyntax nameColon = selection.Items[i].NameColon;

                if (nameColon?.IsMissing == false)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemple #12
0
        private SubpatternSyntax ParseSubpatternElement()
        {
            NameColonSyntax nameColon = null;

            if (this.CurrentToken.Kind == SyntaxKind.IdentifierToken && this.PeekToken(1).Kind == SyntaxKind.ColonToken)
            {
                var name  = this.ParseIdentifierName();
                var colon = this.EatToken(SyntaxKind.ColonToken);
                nameColon = _syntaxFactory.NameColon(name, colon);
            }

            var pattern = ParsePattern(Precedence.Ternary);

            return(this._syntaxFactory.Subpattern(nameColon, pattern));
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitNameColon(NameColonSyntax node)
 {
     this.OnNodeVisited(node);
     if (!this.traverseRootOnly) base.VisitNameColon(node);
 }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="node"></param>
 public override sealed void VisitNameColon(NameColonSyntax node)
 {
     this.OnNodeVisited(node, this.type.IsInstanceOfType(node));
     base.VisitNameColon(node);
 }
Exemple #15
0
        private static int TryDetermineParameterIndex(NameColonSyntax argumentNameColon, IMethodSymbol method)
        {
            var name = argumentNameColon.Name.Identifier.ValueText;

            return(method.Parameters.IndexOf(p => p.Name == name));
        }
Exemple #16
0
            public override SyntaxNode VisitInvocationExpression(InvocationExpressionSyntax node)
            {
                // Note: According to specification, argument is either at its position (as declared), or it is a named argument
                // That is, named argument specification can appear only after all fixed arguments have been specified

                // Considers:
                // foo(a: 1, b: 2) -> foo(b: 2)
                // foo(b: 2, a: 1) -> foo(b: 2)
                // foo(1, b: 2) -> foo(b: 2)
                // foo(1, 2) -> foo(2)
                // foo(a: 1, b: foo(a: 1, b: 2))

                // Check does invocation refer to updated method
                ISymbol referencedMethod = this.model.GetSymbolInfo(node.Expression, this.cancellationToken).Symbol;

                if (referencedMethod != null && referencedMethod.Equals(this.methodSymbol))
                {
                    SeparatedSyntaxList <ArgumentSyntax> newArgumentSeparatedList = Syntax.SeparatedList <ArgumentSyntax>();

                    // Check is the removed parameter referenced by name within method invocation, e.g. foo(1, 2, >a:2<)
                    // Note: Must be a direct child! Not nested descendant like foo(a: foo(>a:<1)) !

                    NameColonSyntax namedArgument = null;
                    foreach (ArgumentSyntax argument in node.ArgumentList.Arguments)
                    {
                        namedArgument = argument.ChildNodes()
                                        .OfType <NameColonSyntax>()
                                        .FirstOrDefault(
                            (n) =>
                        {
                            ISymbol nameSymbol = this.model.GetSymbolInfo(n.Identifier).Symbol;
                            return(nameSymbol != null && nameSymbol.Equals(this.parameterSymbol));
                        });
                        if (namedArgument != null)
                        {
                            break;
                        }
                    }

                    int argumentOrder = 0;
                    foreach (ArgumentSyntax argument in node.ArgumentList.Arguments)
                    {
                        if (namedArgument != null && argument.ChildNodes().Contains(namedArgument))
                        {
                            // Remove the named argument. That is, do not add to new argument list
                        }
                        else if (namedArgument == null && argumentOrder == this.order)
                        {
                            // Remove the named argument. That is, do not add to new argument list
                        }
                        else
                        {
                            // Some other argument. Process it recursively.
                            // Considers:
                            // foo(a: 1, b: foo(a: 1, b: 2))
                            ArgumentSyntax processedArgument = (ArgumentSyntax)base.VisitArgument(argument);

                            if (processedArgument != null)
                            {
                                newArgumentSeparatedList = newArgumentSeparatedList.Add(processedArgument);
                            }
                        }

                        ++argumentOrder;
                    }

                    InvocationExpressionSyntax newInvocation = node.WithArgumentList(Syntax.ArgumentList(newArgumentSeparatedList))
                                                               .WithAdditionalAnnotations(CodeAnnotations.Formatting);
                    return(newInvocation);
                }

                return(base.VisitInvocationExpression(node));
            }
Exemple #17
0
 public override void VisitNameColon(NameColonSyntax node)
 {
     throw new NotImplementedException();
 }
Exemple #18
0
        public override void VisitNameColon(NameColonSyntax node)
        {
            node.Name?.Accept(this);

            base.VisitNameColon(node);
        }
 public override void VisitNameColon(NameColonSyntax node)
 {
     //base.VisitNameColon(node);
 }
 public TameNameColonSyntax(NameColonSyntax node)
 {
     Node = node;
     AddChildren();
 }
        public void VisitNameColon(NameColonSyntax node)
        {
            if (node == null)
                throw new ArgumentNullException("node");

            node.Validate();

            node.Name.Accept(this);
            _writer.WriteSyntax(Syntax.Colon);
            _writer.WriteSpace();
        }
Exemple #22
0
 public ArgumentSyntax Update(NameColonSyntax nameColon, SyntaxToken outKeyword, VariableDeclarationSyntax declaration)
 {
     return this.Update(nameColon, outKeyword, (CSharpSyntaxNode)declaration);
 }
Exemple #23
0
 public ArgumentSyntax Update(NameColonSyntax nameColon, SyntaxToken refOrOutKeyword, ExpressionSyntax expression)
 {
     return this.Update(nameColon, refOrOutKeyword, (CSharpSyntaxNode)expression) ;
 }
            private IEnumerable<ITypeSymbol> InferTypeInNameColon(NameColonSyntax nameColon, SyntaxToken previousToken)
            {
                if (previousToken != nameColon.ColonToken)
                {
                    // Must follow the colon token.
                    return SpecializedCollections.EmptyEnumerable<ITypeSymbol>();
                }

                var argumentSyntax = nameColon.Parent as ArgumentSyntax;
                if (argumentSyntax != null)
                {
                    return InferTypeInArgument(argumentSyntax);
                }

                return SpecializedCollections.EmptyEnumerable<ITypeSymbol>();
            }
Exemple #25
0
        public override Evaluation VisitNameColon(NameColonSyntax node)
        {
            node.Name?.Accept <Evaluation>(this);

            return(base.VisitNameColon(node));
        }
 //
 // Summary:
 //     Called when the visitor visits a NameColonSyntax node.
 public virtual void VisitNameColon(NameColonSyntax node);
        public static int IndexOfFirstFixableParameter(
            BaseArgumentListSyntax argumentList,
            SeparatedSyntaxList <ArgumentSyntax> arguments,
            SemanticModel semanticModel,
            CancellationToken cancellationToken)
        {
            int firstIndex = -1;

            for (int i = 0; i < arguments.Count; i++)
            {
                if (arguments[i].NameColon != null)
                {
                    firstIndex = i;
                    break;
                }
            }

            if (firstIndex != -1 &&
                firstIndex != arguments.Count - 1)
            {
                ISymbol symbol = semanticModel.GetSymbol(argumentList.Parent, cancellationToken);

                if (symbol != null)
                {
                    ImmutableArray <IParameterSymbol> parameters = symbol.ParametersOrDefault();

                    Debug.Assert(!parameters.IsDefault, symbol.Kind.ToString());

                    if (!parameters.IsDefault &&
                        parameters.Length == arguments.Count)
                    {
                        for (int i = firstIndex; i < arguments.Count; i++)
                        {
                            ArgumentSyntax argument = arguments[i];

                            NameColonSyntax nameColon = argument.NameColon;

                            if (nameColon == null)
                            {
                                break;
                            }

                            if (!string.Equals(
                                    nameColon.Name.Identifier.ValueText,
                                    parameters[i].Name,
                                    StringComparison.Ordinal))
                            {
                                int fixableIndex = i;

                                i++;

                                while (i < arguments.Count)
                                {
                                    if (arguments[i].NameColon == null)
                                    {
                                        break;
                                    }

                                    i++;
                                }

                                return(fixableIndex);
                            }
                        }
                    }
                }
            }

            return(-1);
        }
Exemple #28
0
 public override SyntaxNode VisitNameColon(NameColonSyntax node)
 {
     node = (NameColonSyntax)base.VisitNameColon(node);
     Classes.Add(node);
     return node;
 }
Exemple #29
0
 public override LuaSyntaxNode VisitNameColon(NameColonSyntax node)
 {
     throw new InvalidOperationException();
 }
Exemple #30
0
 public override void VisitNameColon(NameColonSyntax node)
 {
 }
Exemple #31
0
 public override void VisitNameColon(NameColonSyntax node)
 {
     throw new NotSupportedException();
 }