diff --git a/src/lint/ArcanistLintSeverity.php b/src/lint/ArcanistLintSeverity.php index 3466cde1..05ec3723 100644 --- a/src/lint/ArcanistLintSeverity.php +++ b/src/lint/ArcanistLintSeverity.php @@ -33,9 +33,7 @@ final class ArcanistLintSeverity { return $map[$severity_code]; } - public static function isAtLeastAsSevere( - ArcanistLintMessage $message, - $level) { + public static function isAtLeastAsSevere($message_sev, $level) { static $map = array( self::SEVERITY_DISABLED => 10, @@ -45,7 +43,6 @@ final class ArcanistLintSeverity { self::SEVERITY_ERROR => 40, ); - $message_sev = $message->getSeverity(); if (empty($map[$message_sev])) { return true; } diff --git a/src/lint/engine/ArcanistLintEngine.php b/src/lint/engine/ArcanistLintEngine.php index 39f995ea..9ea1ddca 100644 --- a/src/lint/engine/ArcanistLintEngine.php +++ b/src/lint/engine/ArcanistLintEngine.php @@ -247,9 +247,8 @@ abstract class ArcanistLintEngine { $this->didRunLinters($linters); foreach ($linters as $linter) { - $minimum = $this->minimumSeverity; foreach ($linter->getLintMessages() as $message) { - if (!ArcanistLintSeverity::isAtLeastAsSevere($message, $minimum)) { + if (!$this->isSeverityEnabled($message->getSeverity())) { continue; } if (!$this->isRelevantMessage($message)) { @@ -307,6 +306,11 @@ abstract class ArcanistLintEngine { return $this->results; } + public function isSeverityEnabled($severity) { + $minimum = $this->minimumSeverity; + return ArcanistLintSeverity::isAtLeastAsSevere($severity, $minimum); + } + private function shouldUseCache($cache_granularity, $repository_version) { switch ($cache_granularity) { case ArcanistLinter::GRANULARITY_FILE: diff --git a/src/lint/linter/ArcanistLinter.php b/src/lint/linter/ArcanistLinter.php index a910accc..1d5867ab 100644 --- a/src/lint/linter/ArcanistLinter.php +++ b/src/lint/linter/ArcanistLinter.php @@ -226,6 +226,11 @@ abstract class ArcanistLinter { // This is a hook. } + protected function isCodeEnabled($code) { + $severity = $this->getLintMessageSeverity($code); + return $this->getEngine()->isSeverityEnabled($severity); + } + public function getLintSeverityMap() { return array(); } diff --git a/src/lint/linter/ArcanistXHPASTLinter.php b/src/lint/linter/ArcanistXHPASTLinter.php index 52b55c74..4f6035ba 100644 --- a/src/lint/linter/ArcanistXHPASTLinter.php +++ b/src/lint/linter/ArcanistXHPASTLinter.php @@ -175,34 +175,57 @@ final class ArcanistXHPASTLinter extends ArcanistBaseXHPASTLinter { $root = $this->trees[$path]->getRootNode(); - $this->lintUseOfThisInStaticMethods($root); - $this->lintDynamicDefines($root); - $this->lintSurpriseConstructors($root); - $this->lintPHPTagUse($root); - $this->lintVariableVariables($root); - $this->lintTODOComments($root); - $this->lintExitExpressions($root); - $this->lintSpaceAroundBinaryOperators($root); - $this->lintSpaceAfterControlStatementKeywords($root); - $this->lintParenthesesShouldHugExpressions($root); - $this->lintNamingConventions($root); - $this->lintPregQuote($root); - $this->lintUndeclaredVariables($root); - $this->lintArrayIndexWhitespace($root); - $this->lintCommentSpaces($root); - $this->lintHashComments($root); - $this->lintPrimaryDeclarationFilenameMatch($root); - $this->lintTautologicalExpressions($root); - $this->lintPlusOperatorOnStrings($root); - $this->lintDuplicateKeysInArray($root); - $this->lintReusedIterators($root); - $this->lintBraceFormatting($root); - $this->lintRaggedClasstreeEdges($root); - $this->lintImplicitFallthrough($root); - $this->lintPHP53Features($root); - $this->lintPHP54Features($root); - $this->lintStrposUsedForStart($root); - $this->lintStrstrUsedForCheck($root); + $method_codes = array( + 'lintStrstrUsedForCheck' => self::LINT_SLOWNESS, + 'lintStrposUsedForStart' => self::LINT_SLOWNESS, + 'lintPHP53Features' => self::LINT_PHP_53_FEATURES, + 'lintPHP54Features' => self::LINT_PHP_54_FEATURES, + 'lintImplicitFallthrough' => self::LINT_IMPLICIT_FALLTHROUGH, + 'lintBraceFormatting' => self::LINT_BRACE_FORMATTING, + 'lintTautologicalExpressions' => self::LINT_TAUTOLOGICAL_EXPRESSION, + 'lintCommentSpaces' => self::LINT_COMMENT_SPACING, + 'lintHashComments' => self::LINT_COMMENT_STYLE, + 'lintReusedIterators' => self::LINT_REUSED_ITERATORS, + 'lintVariableVariables' => self::LINT_VARIABLE_VARIABLE, + 'lintUndeclaredVariables' => array( + self::LINT_EXTRACT_USE, + self::LINT_REUSED_AS_ITERATOR, + self::LINT_UNDECLARED_VARIABLE, + ), + 'lintPHPTagUse' => array( + self::LINT_PHP_SHORT_TAG, + self::LINT_PHP_ECHO_TAG, + self::LINT_PHP_OPEN_TAG, + self::LINT_PHP_CLOSE_TAG, + ), + 'lintNamingConventions' => self::LINT_NAMING_CONVENTIONS, + 'lintSurpriseConstructors' => self::LINT_IMPLICIT_CONSTRUCTOR, + 'lintParenthesesShouldHugExpressions' => self::LINT_PARENTHESES_SPACING, + 'lintSpaceAfterControlStatementKeywords' => + self::LINT_CONTROL_STATEMENT_SPACING, + 'lintSpaceAroundBinaryOperators' => self::LINT_BINARY_EXPRESSION_SPACING, + 'lintDynamicDefines' => self::LINT_DYNAMIC_DEFINE, + 'lintUseOfThisInStaticMethods' => self::LINT_STATIC_THIS, + 'lintPregQuote' => self::LINT_PREG_QUOTE_MISUSE, + 'lintExitExpressions' => self::LINT_EXIT_EXPRESSION, + 'lintArrayIndexWhitespace' => self::LINT_ARRAY_INDEX_SPACING, + 'lintTODOComments' => self::LINT_TODO_COMMENT, + 'lintPrimaryDeclarationFilenameMatch' => + self::LINT_CLASS_FILENAME_MISMATCH, + 'lintPlusOperatorOnStrings' => self::LINT_PLUS_OPERATOR_ON_STRINGS, + 'lintDuplicateKeysInArray' => self::LINT_DUPLICATE_KEYS_IN_ARRAY, + 'lintRaggedClasstreeEdges' => self::LINT_RAGGED_CLASSTREE_EDGE, + ); + + foreach ($method_codes as $method => $codes) { + foreach ((array)$codes as $code) { + if ($this->isCodeEnabled($code)) { + call_user_func(array($this, $method), $root); + break; + } + } + } + } public function lintStrstrUsedForCheck($root) {