Example #1
0
        public static PhpToken[] GetBlock(PhpToken[] tokens, int index)
        {
            var start = index;

            if (tokens[index].TokenType != PhpTokenType.LeftBrace)
            {
                throw new InvalidOperationException("Block must begin with a left brace.");
            }

            int depth = 1;

            while (depth != 0)
            {
                var t = tokens[++index];

                if (t.TokenType == PhpTokenType.LeftBrace)
                {
                    depth++;
                }
                else if (t.TokenType == PhpTokenType.RightBrace)
                {
                    depth--;
                }
            }

            var tokenCount  = index - start + 1;
            var blockTokens = new PhpToken[tokenCount];

            Array.Copy(tokens, start, blockTokens, 0, tokenCount);

            return(blockTokens);
        }
Example #2
0
        protected string GetSurroundingCode(string code, PhpToken token)
        {
            var line  = code.GetLineNumber(token.Index);
            var code2 = code.InsertLineNumbers();
            var index = code2.GetLineIndex(line);

            return(code2.GetSurroundingLines(index, 9, 9));
        }
Example #3
0
        public void Set(ref string PHP)
        {
            var lexer  = new PhpLexer(PHP);
            var tokens = lexer.GetTokens().ToArray();
            var unk    = tokens.Where(x => x.TokenType == PhpTokenType.Unknown);

#if DEBUG
            if (unk.Any())
            {
                throw new InvalidOperationException();
            }
#endif

            var funcTokens = StartDelimiter == '(' ?
                             PhpParser.GetGlobalFunctionCallIds(tokens) :
                             PhpParser.GetArrayAccesses(tokens);

            for (int i = funcTokens.Length - 1; i >= 0; i--)
            {
                if (funcTokens[i].Lexeme != FunctionName)
                {
                    continue;
                }

                if (StartDelimiter == '(')
                {
                    PHP = PHP.Remove(funcTokens[i].Index, funcTokens[i].Lexeme.Length);
                    PHP = PHP.Insert(funcTokens[i].Index, ReplacementName);
                }
                else
                {
                    var      tokenIndex = Array.IndexOf(tokens, tokens.Single(x => x.Index == funcTokens[i].Index));
                    PhpToken leftBracket = new PhpToken(), rightBracket = new PhpToken();
                    for (int j = tokenIndex + 1; j < tokens.Length; j++)
                    {
                        if (tokens[j].TokenType == PhpTokenType.LeftBracket)
                        {
                            leftBracket = tokens[j];
                        }
                        else if (tokens[j].TokenType == PhpTokenType.RightBracket)
                        {
                            rightBracket = tokens[j];
                            break;
                        }
                    }
                    if (leftBracket.TokenType != PhpTokenType.LeftBracket)
                    {
                        continue;
                    }

                    PHP = PHP.Insert(rightBracket.Index, ")");
                    PHP = PHP.Insert(leftBracket.Index + 1, ReplacementName + "(");
                }
            }
        }
        public static void IsValid(TokenPairs pairs)
        {
            var text     = string.Join("", pairs.Select(pair => pair.Value).ToArray());
            var lexer    = new PhpLexer(text);
            int index    = 0;
            var expected = pairs.Select(pair =>
            {
                var token = new PhpToken(pair.Key, pair.Value, index);
                index    += pair.Value.Length;
                return(token);
            });
            List <PhpToken> actual = lexer.GetTokens();

            CollectionAssert.AreEqual(expected, actual);
        }
 protected override void AnalyzeCore(PhpToken token)
 {
     if (token.TokenType == PhpTokenType.WhiteSpace ||
         token.TokenType == PhpTokenType.Comment)
     {
         return;
     }
     else if (State == 0 &&
              token.TokenType == PhpTokenType.Variable &&
              PhpName.Superglobals.Contains(token.Lexeme))
     {
         AddExpressionToken();
     }
     else if (State == 1 && token.TokenType == PhpTokenType.LeftBracket)
     {
         State++;
     }
     else if (State == 2 && token.TokenType == PhpTokenType.String)
     {
         AddExpressionToken();
     }
     else if (State == 3 && token.TokenType == PhpTokenType.RightBracket)
     {
         State++;
     }
     else if (State == 4 && _operators.Contains(token.TokenType))
     {
         AddExpressionToken();
     }
     else if (State == 5 && token.TokenType == PhpTokenType.String)
     {
         AddExpressionToken();
         AddExpression();
     }
     else
     {
         NewExpression();
     }
 }
        protected override void AnalyzeCore(PhpToken token)
        {
            if (token.TokenType == PhpTokenType.WhiteSpace ||
                token.TokenType == PhpTokenType.Comment)
            {
                return;
            }
            else if (State == 0 && token.TokenType == PhpTokenType.switchKeyword)
            {
                State++;
            }
            else if (State == 1 && token.TokenType == PhpTokenType.LeftParenthesis)
            {
                State++;
            }
            else if (State == 2 &&
                     token.TokenType == PhpTokenType.Variable &&
                     PhpName.Superglobals.Contains(token.Lexeme))
            {
                AddExpressionToken();
            }
            else if (State == 3 && token.TokenType == PhpTokenType.LeftBracket)
            {
                State++;
            }
            else if (State == 4 && token.TokenType == PhpTokenType.String)
            {
                AddExpressionToken();
            }
            else if (State == 5 && token.TokenType == PhpTokenType.RightBracket)
            {
                State++;
            }
            else if (State == 6 && token.TokenType == PhpTokenType.RightParenthesis)
            {
                State++;
            }
            else if (State == 7)
            {
                if (token.TokenType == PhpTokenType.RightBrace)
                {
                    AddExpression();
                }
                else if (token.TokenType == PhpTokenType.caseKeyword)
                {
                    State++;
                }
            }
            else if (State == 8)
            {
                if (token.TokenType == PhpTokenType.String)
                {
                    AddExpressionToken();
                }

                State = 7;
            }
            else
            {
                NewExpression();
            }
        }
Example #7
0
 protected abstract void AnalyzeCore(PhpToken token);
Example #8
0
 public void Analyze(PhpToken token)
 {
     _currentToken = token;
     AnalyzeCore(token);
 }
Example #9
0
 public FunctionCall(PhpToken id, PhpToken[] parameters)
 {
     Id          = id;
     ParamTokens = parameters;
 }
        public void Token_ToString()
        {
            var token = new PhpToken(PhpTokenType.OpenTag, "<?", 0);

            Assert.AreEqual("[0] OpenTag: <?", token.ToString());
        }
Example #11
0
 protected StaticAnalysisAlert CreateAlert(string code, PhpToken token)
 {
     return(new StaticAnalysisAlert(Name,
                                    code.GetLineNumber(token.Index) + 1,
                                    GetSurroundingCode(code, token)));
 }