forked from zircote/swagger-php
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDocBlockDescriptions.php
More file actions
94 lines (82 loc) · 3.1 KB
/
DocBlockDescriptions.php
File metadata and controls
94 lines (82 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php declare(strict_types=1);
/**
* @license Apache 2.0
*/
namespace OpenApi\Processors;
use OpenApi\Analysis;
use OpenApi\Annotations as OA;
use OpenApi\Generator;
/**
* Checks if the annotation has a summary and/or description property
* and uses the text in the comment block (above the annotations) as summary and/or description.
*
* Use `null`, for example: `@Annotation(description=null)`, if you don't want the annotation to have a description.
*/
class DocBlockDescriptions implements ProcessorInterface
{
use Concerns\DocblockTrait;
public function __invoke(Analysis $analysis)
{
/** @var OA\AbstractAnnotation $annotation */
foreach ($analysis->annotations as $annotation) {
if (property_exists($annotation, '_context') === false) {
// only annotations with context
continue;
}
if (!$this->isRoot($annotation)) {
// only top-level annotations
continue;
}
$hasSummary = property_exists($annotation, 'summary');
$hasDescription = property_exists($annotation, 'description');
if (!$hasSummary && !$hasDescription) {
continue;
}
if ($hasSummary && $hasDescription) {
$this->summaryAndDescription($annotation);
} elseif ($hasDescription) {
$this->description($annotation);
}
}
}
/**
* @param OA\Operation|OA\Property|OA\Parameter|OA\Schema $annotation
*/
protected function description(OA\AbstractAnnotation $annotation): void
{
if (!Generator::isDefault($annotation->description)) {
if ($annotation->description === null) {
$annotation->description = Generator::UNDEFINED;
}
return;
}
$annotation->description = $this->extractContent($annotation->_context->comment);
}
/**
* @param OA\Operation|OA\Property|OA\Parameter|OA\Schema $annotation
*/
protected function summaryAndDescription(OA\AbstractAnnotation $annotation): void
{
$ignoreSummary = !Generator::isDefault($annotation->summary);
$ignoreDescription = !Generator::isDefault($annotation->description);
if ($annotation->summary === null) {
$ignoreSummary = true;
$annotation->summary = Generator::UNDEFINED;
}
if ($annotation->description === null) {
$annotation->description = Generator::UNDEFINED;
$ignoreDescription = true;
}
if ($ignoreSummary && $ignoreDescription) {
return;
}
if ($ignoreSummary) {
$annotation->description = $this->extractContent($annotation->_context->comment);
} elseif ($ignoreDescription) {
$annotation->summary = $this->extractContent($annotation->_context->comment);
} else {
$annotation->summary = $this->extractSummary($annotation->_context->comment);
$annotation->description = $this->extractDescription($annotation->_context->comment);
}
}
}