OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /// **docgen** is a tool for creating machine readable representations of Dart | 5 /// **docgen** is a tool for creating machine readable representations of Dart |
6 /// code metadata, including: classes, members, comments and annotations. | 6 /// code metadata, including: classes, members, comments and annotations. |
7 /// | 7 /// |
8 /// docgen is run on a `.dart` file or a directory containing `.dart` files. | 8 /// docgen is run on a `.dart` file or a directory containing `.dart` files. |
9 /// | 9 /// |
10 /// $ dart docgen.dart [OPTIONS] [FILE/DIR] | 10 /// $ dart docgen.dart [OPTIONS] [FILE/DIR] |
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 /// Convenience methods wrapped up in a class to pull down the docgen viewer for | 657 /// Convenience methods wrapped up in a class to pull down the docgen viewer for |
658 /// a viewable website, and start up a server for viewing. | 658 /// a viewable website, and start up a server for viewing. |
659 class _Viewer { | 659 class _Viewer { |
660 static String _dartdocViewerString = path.join(Directory.current.path, | 660 static String _dartdocViewerString = path.join(Directory.current.path, |
661 'dartdoc-viewer'); | 661 'dartdoc-viewer'); |
662 static Directory _dartdocViewerDir = new Directory(_dartdocViewerString); | 662 static Directory _dartdocViewerDir = new Directory(_dartdocViewerString); |
663 static Directory _topLevelTempDir; | 663 static Directory _topLevelTempDir; |
664 static Directory _webDocsDir; | 664 static Directory _webDocsDir; |
665 static bool movedViewerCode = false; | 665 static bool movedViewerCode = false; |
666 | 666 |
| 667 static String _viewerCodePath; |
| 668 |
| 669 /* |
| 670 * dartdoc-viewer currently has the web app code under a 'client' directory |
| 671 * |
| 672 * This is confusing for folks that want to clone and modify the code. |
| 673 * It also includes a number of python files and other content related to |
| 674 * app engine hosting that are not needed. |
| 675 * |
| 676 * This logic exists to support the current model and a (future) updated |
| 677 * dartdoc-viewer repo where the 'client' content exists at the root of the |
| 678 * project and the other content is removed. |
| 679 */ |
| 680 static String get viewerCodePath { |
| 681 if(_viewerCodePath == null) { |
| 682 var pubspecFileName = 'pubspec.yaml'; |
| 683 |
| 684 var thePath = _dartdocViewerDir.path; |
| 685 |
| 686 if(!FileSystemEntity.isFileSync(path.join(thePath, pubspecFileName))) { |
| 687 thePath = path.join(thePath, 'client'); |
| 688 print('trying the fallback: $thePath'); |
| 689 if (!FileSystemEntity.isFileSync(path.join(thePath, pubspecFileName))) { |
| 690 throw new StateError('Could not find a pubspec file'); |
| 691 } |
| 692 } |
| 693 |
| 694 _viewerCodePath = thePath; |
| 695 } |
| 696 return _viewerCodePath; |
| 697 } |
| 698 |
667 /// If our dartdoc-viewer code is already checked out, move it to a temporary | 699 /// If our dartdoc-viewer code is already checked out, move it to a temporary |
668 /// directory outside of the package directory, so we don't try to process it | 700 /// directory outside of the package directory, so we don't try to process it |
669 /// for documentation. | 701 /// for documentation. |
670 static void ensureMovedViewerCode() { | 702 static void ensureMovedViewerCode() { |
671 // TODO(efortuna): This will need to be modified to run on anyone's package | 703 // TODO(efortuna): This will need to be modified to run on anyone's package |
672 // outside of the checkout! | 704 // outside of the checkout! |
673 if (_dartdocViewerDir.existsSync()) { | 705 if (_dartdocViewerDir.existsSync()) { |
674 _topLevelTempDir = new Directory( | 706 _topLevelTempDir = new Directory( |
675 _Generator._rootDirectory).createTempSync(); | 707 _Generator._rootDirectory).createTempSync(); |
676 _dartdocViewerDir.renameSync(_topLevelTempDir.path); | 708 _dartdocViewerDir.renameSync(_topLevelTempDir.path); |
(...skipping 14 matching lines...) Expand all Loading... |
691 else { | 723 else { |
692 var processResult = Process.runSync('git', ['clone', '-b', 'master', | 724 var processResult = Process.runSync('git', ['clone', '-b', 'master', |
693 'git://github.com/dart-lang/dartdoc-viewer.git'], | 725 'git://github.com/dart-lang/dartdoc-viewer.git'], |
694 runInShell: true); | 726 runInShell: true); |
695 | 727 |
696 if (processResult.exitCode == 0) { | 728 if (processResult.exitCode == 0) { |
697 /// Move the generated json/yaml docs directory to the dartdoc-viewer | 729 /// Move the generated json/yaml docs directory to the dartdoc-viewer |
698 /// directory, to run as a webpage. | 730 /// directory, to run as a webpage. |
699 var processResult = Process.runSync(_Generator._pubScript, | 731 var processResult = Process.runSync(_Generator._pubScript, |
700 ['upgrade'], runInShell: true, | 732 ['upgrade'], runInShell: true, |
701 workingDirectory: path.join(_dartdocViewerDir.path, 'client')); | 733 workingDirectory: path.join(viewerCodePath, 'client')); |
702 print('process output: ${processResult.stdout}'); | 734 print('process output: ${processResult.stdout}'); |
703 print('process stderr: ${processResult.stderr}'); | 735 print('process stderr: ${processResult.stderr}'); |
704 | 736 |
705 var dir = new Directory(_Generator._outputDirectory == null? 'docs' : | 737 var dir = new Directory(_Generator._outputDirectory == null? 'docs' : |
706 _Generator._outputDirectory); | 738 _Generator._outputDirectory); |
707 _webDocsDir = new Directory(path.join(_dartdocViewerDir.path, 'client', | 739 _webDocsDir = new Directory(path.join(viewerCodePath, 'client', |
708 'web', 'docs')); | 740 'web', 'docs')); |
709 if (dir.existsSync()) { | 741 if (dir.existsSync()) { |
710 // Move the docs folder to dartdoc-viewer/client/web/docs | 742 // Move the docs folder to dartdoc-viewer/client/web/docs |
711 dir.renameSync(_webDocsDir.path); | 743 dir.renameSync(_webDocsDir.path); |
712 } | 744 } |
713 } else { | 745 } else { |
714 print('Error cloning git repository:'); | 746 print('Error cloning git repository:'); |
715 print('process output: ${processResult.stdout}'); | 747 print('process output: ${processResult.stdout}'); |
716 print('process stderr: ${processResult.stderr}'); | 748 print('process stderr: ${processResult.stderr}'); |
717 } | 749 } |
718 } | 750 } |
719 } | 751 } |
720 | 752 |
721 static void _compile() { | 753 static void _compile() { |
722 if (_webDocsDir.existsSync()) { | 754 if (_webDocsDir.existsSync()) { |
723 // Compile the code to JavaScript so we can run on any browser. | 755 // Compile the code to JavaScript so we can run on any browser. |
724 print('Compile app to JavaScript for viewing.'); | 756 print('Compile app to JavaScript for viewing.'); |
725 var processResult = Process.runSync(_Generator._dartBinary, | 757 var processResult = Process.runSync(_Generator._dartBinary, |
726 ['deploy.dart'], workingDirectory : path.join(_dartdocViewerDir.path, | 758 ['deploy.dart'], workingDirectory : path.join(viewerCodePath, |
727 'client'), runInShell: true); | 759 'client'), runInShell: true); |
728 print('process output: ${processResult.stdout}'); | 760 print('process output: ${processResult.stdout}'); |
729 print('process stderr: ${processResult.stderr}'); | 761 print('process stderr: ${processResult.stderr}'); |
730 var outputDir = path.join(_dartdocViewerDir.path, 'client', 'out', 'web'); | 762 var outputDir = path.join(viewerCodePath, 'client', 'out', 'web'); |
731 print('Docs are available at $outputDir'); | 763 print('Docs are available at $outputDir'); |
732 } | 764 } |
733 } | 765 } |
734 | 766 |
735 /// A simple HTTP server. Implemented here because this is part of the SDK, | 767 /// A simple HTTP server. Implemented here because this is part of the SDK, |
736 /// so it shouldn't have any external dependencies. | 768 /// so it shouldn't have any external dependencies. |
737 static void _runServer() { | 769 static void _runServer() { |
738 // Launch a server to serve out of the directory dartdoc-viewer/client/web. | 770 // Launch a server to serve out of the directory dartdoc-viewer/client/web. |
739 HttpServer.bind('localhost', 8080).then((HttpServer httpServer) { | 771 HttpServer.bind('localhost', 8080).then((HttpServer httpServer) { |
740 print('Server launched. Navigate your browser to: ' | 772 print('Server launched. Navigate your browser to: ' |
741 'http://localhost:${httpServer.port}'); | 773 'http://localhost:${httpServer.port}'); |
742 httpServer.listen((HttpRequest request) { | 774 httpServer.listen((HttpRequest request) { |
743 var response = request.response; | 775 var response = request.response; |
744 var basePath = path.join(_dartdocViewerDir.path, 'client', 'out', | 776 var basePath = path.join(viewerCodePath, 'client', 'out', |
745 'web'); | 777 'web'); |
746 var requestPath = path.join(basePath, request.uri.path.substring(1)); | 778 var requestPath = path.join(basePath, request.uri.path.substring(1)); |
747 bool found = true; | 779 bool found = true; |
748 var file = new File(requestPath); | 780 var file = new File(requestPath); |
749 if (file.existsSync()) { | 781 if (file.existsSync()) { |
750 // Set the correct header type. | 782 // Set the correct header type. |
751 if (requestPath.endsWith('.html')) { | 783 if (requestPath.endsWith('.html')) { |
752 response.headers.set('Content-Type', 'text/html'); | 784 response.headers.set('Content-Type', 'text/html'); |
753 } else if (requestPath.endsWith('.js')) { | 785 } else if (requestPath.endsWith('.js')) { |
754 response.headers.set('Content-Type', 'application/javascript'); | 786 response.headers.set('Content-Type', 'application/javascript'); |
(...skipping 1446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2201 .map((e) => originalMirror.getField(e.simpleName).reflectee) | 2233 .map((e) => originalMirror.getField(e.simpleName).reflectee) |
2202 .where((e) => e != null) | 2234 .where((e) => e != null) |
2203 .toList(); | 2235 .toList(); |
2204 } | 2236 } |
2205 | 2237 |
2206 Map toMap() => { | 2238 Map toMap() => { |
2207 'name': Indexable.getDocgenObject(mirror, owningLibrary).docName, | 2239 'name': Indexable.getDocgenObject(mirror, owningLibrary).docName, |
2208 'parameters': parameters | 2240 'parameters': parameters |
2209 }; | 2241 }; |
2210 } | 2242 } |
OLD | NEW |