diff --git a/src/lint/linter/ArcanistPhutilLibraryLinter.php b/src/lint/linter/ArcanistPhutilLibraryLinter.php index 965d95db..0e9ca2b3 100644 --- a/src/lint/linter/ArcanistPhutilLibraryLinter.php +++ b/src/lint/linter/ArcanistPhutilLibraryLinter.php @@ -20,24 +20,30 @@ final class ArcanistPhutilLibraryLinter extends ArcanistLinter { public function getInfoDescription() { return pht( - 'Make sure all the symbols use in a libphutil library are defined and '. - 'known. This linter is specific to PHP source in libphutil libraries.'); + 'Make sure all the symbols used in a %s library are defined and known. '. + 'This linter is specific to PHP source in %s libraries.', + 'libphutil', + 'libphutil'); + } + + public function getLinterName() { + return 'PHL'; } public function getLinterConfigurationName() { return 'phutil-library'; } - public function getLintNameMap() { - return array( - self::LINT_UNKNOWN_SYMBOL => pht('Unknown Symbol'), - self::LINT_DUPLICATE_SYMBOL => pht('Duplicate Symbol'), - self::LINT_ONE_CLASS_PER_FILE => pht('One Class Per File'), - ); + public function getCacheGranularity() { + return self::GRANULARITY_GLOBAL; } - public function getLinterName() { - return 'PHL'; + public function getLintNameMap() { + return array( + self::LINT_UNKNOWN_SYMBOL => pht('Unknown Symbol'), + self::LINT_DUPLICATE_SYMBOL => pht('Duplicate Symbol'), + self::LINT_ONE_CLASS_PER_FILE => pht('One Class Per File'), + ); } public function getLinterPriority() { @@ -55,18 +61,19 @@ final class ArcanistPhutilLibraryLinter extends ArcanistLinter { // caches. $bootloader = PhutilBootloader::getInstance(); - $libs = $bootloader->getAllLibraries(); + $libraries = $bootloader->getAllLibraries(); // Load the up-to-date map for each library, without loading the library // itself. This means lint results will accurately reflect the state of // the working copy. $symbols = array(); - foreach ($libs as $lib) { - $root = phutil_get_library_root($lib); + + foreach ($libraries as $library) { + $root = phutil_get_library_root($library); try { - $symbols[$lib] = id(new PhutilLibraryMapBuilder($root)) + $symbols[$library] = id(new PhutilLibraryMapBuilder($root)) ->buildFileSymbolMap(); } catch (XHPASTSyntaxErrorException $ex) { // If the library contains a syntax error then there isn't much that we @@ -97,10 +104,13 @@ final class ArcanistPhutilLibraryLinter extends ArcanistLinter { $file, end($have_functions), self::LINT_ONE_CLASS_PER_FILE, - "File '{$file}' mixes function ({$function_list}) and ". - "class/interface ({$class_list}) definitions in the same file. ". - "A file which declares a class or an interface MUST ". - "declare nothing else."); + pht( + "File '%s' mixes function (%s) and class/interface (%s) ". + "definitions in the same file. A file which declares a class ". + "or an interface MUST declare nothing else.", + $file, + $function_list, + $class_list)); } else if (count($have_classes) > 1) { $class_list = implode(', ', array_keys($have_classes)); $this->raiseLintInLibrary( @@ -108,9 +118,12 @@ final class ArcanistPhutilLibraryLinter extends ArcanistLinter { $file, end($have_classes), self::LINT_ONE_CLASS_PER_FILE, - "File '{$file}' declares more than one class or interface ". - "({$class_list}). A file which declares a class or interface MUST ". - "declare nothing else."); + pht( + "File '%s' declares more than one class or interface (%s). ". + "A file which declares a class or interface MUST declare ". + "nothing else.", + $file, + $class_list)); } } @@ -138,9 +151,15 @@ final class ArcanistPhutilLibraryLinter extends ArcanistLinter { $file, $offset, self::LINT_DUPLICATE_SYMBOL, - "Definition of {$type} '{$symbol}' in '{$file}' in library ". - "'{$library}' duplicates prior definition in '{$osrc}' in ". - "library '{$olib}'."); + pht( + "Definition of %s '%s' in '%s' in library '%s' duplicates ". + "prior definition in '%s' in library '%s'.", + $type, + $symbol, + $file, + $library, + $osrc, + $olib)); } } } @@ -171,26 +190,29 @@ final class ArcanistPhutilLibraryLinter extends ArcanistLinter { $file, $offset, self::LINT_UNKNOWN_SYMBOL, - "Use of unknown {$type} '{$symbol}'. Common causes are:\n\n". - " - Your libphutil/ is out of date.\n". - " This is the most common cause.\n". - " Update this copy of libphutil: {$libphutil_root}\n". - "\n". - " - Some other library is out of date.\n". - " Update the library this symbol appears in.\n". - "\n". - " - This symbol is misspelled.\n". - " Spell the symbol name correctly.\n". - " Symbol name spelling is case-sensitive.\n". - "\n". - " - This symbol was added recently.\n". - " Run `arc liberate` on the library it was added to.\n". - "\n". - " - This symbol is external. Use `@phutil-external-symbol`.\n". - " Use `grep` to find usage examples of this directive.\n". - "\n". - "*** ALTHOUGH USUALLY EASY TO FIX, THIS IS A SERIOUS ERROR.\n". - "*** THIS ERROR IS YOUR FAULT. YOU MUST RESOLVE IT."); + pht( + "Use of unknown %s '%s'. Common causes are:\n\n". + " - Your %s is out of date.\n". + " This is the most common cause.\n". + " Update this copy of libphutil: %s\n\n". + " - Some other library is out of date.\n". + " Update the library this symbol appears in.\n\n". + " - This symbol is misspelled.\n". + " Spell the symbol name correctly.\n". + " Symbol name spelling is case-sensitive.\n\n". + " - This symbol was added recently.\n". + " Run `%s` on the library it was added to.\n\n". + " - This symbol is external. Use `%s`.\n". + " Use `%s` to find usage examples of this directive.\n\n". + "*** ALTHOUGH USUALLY EASY TO FIX, THIS IS A SERIOUS ERROR.\n". + "*** THIS ERROR IS YOUR FAULT. YOU MUST RESOLVE IT.", + $type, + $symbol, + 'libphutil/', + $libphutil_root, + 'arc liberate', + '@phutil-external-symbol', + 'grep')); } } } @@ -208,8 +230,4 @@ final class ArcanistPhutilLibraryLinter extends ArcanistLinter { return; } - public function getCacheGranularity() { - return self::GRANULARITY_GLOBAL; - } - }