mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-10 08:52:39 +01:00
Improvements to LINT_IMPLICIT_VISIBILITY
Summary: See D10687#104589. Test Plan: Wrote unit tests. Reviewers: richardvanvelzen, epriestley, #blessed_reviewers Reviewed By: richardvanvelzen, epriestley, #blessed_reviewers Subscribers: Korvin, epriestley Differential Revision: https://secure.phabricator.com/D11267
This commit is contained in:
parent
2ad2c04774
commit
a232f7d5b8
2 changed files with 30 additions and 9 deletions
|
@ -3004,20 +3004,36 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter {
|
|||
}
|
||||
|
||||
private function lintMethodModifier(XHPASTNode $root) {
|
||||
static $visibilities = array(
|
||||
'public',
|
||||
'protected',
|
||||
'private',
|
||||
);
|
||||
|
||||
$methods = $root->selectDescendantsOfType('n_METHOD_DECLARATION');
|
||||
|
||||
foreach ($methods as $method) {
|
||||
$modifier_list = $method->getChildOfType(
|
||||
$modifiers_list = $method->getChildOfType(
|
||||
0,
|
||||
'n_METHOD_MODIFIER_LIST');
|
||||
|
||||
if (!$modifier_list->getChildren()) {
|
||||
$this->raiseLintAtNode(
|
||||
$method,
|
||||
self::LINT_IMPLICIT_VISIBILITY,
|
||||
pht('Methods should have their visibility declared explicitly.'),
|
||||
'public '.$method->getConcreteString());
|
||||
foreach ($modifiers_list->getChildren() as $modifier) {
|
||||
if (in_array($modifier->getConcreteString(), $visibilities)) {
|
||||
continue 2;
|
||||
}
|
||||
}
|
||||
|
||||
if ($modifiers_list->getChildren()) {
|
||||
$node = $modifiers_list;
|
||||
} else {
|
||||
$node = $method;
|
||||
}
|
||||
|
||||
$this->raiseLintAtNode(
|
||||
$node,
|
||||
self::LINT_IMPLICIT_VISIBILITY,
|
||||
pht('Methods should have their visibility declared explicitly.'),
|
||||
'public '.$node->getConcreteString());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
final class Foo {
|
||||
public function bar() {}
|
||||
function baz() {}
|
||||
abstract function a();
|
||||
private static function b() {}
|
||||
|
||||
var $x;
|
||||
static $y;
|
||||
|
@ -10,13 +12,16 @@ final class Foo {
|
|||
~~~~~~~~~~
|
||||
error:2:13 XHP19
|
||||
advice:4:3
|
||||
advice:6:3
|
||||
advice:7:3
|
||||
advice:5:3
|
||||
advice:8:3
|
||||
advice:9:3
|
||||
~~~~~~~~~~
|
||||
<?php
|
||||
final class Foo {
|
||||
public function bar() {}
|
||||
public function baz() {}
|
||||
public abstract function a();
|
||||
private static function b() {}
|
||||
|
||||
public $x;
|
||||
public static $y;
|
||||
|
|
Loading…
Reference in a new issue