1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-22 23:02:41 +01:00

Improve linter handling of short array syntax

Summary: Currently, linting PHP short array syntax (i.e. `[...]`) throws an exception ("Expected open parentheses"). This diff relaxes some restrictions which prevent short array syntax from linting with `ArcanistParenthesesSpacingXHPASTLinterRule`.

Test Plan: Modified test cases.

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley, #blessed_reviewers

Subscribers: agenticarus, Korvin

Differential Revision: https://secure.phabricator.com/D13895
This commit is contained in:
Joshua Spence 2015-08-19 15:35:16 +10:00 committed by Joshua Spence
parent 4404e66735
commit 27ec3a2e34
3 changed files with 10 additions and 6 deletions

View file

@ -2,6 +2,7 @@
array ( 1, 2, 3 ); array ( 1, 2, 3 );
list ( $x, $y ) = array(); list ( $x, $y ) = array();
[ 1, 2 , 3 ];
~~~~~~~~~~ ~~~~~~~~~~
warning:3:6 warning:3:6
warning:3:8 warning:3:8
@ -9,8 +10,11 @@ warning:3:16
warning:4:5 warning:4:5
warning:4:7 warning:4:7
warning:4:14 warning:4:14
warning:5:2
warning:5:11
~~~~~~~~~~ ~~~~~~~~~~
<?php <?php
array(1, 2, 3); array(1, 2, 3);
list($x, $y) = array(); list($x, $y) = array();
[1, 2 , 3];

View file

@ -24,6 +24,11 @@ final class ArcanistCallParenthesesXHPASTLinterRule
foreach ($nodes as $node) { foreach ($nodes as $node) {
switch ($node->getTypeName()) { switch ($node->getTypeName()) {
case 'n_ARRAY_LITERAL': case 'n_ARRAY_LITERAL':
if (head($node->getTokens())->getTypeName() == '[') {
// Short array syntax.
continue 2;
}
$params = $node->getChildOfType(0, 'n_ARRAY_VALUE_LIST'); $params = $node->getChildOfType(0, 'n_ARRAY_VALUE_LIST');
break; break;
@ -44,6 +49,7 @@ final class ArcanistCallParenthesesXHPASTLinterRule
$tokens = $params->getTokens(); $tokens = $params->getTokens();
$first = head($tokens); $first = head($tokens);
$leading = $first->getNonsemanticTokensBefore(); $leading = $first->getNonsemanticTokensBefore();
$leading_text = implode('', mpull($leading, 'getValue')); $leading_text = implode('', mpull($leading, 'getValue'));
if (preg_match('/^\s+$/', $leading_text)) { if (preg_match('/^\s+$/', $leading_text)) {

View file

@ -29,12 +29,6 @@ final class ArcanistParenthesesSpacingXHPASTLinterRule
$token_o = array_shift($tokens); $token_o = array_shift($tokens);
$token_c = array_pop($tokens); $token_c = array_pop($tokens);
if ($token_o->getTypeName() !== '(') {
throw new Exception(pht('Expected open parentheses.'));
}
if ($token_c->getTypeName() !== ')') {
throw new Exception(pht('Expected close parentheses.'));
}
$nonsem_o = $token_o->getNonsemanticTokensAfter(); $nonsem_o = $token_o->getNonsemanticTokensAfter();
$nonsem_c = $token_c->getNonsemanticTokensBefore(); $nonsem_c = $token_c->getNonsemanticTokensBefore();