1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-12-23 05:50:54 +01:00

Let lint rules support anonymous classes

Summary: Ref T4334. Depends on D19740. Improve some lint rules so they can handle anonymous classes.

Test Plan: Ran updated tests

Reviewers: joshuaspence, #blessed_reviewers, epriestley

Reviewed By: joshuaspence, #blessed_reviewers, epriestley

Subscribers: Korvin, epriestley

Maniphest Tasks: T4334

Differential Revision: https://secure.phabricator.com/D19741
This commit is contained in:
Wenzheng Jiang 2019-05-15 11:07:07 +10:00 committed by Joshua Spence
parent 6a8e76db32
commit 82445bb605
8 changed files with 39 additions and 1 deletions

View file

@ -17,6 +17,9 @@ final class ArcanistClassNameLiteralXHPASTLinterRule
$class_declarations = $root->selectDescendantsOfType('n_CLASS_DECLARATION');
foreach ($class_declarations as $class_declaration) {
if ($class_declaration->getChildByIndex(1)->getTypeName() == 'n_EMPTY') {
continue;
}
$class_name = $class_declaration
->getChildOfType(1, 'n_CLASS_NAME')
->getConcreteString();

View file

@ -20,7 +20,9 @@ final class ArcanistConstructorParenthesesXHPASTLinterRule
$class = $node->getChildByIndex(0);
$params = $node->getChildByIndex(1);
if ($params->getTypeName() == 'n_EMPTY') {
if ($class->getTypeName() != 'n_CLASS_DECLARATION' &&
$params->getTypeName() == 'n_EMPTY') {
$this->raiseLintAtNode(
$class,
pht('Use parentheses when invoking a constructor.'),

View file

@ -17,6 +17,9 @@ final class ArcanistSelfClassReferenceXHPASTLinterRule
$class_declarations = $root->selectDescendantsOfType('n_CLASS_DECLARATION');
foreach ($class_declarations as $class_declaration) {
if ($class_declaration->getChildByIndex(1)->getTypeName() == 'n_EMPTY') {
continue;
}
$class_name = $class_declaration
->getChildOfType(1, 'n_CLASS_NAME')
->getConcreteString();

View file

@ -17,6 +17,9 @@ final class ArcanistUnnecessaryFinalModifierXHPASTLinterRule
$classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION');
foreach ($classes as $class) {
if ($class->getChildByIndex(0)->getTypeName() == 'n_EMPTY') {
continue;
}
$attributes = $class->getChildOfType(0, 'n_CLASS_ATTRIBUTES');
$is_final = false;

View file

@ -11,6 +11,12 @@ class MyClass {
return __CLASS__;
}
}
$c = new class {
public function someMethod() {
return __CLASS__;
}
};
~~~~~~~~~~
advice:5:12
advice:9:10
@ -28,3 +34,9 @@ class MyClass {
return __CLASS__;
}
}
$c = new class {
public function someMethod() {
return __CLASS__;
}
};

View file

@ -3,6 +3,7 @@
new Foo;
new Bar();
new Foo\Bar;
new class {};
~~~~~~~~~~
advice:3:5
advice:5:5
@ -12,3 +13,4 @@ advice:5:5
new Foo();
new Bar();
new Foo\Bar();
new class {};

View file

@ -9,6 +9,12 @@ class Foo extends Bar {
return new self();
}
}
$c = new class {
public function newInstance() {
return new self();
}
};
~~~~~~~~~~
warning:5:16
~~~~~~~~~~
@ -23,3 +29,9 @@ class Foo extends Bar {
return new self();
}
}
$c = new class {
public function newInstance() {
return new self();
}
};

View file

@ -4,5 +4,6 @@ final class Foo {
public function bar() {}
final public function baz() {}
}
$c = new class {};
~~~~~~~~~~
advice:5:3