Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15299386
D13534.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
32 KB
Referenced Files
None
Subscribers
None
D13534.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Mar 6 2025, 2:53 PM (6 w, 6 d ago)
Storage Engine
amazon-s3
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
phabricator/secure/di/b3/cdhbtbu7x3khkczy
Default Alt Text
D13534.diff (32 KB)
Attached To
Mode
D13534: Add a linter rule for newlines after PHP open tags
Attached
Detach File
Event Timeline
Log In to Comment