mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-10 08:52:39 +01:00
Update Celerity map parser for new docblock code
Summary: After D16431, listing the same `@annotation` multiple times makes the docblock parser return a list. We have some resources which list `@requires` or `@provides` several times, but don't handle the new parser properly. Make the code more flexible, since this is a reasonable way to specify the annotations. See also D16432. This produces a failure in this form: ``` [2016-08-23 21:10:15] ERROR 2: trim() expects parameter 1 to be string, array given at [/core/data/drydock/workingcopy-74/repo/phabricator/src/applications/celerity/CelerityResourceMapGenerator.php:236] 2 arcanist(head=master, ref.master=89e8b4852384), phabricator(head=6c940fb71b0a8850c6a1b7f5fc642a8f8135a76a, ref.master=b521f2349e46), phutil(head=master, ref.master=237549280f08) 3 #0 trim(array) called at [<phabricator>/src/applications/celerity/CelerityResourceMapGenerator.php:236] 4 #1 CelerityResourceMapGenerator::getProvidesAndRequires(string, string) called at [<phabricator>/src/applications/celerity/CelerityResourceMapGenerator.php:193] 5 #2 CelerityResourceMapGenerator::rebuildTextResources(CelerityPhabricatorResources, CelerityResourceTransformer) called at [<phabricator>/src/applications/celerity/CelerityResourceMapGenerator.php:54] 6 #3 CelerityResourceMapGenerator::generate() called at [<phabricator>/src/__tests__/PhabricatorCelerityTestCase.php:16] 7 #4 PhabricatorCelerityTestCase::testCelerityMaps() 8 #5 call_user_func_array(array, array) called at [<arcanist>/src/unit/engine/phutil/PhutilTestCase.php:492] 9 #6 PhutilTestCase::run() called at [<arcanist>/src/unit/engine/PhutilUnitTestEngine.php:69] 10 #7 PhutilUnitTestEngine::run() called at [<arcanist>/src/unit/engine/ArcanistConfigurationDrivenUnitTestEngine.php:147] 11 #8 ArcanistConfigurationDrivenUnitTestEngine::run() called at [<arcanist>/src/workflow/ArcanistUnitWorkflow.php:167] 12 #9 ArcanistUnitWorkflow::run() called at [<arcanist>/scripts/arcanist.php:394] ``` Test Plan: Ran `bin/celerity map`, no more warnings and no change to the actual map. Reviewers: joshuaspence, chad Reviewed By: chad Differential Revision: https://secure.phabricator.com/D16433
This commit is contained in:
parent
b521f2349e
commit
5d93290e42
1 changed files with 35 additions and 5 deletions
|
@ -232,11 +232,8 @@ EOFILE;
|
||||||
|
|
||||||
list($description, $metadata) = $parser->parse($matches[0]);
|
list($description, $metadata) = $parser->parse($matches[0]);
|
||||||
|
|
||||||
$provides = preg_split('/\s+/', trim(idx($metadata, 'provides')));
|
$provides = $this->parseResourceSymbolList(idx($metadata, 'provides'));
|
||||||
$requires = preg_split('/\s+/', trim(idx($metadata, 'requires')));
|
$requires = $this->parseResourceSymbolList(idx($metadata, 'requires'));
|
||||||
$provides = array_filter($provides);
|
|
||||||
$requires = array_filter($requires);
|
|
||||||
|
|
||||||
if (!$provides) {
|
if (!$provides) {
|
||||||
// Tests and documentation-only JS is permitted to @provide no targets.
|
// Tests and documentation-only JS is permitted to @provide no targets.
|
||||||
return array(null, null);
|
return array(null, null);
|
||||||
|
@ -364,4 +361,37 @@ EOFILE;
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function parseResourceSymbolList($list) {
|
||||||
|
if (!$list) {
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is valid:
|
||||||
|
//
|
||||||
|
// @requires x y
|
||||||
|
//
|
||||||
|
// But so is this:
|
||||||
|
//
|
||||||
|
// @requires x
|
||||||
|
// @requires y
|
||||||
|
//
|
||||||
|
// Accept either form and produce a list of symbols.
|
||||||
|
|
||||||
|
$list = (array)$list;
|
||||||
|
|
||||||
|
// We can get `true` values if there was a bare `@requires` in the input.
|
||||||
|
foreach ($list as $key => $item) {
|
||||||
|
if ($item === true) {
|
||||||
|
unset($list[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$list = implode(' ', $list);
|
||||||
|
$list = trim($list);
|
||||||
|
$list = preg_split('/\s+/', $list);
|
||||||
|
$list = array_filter($list);
|
||||||
|
|
||||||
|
return $list;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue