Esempio n. 1
0
    public static bool PrecedenceCouldChange(this VBasic.VisualBasicSyntaxNode node)
    {
        bool parentIsBinaryExpression       = node is VBSyntax.BinaryExpressionSyntax;
        bool parentIsLambda                 = node.Parent is VBSyntax.LambdaExpressionSyntax;
        bool parentIsNonArgumentExpression  = node.Parent is VBSyntax.ExpressionSyntax && node.Parent is not VBSyntax.ArgumentSyntax;
        bool parentIsParenthesis            = node.Parent is VBSyntax.ParenthesizedExpressionSyntax;
        bool parentIsMemberAccessExpression = node.Parent is VBSyntax.MemberAccessExpressionSyntax;

        return(parentIsMemberAccessExpression || parentIsNonArgumentExpression && !parentIsBinaryExpression && !parentIsLambda && !parentIsParenthesis);
    }
Esempio n. 2
0
    private async Task <SyntaxList <StatementSyntax> > AddLocalVariablesAsync(VBasic.VisualBasicSyntaxNode node, VBasic.SyntaxKind exitableType = default, bool isBreakableInCs = false)
    {
        _additionalLocals.PushScope(exitableType, isBreakableInCs);
        try {
            var convertedStatements = await _wrappedVisitor.Visit(node);

            var withLocals = await _additionalLocals.CreateLocalsAsync(node, convertedStatements, _generatedNames, _semanticModel);

            var allStatements = _additionalLocals.CreateStatements(node, withLocals, _generatedNames, _semanticModel);

            if (isBreakableInCs && exitableType == VBasic.SyntaxKind.TryKeyword)
            {
                var doOnce = SyntaxFactory.DoStatement(SyntaxFactory.Block(allStatements), CommonConversions.Literal(false));
                allStatements = SyntaxFactory.SingletonList <StatementSyntax>(doOnce);
            }
            return(allStatements);
        } finally {
            _additionalLocals.PopScope();
        }
    }
Esempio n. 3
0
 public static CSSyntax.ExpressionSyntax ParenthesizeIfPrecedenceCouldChange(this VBasic.VisualBasicSyntaxNode node, CSSyntax.ExpressionSyntax expression)
 {
     return(PrecedenceCouldChange(node) ? SyntaxFactory.ParenthesizedExpression(expression) : expression);
 }
Esempio n. 4
0
 private static List <int> GetScopeStarts(VBasic.VisualBasicSyntaxNode node)
 {
     return(node.GetAncestorOrThis <VBSyntax.StatementSyntax>().DescendantNodesAndSelf()
            .OfType <VBSyntax.StatementSyntax>().Select(n => n.SpanStart).ToList());
 }
Esempio n. 5
0
    public static string GetUniqueVariableNameInScope(SemanticModel semanticModel, HashSet <string> generatedNames, VBasic.VisualBasicSyntaxNode node, string variableNameBase)
    {
        // Need to check not just the symbols this node has access to, but whether there are any nested blocks which have access to this node and contain a conflicting name
        var scopeStarts = GetScopeStarts(node);

        return(GenerateUniqueVariableNameInScope(semanticModel, generatedNames, variableNameBase, scopeStarts));
    }