Skip to content

Commit 8d1c179

Browse files
authored
Check for unique type schemas in Markdown rendering (#52)
1 parent 7720eb5 commit 8d1c179

File tree

3 files changed

+49
-72
lines changed

3 files changed

+49
-72
lines changed

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"require": {
1616
"ext-json": "*",
1717
"swaggest/json-schema": "^0.12.33",
18-
"swaggest/code-builder": "^0.3.4",
18+
"swaggest/code-builder": "^0.3.8",
1919
"php": ">=5.6.0"
2020
},
2121
"require-dev": {

composer.lock

+24-62
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Markdown/TypeBuilder.php

+24-9
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
namespace Swaggest\PhpCodeBuilder\Markdown;
44

5-
use Swaggest\CodeBuilder\CodeBuilder;
65
use Swaggest\CodeBuilder\TableRenderer;
76
use Swaggest\JsonSchema\Schema;
87
use Swaggest\PhpCodeBuilder\PhpCode;
@@ -27,6 +26,8 @@ class TypeBuilder
2726
*/
2827
public $types = [];
2928

29+
public $uniqueTypeSchemas = [];
30+
3031
public $file = '';
3132

3233
public function __construct()
@@ -315,14 +316,10 @@ private function hasConstraints($schema)
315316
return false;
316317
}
317318

318-
private function makeTypeDef(Schema $schema, $path)
319+
public function renderTypeDef(Schema $schema, $typeName, $path)
319320
{
320-
$tn = $this->typeName($schema, $path, true);
321-
$typeName = $this->typeName($schema, $path);
322-
$this->processed->attach($schema, $typeName);
323-
324321
$head = '';
325-
if (!empty($schema->title) && $schema->title != $tn) {
322+
if (!empty($schema->title) && $schema->title != $typeName) {
326323
$head .= $schema->title . "\n";
327324
}
328325

@@ -353,12 +350,12 @@ private function makeTypeDef(Schema $schema, $path)
353350
}
354351
}
355352

356-
$tnl = strtolower($tn);
353+
$tnl = strtolower($typeName);
357354

358355
$res = <<<MD
359356
360357
361-
### <a id="$tnl"></a>$tn
358+
### <a id="$tnl"></a>$typeName
362359
$head
363360
364361
MD;
@@ -384,6 +381,7 @@ private function makeTypeDef(Schema $schema, $path)
384381
->setColDelimiter('|')
385382
->setHeadRowDelimiter('-')
386383
->setOutlineVertical(true)
384+
->multilineCellDelimiter('<br>')
387385
->setShowHeader();
388386

389387
$res .= "\n\n";
@@ -419,6 +417,7 @@ private function makeTypeDef(Schema $schema, $path)
419417
->setColDelimiter('|')
420418
->setHeadRowDelimiter('-')
421419
->setOutlineVertical(true)
420+
->multilineCellDelimiter('<br>')
422421
->setShowHeader();
423422

424423
}
@@ -427,7 +426,23 @@ private function makeTypeDef(Schema $schema, $path)
427426
428427
MD;
429428

429+
return $res;
430+
}
431+
432+
private function makeTypeDef(Schema $schema, $path)
433+
{
434+
$tn = $this->typeName($schema, $path, true);
435+
$typeName = $this->typeName($schema, $path);
436+
$this->processed->attach($schema, $typeName);
437+
438+
$res = $this->renderTypeDef($schema, $tn, $path);
439+
440+
if (isset($this->uniqueTypeSchemas[$res])) {
441+
return $this->uniqueTypeSchemas[$res];
442+
}
443+
430444
$this->types[$typeName] = $res;
445+
$this->uniqueTypeSchemas[$res] = $typeName;
431446
$this->file .= $res;
432447

433448
return $typeName;

0 commit comments

Comments
 (0)