@@ -1863,24 +1863,24 @@ discard block |
||
| 1863 | 1863 | |
| 1864 | 1864 | if ($token[0] === T_STRING) { |
| 1865 | 1865 | switch ($cacheKey) { |
| 1866 | - case 'false': |
|
| 1867 | - $newToken['type'] = 'T_FALSE'; |
|
| 1868 | - break; |
|
| 1869 | - case 'true': |
|
| 1870 | - $newToken['type'] = 'T_TRUE'; |
|
| 1871 | - break; |
|
| 1872 | - case 'null': |
|
| 1873 | - $newToken['type'] = 'T_NULL'; |
|
| 1874 | - break; |
|
| 1875 | - case 'self': |
|
| 1876 | - $newToken['type'] = 'T_SELF'; |
|
| 1877 | - break; |
|
| 1878 | - case 'parent': |
|
| 1879 | - $newToken['type'] = 'T_PARENT'; |
|
| 1880 | - break; |
|
| 1881 | - default: |
|
| 1882 | - $newToken['type'] = 'T_STRING'; |
|
| 1883 | - break; |
|
| 1866 | + case 'false': |
|
| 1867 | + $newToken['type'] = 'T_FALSE'; |
|
| 1868 | + break; |
|
| 1869 | + case 'true': |
|
| 1870 | + $newToken['type'] = 'T_TRUE'; |
|
| 1871 | + break; |
|
| 1872 | + case 'null': |
|
| 1873 | + $newToken['type'] = 'T_NULL'; |
|
| 1874 | + break; |
|
| 1875 | + case 'self': |
|
| 1876 | + $newToken['type'] = 'T_SELF'; |
|
| 1877 | + break; |
|
| 1878 | + case 'parent': |
|
| 1879 | + $newToken['type'] = 'T_PARENT'; |
|
| 1880 | + break; |
|
| 1881 | + default: |
|
| 1882 | + $newToken['type'] = 'T_STRING'; |
|
| 1883 | + break; |
|
| 1884 | 1884 | } |
| 1885 | 1885 | |
| 1886 | 1886 | $newToken['code'] = constant($newToken['type']); |
@@ -1922,87 +1922,87 @@ discard block |
||
| 1922 | 1922 | $newToken = []; |
| 1923 | 1923 | |
| 1924 | 1924 | switch ($token) { |
| 1925 | - case '{': |
|
| 1926 | - $newToken['type'] = 'T_OPEN_CURLY_BRACKET'; |
|
| 1927 | - break; |
|
| 1928 | - case '}': |
|
| 1929 | - $newToken['type'] = 'T_CLOSE_CURLY_BRACKET'; |
|
| 1930 | - break; |
|
| 1931 | - case '[': |
|
| 1932 | - $newToken['type'] = 'T_OPEN_SQUARE_BRACKET'; |
|
| 1933 | - break; |
|
| 1934 | - case ']': |
|
| 1935 | - $newToken['type'] = 'T_CLOSE_SQUARE_BRACKET'; |
|
| 1936 | - break; |
|
| 1937 | - case '(': |
|
| 1938 | - $newToken['type'] = 'T_OPEN_PARENTHESIS'; |
|
| 1939 | - break; |
|
| 1940 | - case ')': |
|
| 1941 | - $newToken['type'] = 'T_CLOSE_PARENTHESIS'; |
|
| 1942 | - break; |
|
| 1943 | - case ':': |
|
| 1944 | - $newToken['type'] = 'T_COLON'; |
|
| 1945 | - break; |
|
| 1946 | - case '.': |
|
| 1947 | - $newToken['type'] = 'T_STRING_CONCAT'; |
|
| 1948 | - break; |
|
| 1949 | - case ';': |
|
| 1950 | - $newToken['type'] = 'T_SEMICOLON'; |
|
| 1951 | - break; |
|
| 1952 | - case '=': |
|
| 1953 | - $newToken['type'] = 'T_EQUAL'; |
|
| 1954 | - break; |
|
| 1955 | - case '*': |
|
| 1956 | - $newToken['type'] = 'T_MULTIPLY'; |
|
| 1957 | - break; |
|
| 1958 | - case '/': |
|
| 1959 | - $newToken['type'] = 'T_DIVIDE'; |
|
| 1960 | - break; |
|
| 1961 | - case '+': |
|
| 1962 | - $newToken['type'] = 'T_PLUS'; |
|
| 1963 | - break; |
|
| 1964 | - case '-': |
|
| 1965 | - $newToken['type'] = 'T_MINUS'; |
|
| 1966 | - break; |
|
| 1967 | - case '%': |
|
| 1968 | - $newToken['type'] = 'T_MODULUS'; |
|
| 1969 | - break; |
|
| 1970 | - case '^': |
|
| 1971 | - $newToken['type'] = 'T_BITWISE_XOR'; |
|
| 1972 | - break; |
|
| 1973 | - case '&': |
|
| 1974 | - $newToken['type'] = 'T_BITWISE_AND'; |
|
| 1975 | - break; |
|
| 1976 | - case '|': |
|
| 1977 | - $newToken['type'] = 'T_BITWISE_OR'; |
|
| 1978 | - break; |
|
| 1979 | - case '~': |
|
| 1980 | - $newToken['type'] = 'T_BITWISE_NOT'; |
|
| 1981 | - break; |
|
| 1982 | - case '<': |
|
| 1983 | - $newToken['type'] = 'T_LESS_THAN'; |
|
| 1984 | - break; |
|
| 1985 | - case '>': |
|
| 1986 | - $newToken['type'] = 'T_GREATER_THAN'; |
|
| 1987 | - break; |
|
| 1988 | - case '!': |
|
| 1989 | - $newToken['type'] = 'T_BOOLEAN_NOT'; |
|
| 1990 | - break; |
|
| 1991 | - case ',': |
|
| 1992 | - $newToken['type'] = 'T_COMMA'; |
|
| 1993 | - break; |
|
| 1994 | - case '@': |
|
| 1995 | - $newToken['type'] = 'T_ASPERAND'; |
|
| 1996 | - break; |
|
| 1997 | - case '$': |
|
| 1998 | - $newToken['type'] = 'T_DOLLAR'; |
|
| 1999 | - break; |
|
| 2000 | - case '`': |
|
| 2001 | - $newToken['type'] = 'T_BACKTICK'; |
|
| 2002 | - break; |
|
| 2003 | - default: |
|
| 2004 | - $newToken['type'] = 'T_NONE'; |
|
| 2005 | - break; |
|
| 1925 | + case '{': |
|
| 1926 | + $newToken['type'] = 'T_OPEN_CURLY_BRACKET'; |
|
| 1927 | + break; |
|
| 1928 | + case '}': |
|
| 1929 | + $newToken['type'] = 'T_CLOSE_CURLY_BRACKET'; |
|
| 1930 | + break; |
|
| 1931 | + case '[': |
|
| 1932 | + $newToken['type'] = 'T_OPEN_SQUARE_BRACKET'; |
|
| 1933 | + break; |
|
| 1934 | + case ']': |
|
| 1935 | + $newToken['type'] = 'T_CLOSE_SQUARE_BRACKET'; |
|
| 1936 | + break; |
|
| 1937 | + case '(': |
|
| 1938 | + $newToken['type'] = 'T_OPEN_PARENTHESIS'; |
|
| 1939 | + break; |
|
| 1940 | + case ')': |
|
| 1941 | + $newToken['type'] = 'T_CLOSE_PARENTHESIS'; |
|
| 1942 | + break; |
|
| 1943 | + case ':': |
|
| 1944 | + $newToken['type'] = 'T_COLON'; |
|
| 1945 | + break; |
|
| 1946 | + case '.': |
|
| 1947 | + $newToken['type'] = 'T_STRING_CONCAT'; |
|
| 1948 | + break; |
|
| 1949 | + case ';': |
|
| 1950 | + $newToken['type'] = 'T_SEMICOLON'; |
|
| 1951 | + break; |
|
| 1952 | + case '=': |
|
| 1953 | + $newToken['type'] = 'T_EQUAL'; |
|
| 1954 | + break; |
|
| 1955 | + case '*': |
|
| 1956 | + $newToken['type'] = 'T_MULTIPLY'; |
|
| 1957 | + break; |
|
| 1958 | + case '/': |
|
| 1959 | + $newToken['type'] = 'T_DIVIDE'; |
|
| 1960 | + break; |
|
| 1961 | + case '+': |
|
| 1962 | + $newToken['type'] = 'T_PLUS'; |
|
| 1963 | + break; |
|
| 1964 | + case '-': |
|
| 1965 | + $newToken['type'] = 'T_MINUS'; |
|
| 1966 | + break; |
|
| 1967 | + case '%': |
|
| 1968 | + $newToken['type'] = 'T_MODULUS'; |
|
| 1969 | + break; |
|
| 1970 | + case '^': |
|
| 1971 | + $newToken['type'] = 'T_BITWISE_XOR'; |
|
| 1972 | + break; |
|
| 1973 | + case '&': |
|
| 1974 | + $newToken['type'] = 'T_BITWISE_AND'; |
|
| 1975 | + break; |
|
| 1976 | + case '|': |
|
| 1977 | + $newToken['type'] = 'T_BITWISE_OR'; |
|
| 1978 | + break; |
|
| 1979 | + case '~': |
|
| 1980 | + $newToken['type'] = 'T_BITWISE_NOT'; |
|
| 1981 | + break; |
|
| 1982 | + case '<': |
|
| 1983 | + $newToken['type'] = 'T_LESS_THAN'; |
|
| 1984 | + break; |
|
| 1985 | + case '>': |
|
| 1986 | + $newToken['type'] = 'T_GREATER_THAN'; |
|
| 1987 | + break; |
|
| 1988 | + case '!': |
|
| 1989 | + $newToken['type'] = 'T_BOOLEAN_NOT'; |
|
| 1990 | + break; |
|
| 1991 | + case ',': |
|
| 1992 | + $newToken['type'] = 'T_COMMA'; |
|
| 1993 | + break; |
|
| 1994 | + case '@': |
|
| 1995 | + $newToken['type'] = 'T_ASPERAND'; |
|
| 1996 | + break; |
|
| 1997 | + case '$': |
|
| 1998 | + $newToken['type'] = 'T_DOLLAR'; |
|
| 1999 | + break; |
|
| 2000 | + case '`': |
|
| 2001 | + $newToken['type'] = 'T_BACKTICK'; |
|
| 2002 | + break; |
|
| 2003 | + default: |
|
| 2004 | + $newToken['type'] = 'T_NONE'; |
|
| 2005 | + break; |
|
| 2006 | 2006 | }//end switch |
| 2007 | 2007 | |
| 2008 | 2008 | $newToken['code'] = constant($newToken['type']); |
@@ -722,60 +722,60 @@ |
||
| 722 | 722 | */ |
| 723 | 723 | |
| 724 | 724 | switch ($this->tokens[$i]['code']) { |
| 725 | - case T_OPEN_SQUARE_BRACKET: |
|
| 726 | - $squareOpeners[] = $i; |
|
| 727 | - |
|
| 728 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 729 | - echo str_repeat("\t", count($squareOpeners)); |
|
| 730 | - echo str_repeat("\t", count($curlyOpeners)); |
|
| 731 | - echo "=> Found square bracket opener at $i".PHP_EOL; |
|
| 732 | - } |
|
| 733 | - break; |
|
| 734 | - case T_OPEN_CURLY_BRACKET: |
|
| 735 | - if (isset($this->tokens[$i]['scope_closer']) === false) { |
|
| 736 | - $curlyOpeners[] = $i; |
|
| 737 | - |
|
| 738 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 739 | - echo str_repeat("\t", count($squareOpeners)); |
|
| 740 | - echo str_repeat("\t", count($curlyOpeners)); |
|
| 741 | - echo "=> Found curly bracket opener at $i".PHP_EOL; |
|
| 742 | - } |
|
| 743 | - } |
|
| 744 | - break; |
|
| 745 | - case T_CLOSE_SQUARE_BRACKET: |
|
| 746 | - if (empty($squareOpeners) === false) { |
|
| 747 | - $opener = array_pop($squareOpeners); |
|
| 748 | - $this->tokens[$i]['bracket_opener'] = $opener; |
|
| 749 | - $this->tokens[$i]['bracket_closer'] = $i; |
|
| 750 | - $this->tokens[$opener]['bracket_opener'] = $opener; |
|
| 751 | - $this->tokens[$opener]['bracket_closer'] = $i; |
|
| 752 | - |
|
| 753 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 754 | - echo str_repeat("\t", count($squareOpeners)); |
|
| 755 | - echo str_repeat("\t", count($curlyOpeners)); |
|
| 756 | - echo "\t=> Found square bracket closer at $i for $opener".PHP_EOL; |
|
| 757 | - } |
|
| 758 | - } |
|
| 759 | - break; |
|
| 760 | - case T_CLOSE_CURLY_BRACKET: |
|
| 761 | - if (empty($curlyOpeners) === false |
|
| 762 | - && isset($this->tokens[$i]['scope_opener']) === false |
|
| 763 | - ) { |
|
| 764 | - $opener = array_pop($curlyOpeners); |
|
| 765 | - $this->tokens[$i]['bracket_opener'] = $opener; |
|
| 766 | - $this->tokens[$i]['bracket_closer'] = $i; |
|
| 767 | - $this->tokens[$opener]['bracket_opener'] = $opener; |
|
| 768 | - $this->tokens[$opener]['bracket_closer'] = $i; |
|
| 769 | - |
|
| 770 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 771 | - echo str_repeat("\t", count($squareOpeners)); |
|
| 772 | - echo str_repeat("\t", count($curlyOpeners)); |
|
| 773 | - echo "\t=> Found curly bracket closer at $i for $opener".PHP_EOL; |
|
| 774 | - } |
|
| 775 | - } |
|
| 776 | - break; |
|
| 777 | - default: |
|
| 778 | - continue 2; |
|
| 725 | + case T_OPEN_SQUARE_BRACKET: |
|
| 726 | + $squareOpeners[] = $i; |
|
| 727 | + |
|
| 728 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 729 | + echo str_repeat("\t", count($squareOpeners)); |
|
| 730 | + echo str_repeat("\t", count($curlyOpeners)); |
|
| 731 | + echo "=> Found square bracket opener at $i".PHP_EOL; |
|
| 732 | + } |
|
| 733 | + break; |
|
| 734 | + case T_OPEN_CURLY_BRACKET: |
|
| 735 | + if (isset($this->tokens[$i]['scope_closer']) === false) { |
|
| 736 | + $curlyOpeners[] = $i; |
|
| 737 | + |
|
| 738 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 739 | + echo str_repeat("\t", count($squareOpeners)); |
|
| 740 | + echo str_repeat("\t", count($curlyOpeners)); |
|
| 741 | + echo "=> Found curly bracket opener at $i".PHP_EOL; |
|
| 742 | + } |
|
| 743 | + } |
|
| 744 | + break; |
|
| 745 | + case T_CLOSE_SQUARE_BRACKET: |
|
| 746 | + if (empty($squareOpeners) === false) { |
|
| 747 | + $opener = array_pop($squareOpeners); |
|
| 748 | + $this->tokens[$i]['bracket_opener'] = $opener; |
|
| 749 | + $this->tokens[$i]['bracket_closer'] = $i; |
|
| 750 | + $this->tokens[$opener]['bracket_opener'] = $opener; |
|
| 751 | + $this->tokens[$opener]['bracket_closer'] = $i; |
|
| 752 | + |
|
| 753 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 754 | + echo str_repeat("\t", count($squareOpeners)); |
|
| 755 | + echo str_repeat("\t", count($curlyOpeners)); |
|
| 756 | + echo "\t=> Found square bracket closer at $i for $opener".PHP_EOL; |
|
| 757 | + } |
|
| 758 | + } |
|
| 759 | + break; |
|
| 760 | + case T_CLOSE_CURLY_BRACKET: |
|
| 761 | + if (empty($curlyOpeners) === false |
|
| 762 | + && isset($this->tokens[$i]['scope_opener']) === false |
|
| 763 | + ) { |
|
| 764 | + $opener = array_pop($curlyOpeners); |
|
| 765 | + $this->tokens[$i]['bracket_opener'] = $opener; |
|
| 766 | + $this->tokens[$i]['bracket_closer'] = $i; |
|
| 767 | + $this->tokens[$opener]['bracket_opener'] = $opener; |
|
| 768 | + $this->tokens[$opener]['bracket_closer'] = $i; |
|
| 769 | + |
|
| 770 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 771 | + echo str_repeat("\t", count($squareOpeners)); |
|
| 772 | + echo str_repeat("\t", count($curlyOpeners)); |
|
| 773 | + echo "\t=> Found curly bracket closer at $i for $opener".PHP_EOL; |
|
| 774 | + } |
|
| 775 | + } |
|
| 776 | + break; |
|
| 777 | + default: |
|
| 778 | + continue 2; |
|
| 779 | 779 | }//end switch |
| 780 | 780 | }//end for |
| 781 | 781 | |
@@ -289,202 +289,202 @@ |
||
| 289 | 289 | } |
| 290 | 290 | |
| 291 | 291 | switch ($token['code']) { |
| 292 | - case T_OPEN_CURLY_BRACKET: |
|
| 293 | - // Opening curly brackets for an At-rule do not start a style |
|
| 294 | - // definition. We also reset the asperand flag here because the next |
|
| 295 | - // opening curly bracket could be indeed the start of a style |
|
| 296 | - // definition. |
|
| 297 | - if ($asperandStart === true) { |
|
| 298 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 299 | - if ($inStyleDef === true) { |
|
| 300 | - echo "\t\t* style definition closed *".PHP_EOL; |
|
| 301 | - } |
|
| 302 | - |
|
| 303 | - if ($asperandStart === true) { |
|
| 304 | - echo "\t\t* at-rule definition closed *".PHP_EOL; |
|
| 305 | - } |
|
| 306 | - } |
|
| 307 | - |
|
| 308 | - $inStyleDef = false; |
|
| 309 | - $asperandStart = false; |
|
| 310 | - } else { |
|
| 311 | - $inStyleDef = true; |
|
| 312 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 313 | - echo "\t\t* style definition opened *".PHP_EOL; |
|
| 314 | - } |
|
| 315 | - } |
|
| 316 | - break; |
|
| 317 | - case T_CLOSE_CURLY_BRACKET: |
|
| 318 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 319 | - if ($inStyleDef === true) { |
|
| 320 | - echo "\t\t* style definition closed *".PHP_EOL; |
|
| 321 | - } |
|
| 322 | - |
|
| 323 | - if ($asperandStart === true) { |
|
| 324 | - echo "\t\t* at-rule definition closed *".PHP_EOL; |
|
| 325 | - } |
|
| 326 | - } |
|
| 327 | - |
|
| 328 | - $inStyleDef = false; |
|
| 329 | - $asperandStart = false; |
|
| 330 | - break; |
|
| 331 | - case T_MINUS: |
|
| 332 | - // Minus signs are often used instead of spaces inside |
|
| 333 | - // class names, IDs and styles. |
|
| 334 | - if ($finalTokens[($stackPtr + 1)]['code'] === T_STRING) { |
|
| 335 | - if ($finalTokens[($stackPtr - 1)]['code'] === T_STRING) { |
|
| 336 | - $newContent = $finalTokens[($stackPtr - 1)]['content'].'-'.$finalTokens[($stackPtr + 1)]['content']; |
|
| 337 | - |
|
| 338 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 339 | - echo "\t\t* token is a string joiner; ignoring this and previous token".PHP_EOL; |
|
| 340 | - $old = Util\Common::prepareForOutput($finalTokens[($stackPtr + 1)]['content']); |
|
| 341 | - $new = Util\Common::prepareForOutput($newContent); |
|
| 342 | - echo "\t\t=> token ".($stackPtr + 1)." content changed from \"$old\" to \"$new\"".PHP_EOL; |
|
| 343 | - } |
|
| 344 | - |
|
| 345 | - $finalTokens[($stackPtr + 1)]['content'] = $newContent; |
|
| 346 | - unset($finalTokens[$stackPtr]); |
|
| 347 | - unset($finalTokens[($stackPtr - 1)]); |
|
| 348 | - } else { |
|
| 349 | - $newContent = '-'.$finalTokens[($stackPtr + 1)]['content']; |
|
| 350 | - |
|
| 351 | - $finalTokens[($stackPtr + 1)]['content'] = $newContent; |
|
| 352 | - unset($finalTokens[$stackPtr]); |
|
| 353 | - } |
|
| 354 | - } else if ($finalTokens[($stackPtr + 1)]['code'] === T_LNUMBER) { |
|
| 355 | - // They can also be used to provide negative numbers. |
|
| 356 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 357 | - echo "\t\t* token is part of a negative number; adding content to next token and ignoring *".PHP_EOL; |
|
| 358 | - $content = Util\Common::prepareForOutput($finalTokens[($stackPtr + 1)]['content']); |
|
| 359 | - echo "\t\t=> token ".($stackPtr + 1)." content changed from \"$content\" to \"-$content\"".PHP_EOL; |
|
| 360 | - } |
|
| 361 | - |
|
| 362 | - $finalTokens[($stackPtr + 1)]['content'] = '-'.$finalTokens[($stackPtr + 1)]['content']; |
|
| 363 | - unset($finalTokens[$stackPtr]); |
|
| 364 | - }//end if |
|
| 365 | - break; |
|
| 366 | - case T_COLON: |
|
| 367 | - // Only interested in colons that are defining styles. |
|
| 368 | - if ($inStyleDef === false) { |
|
| 369 | - break; |
|
| 370 | - } |
|
| 371 | - |
|
| 372 | - for ($x = ($stackPtr - 1); $x >= 0; $x--) { |
|
| 373 | - if (isset(Util\Tokens::$emptyTokens[$finalTokens[$x]['code']]) === false) { |
|
| 374 | - break; |
|
| 375 | - } |
|
| 376 | - } |
|
| 377 | - |
|
| 378 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 379 | - $type = $finalTokens[$x]['type']; |
|
| 380 | - echo "\t\t=> token $x changed from $type to T_STYLE".PHP_EOL; |
|
| 381 | - } |
|
| 382 | - |
|
| 383 | - $finalTokens[$x]['type'] = 'T_STYLE'; |
|
| 384 | - $finalTokens[$x]['code'] = T_STYLE; |
|
| 385 | - break; |
|
| 386 | - case T_STRING: |
|
| 387 | - if (strtolower($token['content']) === 'url') { |
|
| 388 | - // Find the next content. |
|
| 389 | - for ($x = ($stackPtr + 1); $x < $numTokens; $x++) { |
|
| 390 | - if (isset(Util\Tokens::$emptyTokens[$finalTokens[$x]['code']]) === false) { |
|
| 391 | - break; |
|
| 392 | - } |
|
| 393 | - } |
|
| 394 | - |
|
| 395 | - // Needs to be in the format "url(" for it to be a URL. |
|
| 396 | - if ($finalTokens[$x]['code'] !== T_OPEN_PARENTHESIS) { |
|
| 397 | - continue 2; |
|
| 398 | - } |
|
| 399 | - |
|
| 400 | - // Make sure the content isn't empty. |
|
| 401 | - for ($y = ($x + 1); $y < $numTokens; $y++) { |
|
| 402 | - if (isset(Util\Tokens::$emptyTokens[$finalTokens[$y]['code']]) === false) { |
|
| 403 | - break; |
|
| 404 | - } |
|
| 405 | - } |
|
| 406 | - |
|
| 407 | - if ($finalTokens[$y]['code'] === T_CLOSE_PARENTHESIS) { |
|
| 408 | - continue 2; |
|
| 409 | - } |
|
| 410 | - |
|
| 411 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 412 | - for ($i = ($stackPtr + 1); $i <= $y; $i++) { |
|
| 413 | - $type = $finalTokens[$i]['type']; |
|
| 414 | - $content = Util\Common::prepareForOutput($finalTokens[$i]['content']); |
|
| 415 | - echo "\tProcess token $i: $type => $content".PHP_EOL; |
|
| 416 | - } |
|
| 417 | - |
|
| 418 | - echo "\t\t* token starts a URL *".PHP_EOL; |
|
| 419 | - } |
|
| 420 | - |
|
| 421 | - // Join all the content together inside the url() statement. |
|
| 422 | - $newContent = ''; |
|
| 423 | - for ($i = ($x + 2); $i < $numTokens; $i++) { |
|
| 424 | - if ($finalTokens[$i]['code'] === T_CLOSE_PARENTHESIS) { |
|
| 425 | - break; |
|
| 426 | - } |
|
| 427 | - |
|
| 428 | - $newContent .= $finalTokens[$i]['content']; |
|
| 429 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 430 | - $content = Util\Common::prepareForOutput($finalTokens[$i]['content']); |
|
| 431 | - echo "\t\t=> token $i added to URL string and ignored: $content".PHP_EOL; |
|
| 432 | - } |
|
| 433 | - |
|
| 434 | - unset($finalTokens[$i]); |
|
| 435 | - } |
|
| 436 | - |
|
| 437 | - $stackPtr = $i; |
|
| 438 | - |
|
| 439 | - // If the content inside the "url()" is in double quotes |
|
| 440 | - // there will only be one token and so we don't have to do |
|
| 441 | - // anything except change its type. If it is not empty, |
|
| 442 | - // we need to do some token merging. |
|
| 443 | - $finalTokens[($x + 1)]['type'] = 'T_URL'; |
|
| 444 | - $finalTokens[($x + 1)]['code'] = T_URL; |
|
| 445 | - |
|
| 446 | - if ($newContent !== '') { |
|
| 447 | - $finalTokens[($x + 1)]['content'] .= $newContent; |
|
| 448 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 449 | - $content = Util\Common::prepareForOutput($finalTokens[($x + 1)]['content']); |
|
| 450 | - echo "\t\t=> token content changed to: $content".PHP_EOL; |
|
| 451 | - } |
|
| 452 | - } |
|
| 453 | - } else if ($finalTokens[$stackPtr]['content'][0] === '-' |
|
| 454 | - && $finalTokens[($stackPtr + 1)]['code'] === T_STRING |
|
| 455 | - ) { |
|
| 456 | - if (isset($finalTokens[($stackPtr - 1)]) === true |
|
| 457 | - && $finalTokens[($stackPtr - 1)]['code'] === T_STRING |
|
| 458 | - ) { |
|
| 459 | - $newContent = $finalTokens[($stackPtr - 1)]['content'].$finalTokens[$stackPtr]['content'].$finalTokens[($stackPtr + 1)]['content']; |
|
| 460 | - |
|
| 461 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 462 | - echo "\t\t* token is a string joiner; ignoring this and previous token".PHP_EOL; |
|
| 463 | - $old = Util\Common::prepareForOutput($finalTokens[($stackPtr + 1)]['content']); |
|
| 464 | - $new = Util\Common::prepareForOutput($newContent); |
|
| 465 | - echo "\t\t=> token ".($stackPtr + 1)." content changed from \"$old\" to \"$new\"".PHP_EOL; |
|
| 466 | - } |
|
| 467 | - |
|
| 468 | - $finalTokens[($stackPtr + 1)]['content'] = $newContent; |
|
| 469 | - unset($finalTokens[$stackPtr]); |
|
| 470 | - unset($finalTokens[($stackPtr - 1)]); |
|
| 471 | - } else { |
|
| 472 | - $newContent = $finalTokens[$stackPtr]['content'].$finalTokens[($stackPtr + 1)]['content']; |
|
| 473 | - |
|
| 474 | - $finalTokens[($stackPtr + 1)]['content'] = $newContent; |
|
| 475 | - unset($finalTokens[$stackPtr]); |
|
| 476 | - } |
|
| 477 | - }//end if |
|
| 478 | - break; |
|
| 479 | - case T_ASPERAND: |
|
| 480 | - $asperandStart = true; |
|
| 481 | - if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 482 | - echo "\t\t* at-rule definition opened *".PHP_EOL; |
|
| 483 | - } |
|
| 484 | - break; |
|
| 485 | - default: |
|
| 486 | - // Nothing special to be done with this token. |
|
| 487 | - break; |
|
| 292 | + case T_OPEN_CURLY_BRACKET: |
|
| 293 | + // Opening curly brackets for an At-rule do not start a style |
|
| 294 | + // definition. We also reset the asperand flag here because the next |
|
| 295 | + // opening curly bracket could be indeed the start of a style |
|
| 296 | + // definition. |
|
| 297 | + if ($asperandStart === true) { |
|
| 298 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 299 | + if ($inStyleDef === true) { |
|
| 300 | + echo "\t\t* style definition closed *".PHP_EOL; |
|
| 301 | + } |
|
| 302 | + |
|
| 303 | + if ($asperandStart === true) { |
|
| 304 | + echo "\t\t* at-rule definition closed *".PHP_EOL; |
|
| 305 | + } |
|
| 306 | + } |
|
| 307 | + |
|
| 308 | + $inStyleDef = false; |
|
| 309 | + $asperandStart = false; |
|
| 310 | + } else { |
|
| 311 | + $inStyleDef = true; |
|
| 312 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 313 | + echo "\t\t* style definition opened *".PHP_EOL; |
|
| 314 | + } |
|
| 315 | + } |
|
| 316 | + break; |
|
| 317 | + case T_CLOSE_CURLY_BRACKET: |
|
| 318 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 319 | + if ($inStyleDef === true) { |
|
| 320 | + echo "\t\t* style definition closed *".PHP_EOL; |
|
| 321 | + } |
|
| 322 | + |
|
| 323 | + if ($asperandStart === true) { |
|
| 324 | + echo "\t\t* at-rule definition closed *".PHP_EOL; |
|
| 325 | + } |
|
| 326 | + } |
|
| 327 | + |
|
| 328 | + $inStyleDef = false; |
|
| 329 | + $asperandStart = false; |
|
| 330 | + break; |
|
| 331 | + case T_MINUS: |
|
| 332 | + // Minus signs are often used instead of spaces inside |
|
| 333 | + // class names, IDs and styles. |
|
| 334 | + if ($finalTokens[($stackPtr + 1)]['code'] === T_STRING) { |
|
| 335 | + if ($finalTokens[($stackPtr - 1)]['code'] === T_STRING) { |
|
| 336 | + $newContent = $finalTokens[($stackPtr - 1)]['content'].'-'.$finalTokens[($stackPtr + 1)]['content']; |
|
| 337 | + |
|
| 338 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 339 | + echo "\t\t* token is a string joiner; ignoring this and previous token".PHP_EOL; |
|
| 340 | + $old = Util\Common::prepareForOutput($finalTokens[($stackPtr + 1)]['content']); |
|
| 341 | + $new = Util\Common::prepareForOutput($newContent); |
|
| 342 | + echo "\t\t=> token ".($stackPtr + 1)." content changed from \"$old\" to \"$new\"".PHP_EOL; |
|
| 343 | + } |
|
| 344 | + |
|
| 345 | + $finalTokens[($stackPtr + 1)]['content'] = $newContent; |
|
| 346 | + unset($finalTokens[$stackPtr]); |
|
| 347 | + unset($finalTokens[($stackPtr - 1)]); |
|
| 348 | + } else { |
|
| 349 | + $newContent = '-'.$finalTokens[($stackPtr + 1)]['content']; |
|
| 350 | + |
|
| 351 | + $finalTokens[($stackPtr + 1)]['content'] = $newContent; |
|
| 352 | + unset($finalTokens[$stackPtr]); |
|
| 353 | + } |
|
| 354 | + } else if ($finalTokens[($stackPtr + 1)]['code'] === T_LNUMBER) { |
|
| 355 | + // They can also be used to provide negative numbers. |
|
| 356 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 357 | + echo "\t\t* token is part of a negative number; adding content to next token and ignoring *".PHP_EOL; |
|
| 358 | + $content = Util\Common::prepareForOutput($finalTokens[($stackPtr + 1)]['content']); |
|
| 359 | + echo "\t\t=> token ".($stackPtr + 1)." content changed from \"$content\" to \"-$content\"".PHP_EOL; |
|
| 360 | + } |
|
| 361 | + |
|
| 362 | + $finalTokens[($stackPtr + 1)]['content'] = '-'.$finalTokens[($stackPtr + 1)]['content']; |
|
| 363 | + unset($finalTokens[$stackPtr]); |
|
| 364 | + }//end if |
|
| 365 | + break; |
|
| 366 | + case T_COLON: |
|
| 367 | + // Only interested in colons that are defining styles. |
|
| 368 | + if ($inStyleDef === false) { |
|
| 369 | + break; |
|
| 370 | + } |
|
| 371 | + |
|
| 372 | + for ($x = ($stackPtr - 1); $x >= 0; $x--) { |
|
| 373 | + if (isset(Util\Tokens::$emptyTokens[$finalTokens[$x]['code']]) === false) { |
|
| 374 | + break; |
|
| 375 | + } |
|
| 376 | + } |
|
| 377 | + |
|
| 378 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 379 | + $type = $finalTokens[$x]['type']; |
|
| 380 | + echo "\t\t=> token $x changed from $type to T_STYLE".PHP_EOL; |
|
| 381 | + } |
|
| 382 | + |
|
| 383 | + $finalTokens[$x]['type'] = 'T_STYLE'; |
|
| 384 | + $finalTokens[$x]['code'] = T_STYLE; |
|
| 385 | + break; |
|
| 386 | + case T_STRING: |
|
| 387 | + if (strtolower($token['content']) === 'url') { |
|
| 388 | + // Find the next content. |
|
| 389 | + for ($x = ($stackPtr + 1); $x < $numTokens; $x++) { |
|
| 390 | + if (isset(Util\Tokens::$emptyTokens[$finalTokens[$x]['code']]) === false) { |
|
| 391 | + break; |
|
| 392 | + } |
|
| 393 | + } |
|
| 394 | + |
|
| 395 | + // Needs to be in the format "url(" for it to be a URL. |
|
| 396 | + if ($finalTokens[$x]['code'] !== T_OPEN_PARENTHESIS) { |
|
| 397 | + continue 2; |
|
| 398 | + } |
|
| 399 | + |
|
| 400 | + // Make sure the content isn't empty. |
|
| 401 | + for ($y = ($x + 1); $y < $numTokens; $y++) { |
|
| 402 | + if (isset(Util\Tokens::$emptyTokens[$finalTokens[$y]['code']]) === false) { |
|
| 403 | + break; |
|
| 404 | + } |
|
| 405 | + } |
|
| 406 | + |
|
| 407 | + if ($finalTokens[$y]['code'] === T_CLOSE_PARENTHESIS) { |
|
| 408 | + continue 2; |
|
| 409 | + } |
|
| 410 | + |
|
| 411 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 412 | + for ($i = ($stackPtr + 1); $i <= $y; $i++) { |
|
| 413 | + $type = $finalTokens[$i]['type']; |
|
| 414 | + $content = Util\Common::prepareForOutput($finalTokens[$i]['content']); |
|
| 415 | + echo "\tProcess token $i: $type => $content".PHP_EOL; |
|
| 416 | + } |
|
| 417 | + |
|
| 418 | + echo "\t\t* token starts a URL *".PHP_EOL; |
|
| 419 | + } |
|
| 420 | + |
|
| 421 | + // Join all the content together inside the url() statement. |
|
| 422 | + $newContent = ''; |
|
| 423 | + for ($i = ($x + 2); $i < $numTokens; $i++) { |
|
| 424 | + if ($finalTokens[$i]['code'] === T_CLOSE_PARENTHESIS) { |
|
| 425 | + break; |
|
| 426 | + } |
|
| 427 | + |
|
| 428 | + $newContent .= $finalTokens[$i]['content']; |
|
| 429 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 430 | + $content = Util\Common::prepareForOutput($finalTokens[$i]['content']); |
|
| 431 | + echo "\t\t=> token $i added to URL string and ignored: $content".PHP_EOL; |
|
| 432 | + } |
|
| 433 | + |
|
| 434 | + unset($finalTokens[$i]); |
|
| 435 | + } |
|
| 436 | + |
|
| 437 | + $stackPtr = $i; |
|
| 438 | + |
|
| 439 | + // If the content inside the "url()" is in double quotes |
|
| 440 | + // there will only be one token and so we don't have to do |
|
| 441 | + // anything except change its type. If it is not empty, |
|
| 442 | + // we need to do some token merging. |
|
| 443 | + $finalTokens[($x + 1)]['type'] = 'T_URL'; |
|
| 444 | + $finalTokens[($x + 1)]['code'] = T_URL; |
|
| 445 | + |
|
| 446 | + if ($newContent !== '') { |
|
| 447 | + $finalTokens[($x + 1)]['content'] .= $newContent; |
|
| 448 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 449 | + $content = Util\Common::prepareForOutput($finalTokens[($x + 1)]['content']); |
|
| 450 | + echo "\t\t=> token content changed to: $content".PHP_EOL; |
|
| 451 | + } |
|
| 452 | + } |
|
| 453 | + } else if ($finalTokens[$stackPtr]['content'][0] === '-' |
|
| 454 | + && $finalTokens[($stackPtr + 1)]['code'] === T_STRING |
|
| 455 | + ) { |
|
| 456 | + if (isset($finalTokens[($stackPtr - 1)]) === true |
|
| 457 | + && $finalTokens[($stackPtr - 1)]['code'] === T_STRING |
|
| 458 | + ) { |
|
| 459 | + $newContent = $finalTokens[($stackPtr - 1)]['content'].$finalTokens[$stackPtr]['content'].$finalTokens[($stackPtr + 1)]['content']; |
|
| 460 | + |
|
| 461 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 462 | + echo "\t\t* token is a string joiner; ignoring this and previous token".PHP_EOL; |
|
| 463 | + $old = Util\Common::prepareForOutput($finalTokens[($stackPtr + 1)]['content']); |
|
| 464 | + $new = Util\Common::prepareForOutput($newContent); |
|
| 465 | + echo "\t\t=> token ".($stackPtr + 1)." content changed from \"$old\" to \"$new\"".PHP_EOL; |
|
| 466 | + } |
|
| 467 | + |
|
| 468 | + $finalTokens[($stackPtr + 1)]['content'] = $newContent; |
|
| 469 | + unset($finalTokens[$stackPtr]); |
|
| 470 | + unset($finalTokens[($stackPtr - 1)]); |
|
| 471 | + } else { |
|
| 472 | + $newContent = $finalTokens[$stackPtr]['content'].$finalTokens[($stackPtr + 1)]['content']; |
|
| 473 | + |
|
| 474 | + $finalTokens[($stackPtr + 1)]['content'] = $newContent; |
|
| 475 | + unset($finalTokens[$stackPtr]); |
|
| 476 | + } |
|
| 477 | + }//end if |
|
| 478 | + break; |
|
| 479 | + case T_ASPERAND: |
|
| 480 | + $asperandStart = true; |
|
| 481 | + if (PHP_CODESNIFFER_VERBOSITY > 1) { |
|
| 482 | + echo "\t\t* at-rule definition opened *".PHP_EOL; |
|
| 483 | + } |
|
| 484 | + break; |
|
| 485 | + default: |
|
| 486 | + // Nothing special to be done with this token. |
|
| 487 | + break; |
|
| 488 | 488 | }//end switch |
| 489 | 489 | }//end for |
| 490 | 490 | |
@@ -1324,122 +1324,122 @@ discard block |
||
| 1324 | 1324 | } |
| 1325 | 1325 | |
| 1326 | 1326 | switch ($this->tokens[$i]['code']) { |
| 1327 | - case T_BITWISE_AND: |
|
| 1328 | - if ($defaultStart === null) { |
|
| 1329 | - $passByReference = true; |
|
| 1330 | - } |
|
| 1331 | - break; |
|
| 1332 | - case T_VARIABLE: |
|
| 1333 | - $currVar = $i; |
|
| 1334 | - break; |
|
| 1335 | - case T_ELLIPSIS: |
|
| 1336 | - $variableLength = true; |
|
| 1337 | - break; |
|
| 1338 | - case T_CALLABLE: |
|
| 1339 | - if ($typeHintToken === false) { |
|
| 1340 | - $typeHintToken = $i; |
|
| 1341 | - } |
|
| 1342 | - |
|
| 1343 | - $typeHint .= $this->tokens[$i]['content']; |
|
| 1344 | - break; |
|
| 1345 | - case T_SELF: |
|
| 1346 | - case T_PARENT: |
|
| 1347 | - case T_STATIC: |
|
| 1348 | - // Self and parent are valid, static invalid, but was probably intended as type hint. |
|
| 1349 | - if (isset($defaultStart) === false) { |
|
| 1350 | - if ($typeHintToken === false) { |
|
| 1351 | - $typeHintToken = $i; |
|
| 1352 | - } |
|
| 1353 | - |
|
| 1354 | - $typeHint .= $this->tokens[$i]['content']; |
|
| 1355 | - } |
|
| 1356 | - break; |
|
| 1357 | - case T_STRING: |
|
| 1358 | - // This is a string, so it may be a type hint, but it could |
|
| 1359 | - // also be a constant used as a default value. |
|
| 1360 | - $prevComma = false; |
|
| 1361 | - for ($t = $i; $t >= $opener; $t--) { |
|
| 1362 | - if ($this->tokens[$t]['code'] === T_COMMA) { |
|
| 1363 | - $prevComma = $t; |
|
| 1364 | - break; |
|
| 1365 | - } |
|
| 1366 | - } |
|
| 1367 | - |
|
| 1368 | - if ($prevComma !== false) { |
|
| 1369 | - $nextEquals = false; |
|
| 1370 | - for ($t = $prevComma; $t < $i; $t++) { |
|
| 1371 | - if ($this->tokens[$t]['code'] === T_EQUAL) { |
|
| 1372 | - $nextEquals = $t; |
|
| 1373 | - break; |
|
| 1374 | - } |
|
| 1375 | - } |
|
| 1376 | - |
|
| 1377 | - if ($nextEquals !== false) { |
|
| 1378 | - break; |
|
| 1379 | - } |
|
| 1380 | - } |
|
| 1381 | - |
|
| 1382 | - if ($defaultStart === null) { |
|
| 1383 | - if ($typeHintToken === false) { |
|
| 1384 | - $typeHintToken = $i; |
|
| 1385 | - } |
|
| 1386 | - |
|
| 1387 | - $typeHint .= $this->tokens[$i]['content']; |
|
| 1388 | - } |
|
| 1389 | - break; |
|
| 1390 | - case T_NS_SEPARATOR: |
|
| 1391 | - // Part of a type hint or default value. |
|
| 1392 | - if ($defaultStart === null) { |
|
| 1393 | - if ($typeHintToken === false) { |
|
| 1394 | - $typeHintToken = $i; |
|
| 1395 | - } |
|
| 1396 | - |
|
| 1397 | - $typeHint .= $this->tokens[$i]['content']; |
|
| 1398 | - } |
|
| 1399 | - break; |
|
| 1400 | - case T_NULLABLE: |
|
| 1401 | - if ($defaultStart === null) { |
|
| 1402 | - $nullableType = true; |
|
| 1403 | - $typeHint .= $this->tokens[$i]['content']; |
|
| 1404 | - } |
|
| 1405 | - break; |
|
| 1406 | - case T_CLOSE_PARENTHESIS: |
|
| 1407 | - case T_COMMA: |
|
| 1408 | - // If it's null, then there must be no parameters for this |
|
| 1409 | - // method. |
|
| 1410 | - if ($currVar === null) { |
|
| 1411 | - continue 2; |
|
| 1412 | - } |
|
| 1413 | - |
|
| 1414 | - $vars[$paramCount] = []; |
|
| 1415 | - $vars[$paramCount]['token'] = $currVar; |
|
| 1416 | - $vars[$paramCount]['name'] = $this->tokens[$currVar]['content']; |
|
| 1417 | - $vars[$paramCount]['content'] = trim($this->getTokensAsString($paramStart, ($i - $paramStart))); |
|
| 1418 | - |
|
| 1419 | - if ($defaultStart !== null) { |
|
| 1420 | - $vars[$paramCount]['default'] = trim($this->getTokensAsString($defaultStart, ($i - $defaultStart))); |
|
| 1421 | - } |
|
| 1422 | - |
|
| 1423 | - $vars[$paramCount]['pass_by_reference'] = $passByReference; |
|
| 1424 | - $vars[$paramCount]['variable_length'] = $variableLength; |
|
| 1425 | - $vars[$paramCount]['type_hint'] = $typeHint; |
|
| 1426 | - $vars[$paramCount]['type_hint_token'] = $typeHintToken; |
|
| 1427 | - $vars[$paramCount]['nullable_type'] = $nullableType; |
|
| 1428 | - |
|
| 1429 | - // Reset the vars, as we are about to process the next parameter. |
|
| 1430 | - $defaultStart = null; |
|
| 1431 | - $paramStart = ($i + 1); |
|
| 1432 | - $passByReference = false; |
|
| 1433 | - $variableLength = false; |
|
| 1434 | - $typeHint = ''; |
|
| 1435 | - $typeHintToken = false; |
|
| 1436 | - $nullableType = false; |
|
| 1437 | - |
|
| 1438 | - $paramCount++; |
|
| 1439 | - break; |
|
| 1440 | - case T_EQUAL: |
|
| 1441 | - $defaultStart = ($i + 1); |
|
| 1442 | - break; |
|
| 1327 | + case T_BITWISE_AND: |
|
| 1328 | + if ($defaultStart === null) { |
|
| 1329 | + $passByReference = true; |
|
| 1330 | + } |
|
| 1331 | + break; |
|
| 1332 | + case T_VARIABLE: |
|
| 1333 | + $currVar = $i; |
|
| 1334 | + break; |
|
| 1335 | + case T_ELLIPSIS: |
|
| 1336 | + $variableLength = true; |
|
| 1337 | + break; |
|
| 1338 | + case T_CALLABLE: |
|
| 1339 | + if ($typeHintToken === false) { |
|
| 1340 | + $typeHintToken = $i; |
|
| 1341 | + } |
|
| 1342 | + |
|
| 1343 | + $typeHint .= $this->tokens[$i]['content']; |
|
| 1344 | + break; |
|
| 1345 | + case T_SELF: |
|
| 1346 | + case T_PARENT: |
|
| 1347 | + case T_STATIC: |
|
| 1348 | + // Self and parent are valid, static invalid, but was probably intended as type hint. |
|
| 1349 | + if (isset($defaultStart) === false) { |
|
| 1350 | + if ($typeHintToken === false) { |
|
| 1351 | + $typeHintToken = $i; |
|
| 1352 | + } |
|
| 1353 | + |
|
| 1354 | + $typeHint .= $this->tokens[$i]['content']; |
|
| 1355 | + } |
|
| 1356 | + break; |
|
| 1357 | + case T_STRING: |
|
| 1358 | + // This is a string, so it may be a type hint, but it could |
|
| 1359 | + // also be a constant used as a default value. |
|
| 1360 | + $prevComma = false; |
|
| 1361 | + for ($t = $i; $t >= $opener; $t--) { |
|
| 1362 | + if ($this->tokens[$t]['code'] === T_COMMA) { |
|
| 1363 | + $prevComma = $t; |
|
| 1364 | + break; |
|
| 1365 | + } |
|
| 1366 | + } |
|
| 1367 | + |
|
| 1368 | + if ($prevComma !== false) { |
|
| 1369 | + $nextEquals = false; |
|
| 1370 | + for ($t = $prevComma; $t < $i; $t++) { |
|
| 1371 | + if ($this->tokens[$t]['code'] === T_EQUAL) { |
|
| 1372 | + $nextEquals = $t; |
|
| 1373 | + break; |
|
| 1374 | + } |
|
| 1375 | + } |
|
| 1376 | + |
|
| 1377 | + if ($nextEquals !== false) { |
|
| 1378 | + break; |
|
| 1379 | + } |
|
| 1380 | + } |
|
| 1381 | + |
|
| 1382 | + if ($defaultStart === null) { |
|
| 1383 | + if ($typeHintToken === false) { |
|
| 1384 | + $typeHintToken = $i; |
|
| 1385 | + } |
|
| 1386 | + |
|
| 1387 | + $typeHint .= $this->tokens[$i]['content']; |
|
| 1388 | + } |
|
| 1389 | + break; |
|
| 1390 | + case T_NS_SEPARATOR: |
|
| 1391 | + // Part of a type hint or default value. |
|
| 1392 | + if ($defaultStart === null) { |
|
| 1393 | + if ($typeHintToken === false) { |
|
| 1394 | + $typeHintToken = $i; |
|
| 1395 | + } |
|
| 1396 | + |
|
| 1397 | + $typeHint .= $this->tokens[$i]['content']; |
|
| 1398 | + } |
|
| 1399 | + break; |
|
| 1400 | + case T_NULLABLE: |
|
| 1401 | + if ($defaultStart === null) { |
|
| 1402 | + $nullableType = true; |
|
| 1403 | + $typeHint .= $this->tokens[$i]['content']; |
|
| 1404 | + } |
|
| 1405 | + break; |
|
| 1406 | + case T_CLOSE_PARENTHESIS: |
|
| 1407 | + case T_COMMA: |
|
| 1408 | + // If it's null, then there must be no parameters for this |
|
| 1409 | + // method. |
|
| 1410 | + if ($currVar === null) { |
|
| 1411 | + continue 2; |
|
| 1412 | + } |
|
| 1413 | + |
|
| 1414 | + $vars[$paramCount] = []; |
|
| 1415 | + $vars[$paramCount]['token'] = $currVar; |
|
| 1416 | + $vars[$paramCount]['name'] = $this->tokens[$currVar]['content']; |
|
| 1417 | + $vars[$paramCount]['content'] = trim($this->getTokensAsString($paramStart, ($i - $paramStart))); |
|
| 1418 | + |
|
| 1419 | + if ($defaultStart !== null) { |
|
| 1420 | + $vars[$paramCount]['default'] = trim($this->getTokensAsString($defaultStart, ($i - $defaultStart))); |
|
| 1421 | + } |
|
| 1422 | + |
|
| 1423 | + $vars[$paramCount]['pass_by_reference'] = $passByReference; |
|
| 1424 | + $vars[$paramCount]['variable_length'] = $variableLength; |
|
| 1425 | + $vars[$paramCount]['type_hint'] = $typeHint; |
|
| 1426 | + $vars[$paramCount]['type_hint_token'] = $typeHintToken; |
|
| 1427 | + $vars[$paramCount]['nullable_type'] = $nullableType; |
|
| 1428 | + |
|
| 1429 | + // Reset the vars, as we are about to process the next parameter. |
|
| 1430 | + $defaultStart = null; |
|
| 1431 | + $paramStart = ($i + 1); |
|
| 1432 | + $passByReference = false; |
|
| 1433 | + $variableLength = false; |
|
| 1434 | + $typeHint = ''; |
|
| 1435 | + $typeHintToken = false; |
|
| 1436 | + $nullableType = false; |
|
| 1437 | + |
|
| 1438 | + $paramCount++; |
|
| 1439 | + break; |
|
| 1440 | + case T_EQUAL: |
|
| 1441 | + $defaultStart = ($i + 1); |
|
| 1442 | + break; |
|
| 1443 | 1443 | }//end switch |
| 1444 | 1444 | }//end for |
| 1445 | 1445 | |
@@ -1515,27 +1515,27 @@ discard block |
||
| 1515 | 1515 | } |
| 1516 | 1516 | |
| 1517 | 1517 | switch ($this->tokens[$i]['code']) { |
| 1518 | - case T_PUBLIC: |
|
| 1519 | - $scope = 'public'; |
|
| 1520 | - $scopeSpecified = true; |
|
| 1521 | - break; |
|
| 1522 | - case T_PRIVATE: |
|
| 1523 | - $scope = 'private'; |
|
| 1524 | - $scopeSpecified = true; |
|
| 1525 | - break; |
|
| 1526 | - case T_PROTECTED: |
|
| 1527 | - $scope = 'protected'; |
|
| 1528 | - $scopeSpecified = true; |
|
| 1529 | - break; |
|
| 1530 | - case T_ABSTRACT: |
|
| 1531 | - $isAbstract = true; |
|
| 1532 | - break; |
|
| 1533 | - case T_FINAL: |
|
| 1534 | - $isFinal = true; |
|
| 1535 | - break; |
|
| 1536 | - case T_STATIC: |
|
| 1537 | - $isStatic = true; |
|
| 1538 | - break; |
|
| 1518 | + case T_PUBLIC: |
|
| 1519 | + $scope = 'public'; |
|
| 1520 | + $scopeSpecified = true; |
|
| 1521 | + break; |
|
| 1522 | + case T_PRIVATE: |
|
| 1523 | + $scope = 'private'; |
|
| 1524 | + $scopeSpecified = true; |
|
| 1525 | + break; |
|
| 1526 | + case T_PROTECTED: |
|
| 1527 | + $scope = 'protected'; |
|
| 1528 | + $scopeSpecified = true; |
|
| 1529 | + break; |
|
| 1530 | + case T_ABSTRACT: |
|
| 1531 | + $isAbstract = true; |
|
| 1532 | + break; |
|
| 1533 | + case T_FINAL: |
|
| 1534 | + $isFinal = true; |
|
| 1535 | + break; |
|
| 1536 | + case T_STATIC: |
|
| 1537 | + $isStatic = true; |
|
| 1538 | + break; |
|
| 1539 | 1539 | }//end switch |
| 1540 | 1540 | }//end for |
| 1541 | 1541 | |
@@ -1697,21 +1697,21 @@ discard block |
||
| 1697 | 1697 | } |
| 1698 | 1698 | |
| 1699 | 1699 | switch ($this->tokens[$i]['code']) { |
| 1700 | - case T_PUBLIC: |
|
| 1701 | - $scope = 'public'; |
|
| 1702 | - $scopeSpecified = true; |
|
| 1703 | - break; |
|
| 1704 | - case T_PRIVATE: |
|
| 1705 | - $scope = 'private'; |
|
| 1706 | - $scopeSpecified = true; |
|
| 1707 | - break; |
|
| 1708 | - case T_PROTECTED: |
|
| 1709 | - $scope = 'protected'; |
|
| 1710 | - $scopeSpecified = true; |
|
| 1711 | - break; |
|
| 1712 | - case T_STATIC: |
|
| 1713 | - $isStatic = true; |
|
| 1714 | - break; |
|
| 1700 | + case T_PUBLIC: |
|
| 1701 | + $scope = 'public'; |
|
| 1702 | + $scopeSpecified = true; |
|
| 1703 | + break; |
|
| 1704 | + case T_PRIVATE: |
|
| 1705 | + $scope = 'private'; |
|
| 1706 | + $scopeSpecified = true; |
|
| 1707 | + break; |
|
| 1708 | + case T_PROTECTED: |
|
| 1709 | + $scope = 'protected'; |
|
| 1710 | + $scopeSpecified = true; |
|
| 1711 | + break; |
|
| 1712 | + case T_STATIC: |
|
| 1713 | + $isStatic = true; |
|
| 1714 | + break; |
|
| 1715 | 1715 | } |
| 1716 | 1716 | }//end for |
| 1717 | 1717 | |
@@ -1765,13 +1765,13 @@ discard block |
||
| 1765 | 1765 | } |
| 1766 | 1766 | |
| 1767 | 1767 | switch ($this->tokens[$i]['code']) { |
| 1768 | - case T_ABSTRACT: |
|
| 1769 | - $isAbstract = true; |
|
| 1770 | - break; |
|
| 1768 | + case T_ABSTRACT: |
|
| 1769 | + $isAbstract = true; |
|
| 1770 | + break; |
|
| 1771 | 1771 | |
| 1772 | - case T_FINAL: |
|
| 1773 | - $isFinal = true; |
|
| 1774 | - break; |
|
| 1772 | + case T_FINAL: |
|
| 1773 | + $isFinal = true; |
|
| 1774 | + break; |
|
| 1775 | 1775 | } |
| 1776 | 1776 | }//end for |
| 1777 | 1777 | |
@@ -217,35 +217,35 @@ discard block |
||
| 217 | 217 | } |
| 218 | 218 | |
| 219 | 219 | switch ($name) { |
| 220 | - case 'reportWidth' : |
|
| 221 | - // Support auto terminal width. |
|
| 222 | - if ($value === 'auto' && preg_match('|\d+ (\d+)|', shell_exec('stty size 2>&1'), $matches) === 1) { |
|
| 223 | - $value = (int) $matches[1]; |
|
| 224 | - } else { |
|
| 225 | - $value = (int) $value; |
|
| 226 | - } |
|
| 227 | - break; |
|
| 228 | - case 'standards' : |
|
| 229 | - $cleaned = []; |
|
| 230 | - |
|
| 231 | - // Check if the standard name is valid, or if the case is invalid. |
|
| 232 | - $installedStandards = Util\Standards::getInstalledStandards(); |
|
| 233 | - foreach ($value as $standard) { |
|
| 234 | - foreach ($installedStandards as $validStandard) { |
|
| 235 | - if (strtolower($standard) === strtolower($validStandard)) { |
|
| 236 | - $standard = $validStandard; |
|
| 237 | - break; |
|
| 238 | - } |
|
| 239 | - } |
|
| 240 | - |
|
| 241 | - $cleaned[] = $standard; |
|
| 242 | - } |
|
| 243 | - |
|
| 244 | - $value = $cleaned; |
|
| 245 | - break; |
|
| 246 | - default : |
|
| 247 | - // No validation required. |
|
| 248 | - break; |
|
| 220 | + case 'reportWidth' : |
|
| 221 | + // Support auto terminal width. |
|
| 222 | + if ($value === 'auto' && preg_match('|\d+ (\d+)|', shell_exec('stty size 2>&1'), $matches) === 1) { |
|
| 223 | + $value = (int) $matches[1]; |
|
| 224 | + } else { |
|
| 225 | + $value = (int) $value; |
|
| 226 | + } |
|
| 227 | + break; |
|
| 228 | + case 'standards' : |
|
| 229 | + $cleaned = []; |
|
| 230 | + |
|
| 231 | + // Check if the standard name is valid, or if the case is invalid. |
|
| 232 | + $installedStandards = Util\Standards::getInstalledStandards(); |
|
| 233 | + foreach ($value as $standard) { |
|
| 234 | + foreach ($installedStandards as $validStandard) { |
|
| 235 | + if (strtolower($standard) === strtolower($validStandard)) { |
|
| 236 | + $standard = $validStandard; |
|
| 237 | + break; |
|
| 238 | + } |
|
| 239 | + } |
|
| 240 | + |
|
| 241 | + $cleaned[] = $standard; |
|
| 242 | + } |
|
| 243 | + |
|
| 244 | + $value = $cleaned; |
|
| 245 | + break; |
|
| 246 | + default : |
|
| 247 | + // No validation required. |
|
| 248 | + break; |
|
| 249 | 249 | }//end switch |
| 250 | 250 | |
| 251 | 251 | $this->settings[$name] = $value; |
@@ -588,94 +588,94 @@ discard block |
||
| 588 | 588 | public function processShortArgument($arg, $pos) |
| 589 | 589 | { |
| 590 | 590 | switch ($arg) { |
| 591 | - case 'h': |
|
| 592 | - case '?': |
|
| 593 | - ob_start(); |
|
| 594 | - $this->printUsage(); |
|
| 595 | - $output = ob_get_contents(); |
|
| 596 | - ob_end_clean(); |
|
| 597 | - throw new DeepExitException($output, 0); |
|
| 598 | - case 'i' : |
|
| 599 | - ob_start(); |
|
| 600 | - Util\Standards::printInstalledStandards(); |
|
| 601 | - $output = ob_get_contents(); |
|
| 602 | - ob_end_clean(); |
|
| 603 | - throw new DeepExitException($output, 0); |
|
| 604 | - case 'v' : |
|
| 605 | - if ($this->quiet === true) { |
|
| 606 | - // Ignore when quiet mode is enabled. |
|
| 607 | - break; |
|
| 608 | - } |
|
| 609 | - |
|
| 610 | - $this->verbosity++; |
|
| 611 | - self::$overriddenDefaults['verbosity'] = true; |
|
| 612 | - break; |
|
| 613 | - case 'l' : |
|
| 614 | - $this->local = true; |
|
| 615 | - self::$overriddenDefaults['local'] = true; |
|
| 616 | - break; |
|
| 617 | - case 's' : |
|
| 618 | - $this->showSources = true; |
|
| 619 | - self::$overriddenDefaults['showSources'] = true; |
|
| 620 | - break; |
|
| 621 | - case 'a' : |
|
| 622 | - $this->interactive = true; |
|
| 623 | - self::$overriddenDefaults['interactive'] = true; |
|
| 624 | - break; |
|
| 625 | - case 'e': |
|
| 626 | - $this->explain = true; |
|
| 627 | - self::$overriddenDefaults['explain'] = true; |
|
| 628 | - break; |
|
| 629 | - case 'p' : |
|
| 630 | - if ($this->quiet === true) { |
|
| 631 | - // Ignore when quiet mode is enabled. |
|
| 632 | - break; |
|
| 633 | - } |
|
| 634 | - |
|
| 635 | - $this->showProgress = true; |
|
| 636 | - self::$overriddenDefaults['showProgress'] = true; |
|
| 637 | - break; |
|
| 638 | - case 'q' : |
|
| 639 | - // Quiet mode disables a few other settings as well. |
|
| 640 | - $this->quiet = true; |
|
| 641 | - $this->showProgress = false; |
|
| 642 | - $this->verbosity = 0; |
|
| 643 | - |
|
| 644 | - self::$overriddenDefaults['quiet'] = true; |
|
| 645 | - break; |
|
| 646 | - case 'm' : |
|
| 647 | - $this->recordErrors = false; |
|
| 648 | - self::$overriddenDefaults['recordErrors'] = true; |
|
| 649 | - break; |
|
| 650 | - case 'd' : |
|
| 651 | - $ini = explode('=', $this->cliArgs[($pos + 1)]); |
|
| 652 | - $this->cliArgs[($pos + 1)] = ''; |
|
| 653 | - if (isset($ini[1]) === true) { |
|
| 654 | - ini_set($ini[0], $ini[1]); |
|
| 655 | - } else { |
|
| 656 | - ini_set($ini[0], true); |
|
| 657 | - } |
|
| 658 | - break; |
|
| 659 | - case 'n' : |
|
| 660 | - if (isset(self::$overriddenDefaults['warningSeverity']) === false) { |
|
| 661 | - $this->warningSeverity = 0; |
|
| 662 | - self::$overriddenDefaults['warningSeverity'] = true; |
|
| 663 | - } |
|
| 664 | - break; |
|
| 665 | - case 'w' : |
|
| 666 | - if (isset(self::$overriddenDefaults['warningSeverity']) === false) { |
|
| 667 | - $this->warningSeverity = $this->errorSeverity; |
|
| 668 | - self::$overriddenDefaults['warningSeverity'] = true; |
|
| 669 | - } |
|
| 670 | - break; |
|
| 671 | - default: |
|
| 672 | - if ($this->dieOnUnknownArg === false) { |
|
| 673 | - $unknown = $this->unknown; |
|
| 674 | - $unknown[] = $arg; |
|
| 675 | - $this->unknown = $unknown; |
|
| 676 | - } else { |
|
| 677 | - $this->processUnknownArgument('-'.$arg, $pos); |
|
| 678 | - } |
|
| 591 | + case 'h': |
|
| 592 | + case '?': |
|
| 593 | + ob_start(); |
|
| 594 | + $this->printUsage(); |
|
| 595 | + $output = ob_get_contents(); |
|
| 596 | + ob_end_clean(); |
|
| 597 | + throw new DeepExitException($output, 0); |
|
| 598 | + case 'i' : |
|
| 599 | + ob_start(); |
|
| 600 | + Util\Standards::printInstalledStandards(); |
|
| 601 | + $output = ob_get_contents(); |
|
| 602 | + ob_end_clean(); |
|
| 603 | + throw new DeepExitException($output, 0); |
|
| 604 | + case 'v' : |
|
| 605 | + if ($this->quiet === true) { |
|
| 606 | + // Ignore when quiet mode is enabled. |
|
| 607 | + break; |
|
| 608 | + } |
|
| 609 | + |
|
| 610 | + $this->verbosity++; |
|
| 611 | + self::$overriddenDefaults['verbosity'] = true; |
|
| 612 | + break; |
|
| 613 | + case 'l' : |
|
| 614 | + $this->local = true; |
|
| 615 | + self::$overriddenDefaults['local'] = true; |
|
| 616 | + break; |
|
| 617 | + case 's' : |
|
| 618 | + $this->showSources = true; |
|
| 619 | + self::$overriddenDefaults['showSources'] = true; |
|
| 620 | + break; |
|
| 621 | + case 'a' : |
|
| 622 | + $this->interactive = true; |
|
| 623 | + self::$overriddenDefaults['interactive'] = true; |
|
| 624 | + break; |
|
| 625 | + case 'e': |
|
| 626 | + $this->explain = true; |
|
| 627 | + self::$overriddenDefaults['explain'] = true; |
|
| 628 | + break; |
|
| 629 | + case 'p' : |
|
| 630 | + if ($this->quiet === true) { |
|
| 631 | + // Ignore when quiet mode is enabled. |
|
| 632 | + break; |
|
| 633 | + } |
|
| 634 | + |
|
| 635 | + $this->showProgress = true; |
|
| 636 | + self::$overriddenDefaults['showProgress'] = true; |
|
| 637 | + break; |
|
| 638 | + case 'q' : |
|
| 639 | + // Quiet mode disables a few other settings as well. |
|
| 640 | + $this->quiet = true; |
|
| 641 | + $this->showProgress = false; |
|
| 642 | + $this->verbosity = 0; |
|
| 643 | + |
|
| 644 | + self::$overriddenDefaults['quiet'] = true; |
|
| 645 | + break; |
|
| 646 | + case 'm' : |
|
| 647 | + $this->recordErrors = false; |
|
| 648 | + self::$overriddenDefaults['recordErrors'] = true; |
|
| 649 | + break; |
|
| 650 | + case 'd' : |
|
| 651 | + $ini = explode('=', $this->cliArgs[($pos + 1)]); |
|
| 652 | + $this->cliArgs[($pos + 1)] = ''; |
|
| 653 | + if (isset($ini[1]) === true) { |
|
| 654 | + ini_set($ini[0], $ini[1]); |
|
| 655 | + } else { |
|
| 656 | + ini_set($ini[0], true); |
|
| 657 | + } |
|
| 658 | + break; |
|
| 659 | + case 'n' : |
|
| 660 | + if (isset(self::$overriddenDefaults['warningSeverity']) === false) { |
|
| 661 | + $this->warningSeverity = 0; |
|
| 662 | + self::$overriddenDefaults['warningSeverity'] = true; |
|
| 663 | + } |
|
| 664 | + break; |
|
| 665 | + case 'w' : |
|
| 666 | + if (isset(self::$overriddenDefaults['warningSeverity']) === false) { |
|
| 667 | + $this->warningSeverity = $this->errorSeverity; |
|
| 668 | + self::$overriddenDefaults['warningSeverity'] = true; |
|
| 669 | + } |
|
| 670 | + break; |
|
| 671 | + default: |
|
| 672 | + if ($this->dieOnUnknownArg === false) { |
|
| 673 | + $unknown = $this->unknown; |
|
| 674 | + $unknown[] = $arg; |
|
| 675 | + $this->unknown = $unknown; |
|
| 676 | + } else { |
|
| 677 | + $this->processUnknownArgument('-'.$arg, $pos); |
|
| 678 | + } |
|
| 679 | 679 | }//end switch |
| 680 | 680 | |
| 681 | 681 | }//end processShortArgument() |
@@ -692,549 +692,549 @@ discard block |
||
| 692 | 692 | public function processLongArgument($arg, $pos) |
| 693 | 693 | { |
| 694 | 694 | switch ($arg) { |
| 695 | - case 'help': |
|
| 696 | - ob_start(); |
|
| 697 | - $this->printUsage(); |
|
| 698 | - $output = ob_get_contents(); |
|
| 699 | - ob_end_clean(); |
|
| 700 | - throw new DeepExitException($output, 0); |
|
| 701 | - case 'version': |
|
| 702 | - $output = 'PHP_CodeSniffer version '.self::VERSION.' ('.self::STABILITY.') '; |
|
| 703 | - $output .= 'by Squiz (http://www.squiz.net)'.PHP_EOL; |
|
| 704 | - throw new DeepExitException($output, 0); |
|
| 705 | - case 'colors': |
|
| 706 | - if (isset(self::$overriddenDefaults['colors']) === true) { |
|
| 707 | - break; |
|
| 708 | - } |
|
| 709 | - |
|
| 710 | - $this->colors = true; |
|
| 711 | - self::$overriddenDefaults['colors'] = true; |
|
| 712 | - break; |
|
| 713 | - case 'no-colors': |
|
| 714 | - if (isset(self::$overriddenDefaults['colors']) === true) { |
|
| 715 | - break; |
|
| 716 | - } |
|
| 717 | - |
|
| 718 | - $this->colors = false; |
|
| 719 | - self::$overriddenDefaults['colors'] = true; |
|
| 720 | - break; |
|
| 721 | - case 'cache': |
|
| 722 | - if (isset(self::$overriddenDefaults['cache']) === true) { |
|
| 723 | - break; |
|
| 724 | - } |
|
| 725 | - |
|
| 726 | - if (defined('PHP_CODESNIFFER_IN_TESTS') === false) { |
|
| 727 | - $this->cache = true; |
|
| 728 | - self::$overriddenDefaults['cache'] = true; |
|
| 729 | - } |
|
| 730 | - break; |
|
| 731 | - case 'no-cache': |
|
| 732 | - if (isset(self::$overriddenDefaults['cache']) === true) { |
|
| 733 | - break; |
|
| 734 | - } |
|
| 735 | - |
|
| 736 | - $this->cache = false; |
|
| 737 | - self::$overriddenDefaults['cache'] = true; |
|
| 738 | - break; |
|
| 739 | - case 'ignore-annotations': |
|
| 740 | - if (isset(self::$overriddenDefaults['annotations']) === true) { |
|
| 741 | - break; |
|
| 742 | - } |
|
| 743 | - |
|
| 744 | - $this->annotations = false; |
|
| 745 | - self::$overriddenDefaults['annotations'] = true; |
|
| 746 | - break; |
|
| 747 | - case 'config-set': |
|
| 748 | - if (isset($this->cliArgs[($pos + 1)]) === false |
|
| 749 | - || isset($this->cliArgs[($pos + 2)]) === false |
|
| 750 | - ) { |
|
| 751 | - $error = 'ERROR: Setting a config option requires a name and value'.PHP_EOL.PHP_EOL; |
|
| 752 | - $error .= $this->printShortUsage(true); |
|
| 753 | - throw new DeepExitException($error, 3); |
|
| 754 | - } |
|
| 755 | - |
|
| 756 | - $key = $this->cliArgs[($pos + 1)]; |
|
| 757 | - $value = $this->cliArgs[($pos + 2)]; |
|
| 758 | - $current = self::getConfigData($key); |
|
| 759 | - |
|
| 760 | - try { |
|
| 761 | - $this->setConfigData($key, $value); |
|
| 762 | - } catch (\Exception $e) { |
|
| 763 | - throw new DeepExitException($e->getMessage().PHP_EOL, 3); |
|
| 764 | - } |
|
| 765 | - |
|
| 766 | - $output = 'Using config file: '.self::$configDataFile.PHP_EOL.PHP_EOL; |
|
| 767 | - |
|
| 768 | - if ($current === null) { |
|
| 769 | - $output .= "Config value \"$key\" added successfully".PHP_EOL; |
|
| 770 | - } else { |
|
| 771 | - $output .= "Config value \"$key\" updated successfully; old value was \"$current\"".PHP_EOL; |
|
| 772 | - } |
|
| 773 | - throw new DeepExitException($output, 0); |
|
| 774 | - case 'config-delete': |
|
| 775 | - if (isset($this->cliArgs[($pos + 1)]) === false) { |
|
| 776 | - $error = 'ERROR: Deleting a config option requires the name of the option'.PHP_EOL.PHP_EOL; |
|
| 777 | - $error .= $this->printShortUsage(true); |
|
| 778 | - throw new DeepExitException($error, 3); |
|
| 779 | - } |
|
| 780 | - |
|
| 781 | - $output = 'Using config file: '.self::$configDataFile.PHP_EOL.PHP_EOL; |
|
| 782 | - |
|
| 783 | - $key = $this->cliArgs[($pos + 1)]; |
|
| 784 | - $current = self::getConfigData($key); |
|
| 785 | - if ($current === null) { |
|
| 786 | - $output .= "Config value \"$key\" has not been set".PHP_EOL; |
|
| 787 | - } else { |
|
| 788 | - try { |
|
| 789 | - $this->setConfigData($key, null); |
|
| 790 | - } catch (\Exception $e) { |
|
| 791 | - throw new DeepExitException($e->getMessage().PHP_EOL, 3); |
|
| 792 | - } |
|
| 793 | - |
|
| 794 | - $output .= "Config value \"$key\" removed successfully; old value was \"$current\"".PHP_EOL; |
|
| 795 | - } |
|
| 796 | - throw new DeepExitException($output, 0); |
|
| 797 | - case 'config-show': |
|
| 798 | - ob_start(); |
|
| 799 | - $data = self::getAllConfigData(); |
|
| 800 | - echo 'Using config file: '.self::$configDataFile.PHP_EOL.PHP_EOL; |
|
| 801 | - $this->printConfigData($data); |
|
| 802 | - $output = ob_get_contents(); |
|
| 803 | - ob_end_clean(); |
|
| 804 | - throw new DeepExitException($output, 0); |
|
| 805 | - case 'runtime-set': |
|
| 806 | - if (isset($this->cliArgs[($pos + 1)]) === false |
|
| 807 | - || isset($this->cliArgs[($pos + 2)]) === false |
|
| 808 | - ) { |
|
| 809 | - $error = 'ERROR: Setting a runtime config option requires a name and value'.PHP_EOL.PHP_EOL; |
|
| 810 | - $error .= $this->printShortUsage(true); |
|
| 811 | - throw new DeepExitException($error, 3); |
|
| 812 | - } |
|
| 813 | - |
|
| 814 | - $key = $this->cliArgs[($pos + 1)]; |
|
| 815 | - $value = $this->cliArgs[($pos + 2)]; |
|
| 816 | - $this->cliArgs[($pos + 1)] = ''; |
|
| 817 | - $this->cliArgs[($pos + 2)] = ''; |
|
| 818 | - self::setConfigData($key, $value, true); |
|
| 819 | - if (isset(self::$overriddenDefaults['runtime-set']) === false) { |
|
| 820 | - self::$overriddenDefaults['runtime-set'] = []; |
|
| 821 | - } |
|
| 822 | - |
|
| 823 | - self::$overriddenDefaults['runtime-set'][$key] = true; |
|
| 824 | - break; |
|
| 825 | - default: |
|
| 826 | - if (substr($arg, 0, 7) === 'sniffs=') { |
|
| 827 | - if (isset(self::$overriddenDefaults['sniffs']) === true) { |
|
| 828 | - break; |
|
| 829 | - } |
|
| 830 | - |
|
| 831 | - $sniffs = explode(',', substr($arg, 7)); |
|
| 832 | - foreach ($sniffs as $sniff) { |
|
| 833 | - if (substr_count($sniff, '.') !== 2) { |
|
| 834 | - $error = 'ERROR: The specified sniff code "'.$sniff.'" is invalid'.PHP_EOL.PHP_EOL; |
|
| 835 | - $error .= $this->printShortUsage(true); |
|
| 836 | - throw new DeepExitException($error, 3); |
|
| 837 | - } |
|
| 838 | - } |
|
| 839 | - |
|
| 840 | - $this->sniffs = $sniffs; |
|
| 841 | - self::$overriddenDefaults['sniffs'] = true; |
|
| 842 | - } else if (substr($arg, 0, 8) === 'exclude=') { |
|
| 843 | - if (isset(self::$overriddenDefaults['exclude']) === true) { |
|
| 844 | - break; |
|
| 845 | - } |
|
| 846 | - |
|
| 847 | - $sniffs = explode(',', substr($arg, 8)); |
|
| 848 | - foreach ($sniffs as $sniff) { |
|
| 849 | - if (substr_count($sniff, '.') !== 2) { |
|
| 850 | - $error = 'ERROR: The specified sniff code "'.$sniff.'" is invalid'.PHP_EOL.PHP_EOL; |
|
| 851 | - $error .= $this->printShortUsage(true); |
|
| 852 | - throw new DeepExitException($error, 3); |
|
| 853 | - } |
|
| 854 | - } |
|
| 855 | - |
|
| 856 | - $this->exclude = $sniffs; |
|
| 857 | - self::$overriddenDefaults['exclude'] = true; |
|
| 858 | - } else if (defined('PHP_CODESNIFFER_IN_TESTS') === false |
|
| 859 | - && substr($arg, 0, 6) === 'cache=' |
|
| 860 | - ) { |
|
| 861 | - if ((isset(self::$overriddenDefaults['cache']) === true |
|
| 862 | - && $this->cache === false) |
|
| 863 | - || isset(self::$overriddenDefaults['cacheFile']) === true |
|
| 864 | - ) { |
|
| 865 | - break; |
|
| 866 | - } |
|
| 867 | - |
|
| 868 | - // Turn caching on. |
|
| 869 | - $this->cache = true; |
|
| 870 | - self::$overriddenDefaults['cache'] = true; |
|
| 871 | - |
|
| 872 | - $this->cacheFile = Util\Common::realpath(substr($arg, 6)); |
|
| 873 | - |
|
| 874 | - // It may not exist and return false instead. |
|
| 875 | - if ($this->cacheFile === false) { |
|
| 876 | - $this->cacheFile = substr($arg, 6); |
|
| 877 | - |
|
| 878 | - $dir = dirname($this->cacheFile); |
|
| 879 | - if (is_dir($dir) === false) { |
|
| 880 | - $error = 'ERROR: The specified cache file path "'.$this->cacheFile.'" points to a non-existent directory'.PHP_EOL.PHP_EOL; |
|
| 881 | - $error .= $this->printShortUsage(true); |
|
| 882 | - throw new DeepExitException($error, 3); |
|
| 883 | - } |
|
| 884 | - |
|
| 885 | - if ($dir === '.') { |
|
| 886 | - // Passed cache file is a file in the current directory. |
|
| 887 | - $this->cacheFile = getcwd().'/'.basename($this->cacheFile); |
|
| 888 | - } else { |
|
| 889 | - if ($dir{0} === '/') { |
|
| 890 | - // An absolute path. |
|
| 891 | - $dir = Util\Common::realpath($dir); |
|
| 892 | - } else { |
|
| 893 | - $dir = Util\Common::realpath(getcwd().'/'.$dir); |
|
| 894 | - } |
|
| 895 | - |
|
| 896 | - if ($dir !== false) { |
|
| 897 | - // Cache file path is relative. |
|
| 898 | - $this->cacheFile = $dir.'/'.basename($this->cacheFile); |
|
| 899 | - } |
|
| 900 | - } |
|
| 901 | - }//end if |
|
| 902 | - |
|
| 903 | - self::$overriddenDefaults['cacheFile'] = true; |
|
| 904 | - |
|
| 905 | - if (is_dir($this->cacheFile) === true) { |
|
| 906 | - $error = 'ERROR: The specified cache file path "'.$this->cacheFile.'" is a directory'.PHP_EOL.PHP_EOL; |
|
| 907 | - $error .= $this->printShortUsage(true); |
|
| 908 | - throw new DeepExitException($error, 3); |
|
| 909 | - } |
|
| 910 | - } else if (substr($arg, 0, 10) === 'bootstrap=') { |
|
| 911 | - $files = explode(',', substr($arg, 10)); |
|
| 912 | - $bootstrap = []; |
|
| 913 | - foreach ($files as $file) { |
|
| 914 | - $path = Util\Common::realpath($file); |
|
| 915 | - if ($path === false) { |
|
| 916 | - $error = 'ERROR: The specified bootstrap file "'.$file.'" does not exist'.PHP_EOL.PHP_EOL; |
|
| 917 | - $error .= $this->printShortUsage(true); |
|
| 918 | - throw new DeepExitException($error, 3); |
|
| 919 | - } |
|
| 920 | - |
|
| 921 | - $bootstrap[] = $path; |
|
| 922 | - } |
|
| 923 | - |
|
| 924 | - $this->bootstrap = array_merge($this->bootstrap, $bootstrap); |
|
| 925 | - self::$overriddenDefaults['bootstrap'] = true; |
|
| 926 | - } else if (substr($arg, 0, 10) === 'file-list=') { |
|
| 927 | - $fileList = substr($arg, 10); |
|
| 928 | - $path = Util\Common::realpath($fileList); |
|
| 929 | - if ($path === false) { |
|
| 930 | - $error = 'ERROR: The specified file list "'.$fileList.'" does not exist'.PHP_EOL.PHP_EOL; |
|
| 931 | - $error .= $this->printShortUsage(true); |
|
| 932 | - throw new DeepExitException($error, 3); |
|
| 933 | - } |
|
| 934 | - |
|
| 935 | - $files = file($path); |
|
| 936 | - foreach ($files as $inputFile) { |
|
| 937 | - $inputFile = trim($inputFile); |
|
| 938 | - |
|
| 939 | - // Skip empty lines. |
|
| 940 | - if ($inputFile === '') { |
|
| 941 | - continue; |
|
| 942 | - } |
|
| 943 | - |
|
| 944 | - $this->processFilePath($inputFile); |
|
| 945 | - } |
|
| 946 | - } else if (substr($arg, 0, 11) === 'stdin-path=') { |
|
| 947 | - if (isset(self::$overriddenDefaults['stdinPath']) === true) { |
|
| 948 | - break; |
|
| 949 | - } |
|
| 950 | - |
|
| 951 | - $this->stdinPath = Util\Common::realpath(substr($arg, 11)); |
|
| 952 | - |
|
| 953 | - // It may not exist and return false instead, so use whatever they gave us. |
|
| 954 | - if ($this->stdinPath === false) { |
|
| 955 | - $this->stdinPath = trim(substr($arg, 11)); |
|
| 956 | - } |
|
| 957 | - |
|
| 958 | - self::$overriddenDefaults['stdinPath'] = true; |
|
| 959 | - } else if (PHP_CODESNIFFER_CBF === false && substr($arg, 0, 12) === 'report-file=') { |
|
| 960 | - if (isset(self::$overriddenDefaults['reportFile']) === true) { |
|
| 961 | - break; |
|
| 962 | - } |
|
| 963 | - |
|
| 964 | - $this->reportFile = Util\Common::realpath(substr($arg, 12)); |
|
| 965 | - |
|
| 966 | - // It may not exist and return false instead. |
|
| 967 | - if ($this->reportFile === false) { |
|
| 968 | - $this->reportFile = substr($arg, 12); |
|
| 969 | - |
|
| 970 | - $dir = dirname($this->reportFile); |
|
| 971 | - if (is_dir($dir) === false) { |
|
| 972 | - $error = 'ERROR: The specified report file path "'.$this->reportFile.'" points to a non-existent directory'.PHP_EOL.PHP_EOL; |
|
| 973 | - $error .= $this->printShortUsage(true); |
|
| 974 | - throw new DeepExitException($error, 3); |
|
| 975 | - } |
|
| 976 | - |
|
| 977 | - if ($dir === '.') { |
|
| 978 | - // Passed report file is a file in the current directory. |
|
| 979 | - $this->reportFile = getcwd().'/'.basename($this->reportFile); |
|
| 980 | - } else { |
|
| 981 | - if ($dir{0} === '/') { |
|
| 982 | - // An absolute path. |
|
| 983 | - $dir = Util\Common::realpath($dir); |
|
| 984 | - } else { |
|
| 985 | - $dir = Util\Common::realpath(getcwd().'/'.$dir); |
|
| 986 | - } |
|
| 987 | - |
|
| 988 | - if ($dir !== false) { |
|
| 989 | - // Report file path is relative. |
|
| 990 | - $this->reportFile = $dir.'/'.basename($this->reportFile); |
|
| 991 | - } |
|
| 992 | - } |
|
| 993 | - }//end if |
|
| 994 | - |
|
| 995 | - self::$overriddenDefaults['reportFile'] = true; |
|
| 996 | - |
|
| 997 | - if (is_dir($this->reportFile) === true) { |
|
| 998 | - $error = 'ERROR: The specified report file path "'.$this->reportFile.'" is a directory'.PHP_EOL.PHP_EOL; |
|
| 999 | - $error .= $this->printShortUsage(true); |
|
| 1000 | - throw new DeepExitException($error, 3); |
|
| 1001 | - } |
|
| 1002 | - } else if (substr($arg, 0, 13) === 'report-width=') { |
|
| 1003 | - if (isset(self::$overriddenDefaults['reportWidth']) === true) { |
|
| 1004 | - break; |
|
| 1005 | - } |
|
| 1006 | - |
|
| 1007 | - $this->reportWidth = substr($arg, 13); |
|
| 1008 | - self::$overriddenDefaults['reportWidth'] = true; |
|
| 1009 | - } else if (substr($arg, 0, 9) === 'basepath=') { |
|
| 1010 | - if (isset(self::$overriddenDefaults['basepath']) === true) { |
|
| 1011 | - break; |
|
| 1012 | - } |
|
| 1013 | - |
|
| 1014 | - self::$overriddenDefaults['basepath'] = true; |
|
| 1015 | - |
|
| 1016 | - if (substr($arg, 9) === '') { |
|
| 1017 | - $this->basepath = null; |
|
| 1018 | - break; |
|
| 1019 | - } |
|
| 1020 | - |
|
| 1021 | - $this->basepath = Util\Common::realpath(substr($arg, 9)); |
|
| 1022 | - |
|
| 1023 | - // It may not exist and return false instead. |
|
| 1024 | - if ($this->basepath === false) { |
|
| 1025 | - $this->basepath = substr($arg, 9); |
|
| 1026 | - } |
|
| 1027 | - |
|
| 1028 | - if (is_dir($this->basepath) === false) { |
|
| 1029 | - $error = 'ERROR: The specified basepath "'.$this->basepath.'" points to a non-existent directory'.PHP_EOL.PHP_EOL; |
|
| 1030 | - $error .= $this->printShortUsage(true); |
|
| 1031 | - throw new DeepExitException($error, 3); |
|
| 1032 | - } |
|
| 1033 | - } else if ((substr($arg, 0, 7) === 'report=' || substr($arg, 0, 7) === 'report-')) { |
|
| 1034 | - $reports = []; |
|
| 1035 | - |
|
| 1036 | - if ($arg[6] === '-') { |
|
| 1037 | - // This is a report with file output. |
|
| 1038 | - $split = strpos($arg, '='); |
|
| 1039 | - if ($split === false) { |
|
| 1040 | - $report = substr($arg, 7); |
|
| 1041 | - $output = null; |
|
| 1042 | - } else { |
|
| 1043 | - $report = substr($arg, 7, ($split - 7)); |
|
| 1044 | - $output = substr($arg, ($split + 1)); |
|
| 1045 | - if ($output === false) { |
|
| 1046 | - $output = null; |
|
| 1047 | - } else { |
|
| 1048 | - $dir = dirname($output); |
|
| 1049 | - if (is_dir($dir) === false) { |
|
| 1050 | - $error = 'ERROR: The specified '.$report.' report file path "'.$output.'" points to a non-existent directory'.PHP_EOL.PHP_EOL; |
|
| 1051 | - $error .= $this->printShortUsage(true); |
|
| 1052 | - throw new DeepExitException($error, 3); |
|
| 1053 | - } |
|
| 1054 | - |
|
| 1055 | - if ($dir === '.') { |
|
| 1056 | - // Passed report file is a filename in the current directory. |
|
| 1057 | - $output = getcwd().'/'.basename($output); |
|
| 1058 | - } else { |
|
| 1059 | - if ($dir{0} === '/') { |
|
| 1060 | - // An absolute path. |
|
| 1061 | - $dir = Util\Common::realpath($dir); |
|
| 1062 | - } else { |
|
| 1063 | - $dir = Util\Common::realpath(getcwd().'/'.$dir); |
|
| 1064 | - } |
|
| 1065 | - |
|
| 1066 | - if ($dir !== false) { |
|
| 1067 | - // Report file path is relative. |
|
| 1068 | - $output = $dir.'/'.basename($output); |
|
| 1069 | - } |
|
| 1070 | - } |
|
| 1071 | - }//end if |
|
| 1072 | - }//end if |
|
| 1073 | - |
|
| 1074 | - $reports[$report] = $output; |
|
| 1075 | - } else { |
|
| 1076 | - // This is a single report. |
|
| 1077 | - if (isset(self::$overriddenDefaults['reports']) === true) { |
|
| 1078 | - break; |
|
| 1079 | - } |
|
| 1080 | - |
|
| 1081 | - $reportNames = explode(',', substr($arg, 7)); |
|
| 1082 | - foreach ($reportNames as $report) { |
|
| 1083 | - $reports[$report] = null; |
|
| 1084 | - } |
|
| 1085 | - }//end if |
|
| 1086 | - |
|
| 1087 | - // Remove the default value so the CLI value overrides it. |
|
| 1088 | - if (isset(self::$overriddenDefaults['reports']) === false) { |
|
| 1089 | - $this->reports = $reports; |
|
| 1090 | - } else { |
|
| 1091 | - $this->reports = array_merge($this->reports, $reports); |
|
| 1092 | - } |
|
| 1093 | - |
|
| 1094 | - self::$overriddenDefaults['reports'] = true; |
|
| 1095 | - } else if (substr($arg, 0, 7) === 'filter=') { |
|
| 1096 | - if (isset(self::$overriddenDefaults['filter']) === true) { |
|
| 1097 | - break; |
|
| 1098 | - } |
|
| 1099 | - |
|
| 1100 | - $this->filter = substr($arg, 7); |
|
| 1101 | - self::$overriddenDefaults['filter'] = true; |
|
| 1102 | - } else if (substr($arg, 0, 9) === 'standard=') { |
|
| 1103 | - $standards = trim(substr($arg, 9)); |
|
| 1104 | - if ($standards !== '') { |
|
| 1105 | - $this->standards = explode(',', $standards); |
|
| 1106 | - } |
|
| 1107 | - |
|
| 1108 | - self::$overriddenDefaults['standards'] = true; |
|
| 1109 | - } else if (substr($arg, 0, 11) === 'extensions=') { |
|
| 1110 | - if (isset(self::$overriddenDefaults['extensions']) === true) { |
|
| 1111 | - break; |
|
| 1112 | - } |
|
| 1113 | - |
|
| 1114 | - $extensions = explode(',', substr($arg, 11)); |
|
| 1115 | - $newExtensions = []; |
|
| 1116 | - foreach ($extensions as $ext) { |
|
| 1117 | - $slash = strpos($ext, '/'); |
|
| 1118 | - if ($slash !== false) { |
|
| 1119 | - // They specified the tokenizer too. |
|
| 1120 | - list($ext, $tokenizer) = explode('/', $ext); |
|
| 1121 | - $newExtensions[$ext] = strtoupper($tokenizer); |
|
| 1122 | - continue; |
|
| 1123 | - } |
|
| 1124 | - |
|
| 1125 | - if (isset($this->extensions[$ext]) === true) { |
|
| 1126 | - $newExtensions[$ext] = $this->extensions[$ext]; |
|
| 1127 | - } else { |
|
| 1128 | - $newExtensions[$ext] = 'PHP'; |
|
| 1129 | - } |
|
| 1130 | - } |
|
| 1131 | - |
|
| 1132 | - $this->extensions = $newExtensions; |
|
| 1133 | - self::$overriddenDefaults['extensions'] = true; |
|
| 1134 | - } else if (substr($arg, 0, 7) === 'suffix=') { |
|
| 1135 | - if (isset(self::$overriddenDefaults['suffix']) === true) { |
|
| 1136 | - break; |
|
| 1137 | - } |
|
| 1138 | - |
|
| 1139 | - $this->suffix = substr($arg, 7); |
|
| 1140 | - self::$overriddenDefaults['suffix'] = true; |
|
| 1141 | - } else if (substr($arg, 0, 9) === 'parallel=') { |
|
| 1142 | - if (isset(self::$overriddenDefaults['parallel']) === true) { |
|
| 1143 | - break; |
|
| 1144 | - } |
|
| 1145 | - |
|
| 1146 | - $this->parallel = max((int) substr($arg, 9), 1); |
|
| 1147 | - self::$overriddenDefaults['parallel'] = true; |
|
| 1148 | - } else if (substr($arg, 0, 9) === 'severity=') { |
|
| 1149 | - $this->errorSeverity = (int) substr($arg, 9); |
|
| 1150 | - $this->warningSeverity = $this->errorSeverity; |
|
| 1151 | - if (isset(self::$overriddenDefaults['errorSeverity']) === false) { |
|
| 1152 | - self::$overriddenDefaults['errorSeverity'] = true; |
|
| 1153 | - } |
|
| 1154 | - |
|
| 1155 | - if (isset(self::$overriddenDefaults['warningSeverity']) === false) { |
|
| 1156 | - self::$overriddenDefaults['warningSeverity'] = true; |
|
| 1157 | - } |
|
| 1158 | - } else if (substr($arg, 0, 15) === 'error-severity=') { |
|
| 1159 | - if (isset(self::$overriddenDefaults['errorSeverity']) === true) { |
|
| 1160 | - break; |
|
| 1161 | - } |
|
| 1162 | - |
|
| 1163 | - $this->errorSeverity = (int) substr($arg, 15); |
|
| 1164 | - self::$overriddenDefaults['errorSeverity'] = true; |
|
| 1165 | - } else if (substr($arg, 0, 17) === 'warning-severity=') { |
|
| 1166 | - if (isset(self::$overriddenDefaults['warningSeverity']) === true) { |
|
| 1167 | - break; |
|
| 1168 | - } |
|
| 1169 | - |
|
| 1170 | - $this->warningSeverity = (int) substr($arg, 17); |
|
| 1171 | - self::$overriddenDefaults['warningSeverity'] = true; |
|
| 1172 | - } else if (substr($arg, 0, 7) === 'ignore=') { |
|
| 1173 | - if (isset(self::$overriddenDefaults['ignored']) === true) { |
|
| 1174 | - break; |
|
| 1175 | - } |
|
| 1176 | - |
|
| 1177 | - // Split the ignore string on commas, unless the comma is escaped |
|
| 1178 | - // using 1 or 3 slashes (\, or \\\,). |
|
| 1179 | - $patterns = preg_split( |
|
| 1180 | - '/(?<=(?<!\\\\)\\\\\\\\),|(?<!\\\\),/', |
|
| 1181 | - substr($arg, 7) |
|
| 1182 | - ); |
|
| 1183 | - |
|
| 1184 | - $ignored = []; |
|
| 1185 | - foreach ($patterns as $pattern) { |
|
| 1186 | - $pattern = trim($pattern); |
|
| 1187 | - if ($pattern === '') { |
|
| 1188 | - continue; |
|
| 1189 | - } |
|
| 1190 | - |
|
| 1191 | - $ignored[$pattern] = 'absolute'; |
|
| 1192 | - } |
|
| 1193 | - |
|
| 1194 | - $this->ignored = $ignored; |
|
| 1195 | - self::$overriddenDefaults['ignored'] = true; |
|
| 1196 | - } else if (substr($arg, 0, 10) === 'generator=' |
|
| 1197 | - && PHP_CODESNIFFER_CBF === false |
|
| 1198 | - ) { |
|
| 1199 | - if (isset(self::$overriddenDefaults['generator']) === true) { |
|
| 1200 | - break; |
|
| 1201 | - } |
|
| 1202 | - |
|
| 1203 | - $this->generator = substr($arg, 10); |
|
| 1204 | - self::$overriddenDefaults['generator'] = true; |
|
| 1205 | - } else if (substr($arg, 0, 9) === 'encoding=') { |
|
| 1206 | - if (isset(self::$overriddenDefaults['encoding']) === true) { |
|
| 1207 | - break; |
|
| 1208 | - } |
|
| 1209 | - |
|
| 1210 | - $this->encoding = strtolower(substr($arg, 9)); |
|
| 1211 | - self::$overriddenDefaults['encoding'] = true; |
|
| 1212 | - } else if (substr($arg, 0, 10) === 'tab-width=') { |
|
| 1213 | - if (isset(self::$overriddenDefaults['tabWidth']) === true) { |
|
| 1214 | - break; |
|
| 1215 | - } |
|
| 1216 | - |
|
| 1217 | - $this->tabWidth = (int) substr($arg, 10); |
|
| 1218 | - self::$overriddenDefaults['tabWidth'] = true; |
|
| 1219 | - } else { |
|
| 1220 | - if ($this->dieOnUnknownArg === false) { |
|
| 1221 | - $eqPos = strpos($arg, '='); |
|
| 1222 | - try { |
|
| 1223 | - if ($eqPos === false) { |
|
| 1224 | - $this->values[$arg] = $arg; |
|
| 1225 | - } else { |
|
| 1226 | - $value = substr($arg, ($eqPos + 1)); |
|
| 1227 | - $arg = substr($arg, 0, $eqPos); |
|
| 1228 | - $this->values[$arg] = $value; |
|
| 1229 | - } |
|
| 1230 | - } catch (RuntimeException $e) { |
|
| 1231 | - // Value is not valid, so just ignore it. |
|
| 1232 | - } |
|
| 1233 | - } else { |
|
| 1234 | - $this->processUnknownArgument('--'.$arg, $pos); |
|
| 1235 | - } |
|
| 1236 | - }//end if |
|
| 1237 | - break; |
|
| 695 | + case 'help': |
|
| 696 | + ob_start(); |
|
| 697 | + $this->printUsage(); |
|
| 698 | + $output = ob_get_contents(); |
|
| 699 | + ob_end_clean(); |
|
| 700 | + throw new DeepExitException($output, 0); |
|
| 701 | + case 'version': |
|
| 702 | + $output = 'PHP_CodeSniffer version '.self::VERSION.' ('.self::STABILITY.') '; |
|
| 703 | + $output .= 'by Squiz (http://www.squiz.net)'.PHP_EOL; |
|
| 704 | + throw new DeepExitException($output, 0); |
|
| 705 | + case 'colors': |
|
| 706 | + if (isset(self::$overriddenDefaults['colors']) === true) { |
|
| 707 | + break; |
|
| 708 | + } |
|
| 709 | + |
|
| 710 | + $this->colors = true; |
|
| 711 | + self::$overriddenDefaults['colors'] = true; |
|
| 712 | + break; |
|
| 713 | + case 'no-colors': |
|
| 714 | + if (isset(self::$overriddenDefaults['colors']) === true) { |
|
| 715 | + break; |
|
| 716 | + } |
|
| 717 | + |
|
| 718 | + $this->colors = false; |
|
| 719 | + self::$overriddenDefaults['colors'] = true; |
|
| 720 | + break; |
|
| 721 | + case 'cache': |
|
| 722 | + if (isset(self::$overriddenDefaults['cache']) === true) { |
|
| 723 | + break; |
|
| 724 | + } |
|
| 725 | + |
|
| 726 | + if (defined('PHP_CODESNIFFER_IN_TESTS') === false) { |
|
| 727 | + $this->cache = true; |
|
| 728 | + self::$overriddenDefaults['cache'] = true; |
|
| 729 | + } |
|
| 730 | + break; |
|
| 731 | + case 'no-cache': |
|
| 732 | + if (isset(self::$overriddenDefaults['cache']) === true) { |
|
| 733 | + break; |
|
| 734 | + } |
|
| 735 | + |
|
| 736 | + $this->cache = false; |
|
| 737 | + self::$overriddenDefaults['cache'] = true; |
|
| 738 | + break; |
|
| 739 | + case 'ignore-annotations': |
|
| 740 | + if (isset(self::$overriddenDefaults['annotations']) === true) { |
|
| 741 | + break; |
|
| 742 | + } |
|
| 743 | + |
|
| 744 | + $this->annotations = false; |
|
| 745 | + self::$overriddenDefaults['annotations'] = true; |
|
| 746 | + break; |
|
| 747 | + case 'config-set': |
|
| 748 | + if (isset($this->cliArgs[($pos + 1)]) === false |
|
| 749 | + || isset($this->cliArgs[($pos + 2)]) === false |
|
| 750 | + ) { |
|
| 751 | + $error = 'ERROR: Setting a config option requires a name and value'.PHP_EOL.PHP_EOL; |
|
| 752 | + $error .= $this->printShortUsage(true); |
|
| 753 | + throw new DeepExitException($error, 3); |
|
| 754 | + } |
|
| 755 | + |
|
| 756 | + $key = $this->cliArgs[($pos + 1)]; |
|
| 757 | + $value = $this->cliArgs[($pos + 2)]; |
|
| 758 | + $current = self::getConfigData($key); |
|
| 759 | + |
|
| 760 | + try { |
|
| 761 | + $this->setConfigData($key, $value); |
|
| 762 | + } catch (\Exception $e) { |
|
| 763 | + throw new DeepExitException($e->getMessage().PHP_EOL, 3); |
|
| 764 | + } |
|
| 765 | + |
|
| 766 | + $output = 'Using config file: '.self::$configDataFile.PHP_EOL.PHP_EOL; |
|
| 767 | + |
|
| 768 | + if ($current === null) { |
|
| 769 | + $output .= "Config value \"$key\" added successfully".PHP_EOL; |
|
| 770 | + } else { |
|
| 771 | + $output .= "Config value \"$key\" updated successfully; old value was \"$current\"".PHP_EOL; |
|
| 772 | + } |
|
| 773 | + throw new DeepExitException($output, 0); |
|
| 774 | + case 'config-delete': |
|
| 775 | + if (isset($this->cliArgs[($pos + 1)]) === false) { |
|
| 776 | + $error = 'ERROR: Deleting a config option requires the name of the option'.PHP_EOL.PHP_EOL; |
|
| 777 | + $error .= $this->printShortUsage(true); |
|
| 778 | + throw new DeepExitException($error, 3); |
|
| 779 | + } |
|
| 780 | + |
|
| 781 | + $output = 'Using config file: '.self::$configDataFile.PHP_EOL.PHP_EOL; |
|
| 782 | + |
|
| 783 | + $key = $this->cliArgs[($pos + 1)]; |
|
| 784 | + $current = self::getConfigData($key); |
|
| 785 | + if ($current === null) { |
|
| 786 | + $output .= "Config value \"$key\" has not been set".PHP_EOL; |
|
| 787 | + } else { |
|
| 788 | + try { |
|
| 789 | + $this->setConfigData($key, null); |
|
| 790 | + } catch (\Exception $e) { |
|
| 791 | + throw new DeepExitException($e->getMessage().PHP_EOL, 3); |
|
| 792 | + } |
|
| 793 | + |
|
| 794 | + $output .= "Config value \"$key\" removed successfully; old value was \"$current\"".PHP_EOL; |
|
| 795 | + } |
|
| 796 | + throw new DeepExitException($output, 0); |
|
| 797 | + case 'config-show': |
|
| 798 | + ob_start(); |
|
| 799 | + $data = self::getAllConfigData(); |
|
| 800 | + echo 'Using config file: '.self::$configDataFile.PHP_EOL.PHP_EOL; |
|
| 801 | + $this->printConfigData($data); |
|
| 802 | + $output = ob_get_contents(); |
|
| 803 | + ob_end_clean(); |
|
| 804 | + throw new DeepExitException($output, 0); |
|
| 805 | + case 'runtime-set': |
|
| 806 | + if (isset($this->cliArgs[($pos + 1)]) === false |
|
| 807 | + || isset($this->cliArgs[($pos + 2)]) === false |
|
| 808 | + ) { |
|
| 809 | + $error = 'ERROR: Setting a runtime config option requires a name and value'.PHP_EOL.PHP_EOL; |
|
| 810 | + $error .= $this->printShortUsage(true); |
|
| 811 | + throw new DeepExitException($error, 3); |
|
| 812 | + } |
|
| 813 | + |
|
| 814 | + $key = $this->cliArgs[($pos + 1)]; |
|
| 815 | + $value = $this->cliArgs[($pos + 2)]; |
|
| 816 | + $this->cliArgs[($pos + 1)] = ''; |
|
| 817 | + $this->cliArgs[($pos + 2)] = ''; |
|
| 818 | + self::setConfigData($key, $value, true); |
|
| 819 | + if (isset(self::$overriddenDefaults['runtime-set']) === false) { |
|
| 820 | + self::$overriddenDefaults['runtime-set'] = []; |
|
| 821 | + } |
|
| 822 | + |
|
| 823 | + self::$overriddenDefaults['runtime-set'][$key] = true; |
|
| 824 | + break; |
|
| 825 | + default: |
|
| 826 | + if (substr($arg, 0, 7) === 'sniffs=') { |
|
| 827 | + if (isset(self::$overriddenDefaults['sniffs']) === true) { |
|
| 828 | + break; |
|
| 829 | + } |
|
| 830 | + |
|
| 831 | + $sniffs = explode(',', substr($arg, 7)); |
|
| 832 | + foreach ($sniffs as $sniff) { |
|
| 833 | + if (substr_count($sniff, '.') !== 2) { |
|
| 834 | + $error = 'ERROR: The specified sniff code "'.$sniff.'" is invalid'.PHP_EOL.PHP_EOL; |
|
| 835 | + $error .= $this->printShortUsage(true); |
|
| 836 | + throw new DeepExitException($error, 3); |
|
| 837 | + } |
|
| 838 | + } |
|
| 839 | + |
|
| 840 | + $this->sniffs = $sniffs; |
|
| 841 | + self::$overriddenDefaults['sniffs'] = true; |
|
| 842 | + } else if (substr($arg, 0, 8) === 'exclude=') { |
|
| 843 | + if (isset(self::$overriddenDefaults['exclude']) === true) { |
|
| 844 | + break; |
|
| 845 | + } |
|
| 846 | + |
|
| 847 | + $sniffs = explode(',', substr($arg, 8)); |
|
| 848 | + foreach ($sniffs as $sniff) { |
|
| 849 | + if (substr_count($sniff, '.') !== 2) { |
|
| 850 | + $error = 'ERROR: The specified sniff code "'.$sniff.'" is invalid'.PHP_EOL.PHP_EOL; |
|
| 851 | + $error .= $this->printShortUsage(true); |
|
| 852 | + throw new DeepExitException($error, 3); |
|
| 853 | + } |
|
| 854 | + } |
|
| 855 | + |
|
| 856 | + $this->exclude = $sniffs; |
|
| 857 | + self::$overriddenDefaults['exclude'] = true; |
|
| 858 | + } else if (defined('PHP_CODESNIFFER_IN_TESTS') === false |
|
| 859 | + && substr($arg, 0, 6) === 'cache=' |
|
| 860 | + ) { |
|
| 861 | + if ((isset(self::$overriddenDefaults['cache']) === true |
|
| 862 | + && $this->cache === false) |
|
| 863 | + || isset(self::$overriddenDefaults['cacheFile']) === true |
|
| 864 | + ) { |
|
| 865 | + break; |
|
| 866 | + } |
|
| 867 | + |
|
| 868 | + // Turn caching on. |
|
| 869 | + $this->cache = true; |
|
| 870 | + self::$overriddenDefaults['cache'] = true; |
|
| 871 | + |
|
| 872 | + $this->cacheFile = Util\Common::realpath(substr($arg, 6)); |
|
| 873 | + |
|
| 874 | + // It may not exist and return false instead. |
|
| 875 | + if ($this->cacheFile === false) { |
|
| 876 | + $this->cacheFile = substr($arg, 6); |
|
| 877 | + |
|
| 878 | + $dir = dirname($this->cacheFile); |
|
| 879 | + if (is_dir($dir) === false) { |
|
| 880 | + $error = 'ERROR: The specified cache file path "'.$this->cacheFile.'" points to a non-existent directory'.PHP_EOL.PHP_EOL; |
|
| 881 | + $error .= $this->printShortUsage(true); |
|
| 882 | + throw new DeepExitException($error, 3); |
|
| 883 | + } |
|
| 884 | + |
|
| 885 | + if ($dir === '.') { |
|
| 886 | + // Passed cache file is a file in the current directory. |
|
| 887 | + $this->cacheFile = getcwd().'/'.basename($this->cacheFile); |
|
| 888 | + } else { |
|
| 889 | + if ($dir{0} === '/') { |
|
| 890 | + // An absolute path. |
|
| 891 | + $dir = Util\Common::realpath($dir); |
|
| 892 | + } else { |
|
| 893 | + $dir = Util\Common::realpath(getcwd().'/'.$dir); |
|
| 894 | + } |
|
| 895 | + |
|
| 896 | + if ($dir !== false) { |
|
| 897 | + // Cache file path is relative. |
|
| 898 | + $this->cacheFile = $dir.'/'.basename($this->cacheFile); |
|
| 899 | + } |
|
| 900 | + } |
|
| 901 | + }//end if |
|
| 902 | + |
|
| 903 | + self::$overriddenDefaults['cacheFile'] = true; |
|
| 904 | + |
|
| 905 | + if (is_dir($this->cacheFile) === true) { |
|
| 906 | + $error = 'ERROR: The specified cache file path "'.$this->cacheFile.'" is a directory'.PHP_EOL.PHP_EOL; |
|
| 907 | + $error .= $this->printShortUsage(true); |
|
| 908 | + throw new DeepExitException($error, 3); |
|
| 909 | + } |
|
| 910 | + } else if (substr($arg, 0, 10) === 'bootstrap=') { |
|
| 911 | + $files = explode(',', substr($arg, 10)); |
|
| 912 | + $bootstrap = []; |
|
| 913 | + foreach ($files as $file) { |
|
| 914 | + $path = Util\Common::realpath($file); |
|
| 915 | + if ($path === false) { |
|
| 916 | + $error = 'ERROR: The specified bootstrap file "'.$file.'" does not exist'.PHP_EOL.PHP_EOL; |
|
| 917 | + $error .= $this->printShortUsage(true); |
|
| 918 | + throw new DeepExitException($error, 3); |
|
| 919 | + } |
|
| 920 | + |
|
| 921 | + $bootstrap[] = $path; |
|
| 922 | + } |
|
| 923 | + |
|
| 924 | + $this->bootstrap = array_merge($this->bootstrap, $bootstrap); |
|
| 925 | + self::$overriddenDefaults['bootstrap'] = true; |
|
| 926 | + } else if (substr($arg, 0, 10) === 'file-list=') { |
|
| 927 | + $fileList = substr($arg, 10); |
|
| 928 | + $path = Util\Common::realpath($fileList); |
|
| 929 | + if ($path === false) { |
|
| 930 | + $error = 'ERROR: The specified file list "'.$fileList.'" does not exist'.PHP_EOL.PHP_EOL; |
|
| 931 | + $error .= $this->printShortUsage(true); |
|
| 932 | + throw new DeepExitException($error, 3); |
|
| 933 | + } |
|
| 934 | + |
|
| 935 | + $files = file($path); |
|
| 936 | + foreach ($files as $inputFile) { |
|
| 937 | + $inputFile = trim($inputFile); |
|
| 938 | + |
|
| 939 | + // Skip empty lines. |
|
| 940 | + if ($inputFile === '') { |
|
| 941 | + continue; |
|
| 942 | + } |
|
| 943 | + |
|
| 944 | + $this->processFilePath($inputFile); |
|
| 945 | + } |
|
| 946 | + } else if (substr($arg, 0, 11) === 'stdin-path=') { |
|
| 947 | + if (isset(self::$overriddenDefaults['stdinPath']) === true) { |
|
| 948 | + break; |
|
| 949 | + } |
|
| 950 | + |
|
| 951 | + $this->stdinPath = Util\Common::realpath(substr($arg, 11)); |
|
| 952 | + |
|
| 953 | + // It may not exist and return false instead, so use whatever they gave us. |
|
| 954 | + if ($this->stdinPath === false) { |
|
| 955 | + $this->stdinPath = trim(substr($arg, 11)); |
|
| 956 | + } |
|
| 957 | + |
|
| 958 | + self::$overriddenDefaults['stdinPath'] = true; |
|
| 959 | + } else if (PHP_CODESNIFFER_CBF === false && substr($arg, 0, 12) === 'report-file=') { |
|
| 960 | + if (isset(self::$overriddenDefaults['reportFile']) === true) { |
|
| 961 | + break; |
|
| 962 | + } |
|
| 963 | + |
|
| 964 | + $this->reportFile = Util\Common::realpath(substr($arg, 12)); |
|
| 965 | + |
|
| 966 | + // It may not exist and return false instead. |
|
| 967 | + if ($this->reportFile === false) { |
|
| 968 | + $this->reportFile = substr($arg, 12); |
|
| 969 | + |
|
| 970 | + $dir = dirname($this->reportFile); |
|
| 971 | + if (is_dir($dir) === false) { |
|
| 972 | + $error = 'ERROR: The specified report file path "'.$this->reportFile.'" points to a non-existent directory'.PHP_EOL.PHP_EOL; |
|
| 973 | + $error .= $this->printShortUsage(true); |
|
| 974 | + throw new DeepExitException($error, 3); |
|
| 975 | + } |
|
| 976 | + |
|
| 977 | + if ($dir === '.') { |
|
| 978 | + // Passed report file is a file in the current directory. |
|
| 979 | + $this->reportFile = getcwd().'/'.basename($this->reportFile); |
|
| 980 | + } else { |
|
| 981 | + if ($dir{0} === '/') { |
|
| 982 | + // An absolute path. |
|
| 983 | + $dir = Util\Common::realpath($dir); |
|
| 984 | + } else { |
|
| 985 | + $dir = Util\Common::realpath(getcwd().'/'.$dir); |
|
| 986 | + } |
|
| 987 | + |
|
| 988 | + if ($dir !== false) { |
|
| 989 | + // Report file path is relative. |
|
| 990 | + $this->reportFile = $dir.'/'.basename($this->reportFile); |
|
| 991 | + } |
|
| 992 | + } |
|
| 993 | + }//end if |
|
| 994 | + |
|
| 995 | + self::$overriddenDefaults['reportFile'] = true; |
|
| 996 | + |
|
| 997 | + if (is_dir($this->reportFile) === true) { |
|
| 998 | + $error = 'ERROR: The specified report file path "'.$this->reportFile.'" is a directory'.PHP_EOL.PHP_EOL; |
|
| 999 | + $error .= $this->printShortUsage(true); |
|
| 1000 | + throw new DeepExitException($error, 3); |
|
| 1001 | + } |
|
| 1002 | + } else if (substr($arg, 0, 13) === 'report-width=') { |
|
| 1003 | + if (isset(self::$overriddenDefaults['reportWidth']) === true) { |
|
| 1004 | + break; |
|
| 1005 | + } |
|
| 1006 | + |
|
| 1007 | + $this->reportWidth = substr($arg, 13); |
|
| 1008 | + self::$overriddenDefaults['reportWidth'] = true; |
|
| 1009 | + } else if (substr($arg, 0, 9) === 'basepath=') { |
|
| 1010 | + if (isset(self::$overriddenDefaults['basepath']) === true) { |
|
| 1011 | + break; |
|
| 1012 | + } |
|
| 1013 | + |
|
| 1014 | + self::$overriddenDefaults['basepath'] = true; |
|
| 1015 | + |
|
| 1016 | + if (substr($arg, 9) === '') { |
|
| 1017 | + $this->basepath = null; |
|
| 1018 | + break; |
|
| 1019 | + } |
|
| 1020 | + |
|
| 1021 | + $this->basepath = Util\Common::realpath(substr($arg, 9)); |
|
| 1022 | + |
|
| 1023 | + // It may not exist and return false instead. |
|
| 1024 | + if ($this->basepath === false) { |
|
| 1025 | + $this->basepath = substr($arg, 9); |
|
| 1026 | + } |
|
| 1027 | + |
|
| 1028 | + if (is_dir($this->basepath) === false) { |
|
| 1029 | + $error = 'ERROR: The specified basepath "'.$this->basepath.'" points to a non-existent directory'.PHP_EOL.PHP_EOL; |
|
| 1030 | + $error .= $this->printShortUsage(true); |
|
| 1031 | + throw new DeepExitException($error, 3); |
|
| 1032 | + } |
|
| 1033 | + } else if ((substr($arg, 0, 7) === 'report=' || substr($arg, 0, 7) === 'report-')) { |
|
| 1034 | + $reports = []; |
|
| 1035 | + |
|
| 1036 | + if ($arg[6] === '-') { |
|
| 1037 | + // This is a report with file output. |
|
| 1038 | + $split = strpos($arg, '='); |
|
| 1039 | + if ($split === false) { |
|
| 1040 | + $report = substr($arg, 7); |
|
| 1041 | + $output = null; |
|
| 1042 | + } else { |
|
| 1043 | + $report = substr($arg, 7, ($split - 7)); |
|
| 1044 | + $output = substr($arg, ($split + 1)); |
|
| 1045 | + if ($output === false) { |
|
| 1046 | + $output = null; |
|
| 1047 | + } else { |
|
| 1048 | + $dir = dirname($output); |
|
| 1049 | + if (is_dir($dir) === false) { |
|
| 1050 | + $error = 'ERROR: The specified '.$report.' report file path "'.$output.'" points to a non-existent directory'.PHP_EOL.PHP_EOL; |
|
| 1051 | + $error .= $this->printShortUsage(true); |
|
| 1052 | + throw new DeepExitException($error, 3); |
|
| 1053 | + } |
|
| 1054 | + |
|
| 1055 | + if ($dir === '.') { |
|
| 1056 | + // Passed report file is a filename in the current directory. |
|
| 1057 | + $output = getcwd().'/'.basename($output); |
|
| 1058 | + } else { |
|
| 1059 | + if ($dir{0} === '/') { |
|
| 1060 | + // An absolute path. |
|
| 1061 | + $dir = Util\Common::realpath($dir); |
|
| 1062 | + } else { |
|
| 1063 | + $dir = Util\Common::realpath(getcwd().'/'.$dir); |
|
| 1064 | + } |
|
| 1065 | + |
|
| 1066 | + if ($dir !== false) { |
|
| 1067 | + // Report file path is relative. |
|
| 1068 | + $output = $dir.'/'.basename($output); |
|
| 1069 | + } |
|
| 1070 | + } |
|
| 1071 | + }//end if |
|
| 1072 | + }//end if |
|
| 1073 | + |
|
| 1074 | + $reports[$report] = $output; |
|
| 1075 | + } else { |
|
| 1076 | + // This is a single report. |
|
| 1077 | + if (isset(self::$overriddenDefaults['reports']) === true) { |
|
| 1078 | + break; |
|
| 1079 | + } |
|
| 1080 | + |
|
| 1081 | + $reportNames = explode(',', substr($arg, 7)); |
|
| 1082 | + foreach ($reportNames as $report) { |
|
| 1083 | + $reports[$report] = null; |
|
| 1084 | + } |
|
| 1085 | + }//end if |
|
| 1086 | + |
|
| 1087 | + // Remove the default value so the CLI value overrides it. |
|
| 1088 | + if (isset(self::$overriddenDefaults['reports']) === false) { |
|
| 1089 | + $this->reports = $reports; |
|
| 1090 | + } else { |
|
| 1091 | + $this->reports = array_merge($this->reports, $reports); |
|
| 1092 | + } |
|
| 1093 | + |
|
| 1094 | + self::$overriddenDefaults['reports'] = true; |
|
| 1095 | + } else if (substr($arg, 0, 7) === 'filter=') { |
|
| 1096 | + if (isset(self::$overriddenDefaults['filter']) === true) { |
|
| 1097 | + break; |
|
| 1098 | + } |
|
| 1099 | + |
|
| 1100 | + $this->filter = substr($arg, 7); |
|
| 1101 | + self::$overriddenDefaults['filter'] = true; |
|
| 1102 | + } else if (substr($arg, 0, 9) === 'standard=') { |
|
| 1103 | + $standards = trim(substr($arg, 9)); |
|
| 1104 | + if ($standards !== '') { |
|
| 1105 | + $this->standards = explode(',', $standards); |
|
| 1106 | + } |
|
| 1107 | + |
|
| 1108 | + self::$overriddenDefaults['standards'] = true; |
|
| 1109 | + } else if (substr($arg, 0, 11) === 'extensions=') { |
|
| 1110 | + if (isset(self::$overriddenDefaults['extensions']) === true) { |
|
| 1111 | + break; |
|
| 1112 | + } |
|
| 1113 | + |
|
| 1114 | + $extensions = explode(',', substr($arg, 11)); |
|
| 1115 | + $newExtensions = []; |
|
| 1116 | + foreach ($extensions as $ext) { |
|
| 1117 | + $slash = strpos($ext, '/'); |
|
| 1118 | + if ($slash !== false) { |
|
| 1119 | + // They specified the tokenizer too. |
|
| 1120 | + list($ext, $tokenizer) = explode('/', $ext); |
|
| 1121 | + $newExtensions[$ext] = strtoupper($tokenizer); |
|
| 1122 | + continue; |
|
| 1123 | + } |
|
| 1124 | + |
|
| 1125 | + if (isset($this->extensions[$ext]) === true) { |
|
| 1126 | + $newExtensions[$ext] = $this->extensions[$ext]; |
|
| 1127 | + } else { |
|
| 1128 | + $newExtensions[$ext] = 'PHP'; |
|
| 1129 | + } |
|
| 1130 | + } |
|
| 1131 | + |
|
| 1132 | + $this->extensions = $newExtensions; |
|
| 1133 | + self::$overriddenDefaults['extensions'] = true; |
|
| 1134 | + } else if (substr($arg, 0, 7) === 'suffix=') { |
|
| 1135 | + if (isset(self::$overriddenDefaults['suffix']) === true) { |
|
| 1136 | + break; |
|
| 1137 | + } |
|
| 1138 | + |
|
| 1139 | + $this->suffix = substr($arg, 7); |
|
| 1140 | + self::$overriddenDefaults['suffix'] = true; |
|
| 1141 | + } else if (substr($arg, 0, 9) === 'parallel=') { |
|
| 1142 | + if (isset(self::$overriddenDefaults['parallel']) === true) { |
|
| 1143 | + break; |
|
| 1144 | + } |
|
| 1145 | + |
|
| 1146 | + $this->parallel = max((int) substr($arg, 9), 1); |
|
| 1147 | + self::$overriddenDefaults['parallel'] = true; |
|
| 1148 | + } else if (substr($arg, 0, 9) === 'severity=') { |
|
| 1149 | + $this->errorSeverity = (int) substr($arg, 9); |
|
| 1150 | + $this->warningSeverity = $this->errorSeverity; |
|
| 1151 | + if (isset(self::$overriddenDefaults['errorSeverity']) === false) { |
|
| 1152 | + self::$overriddenDefaults['errorSeverity'] = true; |
|
| 1153 | + } |
|
| 1154 | + |
|
| 1155 | + if (isset(self::$overriddenDefaults['warningSeverity']) === false) { |
|
| 1156 | + self::$overriddenDefaults['warningSeverity'] = true; |
|
| 1157 | + } |
|
| 1158 | + } else if (substr($arg, 0, 15) === 'error-severity=') { |
|
| 1159 | + if (isset(self::$overriddenDefaults['errorSeverity']) === true) { |
|
| 1160 | + break; |
|
| 1161 | + } |
|
| 1162 | + |
|
| 1163 | + $this->errorSeverity = (int) substr($arg, 15); |
|
| 1164 | + self::$overriddenDefaults['errorSeverity'] = true; |
|
| 1165 | + } else if (substr($arg, 0, 17) === 'warning-severity=') { |
|
| 1166 | + if (isset(self::$overriddenDefaults['warningSeverity']) === true) { |
|
| 1167 | + break; |
|
| 1168 | + } |
|
| 1169 | + |
|
| 1170 | + $this->warningSeverity = (int) substr($arg, 17); |
|
| 1171 | + self::$overriddenDefaults['warningSeverity'] = true; |
|
| 1172 | + } else if (substr($arg, 0, 7) === 'ignore=') { |
|
| 1173 | + if (isset(self::$overriddenDefaults['ignored']) === true) { |
|
| 1174 | + break; |
|
| 1175 | + } |
|
| 1176 | + |
|
| 1177 | + // Split the ignore string on commas, unless the comma is escaped |
|
| 1178 | + // using 1 or 3 slashes (\, or \\\,). |
|
| 1179 | + $patterns = preg_split( |
|
| 1180 | + '/(?<=(?<!\\\\)\\\\\\\\),|(?<!\\\\),/', |
|
| 1181 | + substr($arg, 7) |
|
| 1182 | + ); |
|
| 1183 | + |
|
| 1184 | + $ignored = []; |
|
| 1185 | + foreach ($patterns as $pattern) { |
|
| 1186 | + $pattern = trim($pattern); |
|
| 1187 | + if ($pattern === '') { |
|
| 1188 | + continue; |
|
| 1189 | + } |
|
| 1190 | + |
|
| 1191 | + $ignored[$pattern] = 'absolute'; |
|
| 1192 | + } |
|
| 1193 | + |
|
| 1194 | + $this->ignored = $ignored; |
|
| 1195 | + self::$overriddenDefaults['ignored'] = true; |
|
| 1196 | + } else if (substr($arg, 0, 10) === 'generator=' |
|
| 1197 | + && PHP_CODESNIFFER_CBF === false |
|
| 1198 | + ) { |
|
| 1199 | + if (isset(self::$overriddenDefaults['generator']) === true) { |
|
| 1200 | + break; |
|
| 1201 | + } |
|
| 1202 | + |
|
| 1203 | + $this->generator = substr($arg, 10); |
|
| 1204 | + self::$overriddenDefaults['generator'] = true; |
|
| 1205 | + } else if (substr($arg, 0, 9) === 'encoding=') { |
|
| 1206 | + if (isset(self::$overriddenDefaults['encoding']) === true) { |
|
| 1207 | + break; |
|
| 1208 | + } |
|
| 1209 | + |
|
| 1210 | + $this->encoding = strtolower(substr($arg, 9)); |
|
| 1211 | + self::$overriddenDefaults['encoding'] = true; |
|
| 1212 | + } else if (substr($arg, 0, 10) === 'tab-width=') { |
|
| 1213 | + if (isset(self::$overriddenDefaults['tabWidth']) === true) { |
|
| 1214 | + break; |
|
| 1215 | + } |
|
| 1216 | + |
|
| 1217 | + $this->tabWidth = (int) substr($arg, 10); |
|
| 1218 | + self::$overriddenDefaults['tabWidth'] = true; |
|
| 1219 | + } else { |
|
| 1220 | + if ($this->dieOnUnknownArg === false) { |
|
| 1221 | + $eqPos = strpos($arg, '='); |
|
| 1222 | + try { |
|
| 1223 | + if ($eqPos === false) { |
|
| 1224 | + $this->values[$arg] = $arg; |
|
| 1225 | + } else { |
|
| 1226 | + $value = substr($arg, ($eqPos + 1)); |
|
| 1227 | + $arg = substr($arg, 0, $eqPos); |
|
| 1228 | + $this->values[$arg] = $value; |
|
| 1229 | + } |
|
| 1230 | + } catch (RuntimeException $e) { |
|
| 1231 | + // Value is not valid, so just ignore it. |
|
| 1232 | + } |
|
| 1233 | + } else { |
|
| 1234 | + $this->processUnknownArgument('--'.$arg, $pos); |
|
| 1235 | + } |
|
| 1236 | + }//end if |
|
| 1237 | + break; |
|
| 1238 | 1238 | }//end switch |
| 1239 | 1239 | |
| 1240 | 1240 | }//end processLongArgument() |
@@ -864,26 +864,26 @@ |
||
| 864 | 864 | $nestedBraces = 0; |
| 865 | 865 | for ($start = $from; $start >= 0; $start--) { |
| 866 | 866 | switch ($pattern[$start]) { |
| 867 | - case '(': |
|
| 868 | - if ($nestedParenthesis === 0) { |
|
| 869 | - $skip['to'] = 'parenthesis_closer'; |
|
| 870 | - } |
|
| 871 | - |
|
| 872 | - $nestedParenthesis--; |
|
| 873 | - break; |
|
| 874 | - case '{': |
|
| 875 | - if ($nestedBraces === 0) { |
|
| 876 | - $skip['to'] = 'scope_closer'; |
|
| 877 | - } |
|
| 878 | - |
|
| 879 | - $nestedBraces--; |
|
| 880 | - break; |
|
| 881 | - case '}': |
|
| 882 | - $nestedBraces++; |
|
| 883 | - break; |
|
| 884 | - case ')': |
|
| 885 | - $nestedParenthesis++; |
|
| 886 | - break; |
|
| 867 | + case '(': |
|
| 868 | + if ($nestedParenthesis === 0) { |
|
| 869 | + $skip['to'] = 'parenthesis_closer'; |
|
| 870 | + } |
|
| 871 | + |
|
| 872 | + $nestedParenthesis--; |
|
| 873 | + break; |
|
| 874 | + case '{': |
|
| 875 | + if ($nestedBraces === 0) { |
|
| 876 | + $skip['to'] = 'scope_closer'; |
|
| 877 | + } |
|
| 878 | + |
|
| 879 | + $nestedBraces--; |
|
| 880 | + break; |
|
| 881 | + case '}': |
|
| 882 | + $nestedBraces++; |
|
| 883 | + break; |
|
| 884 | + case ')': |
|
| 885 | + $nestedParenthesis++; |
|
| 886 | + break; |
|
| 887 | 887 | }//end switch |
| 888 | 888 | |
| 889 | 889 | if (isset($skip['to']) === true) { |
@@ -28,46 +28,46 @@ |
||
| 28 | 28 | public function getErrorList($testFile='') |
| 29 | 29 | { |
| 30 | 30 | switch ($testFile) { |
| 31 | - case 'SpaceAfterNotUnitTest.inc': |
|
| 32 | - return [ |
|
| 33 | - 3 => 2, |
|
| 34 | - 4 => 2, |
|
| 35 | - 5 => 2, |
|
| 36 | - 6 => 1, |
|
| 37 | - 7 => 1, |
|
| 38 | - 8 => 1, |
|
| 39 | - 11 => 1, |
|
| 40 | - 14 => 1, |
|
| 41 | - 17 => 1, |
|
| 42 | - 20 => 1, |
|
| 43 | - 28 => 1, |
|
| 44 | - 38 => 2, |
|
| 45 | - 39 => 2, |
|
| 46 | - 40 => 1, |
|
| 47 | - 41 => 1, |
|
| 48 | - 42 => 1, |
|
| 49 | - 48 => 1, |
|
| 50 | - 51 => 1, |
|
| 51 | - 56 => 2, |
|
| 52 | - 57 => 1, |
|
| 53 | - 58 => 1, |
|
| 54 | - 59 => 1, |
|
| 55 | - 62 => 1, |
|
| 56 | - 65 => 1, |
|
| 57 | - 68 => 1, |
|
| 58 | - 71 => 1, |
|
| 59 | - 79 => 1, |
|
| 60 | - ]; |
|
| 31 | + case 'SpaceAfterNotUnitTest.inc': |
|
| 32 | + return [ |
|
| 33 | + 3 => 2, |
|
| 34 | + 4 => 2, |
|
| 35 | + 5 => 2, |
|
| 36 | + 6 => 1, |
|
| 37 | + 7 => 1, |
|
| 38 | + 8 => 1, |
|
| 39 | + 11 => 1, |
|
| 40 | + 14 => 1, |
|
| 41 | + 17 => 1, |
|
| 42 | + 20 => 1, |
|
| 43 | + 28 => 1, |
|
| 44 | + 38 => 2, |
|
| 45 | + 39 => 2, |
|
| 46 | + 40 => 1, |
|
| 47 | + 41 => 1, |
|
| 48 | + 42 => 1, |
|
| 49 | + 48 => 1, |
|
| 50 | + 51 => 1, |
|
| 51 | + 56 => 2, |
|
| 52 | + 57 => 1, |
|
| 53 | + 58 => 1, |
|
| 54 | + 59 => 1, |
|
| 55 | + 62 => 1, |
|
| 56 | + 65 => 1, |
|
| 57 | + 68 => 1, |
|
| 58 | + 71 => 1, |
|
| 59 | + 79 => 1, |
|
| 60 | + ]; |
|
| 61 | 61 | |
| 62 | - case 'SpaceAfterNotUnitTest.js': |
|
| 63 | - return [ |
|
| 64 | - 2 => 2, |
|
| 65 | - 4 => 2, |
|
| 66 | - 5 => 1, |
|
| 67 | - ]; |
|
| 62 | + case 'SpaceAfterNotUnitTest.js': |
|
| 63 | + return [ |
|
| 64 | + 2 => 2, |
|
| 65 | + 4 => 2, |
|
| 66 | + 5 => 1, |
|
| 67 | + ]; |
|
| 68 | 68 | |
| 69 | - default: |
|
| 70 | - return []; |
|
| 69 | + default: |
|
| 70 | + return []; |
|
| 71 | 71 | }//end switch |
| 72 | 72 | |
| 73 | 73 | }//end getErrorList() |
@@ -43,111 +43,111 @@ |
||
| 43 | 43 | public function getWarningList($testFile='MultipleStatementAlignmentUnitTest.inc') |
| 44 | 44 | { |
| 45 | 45 | switch ($testFile) { |
| 46 | - case 'MultipleStatementAlignmentUnitTest.inc': |
|
| 47 | - return [ |
|
| 48 | - 11 => 1, |
|
| 49 | - 12 => 1, |
|
| 50 | - 23 => 1, |
|
| 51 | - 24 => 1, |
|
| 52 | - 26 => 1, |
|
| 53 | - 27 => 1, |
|
| 54 | - 37 => 1, |
|
| 55 | - 38 => 1, |
|
| 56 | - 48 => 1, |
|
| 57 | - 50 => 1, |
|
| 58 | - 51 => 1, |
|
| 59 | - 61 => 1, |
|
| 60 | - 62 => 1, |
|
| 61 | - 64 => 1, |
|
| 62 | - 65 => 1, |
|
| 63 | - 71 => 1, |
|
| 64 | - 78 => 1, |
|
| 65 | - 79 => 1, |
|
| 66 | - 86 => 1, |
|
| 67 | - 92 => 1, |
|
| 68 | - 93 => 1, |
|
| 69 | - 94 => 1, |
|
| 70 | - 95 => 1, |
|
| 71 | - 123 => 1, |
|
| 72 | - 124 => 1, |
|
| 73 | - 126 => 1, |
|
| 74 | - 129 => 1, |
|
| 75 | - 154 => 1, |
|
| 76 | - 161 => 1, |
|
| 77 | - 178 => 1, |
|
| 78 | - 179 => 1, |
|
| 79 | - 182 => 1, |
|
| 80 | - 206 => 1, |
|
| 81 | - 207 => 1, |
|
| 82 | - 252 => 1, |
|
| 83 | - 257 => 1, |
|
| 84 | - 263 => 1, |
|
| 85 | - 269 => 1, |
|
| 86 | - 293 => 1, |
|
| 87 | - 295 => 1, |
|
| 88 | - 296 => 1, |
|
| 89 | - 297 => 1, |
|
| 90 | - 301 => 1, |
|
| 91 | - 303 => 1, |
|
| 92 | - 308 => 1, |
|
| 93 | - 311 => 1, |
|
| 94 | - 313 => 1, |
|
| 95 | - 314 => 1, |
|
| 96 | - 321 => 1, |
|
| 97 | - 322 => 1, |
|
| 98 | - 324 => 1, |
|
| 99 | - 329 => 1, |
|
| 100 | - 331 => 1, |
|
| 101 | - 336 => 1, |
|
| 102 | - 339 => 1, |
|
| 103 | - 341 => 1, |
|
| 104 | - 342 => 1, |
|
| 105 | - 349 => 1, |
|
| 106 | - 350 => 1, |
|
| 107 | - 352 => 1, |
|
| 108 | - 357 => 1, |
|
| 109 | - 364 => 1, |
|
| 110 | - 396 => 1, |
|
| 111 | - 398 => 1, |
|
| 112 | - 399 => 1, |
|
| 113 | - 401 => 1, |
|
| 114 | - ]; |
|
| 115 | - break; |
|
| 116 | - case 'MultipleStatementAlignmentUnitTest.js': |
|
| 117 | - return [ |
|
| 118 | - 11 => 1, |
|
| 119 | - 12 => 1, |
|
| 120 | - 23 => 1, |
|
| 121 | - 24 => 1, |
|
| 122 | - 26 => 1, |
|
| 123 | - 27 => 1, |
|
| 124 | - 37 => 1, |
|
| 125 | - 38 => 1, |
|
| 126 | - 48 => 1, |
|
| 127 | - 50 => 1, |
|
| 128 | - 51 => 1, |
|
| 129 | - 61 => 1, |
|
| 130 | - 62 => 1, |
|
| 131 | - 64 => 1, |
|
| 132 | - 65 => 1, |
|
| 133 | - 71 => 1, |
|
| 134 | - 78 => 1, |
|
| 135 | - 79 => 1, |
|
| 136 | - 81 => 1, |
|
| 137 | - 82 => 1, |
|
| 138 | - 83 => 1, |
|
| 139 | - 85 => 1, |
|
| 140 | - 86 => 1, |
|
| 141 | - 100 => 1, |
|
| 142 | - 112 => 1, |
|
| 143 | - 113 => 1, |
|
| 144 | - 114 => 1, |
|
| 145 | - 117 => 1, |
|
| 146 | - ]; |
|
| 147 | - break; |
|
| 148 | - default: |
|
| 149 | - return []; |
|
| 150 | - break; |
|
| 46 | + case 'MultipleStatementAlignmentUnitTest.inc': |
|
| 47 | + return [ |
|
| 48 | + 11 => 1, |
|
| 49 | + 12 => 1, |
|
| 50 | + 23 => 1, |
|
| 51 | + 24 => 1, |
|
| 52 | + 26 => 1, |
|
| 53 | + 27 => 1, |
|
| 54 | + 37 => 1, |
|
| 55 | + 38 => 1, |
|
| 56 | + 48 => 1, |
|
| 57 | + 50 => 1, |
|
| 58 | + 51 => 1, |
|
| 59 | + 61 => 1, |
|
| 60 | + 62 => 1, |
|
| 61 | + 64 => 1, |
|
| 62 | + 65 => 1, |
|
| 63 | + 71 => 1, |
|
| 64 | + 78 => 1, |
|
| 65 | + 79 => 1, |
|
| 66 | + 86 => 1, |
|
| 67 | + 92 => 1, |
|
| 68 | + 93 => 1, |
|
| 69 | + 94 => 1, |
|
| 70 | + 95 => 1, |
|
| 71 | + 123 => 1, |
|
| 72 | + 124 => 1, |
|
| 73 | + 126 => 1, |
|
| 74 | + 129 => 1, |
|
| 75 | + 154 => 1, |
|
| 76 | + 161 => 1, |
|
| 77 | + 178 => 1, |
|
| 78 | + 179 => 1, |
|
| 79 | + 182 => 1, |
|
| 80 | + 206 => 1, |
|
| 81 | + 207 => 1, |
|
| 82 | + 252 => 1, |
|
| 83 | + 257 => 1, |
|
| 84 | + 263 => 1, |
|
| 85 | + 269 => 1, |
|
| 86 | + 293 => 1, |
|
| 87 | + 295 => 1, |
|
| 88 | + 296 => 1, |
|
| 89 | + 297 => 1, |
|
| 90 | + 301 => 1, |
|
| 91 | + 303 => 1, |
|
| 92 | + 308 => 1, |
|
| 93 | + 311 => 1, |
|
| 94 | + 313 => 1, |
|
| 95 | + 314 => 1, |
|
| 96 | + 321 => 1, |
|
| 97 | + 322 => 1, |
|
| 98 | + 324 => 1, |
|
| 99 | + 329 => 1, |
|
| 100 | + 331 => 1, |
|
| 101 | + 336 => 1, |
|
| 102 | + 339 => 1, |
|
| 103 | + 341 => 1, |
|
| 104 | + 342 => 1, |
|
| 105 | + 349 => 1, |
|
| 106 | + 350 => 1, |
|
| 107 | + 352 => 1, |
|
| 108 | + 357 => 1, |
|
| 109 | + 364 => 1, |
|
| 110 | + 396 => 1, |
|
| 111 | + 398 => 1, |
|
| 112 | + 399 => 1, |
|
| 113 | + 401 => 1, |
|
| 114 | + ]; |
|
| 115 | + break; |
|
| 116 | + case 'MultipleStatementAlignmentUnitTest.js': |
|
| 117 | + return [ |
|
| 118 | + 11 => 1, |
|
| 119 | + 12 => 1, |
|
| 120 | + 23 => 1, |
|
| 121 | + 24 => 1, |
|
| 122 | + 26 => 1, |
|
| 123 | + 27 => 1, |
|
| 124 | + 37 => 1, |
|
| 125 | + 38 => 1, |
|
| 126 | + 48 => 1, |
|
| 127 | + 50 => 1, |
|
| 128 | + 51 => 1, |
|
| 129 | + 61 => 1, |
|
| 130 | + 62 => 1, |
|
| 131 | + 64 => 1, |
|
| 132 | + 65 => 1, |
|
| 133 | + 71 => 1, |
|
| 134 | + 78 => 1, |
|
| 135 | + 79 => 1, |
|
| 136 | + 81 => 1, |
|
| 137 | + 82 => 1, |
|
| 138 | + 83 => 1, |
|
| 139 | + 85 => 1, |
|
| 140 | + 86 => 1, |
|
| 141 | + 100 => 1, |
|
| 142 | + 112 => 1, |
|
| 143 | + 113 => 1, |
|
| 144 | + 114 => 1, |
|
| 145 | + 117 => 1, |
|
| 146 | + ]; |
|
| 147 | + break; |
|
| 148 | + default: |
|
| 149 | + return []; |
|
| 150 | + break; |
|
| 151 | 151 | }//end switch |
| 152 | 152 | |
| 153 | 153 | }//end getWarningList() |
@@ -28,12 +28,12 @@ |
||
| 28 | 28 | public function getErrorList($testFile='') |
| 29 | 29 | { |
| 30 | 30 | switch ($testFile) { |
| 31 | - case 'CharacterBeforePHPOpeningTagUnitTest.1.inc': |
|
| 32 | - return [2 => 1]; |
|
| 33 | - break; |
|
| 34 | - default: |
|
| 35 | - return []; |
|
| 36 | - break; |
|
| 31 | + case 'CharacterBeforePHPOpeningTagUnitTest.1.inc': |
|
| 32 | + return [2 => 1]; |
|
| 33 | + break; |
|
| 34 | + default: |
|
| 35 | + return []; |
|
| 36 | + break; |
|
| 37 | 37 | }//end switch |
| 38 | 38 | |
| 39 | 39 | }//end getErrorList() |