Page MenuHomePhabricator

D13534.diff
No OneTemporary

D13534.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -171,6 +171,7 @@
'ArcanistMissingLinterException' => 'lint/linter/exception/ArcanistMissingLinterException.php',
'ArcanistModifierOrderingXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistModifierOrderingXHPASTLinterRule.php',
'ArcanistNamingConventionsXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistNamingConventionsXHPASTLinterRule.php',
+ 'ArcanistNewlineAfterOpenTagXHPASTLinterRule' => 'lint/linter/xhpast/rules/ArcanistNewlineAfterOpenTagXHPASTLinterRule.php',
'ArcanistNoEffectException' => 'exception/usage/ArcanistNoEffectException.php',
'ArcanistNoEngineException' => 'exception/usage/ArcanistNoEngineException.php',
'ArcanistNoLintLinter' => 'lint/linter/ArcanistNoLintLinter.php',
@@ -455,6 +456,7 @@
'ArcanistMissingLinterException' => 'Exception',
'ArcanistModifierOrderingXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistNamingConventionsXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
+ 'ArcanistNewlineAfterOpenTagXHPASTLinterRule' => 'ArcanistXHPASTLinterRule',
'ArcanistNoEffectException' => 'ArcanistUsageException',
'ArcanistNoEngineException' => 'ArcanistUsageException',
'ArcanistNoLintLinter' => 'ArcanistLinter',
diff --git a/src/lint/linter/__tests__/xhpast/array-comma.lint-test b/src/lint/linter/__tests__/xhpast/array-comma.lint-test
--- a/src/lint/linter/__tests__/xhpast/array-comma.lint-test
+++ b/src/lint/linter/__tests__/xhpast/array-comma.lint-test
@@ -1,4 +1,5 @@
<?php
+
array(1, 2, 3);
array(1, 2, 3,);
array(
@@ -33,14 +34,15 @@
2,
3, /* comment */ );
~~~~~~~~~~
-advice:3:14
-advice:12:3
-advice:16:3
-advice:26:3
-advice:30:3
-advice:34:20
+advice:4:14
+advice:13:3
+advice:17:3
+advice:27:3
+advice:31:3
+advice:35:20
~~~~~~~~~~
<?php
+
array(1, 2, 3);
array(1, 2, 3);
array(
diff --git a/src/lint/linter/__tests__/xhpast/array-index.lint-test b/src/lint/linter/__tests__/xhpast/array-index.lint-test
--- a/src/lint/linter/__tests__/xhpast/array-index.lint-test
+++ b/src/lint/linter/__tests__/xhpast/array-index.lint-test
@@ -1,15 +1,17 @@
<?php
+
$a []= 1;
$a[] = 1;
$a[]=1;
$a [] = 1;
~~~~~~~~~~
-warning:2:3
-warning:2:6
-warning:4:5
-warning:5:3
+warning:3:3
+warning:3:6
+warning:5:5
+warning:6:3
~~~~~~~~~~
<?php
+
$a[] = 1;
$a[] = 1;
$a[] = 1;
diff --git a/src/lint/linter/__tests__/xhpast/blacklisted.lint-test b/src/lint/linter/__tests__/xhpast/blacklisted.lint-test
--- a/src/lint/linter/__tests__/xhpast/blacklisted.lint-test
+++ b/src/lint/linter/__tests__/xhpast/blacklisted.lint-test
@@ -1,7 +1,8 @@
<?php
+
eval('evil code');
~~~~~~~~~~
-error:2:1
+error:3:1
~~~~~~~~~~
~~~~~~~~~~
{
diff --git a/src/lint/linter/__tests__/xhpast/call-time-pass-by-reference.lint-test b/src/lint/linter/__tests__/xhpast/call-time-pass-by-reference.lint-test
--- a/src/lint/linter/__tests__/xhpast/call-time-pass-by-reference.lint-test
+++ b/src/lint/linter/__tests__/xhpast/call-time-pass-by-reference.lint-test
@@ -1,4 +1,5 @@
<?php
+
class MyClass {
public function myfunc($var) {
echo $var;
@@ -24,10 +25,10 @@
array_walk(array(), function () use (&$x) {});
MyClass::myfunc(array(&$x, &$y));
~~~~~~~~~~
-error:2:7 XHP19
-error:9:8
-error:12:15
-error:15:17
-error:18:24
-error:18:39
-error:22:6
+error:3:7 XHP19
+error:10:8
+error:13:15
+error:16:17
+error:19:24
+error:19:39
+error:23:6
diff --git a/src/lint/linter/__tests__/xhpast/cast-spacing.lint-test b/src/lint/linter/__tests__/xhpast/cast-spacing.lint-test
--- a/src/lint/linter/__tests__/xhpast/cast-spacing.lint-test
+++ b/src/lint/linter/__tests__/xhpast/cast-spacing.lint-test
@@ -1,12 +1,14 @@
<?php
+
echo (double)0;
echo (int) 1;
echo (string) 2;
~~~~~~~~~~
-advice:3:11
-advice:4:14
+advice:4:11
+advice:5:14
~~~~~~~~~~
<?php
+
echo (double)0;
echo (int)1;
echo (string)2;
diff --git a/src/lint/linter/__tests__/xhpast/class-name-literal.lint-test b/src/lint/linter/__tests__/xhpast/class-name-literal.lint-test
--- a/src/lint/linter/__tests__/xhpast/class-name-literal.lint-test
+++ b/src/lint/linter/__tests__/xhpast/class-name-literal.lint-test
@@ -1,4 +1,5 @@
<?php
+
class MyClass {
public function someMethod() {
return 'MyClass';
@@ -11,11 +12,12 @@
}
}
~~~~~~~~~~
-error:2:7
-advice:4:12
-advice:8:10
+error:3:7
+advice:5:12
+advice:9:10
~~~~~~~~~~
<?php
+
class MyClass {
public function someMethod() {
return __CLASS__;
diff --git a/src/lint/linter/__tests__/xhpast/constant-case.lint-test b/src/lint/linter/__tests__/xhpast/constant-case.lint-test
--- a/src/lint/linter/__tests__/xhpast/constant-case.lint-test
+++ b/src/lint/linter/__tests__/xhpast/constant-case.lint-test
@@ -1,4 +1,5 @@
<?php
+
define('foo', 'bar');
const bar = 'baz';
@@ -6,7 +7,7 @@
const bar = 'baz';
}
~~~~~~~~~~
-warning:2:8
-warning:3:7
-error:5:7
-warning:6:9
+warning:3:8
+warning:4:7
+error:6:7
+warning:7:9
diff --git a/src/lint/linter/__tests__/xhpast/constructor-parentheses.lint-test b/src/lint/linter/__tests__/xhpast/constructor-parentheses.lint-test
--- a/src/lint/linter/__tests__/xhpast/constructor-parentheses.lint-test
+++ b/src/lint/linter/__tests__/xhpast/constructor-parentheses.lint-test
@@ -1,12 +1,14 @@
<?php
+
new Foo;
new Bar();
new Foo\Bar;
~~~~~~~~~~
-advice:2:5
-advice:4:5
+advice:3:5
+advice:5:5
~~~~~~~~~~
<?php
+
new Foo();
new Bar();
new Foo\Bar();
diff --git a/src/lint/linter/__tests__/xhpast/default-parameters.lint-test b/src/lint/linter/__tests__/xhpast/default-parameters.lint-test
--- a/src/lint/linter/__tests__/xhpast/default-parameters.lint-test
+++ b/src/lint/linter/__tests__/xhpast/default-parameters.lint-test
@@ -1,4 +1,5 @@
<?php
+
function foo($x, $y, $z) {}
function bar($x, $y = null, $z) {}
function baz($x = null, $y = null, $z = null) {}
@@ -7,6 +8,6 @@
public function myMethod($x, $y = null, $z) {}
}
~~~~~~~~~~
-warning:3:13
-error:6:7
-warning:7:27
+warning:4:13
+error:7:7
+warning:8:27
diff --git a/src/lint/linter/__tests__/xhpast/double-quote.lint-test b/src/lint/linter/__tests__/xhpast/double-quote.lint-test
--- a/src/lint/linter/__tests__/xhpast/double-quote.lint-test
+++ b/src/lint/linter/__tests__/xhpast/double-quote.lint-test
@@ -1,4 +1,5 @@
<?php
+
'foobar';
"foo\"bar";
"foobar\n";
@@ -12,9 +13,10 @@
"This string also requires \123\345 double quotes, but ".
"this string does not. Here, they are used for consistency.");
~~~~~~~~~~
-advice:3:1
+advice:4:1
~~~~~~~~~~
<?php
+
'foobar';
'foo"bar';
"foobar\n";
diff --git a/src/lint/linter/__tests__/xhpast/duplicate-key-in-array.lint-test b/src/lint/linter/__tests__/xhpast/duplicate-key-in-array.lint-test
--- a/src/lint/linter/__tests__/xhpast/duplicate-key-in-array.lint-test
+++ b/src/lint/linter/__tests__/xhpast/duplicate-key-in-array.lint-test
@@ -1,4 +1,5 @@
<?php
+
$a = array(
'a' => 'val1',
$a => 'val2',
@@ -34,9 +35,9 @@
$a => 'var2',
);
~~~~~~~~~~
-error:5:3
-error:8:3
-error:15:3
-error:20:3
-error:25:3
-error:34:3
+error:6:3
+error:9:3
+error:16:3
+error:21:3
+error:26:3
+error:35:3
diff --git a/src/lint/linter/__tests__/xhpast/duplicate-switch-case.lint-test b/src/lint/linter/__tests__/xhpast/duplicate-switch-case.lint-test
--- a/src/lint/linter/__tests__/xhpast/duplicate-switch-case.lint-test
+++ b/src/lint/linter/__tests__/xhpast/duplicate-switch-case.lint-test
@@ -1,4 +1,5 @@
<?php
+
$x = null;
$y = null;
switch ($x) {}
@@ -24,5 +25,5 @@
break;
}
~~~~~~~~~~
-error:15:3
-error:22:7
+error:16:3
+error:23:7
diff --git a/src/lint/linter/__tests__/xhpast/dynamic-define.lint-test b/src/lint/linter/__tests__/xhpast/dynamic-define.lint-test
--- a/src/lint/linter/__tests__/xhpast/dynamic-define.lint-test
+++ b/src/lint/linter/__tests__/xhpast/dynamic-define.lint-test
@@ -1,8 +1,9 @@
<?php
+
define('PONY', 'cute');
define($pony, 'cute');
define('PONY', $cute);
define($pony, $cute);
~~~~~~~~~~
-error:3:8 dynamic define
-error:5:8 dynamic define
+error:4:8 dynamic define
+error:6:8 dynamic define
diff --git a/src/lint/linter/__tests__/xhpast/elseif.lint-test b/src/lint/linter/__tests__/xhpast/elseif.lint-test
--- a/src/lint/linter/__tests__/xhpast/elseif.lint-test
+++ b/src/lint/linter/__tests__/xhpast/elseif.lint-test
@@ -1,4 +1,5 @@
<?php
+
if (true) {
echo 'foo';
} elseif (false) {
@@ -7,9 +8,10 @@
echo 'baz';
}
~~~~~~~~~~
-advice:4:3
+advice:5:3
~~~~~~~~~~
<?php
+
if (true) {
echo 'foo';
} else if (false) {
diff --git a/src/lint/linter/__tests__/xhpast/empty-block-statement.lint-test b/src/lint/linter/__tests__/xhpast/empty-block-statement.lint-test
--- a/src/lint/linter/__tests__/xhpast/empty-block-statement.lint-test
+++ b/src/lint/linter/__tests__/xhpast/empty-block-statement.lint-test
@@ -1,4 +1,5 @@
<?php
+
function w() {}
function x() {
// This is deliberately empty.
@@ -9,10 +10,11 @@
}
~~~~~~~~~~
-advice:6:14
advice:7:14
+advice:8:14
~~~~~~~~~~
<?php
+
function w() {}
function x() {
// This is deliberately empty.
diff --git a/src/lint/linter/__tests__/xhpast/empty-statement.lint-test b/src/lint/linter/__tests__/xhpast/empty-statement.lint-test
--- a/src/lint/linter/__tests__/xhpast/empty-statement.lint-test
+++ b/src/lint/linter/__tests__/xhpast/empty-statement.lint-test
@@ -1,11 +1,13 @@
<?php
+
final class Foo {};
$x = null;;
~~~~~~~~~~
-error:2:13 XHP19
-advice:2:19
-advice:3:11
+error:3:13 XHP19
+advice:3:19
+advice:4:11
~~~~~~~~~~
<?php
+
final class Foo {}
$x = null;
diff --git a/src/lint/linter/__tests__/xhpast/exit-expression.lint-test b/src/lint/linter/__tests__/xhpast/exit-expression.lint-test
--- a/src/lint/linter/__tests__/xhpast/exit-expression.lint-test
+++ b/src/lint/linter/__tests__/xhpast/exit-expression.lint-test
@@ -1,4 +1,5 @@
<?php
+
exit(-1);
exit -1;
strtoupper(33 * exit - 6);
@@ -8,8 +9,8 @@
$x = new stdClass();
$y = clone $x;
~~~~~~~~~~
-error:3:1
-warning:3:5
-warning:3:6
-error:4:17
-warning:4:21
+error:4:1
+warning:4:5
+warning:4:6
+error:5:17
+warning:5:21
diff --git a/src/lint/linter/__tests__/xhpast/formatted-string.lint-test b/src/lint/linter/__tests__/xhpast/formatted-string.lint-test
--- a/src/lint/linter/__tests__/xhpast/formatted-string.lint-test
+++ b/src/lint/linter/__tests__/xhpast/formatted-string.lint-test
@@ -1,4 +1,5 @@
<?php
+
printf();
printf(null);
printf('');
@@ -11,11 +12,11 @@
foobar(null, null, '%s');
~~~~~~~~~~
-error:2:1
-error:6:1
+error:3:1
error:7:1
-error:10:1
-error:12:1
+error:8:1
+error:11:1
+error:13:1
~~~~~~~~~~
~~~~~~~~~~
{
diff --git a/src/lint/linter/__tests__/xhpast/global-variables.lint-test b/src/lint/linter/__tests__/xhpast/global-variables.lint-test
--- a/src/lint/linter/__tests__/xhpast/global-variables.lint-test
+++ b/src/lint/linter/__tests__/xhpast/global-variables.lint-test
@@ -1,8 +1,9 @@
<?php
+
global $BASE_URL;
function foo() {
global $x, $y;
}
~~~~~~~~~~
-warning:2:1
-warning:4:3
+warning:3:1
+warning:5:3
diff --git a/src/lint/linter/__tests__/xhpast/hash-comments.lint-test b/src/lint/linter/__tests__/xhpast/hash-comments.lint-test
--- a/src/lint/linter/__tests__/xhpast/hash-comments.lint-test
+++ b/src/lint/linter/__tests__/xhpast/hash-comments.lint-test
@@ -1,4 +1,5 @@
<?php
+
# no
#no
// yes
@@ -20,17 +21,18 @@
/** yes */
/**** yes ****/
~~~~~~~~~~
-error:2:1
error:3:1
-error:5:1
-error:6:11
-advice:13:1
+error:4:1
+error:6:1
+error:7:11
advice:14:1
-error:15:1
-advice:18:1
+advice:15:1
+error:16:1
advice:19:1
+advice:20:1
~~~~~~~~~~
<?php
+
// no
// no
// yes
diff --git a/src/lint/linter/__tests__/xhpast/implicit-visibility.lint-test b/src/lint/linter/__tests__/xhpast/implicit-visibility.lint-test
--- a/src/lint/linter/__tests__/xhpast/implicit-visibility.lint-test
+++ b/src/lint/linter/__tests__/xhpast/implicit-visibility.lint-test
@@ -1,4 +1,5 @@
<?php
+
final class Foo {
public function bar() {}
function baz() {}
@@ -10,13 +11,14 @@
private $z;
}
~~~~~~~~~~
-error:2:13 XHP19
-advice:4:3
+error:3:13 XHP19
advice:5:3
-advice:8:3
+advice:6:3
advice:9:3
+advice:10:3
~~~~~~~~~~
<?php
+
final class Foo {
public function bar() {}
public function baz() {}
diff --git a/src/lint/linter/__tests__/xhpast/index-function.lint-test b/src/lint/linter/__tests__/xhpast/index-function.lint-test
--- a/src/lint/linter/__tests__/xhpast/index-function.lint-test
+++ b/src/lint/linter/__tests__/xhpast/index-function.lint-test
@@ -1,7 +1,8 @@
<?php
+
f()[0];
~~~~~~~~~~
-error:2:5
+error:3:5
~~~~~~~~~~
~~~~~~~~~~
{
diff --git a/src/lint/linter/__tests__/xhpast/instanceof-operator.lint-test b/src/lint/linter/__tests__/xhpast/instanceof-operator.lint-test
--- a/src/lint/linter/__tests__/xhpast/instanceof-operator.lint-test
+++ b/src/lint/linter/__tests__/xhpast/instanceof-operator.lint-test
@@ -1,9 +1,10 @@
<?php
+
var_dump('foobar' instanceof stdClass);
var_dump(123 instanceof stdClass);
var_dump(null instanceof stdClass);
var_dump($x instanceof stdClass);
~~~~~~~~~~
-error:2:10
error:3:10
error:4:10
+error:5:10
diff --git a/src/lint/linter/__tests__/xhpast/invalid-default-paramter.lint-test b/src/lint/linter/__tests__/xhpast/invalid-default-parameter.lint-test
rename from src/lint/linter/__tests__/xhpast/invalid-default-paramter.lint-test
rename to src/lint/linter/__tests__/xhpast/invalid-default-parameter.lint-test
--- a/src/lint/linter/__tests__/xhpast/invalid-default-paramter.lint-test
+++ b/src/lint/linter/__tests__/xhpast/invalid-default-parameter.lint-test
@@ -1,4 +1,5 @@
<?php
+
function func_one(array $x) {}
function func_two(array $x = null) {}
function func_three(array $x = array()) {}
@@ -12,6 +13,6 @@
function func_nine(stdClass $x = null) {}
function func_ten(stdClass $x = array()) {}
~~~~~~~~~~
-error:5:31
-error:9:35
-error:13:33
+error:6:31
+error:10:35
+error:14:33
diff --git a/src/lint/linter/__tests__/xhpast/invalid-modifiers.lint-test b/src/lint/linter/__tests__/xhpast/invalid-modifiers.lint-test
--- a/src/lint/linter/__tests__/xhpast/invalid-modifiers.lint-test
+++ b/src/lint/linter/__tests__/xhpast/invalid-modifiers.lint-test
@@ -1,4 +1,5 @@
<?php
+
class SomeClass {
public $a;
public public $b;
@@ -10,9 +11,9 @@
abstract final public function baz() {}
}
~~~~~~~~~~
-error:2:7 XHP19
-error:4:10
+error:3:7 XHP19
error:5:10
-error:6:11
-error:9:10
-error:10:12
+error:6:10
+error:7:11
+error:10:10
+error:11:12
diff --git a/src/lint/linter/__tests__/xhpast/lamba-func-function.lint-test b/src/lint/linter/__tests__/xhpast/lamba-func-function.lint-test
--- a/src/lint/linter/__tests__/xhpast/lamba-func-function.lint-test
+++ b/src/lint/linter/__tests__/xhpast/lamba-func-function.lint-test
@@ -1,4 +1,5 @@
<?php
+
function __lambda_func() {}
~~~~~~~~~~
-error:2:1
+error:3:1
diff --git a/src/lint/linter/__tests__/xhpast/language-construct-parentheses.lint-test b/src/lint/linter/__tests__/xhpast/language-construct-parentheses.lint-test
--- a/src/lint/linter/__tests__/xhpast/language-construct-parentheses.lint-test
+++ b/src/lint/linter/__tests__/xhpast/language-construct-parentheses.lint-test
@@ -1,4 +1,5 @@
<?php
+
include 'foo.php';
include_once 'foo.php';
require 'foo.php';
@@ -17,18 +18,19 @@
require_once ('baz.php');
echo ('baz');
~~~~~~~~~~
-warning:8:8
-warning:9:13
-warning:10:8
-warning:11:13
-warning:12:5
-warning:14:9
-warning:15:14
-warning:16:9
-warning:17:14
-warning:18:6
+warning:9:8
+warning:10:13
+warning:11:8
+warning:12:13
+warning:13:5
+warning:15:9
+warning:16:14
+warning:17:9
+warning:18:14
+warning:19:6
~~~~~~~~~~
<?php
+
include 'foo.php';
include_once 'foo.php';
require 'foo.php';
diff --git a/src/lint/linter/__tests__/xhpast/list-assignment.lint-test b/src/lint/linter/__tests__/xhpast/list-assignment.lint-test
--- a/src/lint/linter/__tests__/xhpast/list-assignment.lint-test
+++ b/src/lint/linter/__tests__/xhpast/list-assignment.lint-test
@@ -1,11 +1,13 @@
<?php
+
list($x, $y, , ,) = array();
list($x, $y, , , $z) = array();
~~~~~~~~~~
-warning:2:12
-warning:2:14
-warning:2:16
+warning:3:12
+warning:3:14
+warning:3:16
~~~~~~~~~~
<?php
+
list($x, $y ) = array();
list($x, $y, , , $z) = array();
diff --git a/src/lint/linter/__tests__/xhpast/lowercase-functions.lint-test b/src/lint/linter/__tests__/xhpast/lowercase-functions.lint-test
--- a/src/lint/linter/__tests__/xhpast/lowercase-functions.lint-test
+++ b/src/lint/linter/__tests__/xhpast/lowercase-functions.lint-test
@@ -1,9 +1,11 @@
<?php
+
var_dump('');
Var_Dump('');
~~~~~~~~~~
-advice:3:1
+advice:4:1
~~~~~~~~~~
<?php
+
var_dump('');
var_dump('');
diff --git a/src/lint/linter/__tests__/xhpast/modifier-ordering.lint-test b/src/lint/linter/__tests__/xhpast/modifier-ordering.lint-test
--- a/src/lint/linter/__tests__/xhpast/modifier-ordering.lint-test
+++ b/src/lint/linter/__tests__/xhpast/modifier-ordering.lint-test
@@ -1,4 +1,5 @@
<?php
+
class Foo {
public $x;
static protected $y;
@@ -8,12 +9,13 @@
static final public function foobar() {}
}
~~~~~~~~~~
-error:2:7 XHP19
-advice:4:3
-advice:6:3
-advice:8:3
+error:3:7 XHP19
+advice:5:3
+advice:7:3
+advice:9:3
~~~~~~~~~~
<?php
+
class Foo {
public $x;
protected static $y;
diff --git a/src/lint/linter/__tests__/xhpast/naming-conventions.lint-test b/src/lint/linter/__tests__/xhpast/naming-conventions.lint-test
--- a/src/lint/linter/__tests__/xhpast/naming-conventions.lint-test
+++ b/src/lint/linter/__tests__/xhpast/naming-conventions.lint-test
@@ -1,4 +1,5 @@
<?php
+
final class a {
const b = 1, c = d;
protected $E, $H;
@@ -7,8 +8,6 @@
interface i {}
-
-
function YY($ZZ) {}
final class Quack {
@@ -17,10 +16,6 @@
public function vV($w_w) {}
}
-
-
-
-
function () use ($this_is_a_closure) {};
function f(&$YY) {}
@@ -54,23 +49,24 @@
Other::$y = 0;
$mIxEdCaSe = 1;
}
-
~~~~~~~~~~
-warning:2:13
-warning:3:9
-warning:3:16
-warning:4:13
-warning:4:17
-warning:5:19
-warning:5:21
-warning:5:25
-warning:8:11
-warning:12:10
-warning:12:13
-warning:26:13
-warning:29:3
-warning:30:3
-warning:31:3
-warning:33:3
-warning:37:3
-warning:55:3
+warning:3:13
+warning:4:9
+warning:4:9
+warning:4:16
+warning:4:16
+warning:5:13
+warning:5:17
+warning:6:19
+warning:6:21
+warning:6:25
+warning:9:11
+warning:11:10
+warning:11:13
+warning:21:13
+warning:24:3
+warning:25:3
+warning:26:3
+warning:28:3
+warning:32:3
+warning:50:3
diff --git a/src/lint/linter/__tests__/xhpast/newline-after-open-tag.lint-test b/src/lint/linter/__tests__/xhpast/newline-after-open-tag.lint-test
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/__tests__/xhpast/newline-after-open-tag.lint-test
@@ -0,0 +1,24 @@
+<?php phpinfo() ?>
+<? phpinfo(); ?>
+
+<?php
+phpinfo();
+?>
+
+<?
+phpinfo();
+~~~~~~~~~~
+advice:4:6
+advice:8:3
+~~~~~~~~~~
+<?php phpinfo() ?>
+<? phpinfo(); ?>
+
+<?php
+
+phpinfo();
+?>
+
+<?
+
+phpinfo();
diff --git a/src/lint/linter/__tests__/xhpast/no-segfault-on-abstract.lint-test b/src/lint/linter/__tests__/xhpast/no-segfault-on-abstract.lint-test
--- a/src/lint/linter/__tests__/xhpast/no-segfault-on-abstract.lint-test
+++ b/src/lint/linter/__tests__/xhpast/no-segfault-on-abstract.lint-test
@@ -1,4 +1,5 @@
<?php
+
abstract class A {}
final class F {}
~~~~~~~~~~
diff --git a/src/lint/linter/__tests__/xhpast/no-segfault-on-exit.lint-test b/src/lint/linter/__tests__/xhpast/no-segfault-on-exit.lint-test
--- a/src/lint/linter/__tests__/xhpast/no-segfault-on-exit.lint-test
+++ b/src/lint/linter/__tests__/xhpast/no-segfault-on-exit.lint-test
@@ -1,3 +1,4 @@
<?php
+
exit();
~~~~~~~~~~
diff --git a/src/lint/linter/__tests__/xhpast/nowdoc.lint-test b/src/lint/linter/__tests__/xhpast/nowdoc.lint-test
--- a/src/lint/linter/__tests__/xhpast/nowdoc.lint-test
+++ b/src/lint/linter/__tests__/xhpast/nowdoc.lint-test
@@ -1,9 +1,10 @@
<?php
+
echo <<<'EOT'
Hello World!
EOT;
~~~~~~~~~~
-error:2:6
+error:3:6
~~~~~~~~~~
~~~~~~~~~~
{
diff --git a/src/lint/linter/__tests__/xhpast/object-operating-spacing.lint-test b/src/lint/linter/__tests__/xhpast/object-operating-spacing.lint-test
--- a/src/lint/linter/__tests__/xhpast/object-operating-spacing.lint-test
+++ b/src/lint/linter/__tests__/xhpast/object-operating-spacing.lint-test
@@ -1,12 +1,14 @@
<?php
+
$x -> doSomething();
id(new Something())
->doSomething();
~~~~~~~~~~
-warning:2:3
-warning:2:6
+warning:3:3
+warning:3:6
~~~~~~~~~~
<?php
+
$x->doSomething();
id(new Something())
->doSomething();
diff --git a/src/lint/linter/__tests__/xhpast/parens-hug-contents.lint-test b/src/lint/linter/__tests__/xhpast/parens-hug-contents.lint-test
--- a/src/lint/linter/__tests__/xhpast/parens-hug-contents.lint-test
+++ b/src/lint/linter/__tests__/xhpast/parens-hug-contents.lint-test
@@ -1,4 +1,5 @@
<?php
+
if ( $x ) {}
f( );
q( );
@@ -20,25 +21,26 @@
$a // if comments are present
);
~~~~~~~~~~
-warning:2:5
-warning:2:8
-warning:3:3
+warning:3:5
+warning:3:8
warning:4:3
-warning:6:21
-warning:6:24
-warning:12:6
-warning:12:30
-warning:13:10
-warning:13:19
-warning:14:12
-warning:14:15
-error:15:13 XHP19 Class-Filename Mismatch
-warning:16:21
-warning:16:24
-warning:18:10
-warning:18:25
+warning:5:3
+warning:7:21
+warning:7:24
+warning:13:6
+warning:13:30
+warning:14:10
+warning:14:19
+warning:15:12
+warning:15:15
+error:16:13 XHP19 Class-Filename Mismatch
+warning:17:21
+warning:17:24
+warning:19:10
+warning:19:25
~~~~~~~~~~
<?php
+
if ($x) {}
f();
q();
diff --git a/src/lint/linter/__tests__/xhpast/php54-incompat.lint-test b/src/lint/linter/__tests__/xhpast/php54-incompat.lint-test
--- a/src/lint/linter/__tests__/xhpast/php54-incompat.lint-test
+++ b/src/lint/linter/__tests__/xhpast/php54-incompat.lint-test
@@ -1,4 +1,5 @@
<?php
+
break;
break 0;
break 1;
@@ -8,10 +9,10 @@
continue 1;
continue 1 + foo() * $bar;
~~~~~~~~~~
-error:3:7
-error:5:7
-error:7:10
-error:9:10
+error:4:7
+error:6:7
+error:8:10
+error:10:10
~~~~~~~~~~
~~~~~~~~~~
{"config": {"xhpast.php-version": "5.4.0"}}
diff --git a/src/lint/linter/__tests__/xhpast/preg-quote.lint-test b/src/lint/linter/__tests__/xhpast/preg-quote.lint-test
--- a/src/lint/linter/__tests__/xhpast/preg-quote.lint-test
+++ b/src/lint/linter/__tests__/xhpast/preg-quote.lint-test
@@ -6,7 +6,6 @@
preg_Quote('moo');
preg_quote('moo', '/');
}
-
~~~~~~~~~~
advice:4:3 Wrong number of arguments to preg_quote()
advice:6:3 Wrong number of arguments to preg_quote()
diff --git a/src/lint/linter/__tests__/xhpast/reused-iterator-reference.lint-test b/src/lint/linter/__tests__/xhpast/reused-iterator-reference.lint-test
--- a/src/lint/linter/__tests__/xhpast/reused-iterator-reference.lint-test
+++ b/src/lint/linter/__tests__/xhpast/reused-iterator-reference.lint-test
@@ -119,7 +119,6 @@
};
$a++; // Reuse of $a
}
-
~~~~~~~~~~
warning:6:3
warning:12:8
diff --git a/src/lint/linter/__tests__/xhpast/reused-local.lint-test b/src/lint/linter/__tests__/xhpast/reused-local.lint-test
--- a/src/lint/linter/__tests__/xhpast/reused-local.lint-test
+++ b/src/lint/linter/__tests__/xhpast/reused-local.lint-test
@@ -62,7 +62,6 @@
$other = array();
foreach ($other as $item) {}
}
-
~~~~~~~~~~
error:43:22
error:53:22
diff --git a/src/lint/linter/__tests__/xhpast/semicolon-spacing.lint-test b/src/lint/linter/__tests__/xhpast/semicolon-spacing.lint-test
--- a/src/lint/linter/__tests__/xhpast/semicolon-spacing.lint-test
+++ b/src/lint/linter/__tests__/xhpast/semicolon-spacing.lint-test
@@ -1,14 +1,16 @@
<?php
+
foo();
bar() ;
baz()
;
~~~~~~~~~~
-advice:3:6
advice:4:6
+advice:5:6
~~~~~~~~~~
<?php
+
foo();
bar();
baz();
diff --git a/src/lint/linter/__tests__/xhpast/single-pass-adjacent-patches.lint-test b/src/lint/linter/__tests__/xhpast/single-pass-adjacent-patches.lint-test
--- a/src/lint/linter/__tests__/xhpast/single-pass-adjacent-patches.lint-test
+++ b/src/lint/linter/__tests__/xhpast/single-pass-adjacent-patches.lint-test
@@ -1,14 +1,16 @@
<?php
+
// This test is checking that the LintPatcher correctly applies adjacent patches
// with large character delta effects.
function f( ) {
g( );
}
~~~~~~~~~~
-warning:4:12
-warning:5:5
+warning:5:12
+warning:6:5
~~~~~~~~~~
<?php
+
// This test is checking that the LintPatcher correctly applies adjacent patches
// with large character delta effects.
function f() {
diff --git a/src/lint/linter/__tests__/xhpast/space-after-control-keywords.lint-test b/src/lint/linter/__tests__/xhpast/space-after-control-keywords.lint-test
--- a/src/lint/linter/__tests__/xhpast/space-after-control-keywords.lint-test
+++ b/src/lint/linter/__tests__/xhpast/space-after-control-keywords.lint-test
@@ -1,4 +1,5 @@
<?php
+
if($x) {}
else{}
for(;;) {}
@@ -25,23 +26,24 @@
try {} catch(Exception $ex) {}
~~~~~~~~~~
-warning:2:1
-warning:2:10
warning:3:1
+warning:3:10
warning:4:1
warning:5:1
warning:6:1
warning:7:1
-warning:7:6
warning:8:1
-warning:9:11
-warning:10:16
-warning:13:3
+warning:8:6
+warning:9:1
+warning:10:11
+warning:11:16
warning:14:3
-warning:24:3
-warning:26:8
+warning:15:3
+warning:25:3
+warning:27:8
~~~~~~~~~~
<?php
+
if ($x) {} else {}
for (;;) {}
foreach ($x as $y) {}
diff --git a/src/lint/linter/__tests__/xhpast/space-around-more-operators.lint-test b/src/lint/linter/__tests__/xhpast/space-around-more-operators.lint-test
--- a/src/lint/linter/__tests__/xhpast/space-around-more-operators.lint-test
+++ b/src/lint/linter/__tests__/xhpast/space-around-more-operators.lint-test
@@ -1,4 +1,5 @@
<?php
+
$a.$b;
$a . $b;
$a. $b;
@@ -24,16 +25,17 @@
$x=>$y,
);
~~~~~~~~~~
-warning:3:3
-warning:3:5
-warning:4:4
-warning:5:3
-warning:12:9
-warning:13:10
-warning:14:9
-warning:24:5
+warning:4:3
+warning:4:5
+warning:5:4
+warning:6:3
+warning:13:9
+warning:14:10
+warning:15:9
+warning:25:5
~~~~~~~~~~
<?php
+
$a.$b;
$a.$b;
$a.$b;
diff --git a/src/lint/linter/__tests__/xhpast/space-around-operators.lint-test b/src/lint/linter/__tests__/xhpast/space-around-operators.lint-test
--- a/src/lint/linter/__tests__/xhpast/space-around-operators.lint-test
+++ b/src/lint/linter/__tests__/xhpast/space-around-operators.lint-test
@@ -1,4 +1,5 @@
<?php
+
$a + $b;
$a+$b;
$a +$b;
@@ -23,21 +24,22 @@
if ($x instanceof z && $w) {}
f(1,2);
~~~~~~~~~~
-warning:3:3
-warning:4:4
-warning:5:3
-warning:7:3
+warning:4:3
+warning:5:4
+warning:6:3
warning:8:3
-warning:9:4
-warning:10:3
+warning:9:3
+warning:10:4
warning:11:3
-warning:13:14
-warning:20:52
-warning:21:54
-warning:22:21
-warning:24:4
+warning:12:3
+warning:14:14
+warning:21:52
+warning:22:54
+warning:23:21
+warning:25:4
~~~~~~~~~~
<?php
+
$a + $b;
$a + $b;
$a + $b;
diff --git a/src/lint/linter/__tests__/xhpast/surprising-constructors.lint-test b/src/lint/linter/__tests__/xhpast/surprising-constructors.lint-test
--- a/src/lint/linter/__tests__/xhpast/surprising-constructors.lint-test
+++ b/src/lint/linter/__tests__/xhpast/surprising-constructors.lint-test
@@ -1,9 +1,10 @@
<?php
+
final class Platypus {
public function platypus() {
// This method must be renamed to __construct().
}
}
~~~~~~~~~~
-error:2:13 XHP19 Class-Filename Mismatch
-error:3:19
+error:3:13 XHP19 Class-Filename Mismatch
+error:4:19
diff --git a/src/lint/linter/__tests__/xhpast/tautological-expressions.lint-test b/src/lint/linter/__tests__/xhpast/tautological-expressions.lint-test
--- a/src/lint/linter/__tests__/xhpast/tautological-expressions.lint-test
+++ b/src/lint/linter/__tests__/xhpast/tautological-expressions.lint-test
@@ -15,7 +15,6 @@
$skip_cache = $a || $b;
$skip_cache = false && something();
$skip_cache = f();
-
~~~~~~~~~~
error:3:5
error:5:5
diff --git a/src/lint/linter/__tests__/xhpast/tostring-exception.lint-test b/src/lint/linter/__tests__/xhpast/tostring-exception.lint-test
--- a/src/lint/linter/__tests__/xhpast/tostring-exception.lint-test
+++ b/src/lint/linter/__tests__/xhpast/tostring-exception.lint-test
@@ -1,4 +1,5 @@
<?php
+
class MyClass {
public function __toString() {
if (some_function()) {
@@ -23,4 +24,4 @@
abstract public function __toString();
}
~~~~~~~~~~
-error:5:7
+error:6:7
diff --git a/src/lint/linter/__tests__/xhpast/unary-postfix-expression-spacing.lint-test b/src/lint/linter/__tests__/xhpast/unary-postfix-expression-spacing.lint-test
--- a/src/lint/linter/__tests__/xhpast/unary-postfix-expression-spacing.lint-test
+++ b/src/lint/linter/__tests__/xhpast/unary-postfix-expression-spacing.lint-test
@@ -1,9 +1,11 @@
<?php
+
$x ++;
$y--;
~~~~~~~~~~
-warning:2:3
+warning:3:3
~~~~~~~~~~
<?php
+
$x++;
$y--;
diff --git a/src/lint/linter/__tests__/xhpast/unary-prefix-expression-spacing.lint-test b/src/lint/linter/__tests__/xhpast/unary-prefix-expression-spacing.lint-test
--- a/src/lint/linter/__tests__/xhpast/unary-prefix-expression-spacing.lint-test
+++ b/src/lint/linter/__tests__/xhpast/unary-prefix-expression-spacing.lint-test
@@ -1,12 +1,14 @@
<?php
+
$f = @ fopen($path, 'rb');
@fclose($f);
exit ();
~~~~~~~~~~
-warning:2:7
-warning:4:5
+warning:3:7
+warning:5:5
~~~~~~~~~~
<?php
+
$f = @fopen($path, 'rb');
@fclose($f);
exit();
diff --git a/src/lint/linter/__tests__/xhpast/unnecessary-final-modifier.lint-test b/src/lint/linter/__tests__/xhpast/unnecessary-final-modifier.lint-test
--- a/src/lint/linter/__tests__/xhpast/unnecessary-final-modifier.lint-test
+++ b/src/lint/linter/__tests__/xhpast/unnecessary-final-modifier.lint-test
@@ -1,8 +1,9 @@
<?php
+
final class Foo {
public function bar() {}
final public function baz() {}
}
~~~~~~~~~~
-error:2:13 XHP19
-advice:4:3
+error:3:13 XHP19
+advice:5:3
diff --git a/src/lint/linter/__tests__/xhpast/unreasonably-deep-nesting.lint-test b/src/lint/linter/__tests__/xhpast/unreasonably-deep-nesting.lint-test
--- a/src/lint/linter/__tests__/xhpast/unreasonably-deep-nesting.lint-test
+++ b/src/lint/linter/__tests__/xhpast/unreasonably-deep-nesting.lint-test
@@ -1,4 +1,5 @@
<?php
+
// This test is just verifying the parseability of files with a large number
// (>500) of string concatenations. We emit n_CONCATENATION_LIST instead of
// n_BINARY_EXPRESSION to avoid various call-depth traps in PHP, HPHP, and the
@@ -43,6 +44,7 @@
~~~~~~~~~~
~~~~~~~~~~
<?php
+
// This test is just verifying the parseability of files with a large number
// (>500) of string concatenations. We emit n_CONCATENATION_LIST instead of
// n_BINARY_EXPRESSION to avoid various call-depth traps in PHP, HPHP, and the
diff --git a/src/lint/linter/__tests__/xhpast/use-of-this-in-static-method.lint-test b/src/lint/linter/__tests__/xhpast/use-of-this-in-static-method.lint-test
--- a/src/lint/linter/__tests__/xhpast/use-of-this-in-static-method.lint-test
+++ b/src/lint/linter/__tests__/xhpast/use-of-this-in-static-method.lint-test
@@ -8,7 +8,6 @@
$this->f();
}
}
-
~~~~~~~~~~
error:3:13 XHP19 Class-Filename Mismatch
error:8:5 Use of $this in a static method.
diff --git a/src/lint/linter/__tests__/xhpast/variable-variables.lint-test b/src/lint/linter/__tests__/xhpast/variable-variables.lint-test
--- a/src/lint/linter/__tests__/xhpast/variable-variables.lint-test
+++ b/src/lint/linter/__tests__/xhpast/variable-variables.lint-test
@@ -1,5 +1,6 @@
<?php
+
$$foo;
$obj->$bar; // okay
~~~~~~~~~~
-error:2:1
+error:3:1
diff --git a/src/lint/linter/__tests__/xhpast/wrong-concat-operator.lint-test b/src/lint/linter/__tests__/xhpast/wrong-concat-operator.lint-test
--- a/src/lint/linter/__tests__/xhpast/wrong-concat-operator.lint-test
+++ b/src/lint/linter/__tests__/xhpast/wrong-concat-operator.lint-test
@@ -1,9 +1,10 @@
<?php
+
'a'.'b';
'a' + 'b';
'a' + $x;
$x + $y + $z + 'q' + 0;
~~~~~~~~~~
-error:3:1
error:4:1
error:5:1
+error:6:1
diff --git a/src/lint/linter/xhpast/rules/ArcanistNewlineAfterOpenTagXHPASTLinterRule.php b/src/lint/linter/xhpast/rules/ArcanistNewlineAfterOpenTagXHPASTLinterRule.php
new file mode 100644
--- /dev/null
+++ b/src/lint/linter/xhpast/rules/ArcanistNewlineAfterOpenTagXHPASTLinterRule.php
@@ -0,0 +1,46 @@
+<?php
+
+final class ArcanistNewlineAfterOpenTagXHPASTLinterRule
+ extends ArcanistXHPASTLinterRule {
+
+ const ID = 81;
+
+ public function getLintName() {
+ return pht('Newline After PHP Open Tag');
+ }
+
+ public function getLintSeverity() {
+ return ArcanistLintSeverity::SEVERITY_ADVICE;
+ }
+
+ public function process(XHPASTNode $root) {
+ $tokens = $root->selectTokensOfType('T_OPEN_TAG');
+
+ foreach ($tokens as $token) {
+ for ($next = $token->getNextToken();
+ $next;
+ $next = $next->getNextToken()) {
+
+ if ($next->getTypeName() == 'T_WHITESPACE' &&
+ preg_match('/\n\s*\n/', $next->getValue())) {
+ continue 2;
+ }
+
+ if ($token->getLineNumber() != $next->getLineNumber()) {
+ break;
+ }
+
+ if ($next->getTypeName() == 'T_CLOSE_TAG') {
+ continue 2;
+ }
+ }
+
+ $next = $token->getNextToken();
+ $this->raiseLintAtToken(
+ $next,
+ pht('`%s` should be separated from code by an empty line.', '<?php'),
+ "\n".$next->getValue());
+ }
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sun, May 12, 3:24 AM (3 w, 4 d ago)
Storage Engine
amazon-s3
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
phabricator/secure/7r/2h/mi4brnbjnadk5ef4
Default Alt Text
D13534.diff (32 KB)

Event Timeline