소스 검색

Add `--no-extraction` option to skip extraction phase

shalvah 5 년 전
부모
커밋
4d022d0067
2개의 변경된 파일39개의 추가작업 그리고 12개의 파일을 삭제
  1. 8 0
      src/Commands/GenerateDocumentation.php
  2. 31 12
      src/Writing/Writer.php

+ 8 - 0
src/Commands/GenerateDocumentation.php

@@ -30,6 +30,7 @@ class GenerateDocumentation extends Command
      */
     protected $signature = "scribe:generate
                             {--force : Discard any changes you've made to the Markdown files}
+                            {--no-extraction : Skip extraction of route info and just transform the Markdown files}
     ";
 
     /**
@@ -60,6 +61,13 @@ class GenerateDocumentation extends Command
     {
         $this->bootstrap();
 
+        $noExtraction = $this->option('no-extraction');
+        if ($noExtraction) {
+            $writer = new Writer($this->docConfig);
+            $writer->writeDocs();
+            return;
+        }
+
         $routes = $routeMatcher->getRoutes($this->docConfig->get('routes'), $this->docConfig->get('router'));
 
         $parsedRoutes = $this->processRoutes($routes);

+ 31 - 12
src/Writing/Writer.php

@@ -26,7 +26,7 @@ class Writer
     /**
      * @var bool
      */
-    private $forceIt;
+    private $shouldOverwrite;
 
     /**
      * @var bool
@@ -63,12 +63,12 @@ class Writer
      */
     private $lastTimesWeModifiedTheseFiles;
 
-    public function __construct(DocumentationConfig $config = null, bool $forceIt = false)
+    public function __construct(DocumentationConfig $config = null, bool $shouldOverwrite = false)
     {
         // If no config is injected, pull from global
         $this->config = $config ?: new DocumentationConfig(config('scribe'));
         $this->baseUrl = $this->config->get('base_url') ?? config('app.url');
-        $this->forceIt = $forceIt;
+        $this->shouldOverwrite = $shouldOverwrite;
         $this->shouldGeneratePostmanCollection = $this->config->get('postman.enabled', false);
         $this->pastel = new Pastel();
         $this->isStatic = $this->config->get('type') === 'static';
@@ -78,7 +78,7 @@ class Writer
         $this->lastTimesWeModifiedTheseFiles = [];
     }
 
-    public function writeDocs(Collection $routes)
+    public function writeDocs(Collection $routes = null)
     {
         // The source Markdown files always go in resources/docs.
         // The static assets (js/, css/, and images/) always go in public/docs/.
@@ -86,11 +86,11 @@ class Writer
         // For 'laravel' docs, the output files (index.blade.php, collection.json)
         // go in resources/views/scribe/ and storage/app/scribe/ respectively.
 
-        $this->writeMarkdownAndSourceFiles($routes);
+        $routes && $this->writeMarkdownAndSourceFiles($routes);
 
         $this->writeHtmlDocs();
 
-        $this->writePostmanCollection($routes);
+        $routes && $this->writePostmanCollection($routes);
     }
 
     /**
@@ -112,9 +112,9 @@ class Writer
             mkdir($this->sourceOutputPath, 0777, true);
         }
 
+        $this->writeRoutesMarkdownFile($parsedRoutes, $settings);
         $this->writeIndexMarkdownFile($settings);
         $this->writeAuthMarkdownFile();
-        $this->writeRoutesMarkdownFile($parsedRoutes, $settings);
 
         ConsoleOutputUtils::info('Wrote source Markdown files to: ' . $this->sourceOutputPath);
     }
@@ -213,23 +213,42 @@ class Writer
 
     protected function writeIndexMarkdownFile(array $settings): void
     {
+        $indexMarkdownFile = $this->sourceOutputPath . '/index.md';
+        if ($this->hasFileBeenModified($indexMarkdownFile)) {
+            if ($this->shouldOverwrite) {
+                ConsoleOutputUtils::warn("Discarding manual changes for file $indexMarkdownFile because you specified --force");
+            } else {
+                ConsoleOutputUtils::warn("Skipping modified file $indexMarkdownFile");
+                return;
+            }
+        }
+
         $frontmatter = view('scribe::partials.frontmatter')
             ->with('showPostmanCollectionButton', $this->shouldGeneratePostmanCollection)
             // This path is wrong for laravel type but will be replaced in post
             ->with('postmanCollectionLink', './collection.json')
             ->with('outputPath', 'docs')
             ->with('settings', $settings);
-        $indexFile = $this->sourceOutputPath . '/index.md';
 
         $introText = $this->config->get('intro_text', '');
         $introMarkdown = view('scribe::index')
             ->with('frontmatter', $frontmatter)
             ->with('introText', $introText);
-        $this->writeFile($indexFile, $introMarkdown);
+        $this->writeFile($indexMarkdownFile, $introMarkdown);
     }
 
     protected function writeAuthMarkdownFile(): void
     {
+        $authMarkdownFile = $this->sourceOutputPath . '/authentication.md';
+        if ($this->hasFileBeenModified($authMarkdownFile)) {
+            if ($this->shouldOverwrite) {
+                ConsoleOutputUtils::warn("Discarding manual changes for file $authMarkdownFile because you specified --force");
+            } else {
+                ConsoleOutputUtils::warn("Skipping modified file $authMarkdownFile");
+                return;
+            }
+        }
+
         $isAuthed = $this->config->get('auth.enabled', false);
         $text = '';
         $extraInfo = '';
@@ -270,7 +289,7 @@ class Writer
             'authDescription' => $text,
             'extraAuthInfo' => $extraInfo,
         ]);
-        $this->writeFile($this->sourceOutputPath . '/authentication.md', $authMarkdown);
+        $this->writeFile($authMarkdownFile, $authMarkdown);
     }
 
     protected function writeRoutesMarkdownFile(Collection $parsedRoutes, array $settings): void
@@ -297,8 +316,8 @@ class Writer
             $routeGroupMarkdownFile = $this->sourceOutputPath . "/groups/$groupId.md";
 
             if ($this->hasFileBeenModified($routeGroupMarkdownFile)) {
-                if ($this->forceIt) {
-                    ConsoleOutputUtils::warn("Discarded manual changes for file $routeGroupMarkdownFile");
+                if ($this->shouldOverwrite) {
+                    ConsoleOutputUtils::warn("Discarding manual changes for file $routeGroupMarkdownFile because you specified --force");
                 } else {
                     ConsoleOutputUtils::warn("Skipping modified file $routeGroupMarkdownFile");
                     return;