diff --git a/docs/README.md b/docs/README.md index df29b435..017c6a21 100644 --- a/docs/README.md +++ b/docs/README.md @@ -93,4 +93,4 @@ To update this documentation, run the following command:

-Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
Last modified date: Sun Sep 10 17:47:00 2023 +0300
Page content update date: Sun Sep 10 2023
Made with Bumble Documentation Generator
\ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
Last modified date: Sun Sep 10 17:47:00 2023 +0300
Page content update date: Thu Sep 28 2023
Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/classes/DocGeneratorFactory.md b/docs/classes/DocGeneratorFactory.md index e7cd7f2e..0799a14d 100644 --- a/docs/classes/DocGeneratorFactory.md +++ b/docs/classes/DocGeneratorFactory.md @@ -2,7 +2,7 @@ BumbleDocGen / DocGeneratorFactory

- DocGeneratorFactory class: + DocGeneratorFactory class:

@@ -36,9 +36,15 @@ final class DocGeneratorFactory
  • create
  • +
  • + createConfiguration +
  • setCustomConfigurationParameters
  • +
  • + setCustomDiDefinitions +
  • @@ -54,7 +60,7 @@ final class DocGeneratorFactory ```php @@ -91,7 +97,7 @@ public function __construct(string $diConfig = '/src/di-config.php'); ```php @@ -122,6 +128,57 @@ public function create(string|null ...$configurationFiles): \BumbleDocGen\DocGen Return value: \BumbleDocGen\DocGenerator +Throws: + + + +
    +
    + + + +```php +public function createConfiguration(string ...$configurationFiles): \BumbleDocGen\Core\Configuration\Configuration; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
    NameTypeDescription
    $configurationFiles (variadic)string-
    + +Return value: \BumbleDocGen\Core\Configuration\Configuration + + Throws:
    +
    +
    + + + +```php +public function setCustomDiDefinitions(array $definitions): void; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
    NameTypeDescription
    $definitionsarray-
    + +Return value: void + +

    diff --git a/docs/shared_c.cache b/docs/shared_c.cache index a6d1e147..f6d3e83a 100644 --- a/docs/shared_c.cache +++ b/docs/shared_c.cache @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/docs/tech/1.configuration/classes/Configuration.md b/docs/tech/1.configuration/classes/Configuration.md index c89516aa..0ef67d62 100644 --- a/docs/tech/1.configuration/classes/Configuration.md +++ b/docs/tech/1.configuration/classes/Configuration.md @@ -2,7 +2,7 @@ BumbleDocGen / Technical description of the project / Configuration files / Configuration

    - Configuration class: + Configuration class:

    @@ -33,6 +33,9 @@ final class Configuration

    Methods:

      +
    1. + getAdditionalConsoleCommands +
    2. getCacheDir
    3. @@ -88,7 +91,7 @@ final class Configuration @@ -103,7 +106,7 @@ final class Configuration ```php @@ -143,6 +146,40 @@ public function __construct(\BumbleDocGen\Core\Configuration\ConfigurationParame + +
      +
      + + + +```php +public function getAdditionalConsoleCommands(): \BumbleDocGen\Console\Command\AdditionalCommandCollection; +``` + + + +Parameters: not specified + +Return value: \BumbleDocGen\Console\Command\AdditionalCommandCollection + + +Throws: + +

      @@ -150,7 +187,7 @@ public function __construct(\BumbleDocGen\Core\Configuration\ConfigurationParame ```php @@ -178,7 +215,7 @@ public function getCacheDir(): string|null; ```php @@ -199,7 +236,7 @@ public function getDocGenLibDir(): string; ```php @@ -227,7 +264,7 @@ public function getGitClientPath(): string; ```php @@ -261,7 +298,7 @@ public function getLanguageHandlersCollection(): \BumbleDocGen\LanguageHandler\L ```php @@ -289,7 +326,7 @@ public function getOutputDir(): string; ```php @@ -317,7 +354,7 @@ public function getOutputDirBaseUrl(): string; ```php @@ -351,7 +388,7 @@ public function getPageLinkProcessor(): \BumbleDocGen\Core\Renderer\PageLinkProc ```php @@ -385,7 +422,7 @@ public function getPlugins(): \BumbleDocGen\Core\Plugin\PluginsCollection; ```php @@ -413,7 +450,7 @@ public function getProjectRoot(): string; ```php @@ -447,7 +484,7 @@ public function getSourceLocators(): \BumbleDocGen\Core\Parser\SourceLocator\Sou ```php @@ -475,7 +512,7 @@ public function getTemplatesDir(): string; ```php @@ -509,7 +546,7 @@ public function getTwigFilters(): \BumbleDocGen\Core\Renderer\Twig\Filter\Custom ```php @@ -543,7 +580,7 @@ public function getTwigFunctions(): \BumbleDocGen\Core\Renderer\Twig\Function\Cu ```php @@ -571,7 +608,7 @@ public function getWorkingDir(): string; ```php @@ -599,7 +636,7 @@ public function isCheckFileInGitBeforeCreatingDocEnabled(): bool; ```php diff --git a/docs/tech/1.configuration/readme.md b/docs/tech/1.configuration/readme.md index c6f0b40e..766e6d25 100644 --- a/docs/tech/1.configuration/readme.md +++ b/docs/tech/1.configuration/readme.md @@ -209,9 +209,15 @@ The inheritance algorithm is as follows: scalar types can be overwritten by each List of plugins + + additional_console_commands + array<Command> + NULL + Additional console commands +

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file diff --git a/docs/tech/2.parser/classes/ClassEntity.md b/docs/tech/2.parser/classes/ClassEntity.md index ab6c5060..be23c7d7 100644 --- a/docs/tech/2.parser/classes/ClassEntity.md +++ b/docs/tech/2.parser/classes/ClassEntity.md @@ -416,7 +416,7 @@ public function cursorToDocAttributeLinkFragment(string $cursor, bool $isForDocu \DI\NotFoundException
    4. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    5. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -447,7 +447,7 @@ public function documentCreationAllowed(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    6. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    7. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -477,7 +477,7 @@ public function entityCacheIsOutdated(): bool; Throws: @@ -541,7 +541,7 @@ public function getAbsoluteFileName(): string|null; Throws: @@ -625,7 +625,7 @@ public function getCasesNames(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    8. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    9. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -673,7 +673,7 @@ public function getConstant(string $name): string|array|int|bool|null|float; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    10. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    11. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -732,7 +732,7 @@ public function getConstantEntity(string $constantName, bool $unsafe = true): \B \DI\DependencyException
    12. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    13. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -769,7 +769,7 @@ public function getConstantEntityCollection(): \BumbleDocGen\LanguageHandler\Php \DI\DependencyException
    14. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    15. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -800,7 +800,7 @@ public function getConstants(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    16. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    17. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -831,7 +831,7 @@ public function getConstantsData(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    18. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    19. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -868,7 +868,7 @@ public function getDescription(): string; \DI\DependencyException
    20. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    21. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -898,7 +898,7 @@ public function getDescriptionLinks(): array; Throws: @@ -971,7 +971,7 @@ public function getDocComment(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    22. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    23. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1008,7 +1008,7 @@ public function getDocCommentEntity(): \BumbleDocGen\LanguageHandler\Php\Parser\ \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    24. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    25. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1059,7 +1059,7 @@ public function getDocRender(): \BumbleDocGen\Core\Renderer\EntityDocRenderer\En Throws: @@ -1168,7 +1168,7 @@ public function getExtends(): string|null; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    26. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    27. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1196,7 +1196,7 @@ public function getFileContent(): string; Throws: @@ -1264,7 +1264,7 @@ public function getFileSourceLink(bool $withLine = true): string|null; Throws: @@ -1318,7 +1318,7 @@ public function getFullFileName(): string|null; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    28. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    29. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1349,7 +1349,7 @@ public function getImplementingReflectionClass(): \Roave\BetterReflection\Reflec \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    30. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    31. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1380,7 +1380,7 @@ public function getInterfaceNames(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    32. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    33. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1411,7 +1411,7 @@ public function getInterfacesEntities(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    34. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    35. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1442,7 +1442,7 @@ public function getInterfacesString(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    36. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    37. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1498,7 +1498,7 @@ public function getMethodEntity(string $methodName, bool $unsafe = true): \Bumbl \DI\DependencyException
    38. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    39. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    40. \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    41. @@ -1532,7 +1532,7 @@ public function getMethodEntityCollection(): \BumbleDocGen\LanguageHandler\Php\P \DI\DependencyException
    42. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    43. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    44. \DI\NotFoundException
    45. @@ -1569,7 +1569,7 @@ public function getMethodsData(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    46. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    47. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1600,7 +1600,7 @@ public function getModifiersString(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    48. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    49. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1652,7 +1652,7 @@ public function getNamespaceName(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    50. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    51. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1704,7 +1704,7 @@ public function getParentClass(): \BumbleDocGen\LanguageHandler\Php\Parser\Entit \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    52. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    53. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1735,7 +1735,7 @@ public function getParentClassName(): string|null; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    54. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    55. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1766,7 +1766,7 @@ public function getParentClassNames(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    56. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    57. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1856,7 +1856,7 @@ public function getPropertiesData(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    58. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    59. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1912,7 +1912,7 @@ public function getPropertyEntity(string $propertyName, bool $unsafe = true): \B \DI\DependencyException
    60. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    61. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    62. \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    63. @@ -1946,7 +1946,7 @@ public function getPropertyEntityCollection(): \BumbleDocGen\LanguageHandler\Php \DI\DependencyException
    64. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    65. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    66. \DI\NotFoundException
    67. @@ -2021,7 +2021,7 @@ public function getRelativeFileName(bool $loadIfEmpty = true): string|null; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    68. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    69. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2094,7 +2094,7 @@ public function getStartLine(): int; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    70. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    71. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2127,7 +2127,7 @@ public function getThrows(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    72. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    73. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2158,7 +2158,7 @@ public function getTraitsNames(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    74. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    75. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2244,7 +2244,7 @@ public function hasConstant(string $constant): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    76. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    77. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2345,7 +2345,7 @@ public function hasMethod(string $method): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    78. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    79. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2393,7 +2393,7 @@ public function hasParentClass(string $parentClassName): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    80. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    81. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2441,7 +2441,7 @@ public function hasProperty(string $property): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    82. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    83. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2495,7 +2495,7 @@ public function hasTraits(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    84. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    85. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2543,7 +2543,7 @@ public function implementsInterface(string $interfaceName): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    86. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    87. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2650,7 +2650,7 @@ public function isEntityFileCanBeLoad(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    88. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    89. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2719,7 +2719,7 @@ public function isEnum(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    90. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    91. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2747,7 +2747,7 @@ public function isInGit(): bool; Throws: @@ -2812,7 +2812,7 @@ public function isInterface(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    92. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    93. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2883,7 +2883,7 @@ public function isSubclassOf(string $className): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    94. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    95. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -2914,7 +2914,7 @@ public function isTrait(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    96. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    97. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException diff --git a/docs/tech/2.parser/classes/ClassEntityCollection.md b/docs/tech/2.parser/classes/ClassEntityCollection.md index 87a159fc..6872f984 100644 --- a/docs/tech/2.parser/classes/ClassEntityCollection.md +++ b/docs/tech/2.parser/classes/ClassEntityCollection.md @@ -131,7 +131,7 @@ final class ClassEntityCollection extends \BumbleDocGen\Core\Parser\Entity\Logga ```php -public function __construct(\BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\LanguageHandler\Php\PhpHandlerSettings $phpHandlerSettings, \BumbleDocGen\LanguageHandler\Php\Parser\ParserHelper $parserHelper, \BumbleDocGen\Core\Plugin\PluginEventDispatcher $pluginEventDispatcher, \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Cache\CacheablePhpEntityFactory $cacheablePhpEntityFactory, \BumbleDocGen\LanguageHandler\Php\Renderer\EntityDocRenderer\EntityDocRendererHelper $docRendererHelper, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Core\Console\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Psr\Log\LoggerInterface $logger); +public function __construct(\BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\LanguageHandler\Php\PhpHandlerSettings $phpHandlerSettings, \BumbleDocGen\LanguageHandler\Php\Parser\ParserHelper $parserHelper, \BumbleDocGen\Core\Plugin\PluginEventDispatcher $pluginEventDispatcher, \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Cache\CacheablePhpEntityFactory $cacheablePhpEntityFactory, \BumbleDocGen\LanguageHandler\Php\Renderer\EntityDocRenderer\EntityDocRendererHelper $docRendererHelper, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Console\ProgressBar\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Psr\Log\LoggerInterface $logger); ``` @@ -184,7 +184,7 @@ public function __construct(\BumbleDocGen\Core\Configuration\Configuration $conf $progressBarFactory - \BumbleDocGen\Core\Console\ProgressBarFactory + \BumbleDocGen\Console\ProgressBar\ProgressBarFactory - @@ -248,7 +248,7 @@ public function add(\BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEntity Throws: @@ -370,7 +370,7 @@ public function filterByNameRegularExpression(string $regexPattern): \BumbleDocG \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    98. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    99. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -418,7 +418,7 @@ public function filterByParentClassNames(array $parentClassNames): \BumbleDocGen \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    100. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    101. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -466,7 +466,7 @@ public function filterByPaths(array $paths): \BumbleDocGen\LanguageHandler\Php\P \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    102. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    103. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -782,7 +782,7 @@ public function getOnlyInstantiable(): \BumbleDocGen\LanguageHandler\Php\Parser\ \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    104. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    105. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -813,7 +813,7 @@ public function getOnlyInterfaces(): \BumbleDocGen\LanguageHandler\Php\Parser\En \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    106. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    107. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1070,7 +1070,7 @@ public function loadClassEntities(): void; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    108. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    109. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException diff --git a/docs/tech/2.parser/classes/ConstantEntity.md b/docs/tech/2.parser/classes/ConstantEntity.md index ade7f56e..4a7005d9 100644 --- a/docs/tech/2.parser/classes/ConstantEntity.md +++ b/docs/tech/2.parser/classes/ConstantEntity.md @@ -256,7 +256,7 @@ public function entityCacheIsOutdated(): bool; Throws: @@ -403,7 +403,7 @@ public function getDescriptionLinks(): array; Throws: @@ -470,7 +470,7 @@ public function getDocComment(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    110. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    111. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -545,7 +545,7 @@ public function getEndLine(): int; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    112. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    113. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -599,7 +599,7 @@ public function getFileName(): string|null; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    114. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    115. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -646,7 +646,7 @@ public function getFileSourceLink(bool $withLine = true): string|null; Throws: @@ -742,7 +742,7 @@ public function getImplementingReflectionClass(): \Roave\BetterReflection\Reflec \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    116. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    117. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -794,7 +794,7 @@ public function getNamespaceName(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    118. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    119. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -932,7 +932,7 @@ public function getStartLine(): int; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    120. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    121. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -965,7 +965,7 @@ public function getThrows(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    122. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    123. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1127,7 +1127,7 @@ public function isEntityFileCanBeLoad(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    124. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    125. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1181,7 +1181,7 @@ public function isPrivate(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    126. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    127. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1212,7 +1212,7 @@ public function isProtected(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    128. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    129. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1243,7 +1243,7 @@ public function isPublic(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    130. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    131. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException diff --git a/docs/tech/2.parser/classes/MethodEntity.md b/docs/tech/2.parser/classes/MethodEntity.md index 278ab715..81c91b00 100644 --- a/docs/tech/2.parser/classes/MethodEntity.md +++ b/docs/tech/2.parser/classes/MethodEntity.md @@ -2,7 +2,7 @@ BumbleDocGen / Technical description of the project / Parser / Entities and entities collections / MethodEntity

      - MethodEntity class: + MethodEntity class:

      @@ -219,7 +219,7 @@ class MethodEntity extends \BumbleDocGen\LanguageHandler\Php\Parser\Entity\BaseE ```php @@ -310,7 +310,7 @@ public function entityCacheIsOutdated(): bool; Throws: @@ -438,7 +438,7 @@ public function getCachedEntityDependencies(): array; ```php @@ -464,7 +464,7 @@ public function getDescription(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    132. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    133. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -494,7 +494,7 @@ public function getDescriptionLinks(): array; Throws: @@ -562,7 +562,7 @@ public function getDocBlock(bool $recursive = true): \phpDocumentor\Reflection\D ```php @@ -582,7 +582,7 @@ public function getDocComment(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    134. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    135. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -593,7 +593,7 @@ public function getDocComment(): string; ```php @@ -619,7 +619,7 @@ public function getDocCommentEntity(): \BumbleDocGen\LanguageHandler\Php\Parser\ \DI\NotFoundException
    136. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    137. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -630,7 +630,7 @@ public function getDocCommentEntity(): \BumbleDocGen\LanguageHandler\Php\Parser\ ```php @@ -650,7 +650,7 @@ public function getDocCommentLine(): int|null; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    138. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    139. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -661,7 +661,7 @@ public function getDocCommentLine(): int|null; ```php @@ -687,7 +687,7 @@ public function getDocCommentLineRecursive(): int|null; \DI\NotFoundException
    140. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    141. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -698,7 +698,7 @@ public function getDocCommentLineRecursive(): int|null; ```php @@ -724,7 +724,7 @@ public function getDocCommentRecursive(): string; \DI\DependencyException
    142. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    143. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -758,7 +758,7 @@ public function getDocNote(): string; ```php @@ -778,7 +778,7 @@ public function getEndLine(): int; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    144. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    145. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -812,7 +812,7 @@ public function getExamples(): array; ```php @@ -832,7 +832,7 @@ public function getFileName(): string|null; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    146. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    147. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -879,7 +879,7 @@ public function getFileSourceLink(bool $withLine = true): string|null; Throws: @@ -913,7 +913,7 @@ public function getFirstExample(): string; ```php @@ -933,7 +933,7 @@ public function getFirstReturnValue(): mixed; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    148. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    149. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -944,7 +944,7 @@ public function getFirstReturnValue(): mixed; ```php @@ -965,7 +965,7 @@ public function getImplementingClass(): \BumbleDocGen\LanguageHandler\Php\Parser ```php @@ -986,7 +986,7 @@ public function getImplementingClassName(): string; ```php @@ -1006,7 +1006,7 @@ public function getImplementingReflectionClass(): \Roave\BetterReflection\Reflec \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    150. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    151. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1017,7 +1017,7 @@ public function getImplementingReflectionClass(): \Roave\BetterReflection\Reflec ```php @@ -1037,7 +1037,7 @@ public function getModifiersString(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    152. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    153. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1048,7 +1048,7 @@ public function getModifiersString(): string; ```php @@ -1069,7 +1069,7 @@ public function getName(): string; ```php @@ -1089,7 +1089,7 @@ public function getNamespaceName(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    154. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    155. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1123,7 +1123,7 @@ public function getObjectId(): string; ```php @@ -1149,7 +1149,7 @@ public function getParameters(): array; \DI\DependencyException
    156. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    157. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    158. \Exception
    159. @@ -1163,7 +1163,7 @@ public function getParameters(): array; ```php @@ -1189,7 +1189,7 @@ public function getParametersString(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    160. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    161. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1200,7 +1200,7 @@ public function getParametersString(): string; ```php @@ -1221,7 +1221,7 @@ public function getPhpHandlerSettings(): \BumbleDocGen\LanguageHandler\Php\PhpHa ```php @@ -1247,7 +1247,7 @@ public function getPrototype(): \BumbleDocGen\LanguageHandler\Php\Parser\Entity\ \DI\NotFoundException
    162. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    163. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1258,7 +1258,7 @@ public function getPrototype(): \BumbleDocGen\LanguageHandler\Php\Parser\Entity\ ```php @@ -1284,7 +1284,7 @@ public function getReturnType(): string; \DI\DependencyException
    164. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    165. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1295,7 +1295,7 @@ public function getReturnType(): string; ```php @@ -1316,7 +1316,7 @@ public function getRootEntity(): \BumbleDocGen\LanguageHandler\Php\Parser\Entity ```php @@ -1337,7 +1337,7 @@ public function getRootEntityCollection(): \BumbleDocGen\LanguageHandler\Php\Par ```php @@ -1358,7 +1358,7 @@ public function getShortName(): string; ```php @@ -1384,7 +1384,7 @@ public function getSignature(): string; \DI\NotFoundException
    166. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    167. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1395,7 +1395,7 @@ public function getSignature(): string; ```php @@ -1415,7 +1415,7 @@ public function getStartColumn(): int; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    168. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    169. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1426,7 +1426,7 @@ public function getStartColumn(): int; ```php @@ -1446,7 +1446,7 @@ public function getStartLine(): int; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    170. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    171. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1479,7 +1479,7 @@ public function getThrows(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    172. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    173. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1566,7 +1566,7 @@ public function hasThrows(): bool; ```php @@ -1610,7 +1610,7 @@ public function isDeprecated(): bool; ```php @@ -1683,7 +1683,7 @@ public function isEntityFileCanBeLoad(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    174. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    175. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1694,7 +1694,7 @@ public function isEntityFileCanBeLoad(): bool; ```php @@ -1715,7 +1715,7 @@ public function isImplementedInParentClass(): bool; ```php @@ -1741,7 +1741,7 @@ public function isInitialization(): bool; \DI\NotFoundException
    176. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    177. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1775,7 +1775,7 @@ public function isInternal(): bool; ```php @@ -1795,7 +1795,7 @@ public function isPrivate(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    178. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    179. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1806,7 +1806,7 @@ public function isPrivate(): bool; ```php @@ -1826,7 +1826,7 @@ public function isProtected(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    180. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    181. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1837,7 +1837,7 @@ public function isProtected(): bool; ```php @@ -1857,7 +1857,7 @@ public function isPublic(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    182. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    183. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1868,7 +1868,7 @@ public function isPublic(): bool; ```php @@ -1888,7 +1888,7 @@ public function isStatic(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    184. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    185. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1899,7 +1899,7 @@ public function isStatic(): bool; ```php diff --git a/docs/tech/2.parser/classes/PropertyEntity.md b/docs/tech/2.parser/classes/PropertyEntity.md index 5366d46b..4d40a6c7 100644 --- a/docs/tech/2.parser/classes/PropertyEntity.md +++ b/docs/tech/2.parser/classes/PropertyEntity.md @@ -268,7 +268,7 @@ public function entityCacheIsOutdated(): bool; Throws: @@ -422,7 +422,7 @@ public function getDescription(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    186. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    187. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -452,7 +452,7 @@ public function getDescriptionLinks(): array; Throws: @@ -525,7 +525,7 @@ public function getDocComment(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    188. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    189. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -562,7 +562,7 @@ public function getDocCommentEntity(): \BumbleDocGen\LanguageHandler\Php\Parser\ \DI\NotFoundException
    190. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    191. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -616,7 +616,7 @@ public function getEndLine(): int; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    192. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    193. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -670,7 +670,7 @@ public function getFileName(): string|null; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    194. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    195. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -717,7 +717,7 @@ public function getFileSourceLink(bool $withLine = true): string|null; Throws: @@ -813,7 +813,7 @@ public function getImplementingReflectionClass(): \Roave\BetterReflection\Reflec \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    196. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    197. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -850,7 +850,7 @@ public function getModifiersString(): string; \DI\NotFoundException
    198. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    199. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -902,7 +902,7 @@ public function getNamespaceName(): string; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    200. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    201. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1040,7 +1040,7 @@ public function getStartLine(): int; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    202. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    203. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1073,7 +1073,7 @@ public function getThrows(): array; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    204. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    205. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1110,7 +1110,7 @@ public function getType(): string; \DI\DependencyException
    206. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    207. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1272,7 +1272,7 @@ public function isEntityFileCanBeLoad(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    208. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    209. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1347,7 +1347,7 @@ public function isPrivate(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    210. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    211. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1378,7 +1378,7 @@ public function isProtected(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    212. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    213. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -1409,7 +1409,7 @@ public function isPublic(): bool; \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    214. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    215. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException diff --git a/docs/tech/2.parser/entity.md b/docs/tech/2.parser/entity.md index 5ec408c7..33de5e99 100644 --- a/docs/tech/2.parser/entity.md +++ b/docs/tech/2.parser/entity.md @@ -123,4 +123,4 @@ These classes are a convenient wrapper for accessing data in templates:

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Thu Sep 28 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/2.parser/entityFilterCondition.md b/docs/tech/2.parser/entityFilterCondition.md index 93ada404..1ddd49cc 100644 --- a/docs/tech/2.parser/entityFilterCondition.md +++ b/docs/tech/2.parser/entityFilterCondition.md @@ -78,4 +78,4 @@ Filter condition for working with entities PHP language handler:

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/2.parser/readme.md b/docs/tech/2.parser/readme.md index 3a560725..d2513543 100644 --- a/docs/tech/2.parser/readme.md +++ b/docs/tech/2.parser/readme.md @@ -41,4 +41,4 @@ In this section, we show how the parser works and what components it consists of

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/2.parser/sourceLocator.md b/docs/tech/2.parser/sourceLocator.md index 93f464e9..ea011ffb 100644 --- a/docs/tech/2.parser/sourceLocator.md +++ b/docs/tech/2.parser/sourceLocator.md @@ -30,4 +30,4 @@ You can create your own source locators or use any existing ones. All source loc

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:09:56 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:09:56 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/3.renderer/breadcrumbs.md b/docs/tech/3.renderer/breadcrumbs.md index 2ee81fef..0ff92453 100644 --- a/docs/tech/3.renderer/breadcrumbs.md +++ b/docs/tech/3.renderer/breadcrumbs.md @@ -51,4 +51,4 @@ Here is an example of the result of the `generatePageBreadcrumbs` function:

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/3.renderer/classes/BreadcrumbsHelper.md b/docs/tech/3.renderer/classes/BreadcrumbsHelper.md index ee9de81d..d4b3b7be 100644 --- a/docs/tech/3.renderer/classes/BreadcrumbsHelper.md +++ b/docs/tech/3.renderer/classes/BreadcrumbsHelper.md @@ -157,7 +157,7 @@ public function getAllPageLinks(): array; \DI\DependencyException
    216. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    217. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -213,7 +213,7 @@ public function getBreadcrumbs(string $filePatch, bool $fromCurrent = true): arr \DI\DependencyException
    218. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    219. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -269,7 +269,7 @@ public function getBreadcrumbsForTemplates(string $templateFilePatch, bool $from \DI\DependencyException
    220. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    221. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException @@ -317,7 +317,7 @@ public function getPageDataByKey(string $key): array|null; \DI\DependencyException
    222. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    223. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    224. \DI\NotFoundException
    225. @@ -368,7 +368,7 @@ public function getPageDocFileByKey(string $key): string|null; \DI\DependencyException
    226. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    227. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    228. \DI\NotFoundException
    229. @@ -419,7 +419,7 @@ public function getPageLinkByKey(string $key): string|null; \DI\DependencyException
    230. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    231. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    232. \DI\NotFoundException
    233. @@ -467,7 +467,7 @@ public function getTemplateLinkKey(string $templateName): string|null; Throws: @@ -512,7 +512,7 @@ public function getTemplateTitle(string $templateName): string; Throws: @@ -593,7 +593,7 @@ public function renderBreadcrumbs(string $currentPageTitle, string $filePatch, b \Twig\Error\LoaderError
    234. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    235. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException diff --git a/docs/tech/3.renderer/classes/ClassEntityCollection.md b/docs/tech/3.renderer/classes/ClassEntityCollection.md index 4c0f013f..250fd73f 100644 --- a/docs/tech/3.renderer/classes/ClassEntityCollection.md +++ b/docs/tech/3.renderer/classes/ClassEntityCollection.md @@ -131,7 +131,7 @@ final class ClassEntityCollection extends \BumbleDocGen\Core\Parser\Entity\Logga ```php -public function __construct(\BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\LanguageHandler\Php\PhpHandlerSettings $phpHandlerSettings, \BumbleDocGen\LanguageHandler\Php\Parser\ParserHelper $parserHelper, \BumbleDocGen\Core\Plugin\PluginEventDispatcher $pluginEventDispatcher, \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Cache\CacheablePhpEntityFactory $cacheablePhpEntityFactory, \BumbleDocGen\LanguageHandler\Php\Renderer\EntityDocRenderer\EntityDocRendererHelper $docRendererHelper, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Core\Console\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Psr\Log\LoggerInterface $logger); +public function __construct(\BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\LanguageHandler\Php\PhpHandlerSettings $phpHandlerSettings, \BumbleDocGen\LanguageHandler\Php\Parser\ParserHelper $parserHelper, \BumbleDocGen\Core\Plugin\PluginEventDispatcher $pluginEventDispatcher, \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Cache\CacheablePhpEntityFactory $cacheablePhpEntityFactory, \BumbleDocGen\LanguageHandler\Php\Renderer\EntityDocRenderer\EntityDocRendererHelper $docRendererHelper, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Console\ProgressBar\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Psr\Log\LoggerInterface $logger); ``` @@ -184,7 +184,7 @@ public function __construct(\BumbleDocGen\Core\Configuration\Configuration $conf $progressBarFactory - \BumbleDocGen\Core\Console\ProgressBarFactory + \BumbleDocGen\Console\ProgressBar\ProgressBarFactory - diff --git a/docs/tech/3.renderer/classes/ClassEntityCollection_2.md b/docs/tech/3.renderer/classes/ClassEntityCollection_2.md index 2e51a579..372c2b7a 100644 --- a/docs/tech/3.renderer/classes/ClassEntityCollection_2.md +++ b/docs/tech/3.renderer/classes/ClassEntityCollection_2.md @@ -131,7 +131,7 @@ final class ClassEntityCollection extends \BumbleDocGen\Core\Parser\Entity\Logga ```php -public function __construct(\BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\LanguageHandler\Php\PhpHandlerSettings $phpHandlerSettings, \BumbleDocGen\LanguageHandler\Php\Parser\ParserHelper $parserHelper, \BumbleDocGen\Core\Plugin\PluginEventDispatcher $pluginEventDispatcher, \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Cache\CacheablePhpEntityFactory $cacheablePhpEntityFactory, \BumbleDocGen\LanguageHandler\Php\Renderer\EntityDocRenderer\EntityDocRendererHelper $docRendererHelper, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Core\Console\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Psr\Log\LoggerInterface $logger); +public function __construct(\BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\LanguageHandler\Php\PhpHandlerSettings $phpHandlerSettings, \BumbleDocGen\LanguageHandler\Php\Parser\ParserHelper $parserHelper, \BumbleDocGen\Core\Plugin\PluginEventDispatcher $pluginEventDispatcher, \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Cache\CacheablePhpEntityFactory $cacheablePhpEntityFactory, \BumbleDocGen\LanguageHandler\Php\Renderer\EntityDocRenderer\EntityDocRendererHelper $docRendererHelper, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Console\ProgressBar\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Psr\Log\LoggerInterface $logger); ``` @@ -184,7 +184,7 @@ public function __construct(\BumbleDocGen\Core\Configuration\Configuration $conf $progressBarFactory - \BumbleDocGen\Core\Console\ProgressBarFactory + \BumbleDocGen\Console\ProgressBar\ProgressBarFactory - @@ -248,10 +248,10 @@ public function add(\BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEntity Throws: @@ -319,10 +319,10 @@ public function filterByInterfaces(array $interfaces): \BumbleDocGen\LanguageHan Throws: @@ -367,10 +367,10 @@ public function filterByNameRegularExpression(string $regexPattern): \BumbleDocG Throws: @@ -415,10 +415,10 @@ public function filterByParentClassNames(array $parentClassNames): \BumbleDocGen Throws: @@ -463,10 +463,10 @@ public function filterByPaths(array $paths): \BumbleDocGen\LanguageHandler\Php\P Throws: @@ -779,10 +779,10 @@ public function getOnlyInstantiable(): \BumbleDocGen\LanguageHandler\Php\Parser\ Throws: @@ -810,10 +810,10 @@ public function getOnlyInterfaces(): \BumbleDocGen\LanguageHandler\Php\Parser\En Throws: @@ -1067,10 +1067,10 @@ public function loadClassEntities(): void; \DI\DependencyException
    236. - \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    237. + \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    238. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    239. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException diff --git a/docs/tech/3.renderer/classes/DrawClassMap.md b/docs/tech/3.renderer/classes/DrawClassMap.md index c99a59b7..488f196a 100644 --- a/docs/tech/3.renderer/classes/DrawClassMap.md +++ b/docs/tech/3.renderer/classes/DrawClassMap.md @@ -132,7 +132,7 @@ public function __construct(\BumbleDocGen\Core\Renderer\Twig\Function\GetDocumen ```php -public function __invoke(\BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEntityCollection $classEntityCollections): string; +public function __invoke(\BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEntityCollection ...$classEntityCollections): string; ``` @@ -149,7 +149,7 @@ public function __invoke(\BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEn - $classEntityCollections + $classEntityCollections (variadic) \BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEntityCollection The collection of entities for which the class map will be generated diff --git a/docs/tech/3.renderer/classes/GetDocumentedEntityUrl_2.md b/docs/tech/3.renderer/classes/GetDocumentedEntityUrl_2.md index 0755e794..bdcec51d 100644 --- a/docs/tech/3.renderer/classes/GetDocumentedEntityUrl_2.md +++ b/docs/tech/3.renderer/classes/GetDocumentedEntityUrl_2.md @@ -211,13 +211,13 @@ public function __invoke(\BumbleDocGen\Core\Parser\Entity\RootEntityCollection $ \DI\DependencyException
    240. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    241. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    242. \DI\NotFoundException
    243. - \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    244. + \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException diff --git a/docs/tech/3.renderer/classes/GetDocumentedEntityUrl_3.md b/docs/tech/3.renderer/classes/GetDocumentedEntityUrl_3.md index b4ed9a18..781ce3b7 100644 --- a/docs/tech/3.renderer/classes/GetDocumentedEntityUrl_3.md +++ b/docs/tech/3.renderer/classes/GetDocumentedEntityUrl_3.md @@ -211,13 +211,13 @@ public function __invoke(\BumbleDocGen\Core\Parser\Entity\RootEntityCollection $ \DI\DependencyException
    245. - \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    246. + \BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException
    247. \DI\NotFoundException
    248. - \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException
    249. + \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Exception\ReflectionException diff --git a/docs/tech/3.renderer/readme.md b/docs/tech/3.renderer/readme.md index d982caaf..daea1feb 100644 --- a/docs/tech/3.renderer/readme.md +++ b/docs/tech/3.renderer/readme.md @@ -60,4 +60,4 @@ This process is presented in the form of a diagram below.

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/3.renderer/templates.md b/docs/tech/3.renderer/templates.md index 285e49ad..5ffaa888 100644 --- a/docs/tech/3.renderer/templates.md +++ b/docs/tech/3.renderer/templates.md @@ -101,4 +101,4 @@ Result after starting the documentation generation process:

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/3.renderer/templatesDynamicBlocks.md b/docs/tech/3.renderer/templatesDynamicBlocks.md index 329a86bf..8a4f475b 100644 --- a/docs/tech/3.renderer/templatesDynamicBlocks.md +++ b/docs/tech/3.renderer/templatesDynamicBlocks.md @@ -26,4 +26,4 @@ You can use the built-in functions and filters or add your own, so you can imple

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/3.renderer/templatesLinking.md b/docs/tech/3.renderer/templatesLinking.md index 3034b9be..360b9e7c 100644 --- a/docs/tech/3.renderer/templatesLinking.md +++ b/docs/tech/3.renderer/templatesLinking.md @@ -27,4 +27,4 @@ You can also implement your own functions for relinking if necessary.

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/3.renderer/templatesVariables.md b/docs/tech/3.renderer/templatesVariables.md index daaae8e5..31c9ec2f 100644 --- a/docs/tech/3.renderer/templatesVariables.md +++ b/docs/tech/3.renderer/templatesVariables.md @@ -11,4 +11,4 @@ There are several variables available in each processed template.

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Thu Sep 28 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/3.renderer/twigCustomFilters.md b/docs/tech/3.renderer/twigCustomFilters.md index c6a5e7d9..e573dd50 100644 --- a/docs/tech/3.renderer/twigCustomFilters.md +++ b/docs/tech/3.renderer/twigCustomFilters.md @@ -263,4 +263,4 @@ Here is a list of filters available by default:

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/3.renderer/twigCustomFunctions.md b/docs/tech/3.renderer/twigCustomFunctions.md index 09663778..29b1c0d3 100644 --- a/docs/tech/3.renderer/twigCustomFunctions.md +++ b/docs/tech/3.renderer/twigCustomFunctions.md @@ -385,4 +385,4 @@ Here is a list of functions available by default:

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Thu Sep 28 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/4.pluginSystem/readme.md b/docs/tech/4.pluginSystem/readme.md index 2ba21d3d..94e263dc 100644 --- a/docs/tech/4.pluginSystem/readme.md +++ b/docs/tech/4.pluginSystem/readme.md @@ -192,4 +192,4 @@ plugins:

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/classes/AddMissingDocBlocksCommand.md b/docs/tech/classes/AddMissingDocBlocksCommand.md new file mode 100644 index 00000000..56d9f65f --- /dev/null +++ b/docs/tech/classes/AddMissingDocBlocksCommand.md @@ -0,0 +1,1384 @@ + + BumbleDocGen / Technical description of the project / Class map / AddMissingDocBlocksCommand
      + +

      + AddMissingDocBlocksCommand class: +

      + + + + + +```php +namespace BumbleDocGen\Console\Command; + +final class AddMissingDocBlocksCommand extends \BumbleDocGen\Console\Command\BaseCommand +``` + +
      Base class for all commands.
      + + + + + + +

      Initialization methods:

      + +
        +
      1. + __construct +
      2. +
      + +

      Methods:

      + +
        +
      1. + addArgument + - Adds an argument.
      2. +
      3. + addOption + - Adds an option.
      4. +
      5. + addUsage + - Add a command usage example, it'll be prefixed with the command name.
      6. +
      7. + complete + - Adds suggestions to $suggestions for the current completion input (e.g. option or argument).
      8. +
      9. + getAliases + - Returns the aliases for the command.
      10. +
      11. + getApplication + - Gets the application instance for this command.
      12. +
      13. + getDefaultDescription +
      14. +
      15. + getDefaultName +
      16. +
      17. + getDefinition + - Gets the InputDefinition attached to this Command.
      18. +
      19. + getDescription + - Returns the description for the command.
      20. +
      21. + getHelp + - Returns the help for the command.
      22. +
      23. + getHelper + - Gets a helper instance by name.
      24. +
      25. + getHelperSet + - Gets the helper set.
      26. +
      27. + getName + - Returns the command name.
      28. +
      29. + getNativeDefinition + - Gets the InputDefinition to be used to create representations of this Command.
      30. +
      31. + getProcessedHelp + - Returns the processed help for the command replacing the %command.name% and %command.full_name% patterns with the real values dynamically.
      32. +
      33. + getSynopsis + - Returns the synopsis for the command.
      34. +
      35. + getUsages + - Returns alternative usages of the command.
      36. +
      37. + ignoreValidationErrors + - Ignores validation errors.
      38. +
      39. + isEnabled + - Checks whether the command is enabled or not in the current environment.
      40. +
      41. + isHidden +
      42. +
      43. + mergeApplicationDefinition + - Merges the application definition with the command definition.
      44. +
      45. + run + - Runs the command.
      46. +
      47. + setAliases + - Sets the aliases for the command.
      48. +
      49. + setApplication +
      50. +
      51. + setCode + - Sets the code to execute when running this command.
      52. +
      53. + setDefinition + - Sets an array of argument and option instances.
      54. +
      55. + setDescription + - Sets the description for the command.
      56. +
      57. + setHelp + - Sets the help for the command.
      58. +
      59. + setHelperSet +
      60. +
      61. + setHidden +
      62. +
      63. + setName + - Sets the name of the command.
      64. +
      65. + setProcessTitle + - Sets the process title of the command.
      66. +
      + + +

      Constants:

      + + + + + + +

      Method details:

      + +
      + + + +```php +// Implemented in BumbleDocGen\Console\Command\BaseCommand + +public function __construct(string|null $name = NULL); +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring | nullThe name of the command; passing null means it must be set in configure()
      + + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addArgument(string $name, int|null $mode = NULL, string $description = '', mixed $default = NULL): static; +``` + +
      Adds an argument.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      $modeint | nullThe argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL
      $descriptionstring-
      $defaultmixedThe default value (for InputArgument::OPTIONAL mode only)
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addOption(string $name, string|array|null $shortcut = NULL, int|null $mode = NULL, string $description = '', mixed $default = NULL): static; +``` + +
      Adds an option.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      $shortcutstring | array | nullThe shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts
      $modeint | nullThe option mode: One of the InputOption::VALUE_* constants
      $descriptionstring-
      $defaultmixedThe default value (must be null for InputOption::VALUE_NONE)
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addUsage(string $usage): static; +``` + +
      Add a command usage example, it'll be prefixed with the command name.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $usagestring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function complete(\Symfony\Component\Console\Completion\CompletionInput $input, \Symfony\Component\Console\Completion\CompletionSuggestions $suggestions): void; +``` + +
      Adds suggestions to $suggestions for the current completion input (e.g. option or argument).
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $inputSymfony\Component\Console\Completion\CompletionInput-
      $suggestionsSymfony\Component\Console\Completion\CompletionSuggestions-
      + +Return value: void + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getAliases(): array; +``` + +
      Returns the aliases for the command.
      + +Parameters: not specified + +Return value: array + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getApplication(): \Symfony\Component\Console\Application|null; +``` + +
      Gets the application instance for this command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Application | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public static function getDefaultDescription(): string|null; +``` + + + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public static function getDefaultName(): string|null; +``` + + + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getDefinition(): \Symfony\Component\Console\Input\InputDefinition; +``` + +
      Gets the InputDefinition attached to this Command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Input\InputDefinition + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getDescription(): string; +``` + +
      Returns the description for the command.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelp(): string; +``` + +
      Returns the help for the command.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelper(string $name): mixed; +``` + +
      Gets a helper instance by name.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      + +Return value: mixed + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelperSet(): \Symfony\Component\Console\Helper\HelperSet|null; +``` + +
      Gets the helper set.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Helper\HelperSet | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getName(): string|null; +``` + +
      Returns the command name.
      + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getNativeDefinition(): \Symfony\Component\Console\Input\InputDefinition; +``` + +
      Gets the InputDefinition to be used to create representations of this Command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Input\InputDefinition + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getProcessedHelp(): string; +``` + +
      Returns the processed help for the command replacing the %command.name% and +%command.full_name% patterns with the real values dynamically.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getSynopsis(bool $short = false): string; +``` + +
      Returns the synopsis for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $shortboolWhether to show the short version of the synopsis (with options folded) or not
      + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getUsages(): array; +``` + +
      Returns alternative usages of the command.
      + +Parameters: not specified + +Return value: array + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function ignoreValidationErrors(): mixed; +``` + +
      Ignores validation errors.
      + +Parameters: not specified + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function isEnabled(): bool; +``` + +
      Checks whether the command is enabled or not in the current environment.
      + +Parameters: not specified + +Return value: bool + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function isHidden(): bool; +``` + + + +Parameters: not specified + +Return value: bool + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function mergeApplicationDefinition(bool $mergeArgs = true): mixed; +``` + +
      Merges the application definition with the command definition.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $mergeArgsboolWhether to merge or not the Application definition arguments to Command definition arguments
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function run(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface $output): int; +``` + +
      Runs the command.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $inputSymfony\Component\Console\Input\InputInterface-
      $outputSymfony\Component\Console\Output\OutputInterface-
      + +Return value: int + + +Throws: + + + +See: + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setAliases(iterable $aliases): static; +``` + +
      Sets the aliases for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $aliasesiterableAn array of aliases for the command
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setApplication(\Symfony\Component\Console\Application|null $application = NULL): mixed; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $applicationSymfony\Component\Console\Application | null-
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setCode(callable $code): static; +``` + +
      Sets the code to execute when running this command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $codecallableA callable(InputInterface $input, OutputInterface $output)
      + +Return value: static + + +Throws: + + + +See: + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setDefinition(array|\Symfony\Component\Console\Input\InputDefinition $definition): static; +``` + +
      Sets an array of argument and option instances.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $definitionarray | Symfony\Component\Console\Input\InputDefinition-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setDescription(string $description): static; +``` + +
      Sets the description for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $descriptionstring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHelp(string $help): static; +``` + +
      Sets the help for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $helpstring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHelperSet(\Symfony\Component\Console\Helper\HelperSet $helperSet): mixed; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $helperSetSymfony\Component\Console\Helper\HelperSet-
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHidden(bool $hidden = true): static; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $hiddenboolWhether or not the command should be hidden from the list of commands
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setName(string $name): static; +``` + +
      Sets the name of the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setProcessTitle(string $title): static; +``` + +
      Sets the process title of the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $titlestring-
      + +Return value: static + + +
      +
      + + \ No newline at end of file diff --git a/docs/tech/classes/AdditionalCommandCollection.md b/docs/tech/classes/AdditionalCommandCollection.md new file mode 100644 index 00000000..7f4740ca --- /dev/null +++ b/docs/tech/classes/AdditionalCommandCollection.md @@ -0,0 +1,159 @@ + + BumbleDocGen / Technical description of the project / Class map / AdditionalCommandCollection
      + +

      + AdditionalCommandCollection class: +

      + + + + + +```php +namespace BumbleDocGen\Console\Command; + +final class AdditionalCommandCollection implements \IteratorAggregate, \Traversable +``` + + + + + + + + + +

      Methods:

      + +
        +
      1. + add +
      2. +
      3. + create +
      4. +
      5. + getIterator + - Retrieve an external iterator
      6. +
      + + + + + + + +

      Method details:

      + +
      + + + +```php +public function add(\Symfony\Component\Console\Command\Command $command): \BumbleDocGen\Console\Command\AdditionalCommandCollection; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $commandSymfony\Component\Console\Command\Command-
      + +Return value: \BumbleDocGen\Console\Command\AdditionalCommandCollection + + +
      +
      +
      + + + +```php +public static function create(\Symfony\Component\Console\Command\Command ...$commands): \BumbleDocGen\Console\Command\AdditionalCommandCollection; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $commands (variadic)Symfony\Component\Console\Command\Command-
      + +Return value: \BumbleDocGen\Console\Command\AdditionalCommandCollection + + +
      +
      +
      + + + +```php +public function getIterator(): \Generator; +``` + +
      Retrieve an external iterator
      + +Parameters: not specified + +Return value: \Generator + + +Throws: + + + +See: + +
      +
      + + \ No newline at end of file diff --git a/docs/tech/classes/App.md b/docs/tech/classes/App.md index 1cb8ecb9..a1700ae4 100644 --- a/docs/tech/classes/App.md +++ b/docs/tech/classes/App.md @@ -2,7 +2,7 @@ BumbleDocGen / Technical description of the project / Class map / App

      - App class: + App class:

      @@ -107,7 +107,7 @@ class App extends \Symfony\Component\Console\Application implements \Symfony\Con
    250. reset -
    251. + - This method is used to reset an object to its initial state.
    252. run - Runs the current application.
    253. @@ -156,7 +156,7 @@ class App extends \Symfony\Component\Console\Application implements \Symfony\Con ```php @@ -999,7 +999,7 @@ public function renderThrowable(\Throwable $e, \Symfony\Component\Console\Output public function reset(): mixed; ``` - +
      This method is used to reset an object to its initial state.
      Parameters: not specified diff --git a/docs/tech/classes/BaseCommand.md b/docs/tech/classes/BaseCommand.md new file mode 100644 index 00000000..144803b8 --- /dev/null +++ b/docs/tech/classes/BaseCommand.md @@ -0,0 +1,1382 @@ + + BumbleDocGen / Technical description of the project / Class map / BaseCommand
      + +

      + BaseCommand class: +

      + + + + + +```php +namespace BumbleDocGen\Console\Command; + +abstract class BaseCommand extends \Symfony\Component\Console\Command\Command +``` + +
      Base class for all commands.
      + + + + + + +

      Initialization methods:

      + +
        +
      1. + __construct +
      2. +
      + +

      Methods:

      + +
        +
      1. + addArgument + - Adds an argument.
      2. +
      3. + addOption + - Adds an option.
      4. +
      5. + addUsage + - Add a command usage example, it'll be prefixed with the command name.
      6. +
      7. + complete + - Adds suggestions to $suggestions for the current completion input (e.g. option or argument).
      8. +
      9. + getAliases + - Returns the aliases for the command.
      10. +
      11. + getApplication + - Gets the application instance for this command.
      12. +
      13. + getDefaultDescription +
      14. +
      15. + getDefaultName +
      16. +
      17. + getDefinition + - Gets the InputDefinition attached to this Command.
      18. +
      19. + getDescription + - Returns the description for the command.
      20. +
      21. + getHelp + - Returns the help for the command.
      22. +
      23. + getHelper + - Gets a helper instance by name.
      24. +
      25. + getHelperSet + - Gets the helper set.
      26. +
      27. + getName + - Returns the command name.
      28. +
      29. + getNativeDefinition + - Gets the InputDefinition to be used to create representations of this Command.
      30. +
      31. + getProcessedHelp + - Returns the processed help for the command replacing the %command.name% and %command.full_name% patterns with the real values dynamically.
      32. +
      33. + getSynopsis + - Returns the synopsis for the command.
      34. +
      35. + getUsages + - Returns alternative usages of the command.
      36. +
      37. + ignoreValidationErrors + - Ignores validation errors.
      38. +
      39. + isEnabled + - Checks whether the command is enabled or not in the current environment.
      40. +
      41. + isHidden +
      42. +
      43. + mergeApplicationDefinition + - Merges the application definition with the command definition.
      44. +
      45. + run + - Runs the command.
      46. +
      47. + setAliases + - Sets the aliases for the command.
      48. +
      49. + setApplication +
      50. +
      51. + setCode + - Sets the code to execute when running this command.
      52. +
      53. + setDefinition + - Sets an array of argument and option instances.
      54. +
      55. + setDescription + - Sets the description for the command.
      56. +
      57. + setHelp + - Sets the help for the command.
      58. +
      59. + setHelperSet +
      60. +
      61. + setHidden +
      62. +
      63. + setName + - Sets the name of the command.
      64. +
      65. + setProcessTitle + - Sets the process title of the command.
      66. +
      + + +

      Constants:

      + + + + + + +

      Method details:

      + +
      + + + +```php +public function __construct(string|null $name = NULL); +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring | nullThe name of the command; passing null means it must be set in configure()
      + + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addArgument(string $name, int|null $mode = NULL, string $description = '', mixed $default = NULL): static; +``` + +
      Adds an argument.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      $modeint | nullThe argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL
      $descriptionstring-
      $defaultmixedThe default value (for InputArgument::OPTIONAL mode only)
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addOption(string $name, string|array|null $shortcut = NULL, int|null $mode = NULL, string $description = '', mixed $default = NULL): static; +``` + +
      Adds an option.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      $shortcutstring | array | nullThe shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts
      $modeint | nullThe option mode: One of the InputOption::VALUE_* constants
      $descriptionstring-
      $defaultmixedThe default value (must be null for InputOption::VALUE_NONE)
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addUsage(string $usage): static; +``` + +
      Add a command usage example, it'll be prefixed with the command name.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $usagestring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function complete(\Symfony\Component\Console\Completion\CompletionInput $input, \Symfony\Component\Console\Completion\CompletionSuggestions $suggestions): void; +``` + +
      Adds suggestions to $suggestions for the current completion input (e.g. option or argument).
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $inputSymfony\Component\Console\Completion\CompletionInput-
      $suggestionsSymfony\Component\Console\Completion\CompletionSuggestions-
      + +Return value: void + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getAliases(): array; +``` + +
      Returns the aliases for the command.
      + +Parameters: not specified + +Return value: array + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getApplication(): \Symfony\Component\Console\Application|null; +``` + +
      Gets the application instance for this command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Application | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public static function getDefaultDescription(): string|null; +``` + + + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public static function getDefaultName(): string|null; +``` + + + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getDefinition(): \Symfony\Component\Console\Input\InputDefinition; +``` + +
      Gets the InputDefinition attached to this Command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Input\InputDefinition + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getDescription(): string; +``` + +
      Returns the description for the command.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelp(): string; +``` + +
      Returns the help for the command.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelper(string $name): mixed; +``` + +
      Gets a helper instance by name.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      + +Return value: mixed + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelperSet(): \Symfony\Component\Console\Helper\HelperSet|null; +``` + +
      Gets the helper set.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Helper\HelperSet | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getName(): string|null; +``` + +
      Returns the command name.
      + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getNativeDefinition(): \Symfony\Component\Console\Input\InputDefinition; +``` + +
      Gets the InputDefinition to be used to create representations of this Command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Input\InputDefinition + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getProcessedHelp(): string; +``` + +
      Returns the processed help for the command replacing the %command.name% and +%command.full_name% patterns with the real values dynamically.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getSynopsis(bool $short = false): string; +``` + +
      Returns the synopsis for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $shortboolWhether to show the short version of the synopsis (with options folded) or not
      + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getUsages(): array; +``` + +
      Returns alternative usages of the command.
      + +Parameters: not specified + +Return value: array + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function ignoreValidationErrors(): mixed; +``` + +
      Ignores validation errors.
      + +Parameters: not specified + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function isEnabled(): bool; +``` + +
      Checks whether the command is enabled or not in the current environment.
      + +Parameters: not specified + +Return value: bool + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function isHidden(): bool; +``` + + + +Parameters: not specified + +Return value: bool + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function mergeApplicationDefinition(bool $mergeArgs = true): mixed; +``` + +
      Merges the application definition with the command definition.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $mergeArgsboolWhether to merge or not the Application definition arguments to Command definition arguments
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function run(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface $output): int; +``` + +
      Runs the command.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $inputSymfony\Component\Console\Input\InputInterface-
      $outputSymfony\Component\Console\Output\OutputInterface-
      + +Return value: int + + +Throws: + + + +See: + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setAliases(iterable $aliases): static; +``` + +
      Sets the aliases for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $aliasesiterableAn array of aliases for the command
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setApplication(\Symfony\Component\Console\Application|null $application = NULL): mixed; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $applicationSymfony\Component\Console\Application | null-
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setCode(callable $code): static; +``` + +
      Sets the code to execute when running this command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $codecallableA callable(InputInterface $input, OutputInterface $output)
      + +Return value: static + + +Throws: + + + +See: + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setDefinition(array|\Symfony\Component\Console\Input\InputDefinition $definition): static; +``` + +
      Sets an array of argument and option instances.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $definitionarray | Symfony\Component\Console\Input\InputDefinition-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setDescription(string $description): static; +``` + +
      Sets the description for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $descriptionstring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHelp(string $help): static; +``` + +
      Sets the help for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $helpstring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHelperSet(\Symfony\Component\Console\Helper\HelperSet $helperSet): mixed; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $helperSetSymfony\Component\Console\Helper\HelperSet-
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHidden(bool $hidden = true): static; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $hiddenboolWhether or not the command should be hidden from the list of commands
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setName(string $name): static; +``` + +
      Sets the name of the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setProcessTitle(string $title): static; +``` + +
      Sets the process title of the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $titlestring-
      + +Return value: static + + +
      +
      + + \ No newline at end of file diff --git a/docs/tech/classes/ClassEntityCollection.md b/docs/tech/classes/ClassEntityCollection.md index 10f912b6..4595b21b 100644 --- a/docs/tech/classes/ClassEntityCollection.md +++ b/docs/tech/classes/ClassEntityCollection.md @@ -131,7 +131,7 @@ final class ClassEntityCollection extends \BumbleDocGen\Core\Parser\Entity\Logga ```php -public function __construct(\BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\LanguageHandler\Php\PhpHandlerSettings $phpHandlerSettings, \BumbleDocGen\LanguageHandler\Php\Parser\ParserHelper $parserHelper, \BumbleDocGen\Core\Plugin\PluginEventDispatcher $pluginEventDispatcher, \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Cache\CacheablePhpEntityFactory $cacheablePhpEntityFactory, \BumbleDocGen\LanguageHandler\Php\Renderer\EntityDocRenderer\EntityDocRendererHelper $docRendererHelper, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Core\Console\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Psr\Log\LoggerInterface $logger); +public function __construct(\BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\LanguageHandler\Php\PhpHandlerSettings $phpHandlerSettings, \BumbleDocGen\LanguageHandler\Php\Parser\ParserHelper $parserHelper, \BumbleDocGen\Core\Plugin\PluginEventDispatcher $pluginEventDispatcher, \BumbleDocGen\LanguageHandler\Php\Parser\Entity\Cache\CacheablePhpEntityFactory $cacheablePhpEntityFactory, \BumbleDocGen\LanguageHandler\Php\Renderer\EntityDocRenderer\EntityDocRendererHelper $docRendererHelper, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Console\ProgressBar\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Psr\Log\LoggerInterface $logger); ``` @@ -184,7 +184,7 @@ public function __construct(\BumbleDocGen\Core\Configuration\Configuration $conf $progressBarFactory - \BumbleDocGen\Core\Console\ProgressBarFactory + \BumbleDocGen\Console\ProgressBar\ProgressBarFactory - diff --git a/docs/tech/classes/Configuration.md b/docs/tech/classes/Configuration.md index df6c41ea..bfe8e1e4 100644 --- a/docs/tech/classes/Configuration.md +++ b/docs/tech/classes/Configuration.md @@ -2,7 +2,7 @@ BumbleDocGen / Technical description of the project / Class map / Configuration

      - Configuration class: + Configuration class:

      @@ -33,6 +33,9 @@ final class Configuration

      Methods:

        +
      1. + getAdditionalConsoleCommands +
      2. getCacheDir
      3. @@ -88,7 +91,7 @@ final class Configuration @@ -103,7 +106,7 @@ final class Configuration ```php @@ -143,6 +146,40 @@ public function __construct(\BumbleDocGen\Core\Configuration\ConfigurationParame + +
        +
        + + + +```php +public function getAdditionalConsoleCommands(): \BumbleDocGen\Console\Command\AdditionalCommandCollection; +``` + + + +Parameters: not specified + +Return value: \BumbleDocGen\Console\Command\AdditionalCommandCollection + + +Throws: + +

        @@ -150,7 +187,7 @@ public function __construct(\BumbleDocGen\Core\Configuration\ConfigurationParame ```php @@ -178,7 +215,7 @@ public function getCacheDir(): string|null; ```php @@ -199,7 +236,7 @@ public function getDocGenLibDir(): string; ```php @@ -227,7 +264,7 @@ public function getGitClientPath(): string; ```php @@ -261,7 +298,7 @@ public function getLanguageHandlersCollection(): \BumbleDocGen\LanguageHandler\L ```php @@ -289,7 +326,7 @@ public function getOutputDir(): string; ```php @@ -317,7 +354,7 @@ public function getOutputDirBaseUrl(): string; ```php @@ -351,7 +388,7 @@ public function getPageLinkProcessor(): \BumbleDocGen\Core\Renderer\PageLinkProc ```php @@ -385,7 +422,7 @@ public function getPlugins(): \BumbleDocGen\Core\Plugin\PluginsCollection; ```php @@ -413,7 +450,7 @@ public function getProjectRoot(): string; ```php @@ -447,7 +484,7 @@ public function getSourceLocators(): \BumbleDocGen\Core\Parser\SourceLocator\Sou ```php @@ -475,7 +512,7 @@ public function getTemplatesDir(): string; ```php @@ -509,7 +546,7 @@ public function getTwigFilters(): \BumbleDocGen\Core\Renderer\Twig\Filter\Custom ```php @@ -543,7 +580,7 @@ public function getTwigFunctions(): \BumbleDocGen\Core\Renderer\Twig\Function\Cu ```php @@ -571,7 +608,7 @@ public function getWorkingDir(): string; ```php @@ -599,7 +636,7 @@ public function isCheckFileInGitBeforeCreatingDocEnabled(): bool; ```php diff --git a/docs/tech/classes/DocGeneratorFactory.md b/docs/tech/classes/DocGeneratorFactory.md index 3d588452..bb0a0c29 100644 --- a/docs/tech/classes/DocGeneratorFactory.md +++ b/docs/tech/classes/DocGeneratorFactory.md @@ -2,7 +2,7 @@ BumbleDocGen / Technical description of the project / Class map / DocGeneratorFactory

        - DocGeneratorFactory class: + DocGeneratorFactory class:

        @@ -36,9 +36,15 @@ final class DocGeneratorFactory
      4. create
      5. +
      6. + createConfiguration +
      7. setCustomConfigurationParameters
      8. +
      9. + setCustomDiDefinitions +
      @@ -54,7 +60,7 @@ final class DocGeneratorFactory ```php @@ -91,7 +97,7 @@ public function __construct(string $diConfig = '/src/di-config.php'); ```php @@ -122,6 +128,57 @@ public function create(string|null ...$configurationFiles): \BumbleDocGen\DocGen Return value: \BumbleDocGen\DocGenerator +Throws: + + + +
      +
      + + + +```php +public function createConfiguration(string ...$configurationFiles): \BumbleDocGen\Core\Configuration\Configuration; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $configurationFiles (variadic)string-
      + +Return value: \BumbleDocGen\Core\Configuration\Configuration + + Throws:
      +
      +
      + + + +```php +public function setCustomDiDefinitions(array $definitions): void; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $definitionsarray-
      + +Return value: void + +

      diff --git a/docs/tech/classes/DrawClassMap.md b/docs/tech/classes/DrawClassMap.md index 9722278f..ccf8be21 100644 --- a/docs/tech/classes/DrawClassMap.md +++ b/docs/tech/classes/DrawClassMap.md @@ -132,7 +132,7 @@ public function __construct(\BumbleDocGen\Core\Renderer\Twig\Function\GetDocumen ```php -public function __invoke(\BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEntityCollection $classEntityCollections): string; +public function __invoke(\BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEntityCollection ...$classEntityCollections): string; ``` @@ -149,7 +149,7 @@ public function __invoke(\BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEn - $classEntityCollections + $classEntityCollections (variadic) \BumbleDocGen\LanguageHandler\Php\Parser\Entity\ClassEntityCollection The collection of entities for which the class map will be generated diff --git a/docs/tech/classes/FillInReadmeMdTemplateCommand.md b/docs/tech/classes/FillInReadmeMdTemplateCommand.md new file mode 100644 index 00000000..36445355 --- /dev/null +++ b/docs/tech/classes/FillInReadmeMdTemplateCommand.md @@ -0,0 +1,1384 @@ + + BumbleDocGen / Technical description of the project / Class map / FillInReadmeMdTemplateCommand
      + +

      + FillInReadmeMdTemplateCommand class: +

      + + + + + +```php +namespace BumbleDocGen\Console\Command; + +final class FillInReadmeMdTemplateCommand extends \BumbleDocGen\Console\Command\BaseCommand +``` + +
      Base class for all commands.
      + + + + + + +

      Initialization methods:

      + +
        +
      1. + __construct +
      2. +
      + +

      Methods:

      + +
        +
      1. + addArgument + - Adds an argument.
      2. +
      3. + addOption + - Adds an option.
      4. +
      5. + addUsage + - Add a command usage example, it'll be prefixed with the command name.
      6. +
      7. + complete + - Adds suggestions to $suggestions for the current completion input (e.g. option or argument).
      8. +
      9. + getAliases + - Returns the aliases for the command.
      10. +
      11. + getApplication + - Gets the application instance for this command.
      12. +
      13. + getDefaultDescription +
      14. +
      15. + getDefaultName +
      16. +
      17. + getDefinition + - Gets the InputDefinition attached to this Command.
      18. +
      19. + getDescription + - Returns the description for the command.
      20. +
      21. + getHelp + - Returns the help for the command.
      22. +
      23. + getHelper + - Gets a helper instance by name.
      24. +
      25. + getHelperSet + - Gets the helper set.
      26. +
      27. + getName + - Returns the command name.
      28. +
      29. + getNativeDefinition + - Gets the InputDefinition to be used to create representations of this Command.
      30. +
      31. + getProcessedHelp + - Returns the processed help for the command replacing the %command.name% and %command.full_name% patterns with the real values dynamically.
      32. +
      33. + getSynopsis + - Returns the synopsis for the command.
      34. +
      35. + getUsages + - Returns alternative usages of the command.
      36. +
      37. + ignoreValidationErrors + - Ignores validation errors.
      38. +
      39. + isEnabled + - Checks whether the command is enabled or not in the current environment.
      40. +
      41. + isHidden +
      42. +
      43. + mergeApplicationDefinition + - Merges the application definition with the command definition.
      44. +
      45. + run + - Runs the command.
      46. +
      47. + setAliases + - Sets the aliases for the command.
      48. +
      49. + setApplication +
      50. +
      51. + setCode + - Sets the code to execute when running this command.
      52. +
      53. + setDefinition + - Sets an array of argument and option instances.
      54. +
      55. + setDescription + - Sets the description for the command.
      56. +
      57. + setHelp + - Sets the help for the command.
      58. +
      59. + setHelperSet +
      60. +
      61. + setHidden +
      62. +
      63. + setName + - Sets the name of the command.
      64. +
      65. + setProcessTitle + - Sets the process title of the command.
      66. +
      + + +

      Constants:

      + + + + + + +

      Method details:

      + +
      + + + +```php +// Implemented in BumbleDocGen\Console\Command\BaseCommand + +public function __construct(string|null $name = NULL); +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring | nullThe name of the command; passing null means it must be set in configure()
      + + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addArgument(string $name, int|null $mode = NULL, string $description = '', mixed $default = NULL): static; +``` + +
      Adds an argument.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      $modeint | nullThe argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL
      $descriptionstring-
      $defaultmixedThe default value (for InputArgument::OPTIONAL mode only)
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addOption(string $name, string|array|null $shortcut = NULL, int|null $mode = NULL, string $description = '', mixed $default = NULL): static; +``` + +
      Adds an option.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      $shortcutstring | array | nullThe shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts
      $modeint | nullThe option mode: One of the InputOption::VALUE_* constants
      $descriptionstring-
      $defaultmixedThe default value (must be null for InputOption::VALUE_NONE)
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addUsage(string $usage): static; +``` + +
      Add a command usage example, it'll be prefixed with the command name.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $usagestring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function complete(\Symfony\Component\Console\Completion\CompletionInput $input, \Symfony\Component\Console\Completion\CompletionSuggestions $suggestions): void; +``` + +
      Adds suggestions to $suggestions for the current completion input (e.g. option or argument).
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $inputSymfony\Component\Console\Completion\CompletionInput-
      $suggestionsSymfony\Component\Console\Completion\CompletionSuggestions-
      + +Return value: void + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getAliases(): array; +``` + +
      Returns the aliases for the command.
      + +Parameters: not specified + +Return value: array + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getApplication(): \Symfony\Component\Console\Application|null; +``` + +
      Gets the application instance for this command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Application | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public static function getDefaultDescription(): string|null; +``` + + + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public static function getDefaultName(): string|null; +``` + + + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getDefinition(): \Symfony\Component\Console\Input\InputDefinition; +``` + +
      Gets the InputDefinition attached to this Command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Input\InputDefinition + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getDescription(): string; +``` + +
      Returns the description for the command.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelp(): string; +``` + +
      Returns the help for the command.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelper(string $name): mixed; +``` + +
      Gets a helper instance by name.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      + +Return value: mixed + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelperSet(): \Symfony\Component\Console\Helper\HelperSet|null; +``` + +
      Gets the helper set.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Helper\HelperSet | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getName(): string|null; +``` + +
      Returns the command name.
      + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getNativeDefinition(): \Symfony\Component\Console\Input\InputDefinition; +``` + +
      Gets the InputDefinition to be used to create representations of this Command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Input\InputDefinition + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getProcessedHelp(): string; +``` + +
      Returns the processed help for the command replacing the %command.name% and +%command.full_name% patterns with the real values dynamically.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getSynopsis(bool $short = false): string; +``` + +
      Returns the synopsis for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $shortboolWhether to show the short version of the synopsis (with options folded) or not
      + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getUsages(): array; +``` + +
      Returns alternative usages of the command.
      + +Parameters: not specified + +Return value: array + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function ignoreValidationErrors(): mixed; +``` + +
      Ignores validation errors.
      + +Parameters: not specified + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function isEnabled(): bool; +``` + +
      Checks whether the command is enabled or not in the current environment.
      + +Parameters: not specified + +Return value: bool + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function isHidden(): bool; +``` + + + +Parameters: not specified + +Return value: bool + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function mergeApplicationDefinition(bool $mergeArgs = true): mixed; +``` + +
      Merges the application definition with the command definition.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $mergeArgsboolWhether to merge or not the Application definition arguments to Command definition arguments
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function run(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface $output): int; +``` + +
      Runs the command.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $inputSymfony\Component\Console\Input\InputInterface-
      $outputSymfony\Component\Console\Output\OutputInterface-
      + +Return value: int + + +Throws: + + + +See: + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setAliases(iterable $aliases): static; +``` + +
      Sets the aliases for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $aliasesiterableAn array of aliases for the command
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setApplication(\Symfony\Component\Console\Application|null $application = NULL): mixed; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $applicationSymfony\Component\Console\Application | null-
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setCode(callable $code): static; +``` + +
      Sets the code to execute when running this command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $codecallableA callable(InputInterface $input, OutputInterface $output)
      + +Return value: static + + +Throws: + + + +See: + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setDefinition(array|\Symfony\Component\Console\Input\InputDefinition $definition): static; +``` + +
      Sets an array of argument and option instances.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $definitionarray | Symfony\Component\Console\Input\InputDefinition-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setDescription(string $description): static; +``` + +
      Sets the description for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $descriptionstring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHelp(string $help): static; +``` + +
      Sets the help for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $helpstring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHelperSet(\Symfony\Component\Console\Helper\HelperSet $helperSet): mixed; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $helperSetSymfony\Component\Console\Helper\HelperSet-
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHidden(bool $hidden = true): static; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $hiddenboolWhether or not the command should be hidden from the list of commands
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setName(string $name): static; +``` + +
      Sets the name of the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setProcessTitle(string $title): static; +``` + +
      Sets the process title of the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $titlestring-
      + +Return value: static + + +
      +
      + + \ No newline at end of file diff --git a/docs/tech/classes/GenerateCommand.md b/docs/tech/classes/GenerateCommand.md index f456b883..3bc6dc05 100644 --- a/docs/tech/classes/GenerateCommand.md +++ b/docs/tech/classes/GenerateCommand.md @@ -2,7 +2,7 @@ BumbleDocGen / Technical description of the project / Class map / GenerateCommand

      - GenerateCommand class: + GenerateCommand class:

      @@ -12,7 +12,7 @@ ```php namespace BumbleDocGen\Console\Command; -final class GenerateCommand extends \Symfony\Component\Console\Command\Command +final class GenerateCommand extends \BumbleDocGen\Console\Command\BaseCommand ```
      Base class for all commands.
      @@ -162,11 +162,11 @@ final class GenerateCommand extends \Symfony\Component\Console\Command\Command ```php -// Implemented in Symfony\Component\Console\Command\Command +// Implemented in BumbleDocGen\Console\Command\BaseCommand public function __construct(string|null $name = NULL); ``` diff --git a/docs/tech/classes/GenerateProjectTemplatesStructureCommand.md b/docs/tech/classes/GenerateProjectTemplatesStructureCommand.md new file mode 100644 index 00000000..bfe6996b --- /dev/null +++ b/docs/tech/classes/GenerateProjectTemplatesStructureCommand.md @@ -0,0 +1,1384 @@ + + BumbleDocGen / Technical description of the project / Class map / GenerateProjectTemplatesStructureCommand
      + +

      + GenerateProjectTemplatesStructureCommand class: +

      + + + + + +```php +namespace BumbleDocGen\Console\Command; + +final class GenerateProjectTemplatesStructureCommand extends \BumbleDocGen\Console\Command\BaseCommand +``` + +
      Base class for all commands.
      + + + + + + +

      Initialization methods:

      + +
        +
      1. + __construct +
      2. +
      + +

      Methods:

      + +
        +
      1. + addArgument + - Adds an argument.
      2. +
      3. + addOption + - Adds an option.
      4. +
      5. + addUsage + - Add a command usage example, it'll be prefixed with the command name.
      6. +
      7. + complete + - Adds suggestions to $suggestions for the current completion input (e.g. option or argument).
      8. +
      9. + getAliases + - Returns the aliases for the command.
      10. +
      11. + getApplication + - Gets the application instance for this command.
      12. +
      13. + getDefaultDescription +
      14. +
      15. + getDefaultName +
      16. +
      17. + getDefinition + - Gets the InputDefinition attached to this Command.
      18. +
      19. + getDescription + - Returns the description for the command.
      20. +
      21. + getHelp + - Returns the help for the command.
      22. +
      23. + getHelper + - Gets a helper instance by name.
      24. +
      25. + getHelperSet + - Gets the helper set.
      26. +
      27. + getName + - Returns the command name.
      28. +
      29. + getNativeDefinition + - Gets the InputDefinition to be used to create representations of this Command.
      30. +
      31. + getProcessedHelp + - Returns the processed help for the command replacing the %command.name% and %command.full_name% patterns with the real values dynamically.
      32. +
      33. + getSynopsis + - Returns the synopsis for the command.
      34. +
      35. + getUsages + - Returns alternative usages of the command.
      36. +
      37. + ignoreValidationErrors + - Ignores validation errors.
      38. +
      39. + isEnabled + - Checks whether the command is enabled or not in the current environment.
      40. +
      41. + isHidden +
      42. +
      43. + mergeApplicationDefinition + - Merges the application definition with the command definition.
      44. +
      45. + run + - Runs the command.
      46. +
      47. + setAliases + - Sets the aliases for the command.
      48. +
      49. + setApplication +
      50. +
      51. + setCode + - Sets the code to execute when running this command.
      52. +
      53. + setDefinition + - Sets an array of argument and option instances.
      54. +
      55. + setDescription + - Sets the description for the command.
      56. +
      57. + setHelp + - Sets the help for the command.
      58. +
      59. + setHelperSet +
      60. +
      61. + setHidden +
      62. +
      63. + setName + - Sets the name of the command.
      64. +
      65. + setProcessTitle + - Sets the process title of the command.
      66. +
      + + +

      Constants:

      + + + + + + +

      Method details:

      + +
      + + + +```php +// Implemented in BumbleDocGen\Console\Command\BaseCommand + +public function __construct(string|null $name = NULL); +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring | nullThe name of the command; passing null means it must be set in configure()
      + + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addArgument(string $name, int|null $mode = NULL, string $description = '', mixed $default = NULL): static; +``` + +
      Adds an argument.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      $modeint | nullThe argument mode: InputArgument::REQUIRED or InputArgument::OPTIONAL
      $descriptionstring-
      $defaultmixedThe default value (for InputArgument::OPTIONAL mode only)
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addOption(string $name, string|array|null $shortcut = NULL, int|null $mode = NULL, string $description = '', mixed $default = NULL): static; +``` + +
      Adds an option.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      $shortcutstring | array | nullThe shortcuts, can be null, a string of shortcuts delimited by | or an array of shortcuts
      $modeint | nullThe option mode: One of the InputOption::VALUE_* constants
      $descriptionstring-
      $defaultmixedThe default value (must be null for InputOption::VALUE_NONE)
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function addUsage(string $usage): static; +``` + +
      Add a command usage example, it'll be prefixed with the command name.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $usagestring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function complete(\Symfony\Component\Console\Completion\CompletionInput $input, \Symfony\Component\Console\Completion\CompletionSuggestions $suggestions): void; +``` + +
      Adds suggestions to $suggestions for the current completion input (e.g. option or argument).
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $inputSymfony\Component\Console\Completion\CompletionInput-
      $suggestionsSymfony\Component\Console\Completion\CompletionSuggestions-
      + +Return value: void + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getAliases(): array; +``` + +
      Returns the aliases for the command.
      + +Parameters: not specified + +Return value: array + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getApplication(): \Symfony\Component\Console\Application|null; +``` + +
      Gets the application instance for this command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Application | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public static function getDefaultDescription(): string|null; +``` + + + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public static function getDefaultName(): string|null; +``` + + + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getDefinition(): \Symfony\Component\Console\Input\InputDefinition; +``` + +
      Gets the InputDefinition attached to this Command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Input\InputDefinition + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getDescription(): string; +``` + +
      Returns the description for the command.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelp(): string; +``` + +
      Returns the help for the command.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelper(string $name): mixed; +``` + +
      Gets a helper instance by name.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      + +Return value: mixed + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getHelperSet(): \Symfony\Component\Console\Helper\HelperSet|null; +``` + +
      Gets the helper set.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Helper\HelperSet | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getName(): string|null; +``` + +
      Returns the command name.
      + +Parameters: not specified + +Return value: string | null + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getNativeDefinition(): \Symfony\Component\Console\Input\InputDefinition; +``` + +
      Gets the InputDefinition to be used to create representations of this Command.
      + +Parameters: not specified + +Return value: \Symfony\Component\Console\Input\InputDefinition + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getProcessedHelp(): string; +``` + +
      Returns the processed help for the command replacing the %command.name% and +%command.full_name% patterns with the real values dynamically.
      + +Parameters: not specified + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getSynopsis(bool $short = false): string; +``` + +
      Returns the synopsis for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $shortboolWhether to show the short version of the synopsis (with options folded) or not
      + +Return value: string + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function getUsages(): array; +``` + +
      Returns alternative usages of the command.
      + +Parameters: not specified + +Return value: array + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function ignoreValidationErrors(): mixed; +``` + +
      Ignores validation errors.
      + +Parameters: not specified + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function isEnabled(): bool; +``` + +
      Checks whether the command is enabled or not in the current environment.
      + +Parameters: not specified + +Return value: bool + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function isHidden(): bool; +``` + + + +Parameters: not specified + +Return value: bool + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function mergeApplicationDefinition(bool $mergeArgs = true): mixed; +``` + +
      Merges the application definition with the command definition.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $mergeArgsboolWhether to merge or not the Application definition arguments to Command definition arguments
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function run(\Symfony\Component\Console\Input\InputInterface $input, \Symfony\Component\Console\Output\OutputInterface $output): int; +``` + +
      Runs the command.
      + +Parameters: + + + + + + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $inputSymfony\Component\Console\Input\InputInterface-
      $outputSymfony\Component\Console\Output\OutputInterface-
      + +Return value: int + + +Throws: + + + +See: + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setAliases(iterable $aliases): static; +``` + +
      Sets the aliases for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $aliasesiterableAn array of aliases for the command
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setApplication(\Symfony\Component\Console\Application|null $application = NULL): mixed; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $applicationSymfony\Component\Console\Application | null-
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setCode(callable $code): static; +``` + +
      Sets the code to execute when running this command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $codecallableA callable(InputInterface $input, OutputInterface $output)
      + +Return value: static + + +Throws: + + + +See: + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setDefinition(array|\Symfony\Component\Console\Input\InputDefinition $definition): static; +``` + +
      Sets an array of argument and option instances.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $definitionarray | Symfony\Component\Console\Input\InputDefinition-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setDescription(string $description): static; +``` + +
      Sets the description for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $descriptionstring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHelp(string $help): static; +``` + +
      Sets the help for the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $helpstring-
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHelperSet(\Symfony\Component\Console\Helper\HelperSet $helperSet): mixed; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $helperSetSymfony\Component\Console\Helper\HelperSet-
      + +Return value: mixed + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setHidden(bool $hidden = true): static; +``` + + + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $hiddenboolWhether or not the command should be hidden from the list of commands
      + +Return value: static + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setName(string $name): static; +``` + +
      Sets the name of the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $namestring-
      + +Return value: static + + +Throws: + + +
      +
      +
      + + + +```php +// Implemented in Symfony\Component\Console\Command\Command + +public function setProcessTitle(string $title): static; +``` + +
      Sets the process title of the command.
      + +Parameters: + + + + + + + + + + + + + + + + +
      NameTypeDescription
      $titlestring-
      + +Return value: static + + +
      +
      + + \ No newline at end of file diff --git a/docs/tech/classes/MethodEntity.md b/docs/tech/classes/MethodEntity.md index 058fe96b..9ea85bf7 100644 --- a/docs/tech/classes/MethodEntity.md +++ b/docs/tech/classes/MethodEntity.md @@ -2,7 +2,7 @@ BumbleDocGen / Technical description of the project / Class map / MethodEntity

      - MethodEntity class: + MethodEntity class:

      @@ -219,7 +219,7 @@ class MethodEntity extends \BumbleDocGen\LanguageHandler\Php\Parser\Entity\BaseE ```php @@ -354,7 +354,7 @@ public function getAbsoluteFileName(): string|null; ```php @@ -438,7 +438,7 @@ public function getCachedEntityDependencies(): array; ```php @@ -508,7 +508,7 @@ public function getDescriptionLinks(): array; ```php @@ -562,7 +562,7 @@ public function getDocBlock(bool $recursive = true): \phpDocumentor\Reflection\D ```php @@ -593,7 +593,7 @@ public function getDocComment(): string; ```php @@ -630,7 +630,7 @@ public function getDocCommentEntity(): \BumbleDocGen\LanguageHandler\Php\Parser\ ```php @@ -661,7 +661,7 @@ public function getDocCommentLine(): int|null; ```php @@ -698,7 +698,7 @@ public function getDocCommentLineRecursive(): int|null; ```php @@ -758,7 +758,7 @@ public function getDocNote(): string; ```php @@ -812,7 +812,7 @@ public function getExamples(): array; ```php @@ -913,7 +913,7 @@ public function getFirstExample(): string; ```php @@ -944,7 +944,7 @@ public function getFirstReturnValue(): mixed; ```php @@ -965,7 +965,7 @@ public function getImplementingClass(): \BumbleDocGen\LanguageHandler\Php\Parser ```php @@ -986,7 +986,7 @@ public function getImplementingClassName(): string; ```php @@ -1017,7 +1017,7 @@ public function getImplementingReflectionClass(): \Roave\BetterReflection\Reflec ```php @@ -1048,7 +1048,7 @@ public function getModifiersString(): string; ```php @@ -1069,7 +1069,7 @@ public function getName(): string; ```php @@ -1123,7 +1123,7 @@ public function getObjectId(): string; ```php @@ -1163,7 +1163,7 @@ public function getParameters(): array; ```php @@ -1200,7 +1200,7 @@ public function getParametersString(): string; ```php @@ -1221,7 +1221,7 @@ public function getPhpHandlerSettings(): \BumbleDocGen\LanguageHandler\Php\PhpHa ```php @@ -1258,7 +1258,7 @@ public function getPrototype(): \BumbleDocGen\LanguageHandler\Php\Parser\Entity\ ```php @@ -1295,7 +1295,7 @@ public function getReturnType(): string; ```php @@ -1316,7 +1316,7 @@ public function getRootEntity(): \BumbleDocGen\LanguageHandler\Php\Parser\Entity ```php @@ -1337,7 +1337,7 @@ public function getRootEntityCollection(): \BumbleDocGen\LanguageHandler\Php\Par ```php @@ -1358,7 +1358,7 @@ public function getShortName(): string; ```php @@ -1395,7 +1395,7 @@ public function getSignature(): string; ```php @@ -1426,7 +1426,7 @@ public function getStartColumn(): int; ```php @@ -1566,7 +1566,7 @@ public function hasThrows(): bool; ```php @@ -1610,7 +1610,7 @@ public function isDeprecated(): bool; ```php @@ -1694,7 +1694,7 @@ public function isEntityFileCanBeLoad(): bool; ```php @@ -1715,7 +1715,7 @@ public function isImplementedInParentClass(): bool; ```php @@ -1775,7 +1775,7 @@ public function isInternal(): bool; ```php @@ -1806,7 +1806,7 @@ public function isPrivate(): bool; ```php @@ -1837,7 +1837,7 @@ public function isProtected(): bool; ```php @@ -1868,7 +1868,7 @@ public function isPublic(): bool; ```php @@ -1899,7 +1899,7 @@ public function isStatic(): bool; ```php diff --git a/docs/tech/classes/ProgressBarFactory.md b/docs/tech/classes/ProgressBarFactory.md index c9a5b346..15106c73 100644 --- a/docs/tech/classes/ProgressBarFactory.md +++ b/docs/tech/classes/ProgressBarFactory.md @@ -2,7 +2,7 @@ BumbleDocGen / Technical description of the project / Class map / ProgressBarFactory

      - ProgressBarFactory class: + ProgressBarFactory class:

      @@ -10,7 +10,7 @@ ```php -namespace BumbleDocGen\Core\Console; +namespace BumbleDocGen\Console\ProgressBar; final class ProgressBarFactory ``` @@ -51,7 +51,7 @@ final class ProgressBarFactory ```php @@ -88,18 +88,18 @@ public function __construct(\Symfony\Component\Console\Style\OutputStyle $io); ```php -public function createStylizedProgressBar(): \BumbleDocGen\Core\Console\StylizedProgressBar; +public function createStylizedProgressBar(): \BumbleDocGen\Console\ProgressBar\StylizedProgressBar; ``` Parameters: not specified -Return value: \BumbleDocGen\Core\Console\StylizedProgressBar +Return value: \BumbleDocGen\Console\ProgressBar\StylizedProgressBar diff --git a/docs/tech/classes/RendererIteratorFactory.md b/docs/tech/classes/RendererIteratorFactory.md index b2d049e7..5ca58c0c 100644 --- a/docs/tech/classes/RendererIteratorFactory.md +++ b/docs/tech/classes/RendererIteratorFactory.md @@ -61,7 +61,7 @@ final class RendererIteratorFactory ```php -public function __construct(\BumbleDocGen\Core\Renderer\Context\RendererContext $rendererContext, \BumbleDocGen\Core\Parser\Entity\RootEntityCollectionsGroup $rootEntityCollectionsGroup, \BumbleDocGen\Core\Renderer\Context\DocumentedEntityWrappersCollection $documentedEntityWrappersCollection, \BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\Core\Configuration\ConfigurationParameterBag $configurationParameterBag, \BumbleDocGen\Core\Cache\SharedCompressedDocumentFileCache $sharedCompressedDocumentFileCache, \BumbleDocGen\Core\Renderer\RendererHelper $rendererHelper, \BumbleDocGen\Core\Renderer\Context\Dependency\RendererDependencyFactory $dependencyFactory, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Core\Console\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Monolog\Logger $logger); +public function __construct(\BumbleDocGen\Core\Renderer\Context\RendererContext $rendererContext, \BumbleDocGen\Core\Parser\Entity\RootEntityCollectionsGroup $rootEntityCollectionsGroup, \BumbleDocGen\Core\Renderer\Context\DocumentedEntityWrappersCollection $documentedEntityWrappersCollection, \BumbleDocGen\Core\Configuration\Configuration $configuration, \BumbleDocGen\Core\Configuration\ConfigurationParameterBag $configurationParameterBag, \BumbleDocGen\Core\Cache\SharedCompressedDocumentFileCache $sharedCompressedDocumentFileCache, \BumbleDocGen\Core\Renderer\RendererHelper $rendererHelper, \BumbleDocGen\Core\Renderer\Context\Dependency\RendererDependencyFactory $dependencyFactory, \BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache $localObjectCache, \BumbleDocGen\Console\ProgressBar\ProgressBarFactory $progressBarFactory, \Symfony\Component\Console\Style\OutputStyle $io, \Monolog\Logger $logger); ``` @@ -124,7 +124,7 @@ public function __construct(\BumbleDocGen\Core\Renderer\Context\RendererContext $progressBarFactory - \BumbleDocGen\Core\Console\ProgressBarFactory + \BumbleDocGen\Console\ProgressBar\ProgressBarFactory - diff --git a/docs/tech/classes/StylizedProgressBar.md b/docs/tech/classes/StylizedProgressBar.md index 67bf85e1..d8acc8e1 100644 --- a/docs/tech/classes/StylizedProgressBar.md +++ b/docs/tech/classes/StylizedProgressBar.md @@ -2,7 +2,7 @@ BumbleDocGen / Technical description of the project / Class map / StylizedProgressBar

      - StylizedProgressBar class: + StylizedProgressBar class:

      @@ -10,7 +10,7 @@ ```php -namespace BumbleDocGen\Core\Console; +namespace BumbleDocGen\Console\ProgressBar; final class StylizedProgressBar ``` @@ -69,7 +69,7 @@ final class StylizedProgressBar ```php @@ -106,7 +106,7 @@ public function __construct(\Symfony\Component\Console\Style\OutputStyle $io); ```php @@ -144,7 +144,7 @@ public function advance(int $step): void; ```php @@ -165,7 +165,7 @@ public function finish(): void; ```php @@ -208,7 +208,7 @@ public function iterate(iterable $iterable, int|null $max = NULL): \Generator; ```php @@ -246,7 +246,7 @@ public function setMaxSteps(int $maxSteps): void; ```php @@ -284,7 +284,7 @@ public function setName(string $name): void; ```php @@ -322,7 +322,7 @@ public function setStepDescription(string $stepDescription): void; ```php diff --git a/docs/tech/map.md b/docs/tech/map.md index 0a5405af..9e5a267d 100644 --- a/docs/tech/map.md +++ b/docs/tech/map.md @@ -5,7 +5,15 @@ Directory layout ( only documented files shown ):
      └──src/
       │  ├──Console/
       │  │  ├──Command/
      -│  │  │  └── GenerateCommand.php Base class for all commands.
      +│  │  │  ├── AddMissingDocBlocksCommand.php Base class for all commands.
      +│  │  │  ├── AdditionalCommandCollection.php 
      +│  │  │  ├── BaseCommand.php Base class for all commands.
      +│  │  │  ├── FillInReadmeMdTemplateCommand.php Base class for all commands.
      +│  │  │  ├── GenerateCommand.php Base class for all commands.
      +│  │  │  └── GenerateProjectTemplatesStructureCommand.php Base class for all commands.
      +│  │  ├──ProgressBar/
      +│  │  │  ├── ProgressBarFactory.php 
      +│  │  │  └── StylizedProgressBar.php 
       │  │  └── App.php An Application is the container for a collection of commands.
       │  ├──Core/
       │  │  ├──Cache/
      @@ -29,9 +37,6 @@ Directory layout ( only documented files shown ):
       │  │  │  │  └── ValueTransformerInterface.php Interface defining classes that transform text configuration values into objects
       │  │  │  ├── Configuration.php Configuration project documentation
       │  │  │  └── ConfigurationParameterBag.php Wrapper for getting raw configuration file data
      -│  │  ├──Console/
      -│  │  │  ├── ProgressBarFactory.php 
      -│  │  │  └── StylizedProgressBar.php 
       │  │  ├──Parser/
       │  │  │  ├──Entity/
       │  │  │  │  ├──Cache/
      @@ -233,4 +238,4 @@ Directory layout ( only documented files shown ):
       
       

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Thu Sep 28 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/docs/tech/readme.md b/docs/tech/readme.md index 9de1491c..72e8c1d4 100644 --- a/docs/tech/readme.md +++ b/docs/tech/readme.md @@ -37,4 +37,4 @@ After that, the process of parsing the project code according to the configurati

      -Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Sun Sep 10 2023
      Made with Bumble Documentation Generator
      \ No newline at end of file +Last page committer: fshcherbanich <filipp.shcherbanich@team.bumble.com>
      Last modified date: Sat Sep 2 21:01:47 2023 +0300
      Page content update date: Wed Sep 27 2023
      Made with Bumble Documentation Generator \ No newline at end of file diff --git a/src/Console/App.php b/src/Console/App.php index 94761263..28ee02e4 100644 --- a/src/Console/App.php +++ b/src/Console/App.php @@ -4,14 +4,56 @@ namespace BumbleDocGen\Console; +use BumbleDocGen\Console\Command\AddMissingDocBlocksCommand; +use BumbleDocGen\Console\Command\FillInReadmeMdTemplateCommand; use BumbleDocGen\Console\Command\GenerateCommand; +use BumbleDocGen\Console\Command\GenerateProjectTemplatesStructureCommand; +use BumbleDocGen\DocGeneratorFactory; use Symfony\Component\Console\Application; +use Symfony\Component\Console\Command\CompleteCommand; +use Symfony\Component\Console\Command\HelpCommand; +use Symfony\Component\Console\Command\ListCommand; +use Symfony\Component\Console\Input\ArgvInput; +use Symfony\Component\Console\Input\InputOption; class App extends Application { public function __construct() { parent::__construct('Bumble Doc Gen', \BumbleDocGen\DocGenerator::VERSION); + $inputDefinition = $this->getDefaultInputDefinition(); + $inputDefinition->addOption( + new InputOption( + 'config', + 'c', + InputOption::VALUE_OPTIONAL, + 'Path to the configuration file, specified as absolute or relative to the working directory.', + 'bumble_doc_gen.yaml' + ) + ); + $this->setDefinition($inputDefinition); $this->add(new GenerateCommand()); + $this->add(new FillInReadmeMdTemplateCommand()); + $this->add(new AddMissingDocBlocksCommand()); + $this->add(new GenerateProjectTemplatesStructureCommand()); + $this->setExtraCommands(); + } + + protected function getDefaultCommands(): array + { + return [new HelpCommand(), new ListCommand(), new CompleteCommand()]; + } + + private function setExtraCommands(): void + { + try { + $input = new ArgvInput(); + $input->bind($this->getDefinition()); + $configuration = (new DocGeneratorFactory())->createConfiguration($input->getOption('config')); + foreach ($configuration->getAdditionalConsoleCommands() as $command) { + $this->add($command); + } + } catch (\Exception) { + } } } diff --git a/src/Console/Command/AddMissingDocBlocksCommand.php b/src/Console/Command/AddMissingDocBlocksCommand.php new file mode 100644 index 00000000..cd3d964e --- /dev/null +++ b/src/Console/Command/AddMissingDocBlocksCommand.php @@ -0,0 +1,45 @@ + 'Path to the directory of the documented project', + 'cache_dir' => 'Configuration parameter: Path to the directory where the documentation generator cache will be saved', + ]; + } + + protected function configure(): void + { + $this->setName('ai-add-missing-doc-blocks') + ->setDescription('Add missing doc blocks in documented code using LLMs tools'); + } + + /** + * @throws DependencyException + * @throws ReflectionException + * @throws ClientException + * @throws NotFoundException + * @throws InvalidConfigurationParameterException + */ + protected function execute( + InputInterface $input, + OutputInterface $output + ): int { + $this->createDocGenInstance($input, $output)->addMissingDocBlocks(); + return self::SUCCESS; + } +} diff --git a/src/Console/Command/AdditionalCommandCollection.php b/src/Console/Command/AdditionalCommandCollection.php new file mode 100644 index 00000000..29004eb3 --- /dev/null +++ b/src/Console/Command/AdditionalCommandCollection.php @@ -0,0 +1,33 @@ + */ + private array $commands = []; + + public function getIterator(): \Generator + { + yield from $this->commands; + } + + public static function create(Command ...$commands): AdditionalCommandCollection + { + $additionalCommandCollection = new self(); + foreach ($commands as $command) { + $additionalCommandCollection->add($command); + } + return $additionalCommandCollection; + } + + public function add(Command $command): AdditionalCommandCollection + { + $this->commands[] = $command; + return $this; + } +} diff --git a/src/Console/Command/BaseCommand.php b/src/Console/Command/BaseCommand.php new file mode 100644 index 00000000..c2056137 --- /dev/null +++ b/src/Console/Command/BaseCommand.php @@ -0,0 +1,76 @@ +getCustomConfigOptionsMap() as $optionName => $description) { + $this->addOption( + $optionName, + null, + InputOption::VALUE_OPTIONAL, + "Config parameter: {$description}" + ); + } + } + + /** + * @throws DependencyException + * @throws NotFoundException + */ + protected function createDocGenInstance( + InputInterface $input, + OutputInterface $output + ): DocGenerator { + $docGeneratorFactory = (new DocGeneratorFactory()); + $docGeneratorFactory->setCustomConfigurationParameters( + $this->getCustomConfigurationParameters($input) + ); + $docGeneratorFactory->setCustomDiDefinitions([ + OutputStyle::class => new SymfonyStyle($input, $output), + ]); + + $configFile = $input->getOption('config'); + if ($configFile && Path::isRelative($configFile)) { + $configFile = getcwd() . DIRECTORY_SEPARATOR . $configFile; + return $docGeneratorFactory->create($configFile); + } + + return $docGeneratorFactory->create(); + } + + final protected function getCustomConfigurationParameters(InputInterface $input): array + { + $customConfigurationParameters = []; + foreach ($this->getCustomConfigOptionsMap() as $optionName => $description) { + $optionValue = $input->getOption($optionName); + if (!is_null($optionValue)) { + $customConfigurationParameters[$optionName] = $optionValue; + } + } + return $customConfigurationParameters; + } + + protected function getCustomConfigOptionsMap(): array + { + return []; + } +} diff --git a/src/Console/Command/FillInReadmeMdTemplateCommand.php b/src/Console/Command/FillInReadmeMdTemplateCommand.php new file mode 100644 index 00000000..d0d001cc --- /dev/null +++ b/src/Console/Command/FillInReadmeMdTemplateCommand.php @@ -0,0 +1,46 @@ + 'Path to the directory of the documented project', + 'templates_dir' => 'Path to directory with documentation templates', + 'cache_dir' => 'Configuration parameter: Path to the directory where the documentation generator cache will be saved', + ]; + } + + protected function configure(): void + { + $this->setName('ai-fill-in-readme-md-template') + ->setDescription('Filling the readme file template with data using LLMs tools'); + } + + /** + * @throws DependencyException + * @throws ReflectionException + * @throws ClientException + * @throws NotFoundException + * @throws InvalidConfigurationParameterException + */ + protected function execute( + InputInterface $input, + OutputInterface $output + ): int { + $this->createDocGenInstance($input, $output)->fillInReadmeMdTemplate(); + return self::SUCCESS; + } +} diff --git a/src/Console/Command/GenerateCommand.php b/src/Console/Command/GenerateCommand.php index 13ef870c..af45b382 100644 --- a/src/Console/Command/GenerateCommand.php +++ b/src/Console/Command/GenerateCommand.php @@ -4,45 +4,28 @@ namespace BumbleDocGen\Console\Command; -use BumbleDocGen\DocGeneratorFactory; use DI\DependencyException; use DI\NotFoundException; use Psr\Cache\InvalidArgumentException; -use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Filesystem\Path; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -final class GenerateCommand extends Command +final class GenerateCommand extends BaseCommand { - private array $customConfigOptions = [ - 'project_root' => 'Path to the directory of the documented project', - 'templates_dir' => 'Path to directory with documentation templates', - 'output_dir' => 'Path to the directory where the finished documentation will be generated', - 'cache_dir' => 'Configuration parameter: Path to the directory where the documentation generator cache will be saved', - ]; + protected function getCustomConfigOptionsMap(): array + { + return [ + 'project_root' => 'Path to the directory of the documented project', + 'templates_dir' => 'Path to directory with documentation templates', + 'output_dir' => 'Path to the directory where the finished documentation will be generated', + 'cache_dir' => 'Configuration parameter: Path to the directory where the documentation generator cache will be saved', + ]; + } protected function configure(): void { - $this->setName('generate') - ->setDescription('Generate documentation') - ->addOption( - 'config', - 'c', - InputOption::VALUE_NEGATABLE, - 'Path to the configuration file, specified as absolute or relative to the working directory [default: "bumble_doc_gen.yaml"]', - 'bumble_doc_gen.yaml' - ); - - foreach ($this->customConfigOptions as $optionName => $description) { - $this->addOption( - $optionName, - null, - InputOption::VALUE_OPTIONAL, - "Config parameter: {$description}" - ); - } + $this->setName('generate')->setDescription('Generate documentation'); } /** @@ -54,31 +37,7 @@ protected function execute( InputInterface $input, OutputInterface $output ): int { - $docGeneratorFactory = (new DocGeneratorFactory()); - $docGeneratorFactory->setCustomConfigurationParameters( - $this->getCustomConfigurationParameters($input) - ); - - $configFile = $input->getOption('config'); - if ($configFile && Path::isRelative($configFile)) { - $configFile = getcwd() . DIRECTORY_SEPARATOR . $configFile; - $docGeneratorFactory->create($configFile)->generate(); - } else { - $docGeneratorFactory->create()->generate(); - } - + $this->createDocGenInstance($input, $output)->generate(); return self::SUCCESS; } - - private function getCustomConfigurationParameters(InputInterface $input): array - { - $customConfigurationParameters = []; - foreach ($this->customConfigOptions as $optionName => $description) { - $optionValue = $input->getOption($optionName); - if (!is_null($optionValue)) { - $customConfigurationParameters[$optionName] = $optionValue; - } - } - return $customConfigurationParameters; - } } diff --git a/src/Console/Command/GenerateProjectTemplatesStructureCommand.php b/src/Console/Command/GenerateProjectTemplatesStructureCommand.php new file mode 100644 index 00000000..ac16dae4 --- /dev/null +++ b/src/Console/Command/GenerateProjectTemplatesStructureCommand.php @@ -0,0 +1,46 @@ + 'Path to the directory of the documented project', + 'templates_dir' => 'Path to directory with documentation templates', + 'cache_dir' => 'Configuration parameter: Path to the directory where the documentation generator cache will be saved', + ]; + } + + protected function configure(): void + { + $this->setName('ai-generate-project-templates-structure') + ->setDescription('Generate empty documentation templates for a documented project using LLMs tools'); + } + + /** + * @throws DependencyException + * @throws ReflectionException + * @throws ClientException + * @throws NotFoundException + * @throws InvalidConfigurationParameterException + */ + protected function execute( + InputInterface $input, + OutputInterface $output + ): int { + $this->createDocGenInstance($input, $output)->generateProjectTemplatesStructure(); + return self::SUCCESS; + } +} diff --git a/src/Core/Console/ProgressBarFactory.php b/src/Console/ProgressBar/ProgressBarFactory.php similarity index 87% rename from src/Core/Console/ProgressBarFactory.php rename to src/Console/ProgressBar/ProgressBarFactory.php index 42f31e39..e34ace8c 100644 --- a/src/Core/Console/ProgressBarFactory.php +++ b/src/Console/ProgressBar/ProgressBarFactory.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace BumbleDocGen\Core\Console; +namespace BumbleDocGen\Console\ProgressBar; use Symfony\Component\Console\Style\OutputStyle; diff --git a/src/Core/Console/StylizedProgressBar.php b/src/Console/ProgressBar/StylizedProgressBar.php similarity index 98% rename from src/Core/Console/StylizedProgressBar.php rename to src/Console/ProgressBar/StylizedProgressBar.php index a8c6b9e3..493b6458 100644 --- a/src/Core/Console/StylizedProgressBar.php +++ b/src/Console/ProgressBar/StylizedProgressBar.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace BumbleDocGen\Core\Console; +namespace BumbleDocGen\Console\ProgressBar; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Style\OutputStyle; diff --git a/src/Core/Configuration/Configuration.php b/src/Core/Configuration/Configuration.php index 4bff70a4..913273b1 100644 --- a/src/Core/Configuration/Configuration.php +++ b/src/Core/Configuration/Configuration.php @@ -4,6 +4,7 @@ namespace BumbleDocGen\Core\Configuration; +use BumbleDocGen\Console\Command\AdditionalCommandCollection; use BumbleDocGen\Core\Cache\LocalCache\Exception\ObjectNotFoundException; use BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache; use BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException; @@ -21,6 +22,7 @@ use DI\DependencyException; use DI\NotFoundException; use Psr\Log\LoggerInterface; +use Symfony\Component\Console\Command\Command; /** * Configuration project documentation @@ -333,4 +335,24 @@ public function getDocGenLibDir(): string { return dirname(__DIR__, 2); } + + /** + * @throws DependencyException + * @throws NotFoundException + * @throws InvalidConfigurationParameterException + */ + public function getAdditionalConsoleCommands(): AdditionalCommandCollection + { + try { + return $this->localObjectCache->getMethodCachedResult(__METHOD__, ''); + } catch (ObjectNotFoundException) { + } + $customFilters = $this->parameterBag->validateAndGetClassListValue( + 'additional_console_commands', + Command::class + ); + $additionalCommandCollection = AdditionalCommandCollection::create(...$customFilters); + $this->localObjectCache->cacheMethodResult(__METHOD__, '', $additionalCommandCollection); + return $additionalCommandCollection; + } } diff --git a/src/Core/Configuration/defaultConfiguration.yaml b/src/Core/Configuration/defaultConfiguration.yaml index e652c1e2..aa05f546 100644 --- a/src/Core/Configuration/defaultConfiguration.yaml +++ b/src/Core/Configuration/defaultConfiguration.yaml @@ -32,4 +32,5 @@ twig_filters: # (array) Filters that - class: \BumbleDocGen\Core\Renderer\Twig\Filter\PregMatch plugins: # (array|null) List of plugins - class: \BumbleDocGen\Core\Plugin\CorePlugin\PageLinker\PageHtmlLinkerPlugin - - class: \BumbleDocGen\Core\Plugin\CorePlugin\LastPageCommitter\LastPageCommitter \ No newline at end of file + - class: \BumbleDocGen\Core\Plugin\CorePlugin\LastPageCommitter\LastPageCommitter +additional_console_commands: # (array) Additional console commands diff --git a/src/Core/Renderer/RendererIteratorFactory.php b/src/Core/Renderer/RendererIteratorFactory.php index 5e8d8ccb..65332edd 100644 --- a/src/Core/Renderer/RendererIteratorFactory.php +++ b/src/Core/Renderer/RendererIteratorFactory.php @@ -4,13 +4,13 @@ namespace BumbleDocGen\Core\Renderer; +use BumbleDocGen\Console\ProgressBar\ProgressBarFactory; use BumbleDocGen\Core\Cache\LocalCache\Exception\ObjectNotFoundException; use BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache; use BumbleDocGen\Core\Cache\SharedCompressedDocumentFileCache; use BumbleDocGen\Core\Configuration\Configuration; use BumbleDocGen\Core\Configuration\ConfigurationParameterBag; use BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException; -use BumbleDocGen\Core\Console\ProgressBarFactory; use BumbleDocGen\Core\Parser\Entity\RootEntityCollectionsGroup; use BumbleDocGen\Core\Renderer\Context\Dependency\RendererDependencyFactory; use BumbleDocGen\Core\Renderer\Context\DocumentedEntityWrapper; diff --git a/src/DocGenerator.php b/src/DocGenerator.php index 7f02cbb8..829982ef 100644 --- a/src/DocGenerator.php +++ b/src/DocGenerator.php @@ -32,7 +32,7 @@ */ final class DocGenerator { - public const VERSION = '1.0.0'; + public const VERSION = '1.1.0'; public const LOG_FILE_NAME = 'last_run.log'; public function __construct( diff --git a/src/DocGeneratorFactory.php b/src/DocGeneratorFactory.php index 5118cb4c..722f06ca 100644 --- a/src/DocGeneratorFactory.php +++ b/src/DocGeneratorFactory.php @@ -4,7 +4,9 @@ namespace BumbleDocGen; +use BumbleDocGen\Core\Configuration\Configuration; use BumbleDocGen\Core\Configuration\ConfigurationParameterBag; +use DI\Container; use DI\ContainerBuilder; use DI\DependencyException; use DI\NotFoundException; @@ -14,6 +16,7 @@ final class DocGeneratorFactory { private ContainerBuilder $containerBuilder; private array $customConfigurationParameters = []; + private array $customDefinitions = []; public function __construct( private string $diConfig = __DIR__ . '/di-config.php' @@ -29,6 +32,11 @@ public function setCustomConfigurationParameters(array $customConfigurationParam $this->customConfigurationParameters = $customConfigurationParameters; } + public function setCustomDiDefinitions(array $definitions): void + { + $this->customDefinitions = $definitions; + } + /** * @throws DependencyException * @throws NotFoundException @@ -36,7 +44,7 @@ public function setCustomConfigurationParameters(array $customConfigurationParam */ public function create(?string ...$configurationFiles): DocGenerator { - $diContainer = $this->containerBuilder->build(); + $diContainer = $this->buildDiContainer(); $logger = $diContainer->get(LoggerInterface::class); try { /** @var ConfigurationParameterBag $configurationParameterBag */ @@ -49,4 +57,37 @@ public function create(?string ...$configurationFiles): DocGenerator throw new \RuntimeException($e->getMessage()); } } + + /** + * @throws DependencyException + * @throws NotFoundException + * @throws \Exception + */ + public function createConfiguration(string ...$configurationFiles): Configuration + { + $diContainer = $this->buildDiContainer(); + $logger = $diContainer->get(LoggerInterface::class); + try { + /** @var ConfigurationParameterBag $configurationParameterBag */ + $configurationParameterBag = $diContainer->get(ConfigurationParameterBag::class); + $configurationParameterBag->loadFromFiles(...$configurationFiles); + $configurationParameterBag->loadFromArray($this->customConfigurationParameters); + return $diContainer->get(Configuration::class); + } catch (\Exception $e) { + $logger->error("{$e->getMessage()} ( {$e->getFile()}:{$e->getLine()} )"); + throw new \RuntimeException($e->getMessage()); + } + } + + /** + * @throws \Exception + */ + private function buildDiContainer(): Container + { + $diContainer = $this->containerBuilder->build(); + foreach ($this->customDefinitions as $name => $definition) { + $diContainer->set($name, $definition); + } + return $diContainer; + } } diff --git a/src/LanguageHandler/Php/Parser/Entity/ClassEntityCollection.php b/src/LanguageHandler/Php/Parser/Entity/ClassEntityCollection.php index 46e6da0a..4cd1bd6f 100644 --- a/src/LanguageHandler/Php/Parser/Entity/ClassEntityCollection.php +++ b/src/LanguageHandler/Php/Parser/Entity/ClassEntityCollection.php @@ -4,11 +4,11 @@ namespace BumbleDocGen\LanguageHandler\Php\Parser\Entity; +use BumbleDocGen\Console\ProgressBar\ProgressBarFactory; use BumbleDocGen\Core\Cache\LocalCache\Exception\ObjectNotFoundException; use BumbleDocGen\Core\Cache\LocalCache\LocalObjectCache; use BumbleDocGen\Core\Configuration\Configuration; use BumbleDocGen\Core\Configuration\Exception\InvalidConfigurationParameterException; -use BumbleDocGen\Core\Console\ProgressBarFactory; use BumbleDocGen\Core\Parser\Entity\LoggableRootEntityCollection; use BumbleDocGen\Core\Plugin\PluginEventDispatcher; use BumbleDocGen\LanguageHandler\Php\Parser\Entity\Cache\CacheablePhpEntityFactory;