Page MenuHomePhabricator

D16431.id39519.diff
No OneTemporary

D16431.id39519.diff

diff --git a/src/parser/PhutilDocblockParser.php b/src/parser/PhutilDocblockParser.php
--- a/src/parser/PhutilDocblockParser.php
+++ b/src/parser/PhutilDocblockParser.php
@@ -97,19 +97,39 @@
foreach ($matches as $match) {
list($_, $type, $data) = $match;
$data = trim($data);
- if (isset($special[$type])) {
- $special[$type] = $special[$type]."\n".$data;
- } else {
+
+ // For flags like "@stable" which don't have any string data, set the
+ // value to true.
+ if (!strlen($data)) {
+ $data = true;
+ }
+
+ if (!isset($special[$type])) {
$special[$type] = $data;
+ } else {
+ if (!is_array($special[$type])) {
+ $special[$type] = (array)$special[$type];
+ }
+ $special[$type][] = $data;
}
}
}
- // For flags like "@stable" which don't have any string data, set the value
- // to true.
+ // Convert `array(true, true, true)` to `true`.
foreach ($special as $type => $data) {
- if (!strlen(trim($data))) {
- $special[$type] = true;
+ if (is_array($data)) {
+ $all_trues = true;
+
+ foreach ($data as $value) {
+ if ($value !== true) {
+ $all_trues = false;
+ break;
+ }
+ }
+
+ if ($all_trues) {
+ $special[$type] = true;
+ }
}
}
diff --git a/src/parser/__tests__/PhutilDocblockParserTestCase.php b/src/parser/__tests__/PhutilDocblockParserTestCase.php
--- a/src/parser/__tests__/PhutilDocblockParserTestCase.php
+++ b/src/parser/__tests__/PhutilDocblockParserTestCase.php
@@ -52,7 +52,8 @@
case 'multi-specials.docblock':
$this->assertEqual(
array(
- 'special' => "north\nsouth",
+ 'special' => array('north', 'south'),
+ 'stable' => true,
),
$specials);
$this->assertEqual(
@@ -64,6 +65,7 @@
array(
'type' => 'type',
'task' => 'task',
+ 'special' => array('dot', 'dot', 'dash'),
),
$specials);
$this->assertEqual(
@@ -83,7 +85,7 @@
case 'specials-with-hyphen.docblock':
$this->assertEqual(
array(
- 'repeat-hyphen' => "a\nb",
+ 'repeat-hyphen' => array('a', 'b'),
'multiline-hyphen' => 'mmm nnn',
'normal-hyphen' => 'x',
),
@@ -110,6 +112,13 @@
),
$specials);
break;
+ case 'mixed-types.docblock':
+ $this->assertEqual(
+ array(
+ 'special' => array('squirrels', true),
+ ),
+ $specials);
+ break;
default:
throw new Exception(pht("No test case to handle file '%s'!", $file));
}
diff --git a/src/parser/__tests__/docblock/mixed-types.docblock b/src/parser/__tests__/docblock/mixed-types.docblock
new file mode 100644
--- /dev/null
+++ b/src/parser/__tests__/docblock/mixed-types.docblock
@@ -0,0 +1,4 @@
+/**
+ * @special squirrels
+ * @special
+ */
diff --git a/src/parser/__tests__/docblock/multi-specials.docblock b/src/parser/__tests__/docblock/multi-specials.docblock
--- a/src/parser/__tests__/docblock/multi-specials.docblock
+++ b/src/parser/__tests__/docblock/multi-specials.docblock
@@ -1,4 +1,8 @@
/**
* @special north
* @special south
+ *
+ * @stable
+ * @stable
+ * @stable
*/
diff --git a/src/parser/__tests__/docblock/specials.docblock b/src/parser/__tests__/docblock/specials.docblock
--- a/src/parser/__tests__/docblock/specials.docblock
+++ b/src/parser/__tests__/docblock/specials.docblock
@@ -1,4 +1,8 @@
/**
* @type type
* @task task
+ *
+ * @special dot
+ * @special dot
+ * @special dash
*/

File Metadata

Mime Type
text/plain
Expires
Wed, Mar 12, 12:07 AM (9 h, 17 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7561044
Default Alt Text
D16431.id39519.diff (3 KB)

Event Timeline