yard 0.9.16 → 0.9.17
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of yard might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.yardopts +26 -26
- data/CHANGELOG.md +728 -728
- data/LEGAL +66 -66
- data/LICENSE +22 -22
- data/README.md +328 -328
- data/Rakefile +53 -47
- data/benchmarks/builtins_vs_eval.rb +24 -24
- data/benchmarks/concat_vs_join.rb +13 -13
- data/benchmarks/erb_vs_erubis.rb +54 -54
- data/benchmarks/format_args.rb +47 -47
- data/benchmarks/generation.rb +38 -38
- data/benchmarks/marshal_vs_dbm.rb +64 -64
- data/benchmarks/parsing.rb +46 -46
- data/benchmarks/pathname_vs_string.rb +50 -50
- data/benchmarks/rdoc_vs_yardoc.rb +11 -11
- data/benchmarks/registry_store_types.rb +49 -49
- data/benchmarks/ri_vs_yri.rb +19 -19
- data/benchmarks/ripper_parser.rb +13 -13
- data/benchmarks/splat_vs_flatten.rb +13 -13
- data/benchmarks/template_erb.rb +23 -23
- data/benchmarks/template_format.rb +7 -7
- data/benchmarks/template_profile.rb +18 -18
- data/benchmarks/yri_cache.rb +20 -20
- data/bin/yard +13 -13
- data/bin/yardoc +13 -13
- data/bin/yri +13 -13
- data/docs/CodeObjects.md +115 -115
- data/docs/GettingStarted.md +679 -679
- data/docs/Handlers.md +152 -152
- data/docs/Overview.md +61 -61
- data/docs/Parser.md +191 -191
- data/docs/Tags.md +283 -283
- data/docs/TagsArch.md +123 -123
- data/docs/Templates.md +496 -496
- data/docs/WhatsNew.md +1245 -1245
- data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
- data/docs/templates/default/fulldoc/html/setup.rb +6 -6
- data/docs/templates/default/layout/html/setup.rb +9 -9
- data/docs/templates/default/layout/html/tag_list.erb +11 -11
- data/docs/templates/default/yard_tags/html/list.erb +18 -18
- data/docs/templates/default/yard_tags/html/setup.rb +26 -26
- data/docs/templates/plugin.rb +70 -70
- data/lib/rubygems_plugin.rb +9 -9
- data/lib/yard.rb +69 -69
- data/lib/yard/autoload.rb +303 -303
- data/lib/yard/cli/command.rb +85 -85
- data/lib/yard/cli/command_parser.rb +93 -93
- data/lib/yard/cli/config.rb +198 -198
- data/lib/yard/cli/diff.rb +270 -270
- data/lib/yard/cli/display.rb +69 -69
- data/lib/yard/cli/gems.rb +84 -84
- data/lib/yard/cli/graph.rb +125 -125
- data/lib/yard/cli/help.rb +20 -20
- data/lib/yard/cli/i18n.rb +70 -70
- data/lib/yard/cli/list.rb +23 -23
- data/lib/yard/cli/markup_types.rb +32 -32
- data/lib/yard/cli/server.rb +257 -257
- data/lib/yard/cli/stats.rb +231 -231
- data/lib/yard/cli/yardoc.rb +788 -788
- data/lib/yard/cli/yardopts_command.rb +110 -110
- data/lib/yard/cli/yri.rb +215 -215
- data/lib/yard/code_objects/base.rb +615 -610
- data/lib/yard/code_objects/class_object.rb +146 -146
- data/lib/yard/code_objects/class_variable_object.rb +11 -11
- data/lib/yard/code_objects/constant_object.rb +16 -16
- data/lib/yard/code_objects/extended_method_object.rb +24 -24
- data/lib/yard/code_objects/extra_file_object.rb +131 -131
- data/lib/yard/code_objects/macro_object.rb +172 -172
- data/lib/yard/code_objects/method_object.rb +196 -196
- data/lib/yard/code_objects/module_object.rb +21 -21
- data/lib/yard/code_objects/namespace_mapper.rb +114 -114
- data/lib/yard/code_objects/namespace_object.rb +200 -200
- data/lib/yard/code_objects/proxy.rb +240 -240
- data/lib/yard/code_objects/root_object.rb +19 -19
- data/lib/yard/config.rb +270 -270
- data/lib/yard/core_ext/array.rb +16 -16
- data/lib/yard/core_ext/file.rb +69 -69
- data/lib/yard/core_ext/hash.rb +16 -16
- data/lib/yard/core_ext/insertion.rb +63 -63
- data/lib/yard/core_ext/module.rb +20 -20
- data/lib/yard/core_ext/string.rb +68 -68
- data/lib/yard/core_ext/symbol_hash.rb +75 -75
- data/lib/yard/docstring.rb +386 -378
- data/lib/yard/docstring_parser.rb +345 -345
- data/lib/yard/gem_index.rb +29 -29
- data/lib/yard/globals.rb +22 -22
- data/lib/yard/handlers/base.rb +595 -595
- data/lib/yard/handlers/c/alias_handler.rb +16 -16
- data/lib/yard/handlers/c/attribute_handler.rb +13 -13
- data/lib/yard/handlers/c/base.rb +129 -129
- data/lib/yard/handlers/c/class_handler.rb +27 -27
- data/lib/yard/handlers/c/constant_handler.rb +13 -13
- data/lib/yard/handlers/c/handler_methods.rb +211 -211
- data/lib/yard/handlers/c/init_handler.rb +20 -20
- data/lib/yard/handlers/c/method_handler.rb +45 -36
- data/lib/yard/handlers/c/mixin_handler.rb +21 -21
- data/lib/yard/handlers/c/module_handler.rb +17 -17
- data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
- data/lib/yard/handlers/c/path_handler.rb +11 -11
- data/lib/yard/handlers/c/struct_handler.rb +13 -13
- data/lib/yard/handlers/c/symbol_handler.rb +8 -8
- data/lib/yard/handlers/processor.rb +200 -200
- data/lib/yard/handlers/ruby/alias_handler.rb +44 -44
- data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
- data/lib/yard/handlers/ruby/base.rb +165 -165
- data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
- data/lib/yard/handlers/ruby/class_handler.rb +119 -119
- data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
- data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
- data/lib/yard/handlers/ruby/constant_handler.rb +59 -59
- data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
- data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
- data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -95
- data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
- data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
- data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
- data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
- data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
- data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
- data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
- data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
- data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
- data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
- data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
- data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
- data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
- data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
- data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
- data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
- data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
- data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
- data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
- data/lib/yard/handlers/ruby/method_handler.rb +118 -118
- data/lib/yard/handlers/ruby/mixin_handler.rb +37 -37
- data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
- data/lib/yard/handlers/ruby/module_handler.rb +12 -12
- data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
- data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
- data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
- data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
- data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
- data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
- data/lib/yard/i18n/locale.rb +67 -67
- data/lib/yard/i18n/message.rb +57 -57
- data/lib/yard/i18n/messages.rb +56 -56
- data/lib/yard/i18n/po_parser.rb +61 -61
- data/lib/yard/i18n/pot_generator.rb +290 -290
- data/lib/yard/i18n/text.rb +173 -173
- data/lib/yard/logging.rb +205 -205
- data/lib/yard/options.rb +217 -217
- data/lib/yard/parser/base.rb +57 -57
- data/lib/yard/parser/c/c_parser.rb +235 -235
- data/lib/yard/parser/c/comment_parser.rb +134 -134
- data/lib/yard/parser/c/statement.rb +64 -64
- data/lib/yard/parser/ruby/ast_node.rb +540 -540
- data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1354 -1354
- data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
- data/lib/yard/parser/ruby/legacy/statement.rb +66 -66
- data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
- data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
- data/lib/yard/parser/ruby/ruby_parser.rb +687 -687
- data/lib/yard/parser/ruby/token_resolver.rb +156 -156
- data/lib/yard/parser/source_parser.rb +526 -526
- data/lib/yard/rake/yardoc_task.rb +81 -81
- data/lib/yard/registry.rb +439 -439
- data/lib/yard/registry_resolver.rb +189 -189
- data/lib/yard/registry_store.rb +337 -337
- data/lib/yard/rubygems/backports.rb +10 -10
- data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
- data/lib/yard/rubygems/backports/MIT.txt +20 -20
- data/lib/yard/rubygems/backports/gem.rb +10 -10
- data/lib/yard/rubygems/backports/source_index.rb +365 -365
- data/lib/yard/rubygems/doc_manager.rb +90 -90
- data/lib/yard/rubygems/hook.rb +197 -197
- data/lib/yard/rubygems/specification.rb +50 -50
- data/lib/yard/serializers/base.rb +83 -83
- data/lib/yard/serializers/file_system_serializer.rb +123 -123
- data/lib/yard/serializers/process_serializer.rb +24 -24
- data/lib/yard/serializers/stdout_serializer.rb +34 -34
- data/lib/yard/serializers/yardoc_serializer.rb +152 -152
- data/lib/yard/server.rb +13 -13
- data/lib/yard/server/adapter.rb +100 -100
- data/lib/yard/server/commands/base.rb +209 -209
- data/lib/yard/server/commands/display_file_command.rb +29 -29
- data/lib/yard/server/commands/display_object_command.rb +65 -65
- data/lib/yard/server/commands/frames_command.rb +16 -16
- data/lib/yard/server/commands/library_command.rb +187 -187
- data/lib/yard/server/commands/library_index_command.rb +28 -28
- data/lib/yard/server/commands/list_command.rb +25 -25
- data/lib/yard/server/commands/root_request_command.rb +15 -15
- data/lib/yard/server/commands/search_command.rb +79 -79
- data/lib/yard/server/commands/static_file_command.rb +23 -23
- data/lib/yard/server/commands/static_file_helpers.rb +62 -62
- data/lib/yard/server/doc_server_helper.rb +91 -91
- data/lib/yard/server/doc_server_serializer.rb +39 -39
- data/lib/yard/server/library_version.rb +277 -277
- data/lib/yard/server/rack_adapter.rb +89 -89
- data/lib/yard/server/router.rb +187 -187
- data/lib/yard/server/static_caching.rb +46 -46
- data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
- data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
- data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
- data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
- data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
- data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
- data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
- data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
- data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
- data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
- data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
- data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
- data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
- data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
- data/lib/yard/server/webrick_adapter.rb +45 -45
- data/lib/yard/tags/default_factory.rb +191 -191
- data/lib/yard/tags/default_tag.rb +13 -13
- data/lib/yard/tags/directives.rb +616 -616
- data/lib/yard/tags/library.rb +633 -633
- data/lib/yard/tags/option_tag.rb +13 -13
- data/lib/yard/tags/overload_tag.rb +71 -71
- data/lib/yard/tags/ref_tag.rb +8 -8
- data/lib/yard/tags/ref_tag_list.rb +28 -28
- data/lib/yard/tags/tag.rb +71 -71
- data/lib/yard/tags/tag_format_error.rb +7 -7
- data/lib/yard/tags/types_explainer.rb +162 -162
- data/lib/yard/templates/engine.rb +186 -186
- data/lib/yard/templates/erb_cache.rb +23 -23
- data/lib/yard/templates/helpers/base_helper.rb +215 -215
- data/lib/yard/templates/helpers/filter_helper.rb +27 -27
- data/lib/yard/templates/helpers/html_helper.rb +646 -642
- data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
- data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
- data/lib/yard/templates/helpers/markup_helper.rb +172 -172
- data/lib/yard/templates/helpers/method_helper.rb +75 -75
- data/lib/yard/templates/helpers/module_helper.rb +21 -21
- data/lib/yard/templates/helpers/text_helper.rb +112 -112
- data/lib/yard/templates/helpers/uml_helper.rb +47 -47
- data/lib/yard/templates/section.rb +105 -105
- data/lib/yard/templates/template.rb +418 -418
- data/lib/yard/templates/template_options.rb +92 -92
- data/lib/yard/verifier.rb +151 -151
- data/lib/yard/version.rb +3 -1
- data/spec/cli/command_parser_spec.rb +43 -43
- data/spec/cli/command_spec.rb +36 -36
- data/spec/cli/config_spec.rb +148 -148
- data/spec/cli/diff_spec.rb +254 -254
- data/spec/cli/display_spec.rb +30 -30
- data/spec/cli/gems_spec.rb +81 -81
- data/spec/cli/graph_spec.rb +18 -18
- data/spec/cli/help_spec.rb +22 -22
- data/spec/cli/i18n_spec.rb +107 -107
- data/spec/cli/list_spec.rb +8 -8
- data/spec/cli/markup_types_spec.rb +22 -22
- data/spec/cli/server_spec.rb +324 -324
- data/spec/cli/stats_spec.rb +96 -96
- data/spec/cli/yard_on_yard_spec.rb +38 -38
- data/spec/cli/yardoc_spec.rb +862 -849
- data/spec/cli/yri_spec.rb +101 -101
- data/spec/code_objects/base_spec.rb +470 -460
- data/spec/code_objects/class_object_spec.rb +226 -226
- data/spec/code_objects/code_object_list_spec.rb +36 -36
- data/spec/code_objects/constants_spec.rb +116 -116
- data/spec/code_objects/extra_file_object_spec.rb +160 -160
- data/spec/code_objects/macro_object_spec.rb +150 -150
- data/spec/code_objects/method_object_spec.rb +184 -184
- data/spec/code_objects/module_object_spec.rb +142 -142
- data/spec/code_objects/namespace_object_spec.rb +171 -171
- data/spec/code_objects/proxy_spec.rb +141 -141
- data/spec/code_objects/spec_helper.rb +3 -3
- data/spec/config_spec.rb +171 -171
- data/spec/core_ext/array_spec.rb +13 -13
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +14 -14
- data/spec/core_ext/insertion_spec.rb +37 -37
- data/spec/core_ext/module_spec.rb +15 -15
- data/spec/core_ext/string_spec.rb +42 -42
- data/spec/core_ext/symbol_hash_spec.rb +89 -89
- data/spec/docstring_parser_spec.rb +280 -262
- data/spec/docstring_spec.rb +373 -364
- data/spec/examples.txt +1875 -1871
- data/spec/handlers/alias_handler_spec.rb +82 -82
- data/spec/handlers/attribute_handler_spec.rb +96 -96
- data/spec/handlers/base_spec.rb +216 -216
- data/spec/handlers/c/alias_handler_spec.rb +34 -34
- data/spec/handlers/c/attribute_handler_spec.rb +41 -41
- data/spec/handlers/c/class_handler_spec.rb +78 -78
- data/spec/handlers/c/constant_handler_spec.rb +71 -71
- data/spec/handlers/c/init_handler_spec.rb +48 -48
- data/spec/handlers/c/method_handler_spec.rb +325 -325
- data/spec/handlers/c/mixin_handler_spec.rb +44 -44
- data/spec/handlers/c/module_handler_spec.rb +71 -71
- data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
- data/spec/handlers/c/path_handler_spec.rb +36 -36
- data/spec/handlers/c/spec_helper.rb +23 -23
- data/spec/handlers/c/struct_handler_spec.rb +16 -16
- data/spec/handlers/class_condition_handler_spec.rb +87 -87
- data/spec/handlers/class_handler_spec.rb +247 -247
- data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
- data/spec/handlers/class_variable_handler_spec.rb +12 -12
- data/spec/handlers/constant_handler_spec.rb +112 -112
- data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
- data/spec/handlers/dsl_handler_spec.rb +219 -219
- data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
- data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
- data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
- data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
- data/spec/handlers/examples/dsl_handler_001.rb.txt +154 -154
- data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
- data/spec/handlers/examples/extend_handler_001.rb.txt +15 -15
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
- data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -37
- data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
- data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
- data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
- data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
- data/spec/handlers/exception_handler_spec.rb +49 -49
- data/spec/handlers/extend_handler_spec.rb +24 -24
- data/spec/handlers/legacy_base_spec.rb +128 -128
- data/spec/handlers/method_condition_handler_spec.rb +15 -15
- data/spec/handlers/method_handler_spec.rb +190 -190
- data/spec/handlers/mixin_handler_spec.rb +56 -56
- data/spec/handlers/module_function_handler_spec.rb +106 -106
- data/spec/handlers/module_handler_spec.rb +35 -35
- data/spec/handlers/private_class_method_handler_spec.rb +11 -11
- data/spec/handlers/private_constant_handler_spec.rb +25 -25
- data/spec/handlers/processor_spec.rb +35 -35
- data/spec/handlers/public_class_method_handler_spec.rb +11 -11
- data/spec/handlers/ruby/base_spec.rb +95 -95
- data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
- data/spec/handlers/spec_helper.rb +33 -33
- data/spec/handlers/visibility_handler_spec.rb +44 -44
- data/spec/handlers/yield_handler_spec.rb +52 -52
- data/spec/i18n/locale_spec.rb +81 -81
- data/spec/i18n/message_spec.rb +52 -52
- data/spec/i18n/messages_spec.rb +67 -67
- data/spec/i18n/pot_generator_spec.rb +295 -295
- data/spec/i18n/text_spec.rb +184 -184
- data/spec/logging_spec.rb +44 -44
- data/spec/options_spec.rb +171 -171
- data/spec/parser/base_spec.rb +24 -24
- data/spec/parser/c_parser_spec.rb +236 -223
- data/spec/parser/examples/array.c.txt +6267 -6267
- data/spec/parser/examples/example1.rb.txt +7 -7
- data/spec/parser/examples/extrafile.c.txt +8 -8
- data/spec/parser/examples/file.c.txt +28 -0
- data/spec/parser/examples/multifile.c.txt +22 -22
- data/spec/parser/examples/namespace.cpp.txt +68 -68
- data/spec/parser/examples/override.c.txt +424 -424
- data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
- data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
- data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
- data/spec/parser/ruby/ast_node_spec.rb +33 -33
- data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
- data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
- data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
- data/spec/parser/ruby/token_resolver_spec.rb +165 -165
- data/spec/parser/source_parser_spec.rb +727 -727
- data/spec/parser/tag_parsing_spec.rb +17 -17
- data/spec/rake/yardoc_task_spec.rb +118 -118
- data/spec/registry_spec.rb +463 -463
- data/spec/registry_store_spec.rb +316 -316
- data/spec/rubygems/doc_manager_spec.rb +112 -112
- data/spec/serializers/data/serialized_yardoc/checksums +1 -1
- data/spec/serializers/file_system_serializer_spec.rb +145 -145
- data/spec/serializers/spec_helper.rb +2 -2
- data/spec/serializers/yardoc_serializer_spec.rb +78 -78
- data/spec/server/adapter_spec.rb +39 -39
- data/spec/server/commands/base_spec.rb +91 -91
- data/spec/server/commands/library_command_spec.rb +39 -39
- data/spec/server/doc_server_helper_spec.rb +72 -72
- data/spec/server/doc_server_serializer_spec.rb +60 -60
- data/spec/server/rack_adapter_spec.rb +21 -21
- data/spec/server/router_spec.rb +123 -123
- data/spec/server/spec_helper.rb +22 -22
- data/spec/server/static_caching_spec.rb +47 -47
- data/spec/server/webrick_servlet_spec.rb +20 -20
- data/spec/server_spec.rb +19 -19
- data/spec/spec_helper.rb +212 -212
- data/spec/tags/default_factory_spec.rb +168 -168
- data/spec/tags/default_tag_spec.rb +11 -11
- data/spec/tags/directives_spec.rb +463 -463
- data/spec/tags/library_spec.rb +48 -48
- data/spec/tags/overload_tag_spec.rb +53 -53
- data/spec/tags/ref_tag_list_spec.rb +53 -53
- data/spec/tags/types_explainer_spec.rb +203 -203
- data/spec/templates/class_spec.rb +45 -45
- data/spec/templates/constant_spec.rb +41 -41
- data/spec/templates/engine_spec.rb +131 -131
- data/spec/templates/examples/class001.html +308 -308
- data/spec/templates/examples/class001.txt +36 -36
- data/spec/templates/examples/class002.html +39 -39
- data/spec/templates/examples/constant001.txt +24 -24
- data/spec/templates/examples/constant002.txt +6 -6
- data/spec/templates/examples/constant003.txt +10 -10
- data/spec/templates/examples/method001.html +137 -137
- data/spec/templates/examples/method001.txt +35 -35
- data/spec/templates/examples/method002.html +91 -91
- data/spec/templates/examples/method002.txt +20 -20
- data/spec/templates/examples/method003.html +165 -165
- data/spec/templates/examples/method003.txt +45 -45
- data/spec/templates/examples/method004.html +48 -48
- data/spec/templates/examples/method004.txt +10 -10
- data/spec/templates/examples/method005.html +105 -105
- data/spec/templates/examples/method005.txt +33 -33
- data/spec/templates/examples/method006.html +107 -107
- data/spec/templates/examples/method006.txt +20 -20
- data/spec/templates/examples/module001.dot +33 -33
- data/spec/templates/examples/module001.html +833 -833
- data/spec/templates/examples/module001.txt +33 -33
- data/spec/templates/examples/module002.html +341 -341
- data/spec/templates/examples/module003.html +202 -202
- data/spec/templates/examples/module004.html +394 -394
- data/spec/templates/examples/module005.html +81 -81
- data/spec/templates/examples/tag001.txt +82 -82
- data/spec/templates/helpers/base_helper_spec.rb +171 -171
- data/spec/templates/helpers/html_helper_spec.rb +668 -653
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
- data/spec/templates/helpers/markup_helper_spec.rb +136 -136
- data/spec/templates/helpers/method_helper_spec.rb +107 -107
- data/spec/templates/helpers/module_helper_spec.rb +35 -35
- data/spec/templates/helpers/shared_signature_examples.rb +126 -126
- data/spec/templates/helpers/text_helper_spec.rb +65 -65
- data/spec/templates/method_spec.rb +118 -118
- data/spec/templates/module_spec.rb +203 -203
- data/spec/templates/onefile_spec.rb +66 -66
- data/spec/templates/section_spec.rb +144 -144
- data/spec/templates/spec_helper.rb +76 -76
- data/spec/templates/tag_spec.rb +52 -52
- data/spec/templates/template_spec.rb +410 -410
- data/spec/verifier_spec.rb +106 -106
- data/templates/default/class/dot/setup.rb +7 -7
- data/templates/default/class/dot/superklass.erb +2 -2
- data/templates/default/class/html/constructor_details.erb +8 -8
- data/templates/default/class/html/setup.rb +2 -2
- data/templates/default/class/html/subclasses.erb +4 -4
- data/templates/default/class/setup.rb +36 -36
- data/templates/default/class/text/setup.rb +12 -12
- data/templates/default/class/text/subclasses.erb +5 -5
- data/templates/default/constant/text/header.erb +11 -11
- data/templates/default/constant/text/setup.rb +4 -4
- data/templates/default/docstring/html/abstract.erb +4 -4
- data/templates/default/docstring/html/deprecated.erb +1 -1
- data/templates/default/docstring/html/index.erb +5 -5
- data/templates/default/docstring/html/note.erb +6 -6
- data/templates/default/docstring/html/private.erb +4 -4
- data/templates/default/docstring/html/text.erb +1 -1
- data/templates/default/docstring/html/todo.erb +6 -6
- data/templates/default/docstring/setup.rb +52 -52
- data/templates/default/docstring/text/abstract.erb +2 -2
- data/templates/default/docstring/text/deprecated.erb +2 -2
- data/templates/default/docstring/text/index.erb +2 -2
- data/templates/default/docstring/text/note.erb +3 -3
- data/templates/default/docstring/text/private.erb +2 -2
- data/templates/default/docstring/text/text.erb +1 -1
- data/templates/default/docstring/text/todo.erb +3 -3
- data/templates/default/fulldoc/html/css/full_list.css +58 -58
- data/templates/default/fulldoc/html/css/style.css +496 -496
- data/templates/default/fulldoc/html/frames.erb +17 -17
- data/templates/default/fulldoc/html/full_list.erb +37 -37
- data/templates/default/fulldoc/html/full_list_class.erb +2 -2
- data/templates/default/fulldoc/html/full_list_file.erb +7 -7
- data/templates/default/fulldoc/html/full_list_method.erb +10 -10
- data/templates/default/fulldoc/html/js/app.js +292 -292
- data/templates/default/fulldoc/html/js/full_list.js +216 -216
- data/templates/default/fulldoc/html/js/jquery.js +3 -3
- data/templates/default/fulldoc/html/setup.rb +241 -241
- data/templates/default/layout/dot/header.erb +5 -5
- data/templates/default/layout/dot/setup.rb +15 -15
- data/templates/default/layout/html/breadcrumb.erb +11 -11
- data/templates/default/layout/html/files.erb +11 -11
- data/templates/default/layout/html/footer.erb +5 -5
- data/templates/default/layout/html/headers.erb +15 -15
- data/templates/default/layout/html/index.erb +2 -2
- data/templates/default/layout/html/layout.erb +23 -23
- data/templates/default/layout/html/listing.erb +4 -4
- data/templates/default/layout/html/objects.erb +32 -32
- data/templates/default/layout/html/script_setup.erb +4 -4
- data/templates/default/layout/html/search.erb +12 -12
- data/templates/default/layout/html/setup.rb +89 -89
- data/templates/default/method/html/header.erb +16 -16
- data/templates/default/method/setup.rb +4 -4
- data/templates/default/method_details/html/header.erb +2 -2
- data/templates/default/method_details/html/method_signature.erb +24 -24
- data/templates/default/method_details/html/source.erb +9 -9
- data/templates/default/method_details/setup.rb +11 -11
- data/templates/default/method_details/text/header.erb +10 -10
- data/templates/default/method_details/text/method_signature.erb +12 -12
- data/templates/default/method_details/text/setup.rb +11 -11
- data/templates/default/module/dot/child.erb +1 -1
- data/templates/default/module/dot/dependencies.erb +2 -2
- data/templates/default/module/dot/header.erb +6 -6
- data/templates/default/module/dot/info.erb +13 -13
- data/templates/default/module/dot/setup.rb +15 -15
- data/templates/default/module/html/attribute_details.erb +10 -10
- data/templates/default/module/html/attribute_summary.erb +8 -8
- data/templates/default/module/html/box_info.erb +43 -43
- data/templates/default/module/html/children.erb +8 -8
- data/templates/default/module/html/constant_summary.erb +17 -17
- data/templates/default/module/html/defines.erb +2 -2
- data/templates/default/module/html/header.erb +5 -5
- data/templates/default/module/html/inherited_attributes.erb +14 -14
- data/templates/default/module/html/inherited_constants.erb +8 -8
- data/templates/default/module/html/inherited_methods.erb +18 -18
- data/templates/default/module/html/item_summary.erb +40 -40
- data/templates/default/module/html/method_details_list.erb +9 -9
- data/templates/default/module/html/method_summary.erb +13 -13
- data/templates/default/module/html/methodmissing.erb +12 -12
- data/templates/default/module/setup.rb +167 -167
- data/templates/default/module/text/children.erb +9 -9
- data/templates/default/module/text/class_meths_list.erb +7 -7
- data/templates/default/module/text/extends.erb +7 -7
- data/templates/default/module/text/header.erb +7 -7
- data/templates/default/module/text/includes.erb +7 -7
- data/templates/default/module/text/instance_meths_list.erb +7 -7
- data/templates/default/module/text/setup.rb +13 -13
- data/templates/default/onefile/html/files.erb +4 -4
- data/templates/default/onefile/html/headers.erb +6 -6
- data/templates/default/onefile/html/layout.erb +17 -17
- data/templates/default/onefile/html/readme.erb +2 -2
- data/templates/default/onefile/html/setup.rb +62 -62
- data/templates/default/root/dot/child.erb +2 -2
- data/templates/default/root/dot/setup.rb +6 -6
- data/templates/default/root/html/setup.rb +2 -2
- data/templates/default/tags/html/example.erb +10 -10
- data/templates/default/tags/html/index.erb +2 -2
- data/templates/default/tags/html/option.erb +24 -24
- data/templates/default/tags/html/overload.erb +13 -13
- data/templates/default/tags/html/see.erb +7 -7
- data/templates/default/tags/html/tag.erb +20 -20
- data/templates/default/tags/setup.rb +57 -57
- data/templates/default/tags/text/example.erb +12 -12
- data/templates/default/tags/text/index.erb +1 -1
- data/templates/default/tags/text/option.erb +20 -20
- data/templates/default/tags/text/overload.erb +19 -19
- data/templates/default/tags/text/see.erb +11 -11
- data/templates/default/tags/text/tag.erb +13 -13
- data/templates/guide/class/html/setup.rb +2 -2
- data/templates/guide/docstring/html/setup.rb +2 -2
- data/templates/guide/fulldoc/html/css/style.css +108 -108
- data/templates/guide/fulldoc/html/js/app.js +33 -33
- data/templates/guide/fulldoc/html/setup.rb +74 -74
- data/templates/guide/layout/html/layout.erb +81 -81
- data/templates/guide/layout/html/setup.rb +25 -25
- data/templates/guide/method/html/header.erb +17 -17
- data/templates/guide/method/html/setup.rb +22 -22
- data/templates/guide/module/html/header.erb +6 -6
- data/templates/guide/module/html/method_list.erb +4 -4
- data/templates/guide/module/html/setup.rb +27 -27
- data/templates/guide/onefile/html/files.erb +4 -4
- data/templates/guide/onefile/html/setup.rb +6 -6
- data/templates/guide/onefile/html/toc.erb +3 -3
- data/templates/guide/tags/html/setup.rb +9 -9
- data/yard.gemspec +43 -43
- metadata +4 -4
data/lib/yard/cli/yardoc.rb
CHANGED
@@ -1,788 +1,788 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'digest/sha1'
|
3
|
-
require 'fileutils'
|
4
|
-
|
5
|
-
module YARD
|
6
|
-
module CLI
|
7
|
-
# Default options used in +yard doc+ command.
|
8
|
-
class YardocOptions < Templates::TemplateOptions
|
9
|
-
# @return [Array<CodeObjects::ExtraFileObject>]
|
10
|
-
# the list of extra files rendered along with objects
|
11
|
-
default_attr :files, lambda { [] }
|
12
|
-
|
13
|
-
# @return [String] the default title appended to each generated page
|
14
|
-
default_attr :title, "Documentation by YARD #{YARD::VERSION}"
|
15
|
-
|
16
|
-
# @return [Verifier] the default verifier object to filter queries
|
17
|
-
default_attr :verifier, lambda { Verifier.new }
|
18
|
-
|
19
|
-
# @return [Serializers::Base] the default serializer for generating output
|
20
|
-
# to disk.
|
21
|
-
default_attr :serializer, lambda { Serializers::FileSystemSerializer.new }
|
22
|
-
|
23
|
-
# @return [Symbol] the default output format (:html).
|
24
|
-
default_attr :format, :html
|
25
|
-
|
26
|
-
# @return [Boolean] whether the data should be rendered in a single page,
|
27
|
-
# if the template supports it.
|
28
|
-
default_attr :onefile, false
|
29
|
-
|
30
|
-
# @return [CodeObjects::ExtraFileObject] the README file object rendered
|
31
|
-
# along with objects
|
32
|
-
attr_accessor :readme
|
33
|
-
|
34
|
-
# @return [Array<CodeObjects::Base>] the list of code objects to render
|
35
|
-
# the templates with.
|
36
|
-
attr_accessor :objects
|
37
|
-
|
38
|
-
# @return [Numeric] An index value for rendering sequentially related templates
|
39
|
-
attr_accessor :index
|
40
|
-
|
41
|
-
# @return [CodeObjects::Base] an extra item to send to a template that is not
|
42
|
-
# the main rendered object
|
43
|
-
attr_accessor :item
|
44
|
-
|
45
|
-
# @return [CodeObjects::ExtraFileObject] the file object being rendered.
|
46
|
-
# The +object+ key is not used so that a file may be rendered in the context
|
47
|
-
# of an object's namespace (for generating links).
|
48
|
-
attr_accessor :file
|
49
|
-
|
50
|
-
# @return [String] the current locale
|
51
|
-
attr_accessor :locale
|
52
|
-
end
|
53
|
-
|
54
|
-
# Yardoc is the default YARD CLI command (+yard doc+ and historic +yardoc+
|
55
|
-
# executable) used to generate and output (mainly) HTML documentation given
|
56
|
-
# a set of source files.
|
57
|
-
#
|
58
|
-
# == Usage
|
59
|
-
#
|
60
|
-
# Main usage for this command is:
|
61
|
-
#
|
62
|
-
# $ yardoc [options] [source_files [- extra_files]]
|
63
|
-
#
|
64
|
-
# See +yardoc --help+ for details on valid options.
|
65
|
-
#
|
66
|
-
# == Options File (+.yardopts+)
|
67
|
-
#
|
68
|
-
# If a +.yardopts+ file is found in the source directory being processed,
|
69
|
-
# YARD will use the contents of the file as arguments to the command,
|
70
|
-
# treating newlines as spaces. You can use shell-style quotations to
|
71
|
-
# group space delimited arguments, just like on the command line.
|
72
|
-
#
|
73
|
-
# A valid +.yardopts+ file might look like:
|
74
|
-
#
|
75
|
-
# --no-private
|
76
|
-
# --title "My Title"
|
77
|
-
# --exclude foo --exclude bar
|
78
|
-
# lib/**/*.erb
|
79
|
-
# lib/**/*.rb -
|
80
|
-
# HACKING.rdoc LEGAL COPYRIGHT
|
81
|
-
#
|
82
|
-
# Note that Yardoc also supports the legacy RDoc style +.document+ file,
|
83
|
-
# though this file can only specify source globs to parse, not options.
|
84
|
-
#
|
85
|
-
# == Queries (+--query+)
|
86
|
-
#
|
87
|
-
# Yardoc supports queries to select specific code objects for which to
|
88
|
-
# generate documentation. For example, you might want to generate
|
89
|
-
# documentation only for your public API. If you've documented your public
|
90
|
-
# methods with +@api public+, you can use the following query to select
|
91
|
-
# all of these objects:
|
92
|
-
#
|
93
|
-
# --query '@api.text == "public"'
|
94
|
-
#
|
95
|
-
# Note that the syntax for queries is mostly Ruby with a few syntactic
|
96
|
-
# simplifications for meta-data tags. See the {Verifier} class for an
|
97
|
-
# overview of this syntax.
|
98
|
-
#
|
99
|
-
# == Adding Custom Ad-Hoc Meta-data Tags (+--tag+)
|
100
|
-
#
|
101
|
-
# YARD allows specification of {file:docs/Tags.md meta-data tags}
|
102
|
-
# programmatically via the {YARD::Tags::Library} class, but often this is not
|
103
|
-
# practical for users writing documentation. To make adding custom tags
|
104
|
-
# easier, Yardoc has a few command-line switches for creating basic tags
|
105
|
-
# and displaying them in generated HTML output.
|
106
|
-
#
|
107
|
-
# To specify a custom tag to be displayed in output, use any of the
|
108
|
-
# following:
|
109
|
-
#
|
110
|
-
# * +--tag+ TAG:TITLE
|
111
|
-
# * +--name-tag+ TAG:TITLE
|
112
|
-
# * +--type-tag+ TAG:TITLE
|
113
|
-
# * +--type-name-tag+ TAG:TITLE
|
114
|
-
# * +--title-tag+ TAG:TITLE
|
115
|
-
#
|
116
|
-
# "TAG:TITLE" is of the form: name:"Display Title", for example:
|
117
|
-
#
|
118
|
-
# --tag overload:"Overloaded Method"
|
119
|
-
#
|
120
|
-
# See +yard help doc+ for a description of the various options.
|
121
|
-
#
|
122
|
-
# Tags added in this way are automatically displayed in output. To add
|
123
|
-
# a meta-data tag that does not show up in output, use +--hide-tag TAG+.
|
124
|
-
# Note that you can also use this option on existing tags to hide
|
125
|
-
# builtin tags, for instance.
|
126
|
-
#
|
127
|
-
# == Processed Data Storage (+.yardoc+ directory)
|
128
|
-
#
|
129
|
-
# When Yardoc parses a source directory, it creates a +.yardoc+ directory
|
130
|
-
# (by default, override with +-b+) at the root of the project. This directory
|
131
|
-
# contains marshal dumps for all raw object data in the source, so that
|
132
|
-
# you can access it later for various commands (+stats+, +graph+, etc.).
|
133
|
-
# This directory is also used as a cache for any future calls to +yardoc+
|
134
|
-
# so as to process only the files which have changed since the last call.
|
135
|
-
#
|
136
|
-
# When Yardoc uses the cache in subsequent calls to +yardoc+, methods
|
137
|
-
# or classes that have been deleted from source since the last parsing
|
138
|
-
# will not be erased from the cache (YARD never deletes objects). In such
|
139
|
-
# a case, you should wipe the cache and do a clean parsing of the source tree.
|
140
|
-
# You can do this by deleting the +.yardoc+ directory manually, or running
|
141
|
-
# Yardoc without +--use-cache+ (+-c+).
|
142
|
-
#
|
143
|
-
# @since 0.2.1
|
144
|
-
# @see Verifier
|
145
|
-
class Yardoc < YardoptsCommand
|
146
|
-
# @return [Hash] the hash of options passed to the template.
|
147
|
-
# @see Templates::Engine#render
|
148
|
-
attr_reader :options
|
149
|
-
|
150
|
-
# @return [Array<String>] list of Ruby source files to process
|
151
|
-
attr_accessor :files
|
152
|
-
|
153
|
-
# @return [Array<String>] list of excluded paths (regexp matches)
|
154
|
-
# @since 0.5.3
|
155
|
-
attr_accessor :excluded
|
156
|
-
|
157
|
-
# @return [Boolean] whether to use the existing yardoc db if the
|
158
|
-
# .yardoc already exists. Also makes use of file checksums to
|
159
|
-
# parse only changed files.
|
160
|
-
attr_accessor :use_cache
|
161
|
-
|
162
|
-
# @return [Boolean] whether objects should be serialized to .yardoc db
|
163
|
-
attr_accessor :save_yardoc
|
164
|
-
|
165
|
-
# @return [Boolean] whether to generate output
|
166
|
-
attr_accessor :generate
|
167
|
-
|
168
|
-
# @return [Boolean] whether to print a list of objects
|
169
|
-
# @since 0.5.5
|
170
|
-
attr_accessor :list
|
171
|
-
|
172
|
-
# Keep track of which visibilities are to be shown
|
173
|
-
# @return [Array<Symbol>] a list of visibilities
|
174
|
-
# @since 0.5.6
|
175
|
-
attr_accessor :visibilities
|
176
|
-
|
177
|
-
# Keep track of which APIs are to be shown
|
178
|
-
# @return [Array<String>] a list of APIs
|
179
|
-
# @since 0.8.1
|
180
|
-
attr_accessor :apis
|
181
|
-
|
182
|
-
# Keep track of which APIs are to be hidden
|
183
|
-
# @return [Array<String>] a list of APIs to be hidden
|
184
|
-
# @since 0.8.7
|
185
|
-
attr_accessor :hidden_apis
|
186
|
-
|
187
|
-
# @return [Array<Symbol>] a list of tags to hide from templates
|
188
|
-
# @since 0.6.0
|
189
|
-
attr_accessor :hidden_tags
|
190
|
-
|
191
|
-
# @return [Boolean] whether to print statistics after parsing
|
192
|
-
# @since 0.6.0
|
193
|
-
attr_accessor :statistics
|
194
|
-
|
195
|
-
# @return [Array<String>] a list of assets to copy after generation
|
196
|
-
# @since 0.6.0
|
197
|
-
attr_accessor :assets
|
198
|
-
|
199
|
-
# @return [Boolean] whether markup option was specified
|
200
|
-
# @since 0.7.0
|
201
|
-
attr_accessor :has_markup
|
202
|
-
|
203
|
-
# @return [Boolean] whether yard exits with error status code if a warning occurs
|
204
|
-
attr_accessor :fail_on_warning
|
205
|
-
|
206
|
-
# Creates a new instance of the commandline utility
|
207
|
-
def initialize
|
208
|
-
super
|
209
|
-
@options = YardocOptions.new
|
210
|
-
@options.reset_defaults
|
211
|
-
@visibilities = [:public]
|
212
|
-
@apis = []
|
213
|
-
@hidden_apis = []
|
214
|
-
@assets = {}
|
215
|
-
@excluded = []
|
216
|
-
@files = []
|
217
|
-
@hidden_tags = []
|
218
|
-
@use_cache = false
|
219
|
-
@generate = true
|
220
|
-
@statistics = true
|
221
|
-
@list = false
|
222
|
-
@save_yardoc = true
|
223
|
-
@has_markup = false
|
224
|
-
@fail_on_warning = false
|
225
|
-
|
226
|
-
if defined?(::Encoding) && ::Encoding.respond_to?(:default_external=)
|
227
|
-
utf8 = ::Encoding.find('utf-8')
|
228
|
-
|
229
|
-
::Encoding.default_external = utf8 unless ::Encoding.default_external == utf8
|
230
|
-
::Encoding.default_internal = utf8 unless ::Encoding.default_internal == utf8
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
def description
|
235
|
-
"Generates documentation"
|
236
|
-
end
|
237
|
-
|
238
|
-
# Runs the commandline utility, parsing arguments and generating
|
239
|
-
# output if set.
|
240
|
-
#
|
241
|
-
# @param [Array<String>] args the list of arguments. If the list only
|
242
|
-
# contains a single nil value, skip calling of {#parse_arguments}
|
243
|
-
# @return [void]
|
244
|
-
def run(*args)
|
245
|
-
log.show_progress = true
|
246
|
-
if args.empty? || !args.first.nil?
|
247
|
-
# fail early if arguments are not valid
|
248
|
-
return unless parse_arguments(*args)
|
249
|
-
end
|
250
|
-
|
251
|
-
checksums = nil
|
252
|
-
if use_cache
|
253
|
-
Registry.load
|
254
|
-
checksums = Registry.checksums.dup
|
255
|
-
end
|
256
|
-
|
257
|
-
if save_yardoc
|
258
|
-
Registry.lock_for_writing do
|
259
|
-
YARD.parse(files, excluded)
|
260
|
-
Registry.save(use_cache)
|
261
|
-
end
|
262
|
-
else
|
263
|
-
YARD.parse(files, excluded)
|
264
|
-
end
|
265
|
-
|
266
|
-
if generate
|
267
|
-
run_generate(checksums)
|
268
|
-
copy_assets
|
269
|
-
elsif list
|
270
|
-
print_list
|
271
|
-
end
|
272
|
-
|
273
|
-
if !list && statistics && log.level < Logger::ERROR
|
274
|
-
Registry.load_all
|
275
|
-
log.enter_level(Logger::ERROR) do
|
276
|
-
Stats.new(false).run(*args)
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
abort if fail_on_warning && log.warned
|
281
|
-
|
282
|
-
true
|
283
|
-
ensure
|
284
|
-
log.show_progress = false
|
285
|
-
end
|
286
|
-
|
287
|
-
# Parses commandline arguments
|
288
|
-
# @param [Array<String>] args the list of arguments
|
289
|
-
# @return [Boolean] whether or not arguments are valid
|
290
|
-
# @since 0.5.6
|
291
|
-
def parse_arguments(*args)
|
292
|
-
super(*args)
|
293
|
-
|
294
|
-
# Last minute modifications
|
295
|
-
self.files = Parser::SourceParser::DEFAULT_PATH_GLOB if files.empty?
|
296
|
-
files.delete_if {|x| x =~ /\A\s*\Z/ } # remove empty ones
|
297
|
-
readme = Dir.glob('README{,*[^~]}').first
|
298
|
-
readme ||= Dir.glob(files.first).first if options.onefile
|
299
|
-
options.readme ||= CodeObjects::ExtraFileObject.new(readme) if readme
|
300
|
-
options.files.unshift(options.readme).uniq! if options.readme
|
301
|
-
|
302
|
-
Tags::Library.visible_tags -= hidden_tags
|
303
|
-
add_visibility_verifier
|
304
|
-
add_api_verifier
|
305
|
-
|
306
|
-
apply_locale
|
307
|
-
|
308
|
-
# US-ASCII is invalid encoding for onefile
|
309
|
-
if defined?(::Encoding) && options.onefile
|
310
|
-
if ::Encoding.default_internal == ::Encoding::US_ASCII
|
311
|
-
log.warn "--one-file is not compatible with US-ASCII encoding, using ASCII-8BIT"
|
312
|
-
::Encoding.default_external, ::Encoding.default_internal = ['ascii-8bit'] * 2
|
313
|
-
end
|
314
|
-
end
|
315
|
-
|
316
|
-
if generate && !verify_markup_options
|
317
|
-
false
|
318
|
-
else
|
319
|
-
true
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
# The list of all objects to process. Override this method to change
|
324
|
-
# which objects YARD should generate documentation for.
|
325
|
-
#
|
326
|
-
# @deprecated To hide methods use the +@private+ tag instead.
|
327
|
-
# @return [Array<CodeObjects::Base>] a list of code objects to process
|
328
|
-
def all_objects
|
329
|
-
Registry.all(:root, :module, :class)
|
330
|
-
end
|
331
|
-
|
332
|
-
private
|
333
|
-
|
334
|
-
# Generates output for objects
|
335
|
-
# @param [Hash, nil] checksums if supplied, a list of checkums for files.
|
336
|
-
# @return [void]
|
337
|
-
# @since 0.5.1
|
338
|
-
def run_generate(checksums)
|
339
|
-
if checksums
|
340
|
-
changed_files = []
|
341
|
-
Registry.checksums.each do |file, hash|
|
342
|
-
changed_files << file if checksums[file] != hash
|
343
|
-
end
|
344
|
-
end
|
345
|
-
Registry.load_all if use_cache
|
346
|
-
objects = run_verifier(all_objects).reject do |object|
|
347
|
-
serialized = !options.serializer || options.serializer.exists?(object)
|
348
|
-
if checksums && serialized && !object.files.any? {|f, _line| changed_files.include?(f) }
|
349
|
-
true
|
350
|
-
else
|
351
|
-
log.debug "Re-generating object #{object.path}..."
|
352
|
-
false
|
353
|
-
end
|
354
|
-
end
|
355
|
-
Templates::Engine.generate(objects, options)
|
356
|
-
end
|
357
|
-
|
358
|
-
# Verifies that the markup options are valid before parsing any code.
|
359
|
-
# Failing early is better than failing late.
|
360
|
-
#
|
361
|
-
# @return (see YARD::Templates::Helpers::MarkupHelper#load_markup_provider)
|
362
|
-
def verify_markup_options
|
363
|
-
result = false
|
364
|
-
lvl = has_markup ? log.level : Logger::FATAL
|
365
|
-
obj = Struct.new(:options).new(options)
|
366
|
-
obj.extend(Templates::Helpers::MarkupHelper)
|
367
|
-
options.files.each do |file|
|
368
|
-
markup = file.attributes[:markup] || obj.markup_for_file('', file.filename)
|
369
|
-
result = obj.load_markup_provider(markup)
|
370
|
-
return false if !result && markup != :rdoc
|
371
|
-
end
|
372
|
-
options.markup = :rdoc unless has_markup
|
373
|
-
log.enter_level(lvl) { result = obj.load_markup_provider }
|
374
|
-
if !result && !has_markup
|
375
|
-
log.warn "Could not load default RDoc formatter, " \
|
376
|
-
"ignoring any markup (install RDoc to get default formatting)."
|
377
|
-
options.markup = :none
|
378
|
-
true
|
379
|
-
else
|
380
|
-
result
|
381
|
-
end
|
382
|
-
end
|
383
|
-
|
384
|
-
# Copies any assets to the output directory
|
385
|
-
# @return [void]
|
386
|
-
# @since 0.6.0
|
387
|
-
def copy_assets
|
388
|
-
return unless options.serializer
|
389
|
-
outpath = options.serializer.basepath
|
390
|
-
assets.each do |from, to|
|
391
|
-
to = File.join(outpath, to)
|
392
|
-
log.debug "Copying asset '#{from}' to '#{to}'"
|
393
|
-
from += '/.' if File.directory?(from)
|
394
|
-
FileUtils.cp_r(from, to)
|
395
|
-
end
|
396
|
-
end
|
397
|
-
|
398
|
-
# Prints a list of all objects
|
399
|
-
# @return [void]
|
400
|
-
# @since 0.5.5
|
401
|
-
def print_list
|
402
|
-
Registry.load_all
|
403
|
-
run_verifier(Registry.all).
|
404
|
-
sort_by {|item| [item.file || '', item.line || 0] }.each do |item|
|
405
|
-
log.puts "#{item.file}:#{item.line}: #{item.path}"
|
406
|
-
end
|
407
|
-
end
|
408
|
-
|
409
|
-
# Adds a set of extra documentation files to be processed
|
410
|
-
# @param [Array<String>] files the set of documentation files
|
411
|
-
def add_extra_files(*files)
|
412
|
-
files.map! {|f| f.include?("*") ? Dir.glob(f) : f }.flatten!
|
413
|
-
files.each do |file|
|
414
|
-
if extra_file_valid?(file)
|
415
|
-
options.files << CodeObjects::ExtraFileObject.new(file)
|
416
|
-
end
|
417
|
-
end
|
418
|
-
end
|
419
|
-
|
420
|
-
# @param file [String] the filename to validate
|
421
|
-
# @param check_exists [Boolean] whether the file should exist on disk
|
422
|
-
# @return [Boolean] whether the file is allowed to be used
|
423
|
-
def extra_file_valid?(file, check_exists = true)
|
424
|
-
if file =~ %r{^(?:\.\./|/)}
|
425
|
-
log.warn "Invalid file: #{file}"
|
426
|
-
false
|
427
|
-
elsif check_exists && !File.file?(file)
|
428
|
-
log.warn "Could not find file: #{file}"
|
429
|
-
false
|
430
|
-
else
|
431
|
-
true
|
432
|
-
end
|
433
|
-
end
|
434
|
-
|
435
|
-
# Parses the file arguments into Ruby files and extra files, which are
|
436
|
-
# separated by a '-' element.
|
437
|
-
#
|
438
|
-
# @example Parses a set of Ruby source files
|
439
|
-
# parse_files %w(file1 file2 file3)
|
440
|
-
# @example Parses a set of Ruby files with a separator and extra files
|
441
|
-
# parse_files %w(file1 file2 - extrafile1 extrafile2)
|
442
|
-
# @param [Array<String>] files the list of files to parse
|
443
|
-
# @return [void]
|
444
|
-
def parse_files(*files)
|
445
|
-
seen_extra_files_marker = false
|
446
|
-
|
447
|
-
files.each do |file|
|
448
|
-
if file == "-"
|
449
|
-
seen_extra_files_marker = true
|
450
|
-
next
|
451
|
-
end
|
452
|
-
|
453
|
-
if seen_extra_files_marker
|
454
|
-
add_extra_files(file)
|
455
|
-
else
|
456
|
-
self.files << file
|
457
|
-
end
|
458
|
-
end
|
459
|
-
end
|
460
|
-
|
461
|
-
# Adds verifier rule for visibilities
|
462
|
-
# @return [void]
|
463
|
-
# @since 0.5.6
|
464
|
-
def add_visibility_verifier
|
465
|
-
vis_expr = "#{visibilities.uniq.inspect}.include?(object.visibility)"
|
466
|
-
options.verifier.add_expressions(vis_expr)
|
467
|
-
end
|
468
|
-
|
469
|
-
# Adds verifier rule for APIs
|
470
|
-
# @return [void]
|
471
|
-
# @since 0.8.1
|
472
|
-
def add_api_verifier
|
473
|
-
no_api = true if apis.delete('')
|
474
|
-
exprs = []
|
475
|
-
|
476
|
-
exprs << "#{apis.uniq.inspect}.include?(@api.text)" unless apis.empty?
|
477
|
-
|
478
|
-
unless hidden_apis.empty?
|
479
|
-
exprs << "!#{hidden_apis.uniq.inspect}.include?(@api.text)"
|
480
|
-
end
|
481
|
-
|
482
|
-
exprs = !exprs.empty? ? [exprs.join(' && ')] : []
|
483
|
-
exprs << "!@api" if no_api
|
484
|
-
|
485
|
-
expr = exprs.join(' || ')
|
486
|
-
options.verifier.add_expressions(expr) unless expr.empty?
|
487
|
-
end
|
488
|
-
|
489
|
-
# Applies the specified locale to collected objects
|
490
|
-
# @return [void]
|
491
|
-
# @since 0.8.3
|
492
|
-
def apply_locale
|
493
|
-
YARD::I18n::Locale.default = options.locale
|
494
|
-
options.files.each do |file|
|
495
|
-
file.locale = options.locale
|
496
|
-
end
|
497
|
-
end
|
498
|
-
|
499
|
-
# (see Templates::Helpers::BaseHelper#run_verifier)
|
500
|
-
def run_verifier(list)
|
501
|
-
options.verifier ? options.verifier.run(list) : list
|
502
|
-
end
|
503
|
-
|
504
|
-
# @since 0.6.0
|
505
|
-
def add_tag(tag_data, factory_method = nil)
|
506
|
-
tag, title = *tag_data.split(':')
|
507
|
-
title ||= tag.capitalize
|
508
|
-
Tags::Library.define_tag(title, tag.to_sym, factory_method)
|
509
|
-
Tags::Library.visible_tags |= [tag.to_sym]
|
510
|
-
end
|
511
|
-
|
512
|
-
# Parses commandline options.
|
513
|
-
# @param [Array<String>] args each tokenized argument
|
514
|
-
def optparse(*args)
|
515
|
-
opts = OptionParser.new
|
516
|
-
opts.banner = "Usage: yard doc [options] [source_files [- extra_files]]"
|
517
|
-
|
518
|
-
opts.separator "(if a list of source files is omitted, "
|
519
|
-
opts.separator " {lib,app}/**/*.rb ext/**/*.c is used.)"
|
520
|
-
opts.separator ""
|
521
|
-
opts.separator "Example: yardoc -o documentation/ - FAQ LICENSE"
|
522
|
-
opts.separator " The above example outputs documentation for files in"
|
523
|
-
opts.separator " lib/**/*.rb to documentation/ including the extra files"
|
524
|
-
opts.separator " FAQ and LICENSE."
|
525
|
-
opts.separator ""
|
526
|
-
opts.separator "A base set of options can be specified by adding a .yardopts"
|
527
|
-
opts.separator "file to your base path containing all extra options separated"
|
528
|
-
opts.separator "by whitespace."
|
529
|
-
|
530
|
-
general_options(opts)
|
531
|
-
output_options(opts)
|
532
|
-
tag_options(opts)
|
533
|
-
common_options(opts)
|
534
|
-
parse_options(opts, args)
|
535
|
-
parse_files(*args) unless args.empty?
|
536
|
-
end
|
537
|
-
|
538
|
-
# Adds general options
|
539
|
-
def general_options(opts)
|
540
|
-
opts.separator ""
|
541
|
-
opts.separator "General Options:"
|
542
|
-
|
543
|
-
opts.on('-b', '--db FILE', 'Use a specified .yardoc db to load from or save to',
|
544
|
-
' (defaults to .yardoc)') do |yfile|
|
545
|
-
YARD::Registry.yardoc_file = yfile
|
546
|
-
end
|
547
|
-
|
548
|
-
opts.on('--[no-]single-db', 'Whether code objects should be stored to single',
|
549
|
-
' database file (advanced)') do |use_single_db|
|
550
|
-
Registry.single_object_db = use_single_db
|
551
|
-
end
|
552
|
-
|
553
|
-
opts.on('-n', '--no-output', 'Only generate .yardoc database, no documentation.') do
|
554
|
-
self.generate = false
|
555
|
-
end
|
556
|
-
|
557
|
-
opts.on('-c', '--use-cache [FILE]',
|
558
|
-
"Use the cached .yardoc db to generate documentation.",
|
559
|
-
" (defaults to no cache)") do |file|
|
560
|
-
YARD::Registry.yardoc_file = file if file
|
561
|
-
self.use_cache = true
|
562
|
-
end
|
563
|
-
|
564
|
-
opts.on('--no-cache', "Clear .yardoc db before parsing source.") do
|
565
|
-
self.use_cache = false
|
566
|
-
end
|
567
|
-
|
568
|
-
yardopts_options(opts)
|
569
|
-
|
570
|
-
opts.on('--no-save', 'Do not save the parsed data to the yardoc db') do
|
571
|
-
self.save_yardoc = false
|
572
|
-
end
|
573
|
-
|
574
|
-
opts.on('--exclude REGEXP', 'Ignores a file if it matches path match (regexp)') do |path|
|
575
|
-
excluded << path
|
576
|
-
end
|
577
|
-
|
578
|
-
opts.on('--fail-on-warning', 'Exit with error status code if a warning occurs') do
|
579
|
-
self.fail_on_warning = true
|
580
|
-
end
|
581
|
-
end
|
582
|
-
|
583
|
-
# Adds output options
|
584
|
-
def output_options(opts)
|
585
|
-
opts.separator ""
|
586
|
-
opts.separator "Output options:"
|
587
|
-
|
588
|
-
opts.on('--one-file', 'Generates output as a single file') do
|
589
|
-
options.onefile = true
|
590
|
-
end
|
591
|
-
|
592
|
-
opts.on('--list', 'List objects to standard out (implies -n)') do |_format|
|
593
|
-
self.generate = false
|
594
|
-
self.list = true
|
595
|
-
end
|
596
|
-
|
597
|
-
opts.on('--no-public', "Don't show public methods. (default shows public)") do
|
598
|
-
visibilities.delete(:public)
|
599
|
-
end
|
600
|
-
|
601
|
-
opts.on('--protected', "Show protected methods. (default hides protected)") do
|
602
|
-
visibilities.push(:protected)
|
603
|
-
end
|
604
|
-
|
605
|
-
opts.on('--private', "Show private methods. (default hides private)") do
|
606
|
-
visibilities.push(:private)
|
607
|
-
end
|
608
|
-
|
609
|
-
opts.on('--no-private', "Hide objects with @private tag") do
|
610
|
-
options.verifier.add_expressions '!object.tag(:private) &&
|
611
|
-
(object.namespace.is_a?(CodeObjects::Proxy) || !object.namespace.tag(:private))'
|
612
|
-
end
|
613
|
-
|
614
|
-
opts.on('--[no-]api API', 'Generates documentation for a given API',
|
615
|
-
'(objects which define the correct @api tag).',
|
616
|
-
'If --no-api is given, displays objects with',
|
617
|
-
'no @api tag.') do |api|
|
618
|
-
api = '' if api == false
|
619
|
-
apis.push(api)
|
620
|
-
end
|
621
|
-
|
622
|
-
opts.on('--hide-api API', 'Hides given @api tag from documentation') do |api|
|
623
|
-
hidden_apis.push(api)
|
624
|
-
end
|
625
|
-
|
626
|
-
opts.on('--embed-mixins', "Embeds mixin methods into class documentation") do
|
627
|
-
options.embed_mixins << '*'
|
628
|
-
end
|
629
|
-
|
630
|
-
opts.on('--embed-mixin [MODULE]', "Embeds mixin methods from a particular",
|
631
|
-
" module into class documentation") do |mod|
|
632
|
-
options.embed_mixins << mod
|
633
|
-
end
|
634
|
-
|
635
|
-
opts.on('--no-highlight', "Don't highlight code blocks in output.") do
|
636
|
-
options.highlight = false
|
637
|
-
end
|
638
|
-
|
639
|
-
opts.on('--default-return TYPE', "Shown if method has no return type. ",
|
640
|
-
" (defaults to 'Object')") do |type|
|
641
|
-
options.default_return = type
|
642
|
-
end
|
643
|
-
|
644
|
-
opts.on('--hide-void-return', "Hides return types specified as 'void'. ",
|
645
|
-
" (default is shown)") do
|
646
|
-
options.hide_void_return = true
|
647
|
-
end
|
648
|
-
|
649
|
-
opts.on('--query QUERY', "Only show objects that match a specific query") do |query|
|
650
|
-
next if YARD::Config.options[:safe_mode]
|
651
|
-
options.verifier.add_expressions(query.taint)
|
652
|
-
end
|
653
|
-
|
654
|
-
opts.on('--title TITLE', 'Add a specific title to HTML documents') do |title|
|
655
|
-
options.title = title
|
656
|
-
end
|
657
|
-
|
658
|
-
opts.on('-r', '--readme FILE', '--main FILE', 'The readme file used as the title page',
|
659
|
-
' of documentation.') do |readme|
|
660
|
-
if extra_file_valid?(readme)
|
661
|
-
options.readme = CodeObjects::ExtraFileObject.new(readme)
|
662
|
-
end
|
663
|
-
end
|
664
|
-
|
665
|
-
opts.on('--files FILE1,FILE2,...', 'Any extra comma separated static files to be ',
|
666
|
-
' included (eg. FAQ)') do |files|
|
667
|
-
add_extra_files(*files.split(","))
|
668
|
-
end
|
669
|
-
|
670
|
-
opts.on('--asset FROM[:TO]', 'A file or directory to copy over to output ',
|
671
|
-
' directory after generating') do |asset|
|
672
|
-
from, to = *asset.split(':').map {|f| File.cleanpath(f, true) }
|
673
|
-
to ||= from
|
674
|
-
if extra_file_valid?(from, false) && extra_file_valid?(to, false)
|
675
|
-
assets[from] = to
|
676
|
-
end
|
677
|
-
end
|
678
|
-
|
679
|
-
opts.on('-o', '--output-dir PATH',
|
680
|
-
'The output directory. (defaults to ./doc)') do |dir|
|
681
|
-
options.serializer.basepath = dir
|
682
|
-
end
|
683
|
-
|
684
|
-
opts.on('-m', '--markup MARKUP',
|
685
|
-
'Markup style used in documentation, like textile, ',
|
686
|
-
' markdown or rdoc. (defaults to rdoc)') do |markup|
|
687
|
-
self.has_markup = true
|
688
|
-
options.markup = markup.to_sym
|
689
|
-
end
|
690
|
-
|
691
|
-
opts.on('-M', '--markup-provider MARKUP_PROVIDER',
|
692
|
-
'Overrides the library used to process markup ',
|
693
|
-
' formatting (specify the gem name)') do |markup_provider|
|
694
|
-
options.markup_provider = markup_provider.to_sym
|
695
|
-
end
|
696
|
-
|
697
|
-
opts.on('--charset ENC', 'Character set to use when parsing files ',
|
698
|
-
' (default is system locale)') do |encoding|
|
699
|
-
begin
|
700
|
-
if defined?(Encoding) && Encoding.respond_to?(:default_external=)
|
701
|
-
Encoding.default_external = encoding
|
702
|
-
Encoding.default_internal = encoding
|
703
|
-
end
|
704
|
-
rescue ArgumentError => e
|
705
|
-
raise OptionParser::InvalidOption, e
|
706
|
-
end
|
707
|
-
end
|
708
|
-
|
709
|
-
opts.on('-t', '--template TEMPLATE',
|
710
|
-
'The template to use. (defaults to "default")') do |template|
|
711
|
-
options.template = template.to_sym
|
712
|
-
end
|
713
|
-
|
714
|
-
opts.on('-p', '--template-path PATH',
|
715
|
-
'The template path to look for templates in.',
|
716
|
-
' (used with -t).') do |path|
|
717
|
-
next if YARD::Config.options[:safe_mode]
|
718
|
-
YARD::Templates::Engine.register_template_path(File.expand_path(path))
|
719
|
-
end
|
720
|
-
|
721
|
-
opts.on('-f', '--format FORMAT',
|
722
|
-
'The output format for the template.',
|
723
|
-
' (defaults to html)') do |format|
|
724
|
-
options.format = format.to_sym
|
725
|
-
end
|
726
|
-
|
727
|
-
opts.on('--no-stats', 'Don\'t print statistics') do
|
728
|
-
self.statistics = false
|
729
|
-
end
|
730
|
-
|
731
|
-
opts.on('--no-progress', 'Don\'t show progress bar') do
|
732
|
-
log.show_progress = false
|
733
|
-
end
|
734
|
-
|
735
|
-
opts.on('--locale LOCALE',
|
736
|
-
'The locale for generated documentation.',
|
737
|
-
' (defaults to en)') do |locale|
|
738
|
-
options.locale = locale
|
739
|
-
end
|
740
|
-
|
741
|
-
opts.on('--po-dir DIR',
|
742
|
-
'The directory that has .po files.',
|
743
|
-
" (defaults to #{YARD::Registry.po_dir})") do |dir|
|
744
|
-
YARD::Registry.po_dir = dir
|
745
|
-
end
|
746
|
-
end
|
747
|
-
|
748
|
-
# Adds tag options
|
749
|
-
# @since 0.6.0
|
750
|
-
def tag_options(opts)
|
751
|
-
opts.separator ""
|
752
|
-
opts.separator "Tag options: (TAG:TITLE looks like: 'overload:Overloaded Method')"
|
753
|
-
|
754
|
-
opts.on('--tag TAG:TITLE', 'Registers a new free-form metadata @tag') do |tag|
|
755
|
-
add_tag(tag)
|
756
|
-
end
|
757
|
-
|
758
|
-
opts.on('--type-tag TAG:TITLE', 'Tag with an optional types field') do |tag|
|
759
|
-
add_tag(tag, :with_types)
|
760
|
-
end
|
761
|
-
|
762
|
-
opts.on('--type-name-tag TAG:TITLE', 'Tag with optional types and a name field') do |tag|
|
763
|
-
add_tag(tag, :with_types_and_name)
|
764
|
-
end
|
765
|
-
|
766
|
-
opts.on('--name-tag TAG:TITLE', 'Tag with a name field') do |tag|
|
767
|
-
add_tag(tag, :with_name)
|
768
|
-
end
|
769
|
-
|
770
|
-
opts.on('--title-tag TAG:TITLE', 'Tag with first line as title field') do |tag|
|
771
|
-
add_tag(tag, :with_title_and_text)
|
772
|
-
end
|
773
|
-
|
774
|
-
opts.on('--hide-tag TAG', 'Hides a previously defined tag from templates') do |tag|
|
775
|
-
self.hidden_tags |= [tag.to_sym]
|
776
|
-
end
|
777
|
-
|
778
|
-
opts.on('--transitive-tag TAG', 'Marks a tag as transitive') do |tag|
|
779
|
-
Tags::Library.transitive_tags |= [tag.to_sym]
|
780
|
-
end
|
781
|
-
|
782
|
-
opts.on('--non-transitive-tag TAG', 'Marks a tag as not transitive') do |tag|
|
783
|
-
Tags::Library.transitive_tags -= [tag.to_sym]
|
784
|
-
end
|
785
|
-
end
|
786
|
-
end
|
787
|
-
end
|
788
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'digest/sha1'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
module YARD
|
6
|
+
module CLI
|
7
|
+
# Default options used in +yard doc+ command.
|
8
|
+
class YardocOptions < Templates::TemplateOptions
|
9
|
+
# @return [Array<CodeObjects::ExtraFileObject>]
|
10
|
+
# the list of extra files rendered along with objects
|
11
|
+
default_attr :files, lambda { [] }
|
12
|
+
|
13
|
+
# @return [String] the default title appended to each generated page
|
14
|
+
default_attr :title, "Documentation by YARD #{YARD::VERSION}"
|
15
|
+
|
16
|
+
# @return [Verifier] the default verifier object to filter queries
|
17
|
+
default_attr :verifier, lambda { Verifier.new }
|
18
|
+
|
19
|
+
# @return [Serializers::Base] the default serializer for generating output
|
20
|
+
# to disk.
|
21
|
+
default_attr :serializer, lambda { Serializers::FileSystemSerializer.new }
|
22
|
+
|
23
|
+
# @return [Symbol] the default output format (:html).
|
24
|
+
default_attr :format, :html
|
25
|
+
|
26
|
+
# @return [Boolean] whether the data should be rendered in a single page,
|
27
|
+
# if the template supports it.
|
28
|
+
default_attr :onefile, false
|
29
|
+
|
30
|
+
# @return [CodeObjects::ExtraFileObject] the README file object rendered
|
31
|
+
# along with objects
|
32
|
+
attr_accessor :readme
|
33
|
+
|
34
|
+
# @return [Array<CodeObjects::Base>] the list of code objects to render
|
35
|
+
# the templates with.
|
36
|
+
attr_accessor :objects
|
37
|
+
|
38
|
+
# @return [Numeric] An index value for rendering sequentially related templates
|
39
|
+
attr_accessor :index
|
40
|
+
|
41
|
+
# @return [CodeObjects::Base] an extra item to send to a template that is not
|
42
|
+
# the main rendered object
|
43
|
+
attr_accessor :item
|
44
|
+
|
45
|
+
# @return [CodeObjects::ExtraFileObject] the file object being rendered.
|
46
|
+
# The +object+ key is not used so that a file may be rendered in the context
|
47
|
+
# of an object's namespace (for generating links).
|
48
|
+
attr_accessor :file
|
49
|
+
|
50
|
+
# @return [String] the current locale
|
51
|
+
attr_accessor :locale
|
52
|
+
end
|
53
|
+
|
54
|
+
# Yardoc is the default YARD CLI command (+yard doc+ and historic +yardoc+
|
55
|
+
# executable) used to generate and output (mainly) HTML documentation given
|
56
|
+
# a set of source files.
|
57
|
+
#
|
58
|
+
# == Usage
|
59
|
+
#
|
60
|
+
# Main usage for this command is:
|
61
|
+
#
|
62
|
+
# $ yardoc [options] [source_files [- extra_files]]
|
63
|
+
#
|
64
|
+
# See +yardoc --help+ for details on valid options.
|
65
|
+
#
|
66
|
+
# == Options File (+.yardopts+)
|
67
|
+
#
|
68
|
+
# If a +.yardopts+ file is found in the source directory being processed,
|
69
|
+
# YARD will use the contents of the file as arguments to the command,
|
70
|
+
# treating newlines as spaces. You can use shell-style quotations to
|
71
|
+
# group space delimited arguments, just like on the command line.
|
72
|
+
#
|
73
|
+
# A valid +.yardopts+ file might look like:
|
74
|
+
#
|
75
|
+
# --no-private
|
76
|
+
# --title "My Title"
|
77
|
+
# --exclude foo --exclude bar
|
78
|
+
# lib/**/*.erb
|
79
|
+
# lib/**/*.rb -
|
80
|
+
# HACKING.rdoc LEGAL COPYRIGHT
|
81
|
+
#
|
82
|
+
# Note that Yardoc also supports the legacy RDoc style +.document+ file,
|
83
|
+
# though this file can only specify source globs to parse, not options.
|
84
|
+
#
|
85
|
+
# == Queries (+--query+)
|
86
|
+
#
|
87
|
+
# Yardoc supports queries to select specific code objects for which to
|
88
|
+
# generate documentation. For example, you might want to generate
|
89
|
+
# documentation only for your public API. If you've documented your public
|
90
|
+
# methods with +@api public+, you can use the following query to select
|
91
|
+
# all of these objects:
|
92
|
+
#
|
93
|
+
# --query '@api.text == "public"'
|
94
|
+
#
|
95
|
+
# Note that the syntax for queries is mostly Ruby with a few syntactic
|
96
|
+
# simplifications for meta-data tags. See the {Verifier} class for an
|
97
|
+
# overview of this syntax.
|
98
|
+
#
|
99
|
+
# == Adding Custom Ad-Hoc Meta-data Tags (+--tag+)
|
100
|
+
#
|
101
|
+
# YARD allows specification of {file:docs/Tags.md meta-data tags}
|
102
|
+
# programmatically via the {YARD::Tags::Library} class, but often this is not
|
103
|
+
# practical for users writing documentation. To make adding custom tags
|
104
|
+
# easier, Yardoc has a few command-line switches for creating basic tags
|
105
|
+
# and displaying them in generated HTML output.
|
106
|
+
#
|
107
|
+
# To specify a custom tag to be displayed in output, use any of the
|
108
|
+
# following:
|
109
|
+
#
|
110
|
+
# * +--tag+ TAG:TITLE
|
111
|
+
# * +--name-tag+ TAG:TITLE
|
112
|
+
# * +--type-tag+ TAG:TITLE
|
113
|
+
# * +--type-name-tag+ TAG:TITLE
|
114
|
+
# * +--title-tag+ TAG:TITLE
|
115
|
+
#
|
116
|
+
# "TAG:TITLE" is of the form: name:"Display Title", for example:
|
117
|
+
#
|
118
|
+
# --tag overload:"Overloaded Method"
|
119
|
+
#
|
120
|
+
# See +yard help doc+ for a description of the various options.
|
121
|
+
#
|
122
|
+
# Tags added in this way are automatically displayed in output. To add
|
123
|
+
# a meta-data tag that does not show up in output, use +--hide-tag TAG+.
|
124
|
+
# Note that you can also use this option on existing tags to hide
|
125
|
+
# builtin tags, for instance.
|
126
|
+
#
|
127
|
+
# == Processed Data Storage (+.yardoc+ directory)
|
128
|
+
#
|
129
|
+
# When Yardoc parses a source directory, it creates a +.yardoc+ directory
|
130
|
+
# (by default, override with +-b+) at the root of the project. This directory
|
131
|
+
# contains marshal dumps for all raw object data in the source, so that
|
132
|
+
# you can access it later for various commands (+stats+, +graph+, etc.).
|
133
|
+
# This directory is also used as a cache for any future calls to +yardoc+
|
134
|
+
# so as to process only the files which have changed since the last call.
|
135
|
+
#
|
136
|
+
# When Yardoc uses the cache in subsequent calls to +yardoc+, methods
|
137
|
+
# or classes that have been deleted from source since the last parsing
|
138
|
+
# will not be erased from the cache (YARD never deletes objects). In such
|
139
|
+
# a case, you should wipe the cache and do a clean parsing of the source tree.
|
140
|
+
# You can do this by deleting the +.yardoc+ directory manually, or running
|
141
|
+
# Yardoc without +--use-cache+ (+-c+).
|
142
|
+
#
|
143
|
+
# @since 0.2.1
|
144
|
+
# @see Verifier
|
145
|
+
class Yardoc < YardoptsCommand
|
146
|
+
# @return [Hash] the hash of options passed to the template.
|
147
|
+
# @see Templates::Engine#render
|
148
|
+
attr_reader :options
|
149
|
+
|
150
|
+
# @return [Array<String>] list of Ruby source files to process
|
151
|
+
attr_accessor :files
|
152
|
+
|
153
|
+
# @return [Array<String>] list of excluded paths (regexp matches)
|
154
|
+
# @since 0.5.3
|
155
|
+
attr_accessor :excluded
|
156
|
+
|
157
|
+
# @return [Boolean] whether to use the existing yardoc db if the
|
158
|
+
# .yardoc already exists. Also makes use of file checksums to
|
159
|
+
# parse only changed files.
|
160
|
+
attr_accessor :use_cache
|
161
|
+
|
162
|
+
# @return [Boolean] whether objects should be serialized to .yardoc db
|
163
|
+
attr_accessor :save_yardoc
|
164
|
+
|
165
|
+
# @return [Boolean] whether to generate output
|
166
|
+
attr_accessor :generate
|
167
|
+
|
168
|
+
# @return [Boolean] whether to print a list of objects
|
169
|
+
# @since 0.5.5
|
170
|
+
attr_accessor :list
|
171
|
+
|
172
|
+
# Keep track of which visibilities are to be shown
|
173
|
+
# @return [Array<Symbol>] a list of visibilities
|
174
|
+
# @since 0.5.6
|
175
|
+
attr_accessor :visibilities
|
176
|
+
|
177
|
+
# Keep track of which APIs are to be shown
|
178
|
+
# @return [Array<String>] a list of APIs
|
179
|
+
# @since 0.8.1
|
180
|
+
attr_accessor :apis
|
181
|
+
|
182
|
+
# Keep track of which APIs are to be hidden
|
183
|
+
# @return [Array<String>] a list of APIs to be hidden
|
184
|
+
# @since 0.8.7
|
185
|
+
attr_accessor :hidden_apis
|
186
|
+
|
187
|
+
# @return [Array<Symbol>] a list of tags to hide from templates
|
188
|
+
# @since 0.6.0
|
189
|
+
attr_accessor :hidden_tags
|
190
|
+
|
191
|
+
# @return [Boolean] whether to print statistics after parsing
|
192
|
+
# @since 0.6.0
|
193
|
+
attr_accessor :statistics
|
194
|
+
|
195
|
+
# @return [Array<String>] a list of assets to copy after generation
|
196
|
+
# @since 0.6.0
|
197
|
+
attr_accessor :assets
|
198
|
+
|
199
|
+
# @return [Boolean] whether markup option was specified
|
200
|
+
# @since 0.7.0
|
201
|
+
attr_accessor :has_markup
|
202
|
+
|
203
|
+
# @return [Boolean] whether yard exits with error status code if a warning occurs
|
204
|
+
attr_accessor :fail_on_warning
|
205
|
+
|
206
|
+
# Creates a new instance of the commandline utility
|
207
|
+
def initialize
|
208
|
+
super
|
209
|
+
@options = YardocOptions.new
|
210
|
+
@options.reset_defaults
|
211
|
+
@visibilities = [:public]
|
212
|
+
@apis = []
|
213
|
+
@hidden_apis = []
|
214
|
+
@assets = {}
|
215
|
+
@excluded = []
|
216
|
+
@files = []
|
217
|
+
@hidden_tags = []
|
218
|
+
@use_cache = false
|
219
|
+
@generate = true
|
220
|
+
@statistics = true
|
221
|
+
@list = false
|
222
|
+
@save_yardoc = true
|
223
|
+
@has_markup = false
|
224
|
+
@fail_on_warning = false
|
225
|
+
|
226
|
+
if defined?(::Encoding) && ::Encoding.respond_to?(:default_external=)
|
227
|
+
utf8 = ::Encoding.find('utf-8')
|
228
|
+
|
229
|
+
::Encoding.default_external = utf8 unless ::Encoding.default_external == utf8
|
230
|
+
::Encoding.default_internal = utf8 unless ::Encoding.default_internal == utf8
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
def description
|
235
|
+
"Generates documentation"
|
236
|
+
end
|
237
|
+
|
238
|
+
# Runs the commandline utility, parsing arguments and generating
|
239
|
+
# output if set.
|
240
|
+
#
|
241
|
+
# @param [Array<String>] args the list of arguments. If the list only
|
242
|
+
# contains a single nil value, skip calling of {#parse_arguments}
|
243
|
+
# @return [void]
|
244
|
+
def run(*args)
|
245
|
+
log.show_progress = true
|
246
|
+
if args.empty? || !args.first.nil?
|
247
|
+
# fail early if arguments are not valid
|
248
|
+
return unless parse_arguments(*args)
|
249
|
+
end
|
250
|
+
|
251
|
+
checksums = nil
|
252
|
+
if use_cache
|
253
|
+
Registry.load
|
254
|
+
checksums = Registry.checksums.dup
|
255
|
+
end
|
256
|
+
|
257
|
+
if save_yardoc
|
258
|
+
Registry.lock_for_writing do
|
259
|
+
YARD.parse(files, excluded)
|
260
|
+
Registry.save(use_cache)
|
261
|
+
end
|
262
|
+
else
|
263
|
+
YARD.parse(files, excluded)
|
264
|
+
end
|
265
|
+
|
266
|
+
if generate
|
267
|
+
run_generate(checksums)
|
268
|
+
copy_assets
|
269
|
+
elsif list
|
270
|
+
print_list
|
271
|
+
end
|
272
|
+
|
273
|
+
if !list && statistics && log.level < Logger::ERROR
|
274
|
+
Registry.load_all
|
275
|
+
log.enter_level(Logger::ERROR) do
|
276
|
+
Stats.new(false).run(*args)
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
abort if fail_on_warning && log.warned
|
281
|
+
|
282
|
+
true
|
283
|
+
ensure
|
284
|
+
log.show_progress = false
|
285
|
+
end
|
286
|
+
|
287
|
+
# Parses commandline arguments
|
288
|
+
# @param [Array<String>] args the list of arguments
|
289
|
+
# @return [Boolean] whether or not arguments are valid
|
290
|
+
# @since 0.5.6
|
291
|
+
def parse_arguments(*args)
|
292
|
+
super(*args)
|
293
|
+
|
294
|
+
# Last minute modifications
|
295
|
+
self.files = Parser::SourceParser::DEFAULT_PATH_GLOB if files.empty?
|
296
|
+
files.delete_if {|x| x =~ /\A\s*\Z/ } # remove empty ones
|
297
|
+
readme = Dir.glob('README{,*[^~]}').first
|
298
|
+
readme ||= Dir.glob(files.first).first if options.onefile
|
299
|
+
options.readme ||= CodeObjects::ExtraFileObject.new(readme) if readme
|
300
|
+
options.files.unshift(options.readme).uniq! if options.readme
|
301
|
+
|
302
|
+
Tags::Library.visible_tags -= hidden_tags
|
303
|
+
add_visibility_verifier
|
304
|
+
add_api_verifier
|
305
|
+
|
306
|
+
apply_locale
|
307
|
+
|
308
|
+
# US-ASCII is invalid encoding for onefile
|
309
|
+
if defined?(::Encoding) && options.onefile
|
310
|
+
if ::Encoding.default_internal == ::Encoding::US_ASCII
|
311
|
+
log.warn "--one-file is not compatible with US-ASCII encoding, using ASCII-8BIT"
|
312
|
+
::Encoding.default_external, ::Encoding.default_internal = ['ascii-8bit'] * 2
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
if generate && !verify_markup_options
|
317
|
+
false
|
318
|
+
else
|
319
|
+
true
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
323
|
+
# The list of all objects to process. Override this method to change
|
324
|
+
# which objects YARD should generate documentation for.
|
325
|
+
#
|
326
|
+
# @deprecated To hide methods use the +@private+ tag instead.
|
327
|
+
# @return [Array<CodeObjects::Base>] a list of code objects to process
|
328
|
+
def all_objects
|
329
|
+
Registry.all(:root, :module, :class)
|
330
|
+
end
|
331
|
+
|
332
|
+
private
|
333
|
+
|
334
|
+
# Generates output for objects
|
335
|
+
# @param [Hash, nil] checksums if supplied, a list of checkums for files.
|
336
|
+
# @return [void]
|
337
|
+
# @since 0.5.1
|
338
|
+
def run_generate(checksums)
|
339
|
+
if checksums
|
340
|
+
changed_files = []
|
341
|
+
Registry.checksums.each do |file, hash|
|
342
|
+
changed_files << file if checksums[file] != hash
|
343
|
+
end
|
344
|
+
end
|
345
|
+
Registry.load_all if use_cache
|
346
|
+
objects = run_verifier(all_objects).reject do |object|
|
347
|
+
serialized = !options.serializer || options.serializer.exists?(object)
|
348
|
+
if checksums && serialized && !object.files.any? {|f, _line| changed_files.include?(f) }
|
349
|
+
true
|
350
|
+
else
|
351
|
+
log.debug "Re-generating object #{object.path}..."
|
352
|
+
false
|
353
|
+
end
|
354
|
+
end
|
355
|
+
Templates::Engine.generate(objects, options)
|
356
|
+
end
|
357
|
+
|
358
|
+
# Verifies that the markup options are valid before parsing any code.
|
359
|
+
# Failing early is better than failing late.
|
360
|
+
#
|
361
|
+
# @return (see YARD::Templates::Helpers::MarkupHelper#load_markup_provider)
|
362
|
+
def verify_markup_options
|
363
|
+
result = false
|
364
|
+
lvl = has_markup ? log.level : Logger::FATAL
|
365
|
+
obj = Struct.new(:options).new(options)
|
366
|
+
obj.extend(Templates::Helpers::MarkupHelper)
|
367
|
+
options.files.each do |file|
|
368
|
+
markup = file.attributes[:markup] || obj.markup_for_file('', file.filename)
|
369
|
+
result = obj.load_markup_provider(markup)
|
370
|
+
return false if !result && markup != :rdoc
|
371
|
+
end
|
372
|
+
options.markup = :rdoc unless has_markup
|
373
|
+
log.enter_level(lvl) { result = obj.load_markup_provider }
|
374
|
+
if !result && !has_markup
|
375
|
+
log.warn "Could not load default RDoc formatter, " \
|
376
|
+
"ignoring any markup (install RDoc to get default formatting)."
|
377
|
+
options.markup = :none
|
378
|
+
true
|
379
|
+
else
|
380
|
+
result
|
381
|
+
end
|
382
|
+
end
|
383
|
+
|
384
|
+
# Copies any assets to the output directory
|
385
|
+
# @return [void]
|
386
|
+
# @since 0.6.0
|
387
|
+
def copy_assets
|
388
|
+
return unless options.serializer
|
389
|
+
outpath = options.serializer.basepath
|
390
|
+
assets.each do |from, to|
|
391
|
+
to = File.join(outpath, to)
|
392
|
+
log.debug "Copying asset '#{from}' to '#{to}'"
|
393
|
+
from += '/.' if File.directory?(from)
|
394
|
+
FileUtils.cp_r(from, to)
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|
398
|
+
# Prints a list of all objects
|
399
|
+
# @return [void]
|
400
|
+
# @since 0.5.5
|
401
|
+
def print_list
|
402
|
+
Registry.load_all
|
403
|
+
run_verifier(Registry.all).
|
404
|
+
sort_by {|item| [item.file || '', item.line || 0] }.each do |item|
|
405
|
+
log.puts "#{item.file}:#{item.line}: #{item.path}"
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
409
|
+
# Adds a set of extra documentation files to be processed
|
410
|
+
# @param [Array<String>] files the set of documentation files
|
411
|
+
def add_extra_files(*files)
|
412
|
+
files.map! {|f| f.include?("*") ? Dir.glob(f) : f }.flatten!
|
413
|
+
files.each do |file|
|
414
|
+
if extra_file_valid?(file)
|
415
|
+
options.files << CodeObjects::ExtraFileObject.new(file)
|
416
|
+
end
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
# @param file [String] the filename to validate
|
421
|
+
# @param check_exists [Boolean] whether the file should exist on disk
|
422
|
+
# @return [Boolean] whether the file is allowed to be used
|
423
|
+
def extra_file_valid?(file, check_exists = true)
|
424
|
+
if file =~ %r{^(?:\.\./|/)}
|
425
|
+
log.warn "Invalid file: #{file}"
|
426
|
+
false
|
427
|
+
elsif check_exists && !File.file?(file)
|
428
|
+
log.warn "Could not find file: #{file}"
|
429
|
+
false
|
430
|
+
else
|
431
|
+
true
|
432
|
+
end
|
433
|
+
end
|
434
|
+
|
435
|
+
# Parses the file arguments into Ruby files and extra files, which are
|
436
|
+
# separated by a '-' element.
|
437
|
+
#
|
438
|
+
# @example Parses a set of Ruby source files
|
439
|
+
# parse_files %w(file1 file2 file3)
|
440
|
+
# @example Parses a set of Ruby files with a separator and extra files
|
441
|
+
# parse_files %w(file1 file2 - extrafile1 extrafile2)
|
442
|
+
# @param [Array<String>] files the list of files to parse
|
443
|
+
# @return [void]
|
444
|
+
def parse_files(*files)
|
445
|
+
seen_extra_files_marker = false
|
446
|
+
|
447
|
+
files.each do |file|
|
448
|
+
if file == "-"
|
449
|
+
seen_extra_files_marker = true
|
450
|
+
next
|
451
|
+
end
|
452
|
+
|
453
|
+
if seen_extra_files_marker
|
454
|
+
add_extra_files(file)
|
455
|
+
else
|
456
|
+
self.files << file
|
457
|
+
end
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
# Adds verifier rule for visibilities
|
462
|
+
# @return [void]
|
463
|
+
# @since 0.5.6
|
464
|
+
def add_visibility_verifier
|
465
|
+
vis_expr = "#{visibilities.uniq.inspect}.include?(object.visibility)"
|
466
|
+
options.verifier.add_expressions(vis_expr)
|
467
|
+
end
|
468
|
+
|
469
|
+
# Adds verifier rule for APIs
|
470
|
+
# @return [void]
|
471
|
+
# @since 0.8.1
|
472
|
+
def add_api_verifier
|
473
|
+
no_api = true if apis.delete('')
|
474
|
+
exprs = []
|
475
|
+
|
476
|
+
exprs << "#{apis.uniq.inspect}.include?(@api.text)" unless apis.empty?
|
477
|
+
|
478
|
+
unless hidden_apis.empty?
|
479
|
+
exprs << "!#{hidden_apis.uniq.inspect}.include?(@api.text)"
|
480
|
+
end
|
481
|
+
|
482
|
+
exprs = !exprs.empty? ? [exprs.join(' && ')] : []
|
483
|
+
exprs << "!@api" if no_api
|
484
|
+
|
485
|
+
expr = exprs.join(' || ')
|
486
|
+
options.verifier.add_expressions(expr) unless expr.empty?
|
487
|
+
end
|
488
|
+
|
489
|
+
# Applies the specified locale to collected objects
|
490
|
+
# @return [void]
|
491
|
+
# @since 0.8.3
|
492
|
+
def apply_locale
|
493
|
+
YARD::I18n::Locale.default = options.locale
|
494
|
+
options.files.each do |file|
|
495
|
+
file.locale = options.locale
|
496
|
+
end
|
497
|
+
end
|
498
|
+
|
499
|
+
# (see Templates::Helpers::BaseHelper#run_verifier)
|
500
|
+
def run_verifier(list)
|
501
|
+
options.verifier ? options.verifier.run(list) : list
|
502
|
+
end
|
503
|
+
|
504
|
+
# @since 0.6.0
|
505
|
+
def add_tag(tag_data, factory_method = nil)
|
506
|
+
tag, title = *tag_data.split(':')
|
507
|
+
title ||= tag.capitalize
|
508
|
+
Tags::Library.define_tag(title, tag.to_sym, factory_method)
|
509
|
+
Tags::Library.visible_tags |= [tag.to_sym]
|
510
|
+
end
|
511
|
+
|
512
|
+
# Parses commandline options.
|
513
|
+
# @param [Array<String>] args each tokenized argument
|
514
|
+
def optparse(*args)
|
515
|
+
opts = OptionParser.new
|
516
|
+
opts.banner = "Usage: yard doc [options] [source_files [- extra_files]]"
|
517
|
+
|
518
|
+
opts.separator "(if a list of source files is omitted, "
|
519
|
+
opts.separator " {lib,app}/**/*.rb ext/**/*.{c,rb} is used.)"
|
520
|
+
opts.separator ""
|
521
|
+
opts.separator "Example: yardoc -o documentation/ - FAQ LICENSE"
|
522
|
+
opts.separator " The above example outputs documentation for files in"
|
523
|
+
opts.separator " lib/**/*.rb to documentation/ including the extra files"
|
524
|
+
opts.separator " FAQ and LICENSE."
|
525
|
+
opts.separator ""
|
526
|
+
opts.separator "A base set of options can be specified by adding a .yardopts"
|
527
|
+
opts.separator "file to your base path containing all extra options separated"
|
528
|
+
opts.separator "by whitespace."
|
529
|
+
|
530
|
+
general_options(opts)
|
531
|
+
output_options(opts)
|
532
|
+
tag_options(opts)
|
533
|
+
common_options(opts)
|
534
|
+
parse_options(opts, args)
|
535
|
+
parse_files(*args) unless args.empty?
|
536
|
+
end
|
537
|
+
|
538
|
+
# Adds general options
|
539
|
+
def general_options(opts)
|
540
|
+
opts.separator ""
|
541
|
+
opts.separator "General Options:"
|
542
|
+
|
543
|
+
opts.on('-b', '--db FILE', 'Use a specified .yardoc db to load from or save to',
|
544
|
+
' (defaults to .yardoc)') do |yfile|
|
545
|
+
YARD::Registry.yardoc_file = yfile
|
546
|
+
end
|
547
|
+
|
548
|
+
opts.on('--[no-]single-db', 'Whether code objects should be stored to single',
|
549
|
+
' database file (advanced)') do |use_single_db|
|
550
|
+
Registry.single_object_db = use_single_db
|
551
|
+
end
|
552
|
+
|
553
|
+
opts.on('-n', '--no-output', 'Only generate .yardoc database, no documentation.') do
|
554
|
+
self.generate = false
|
555
|
+
end
|
556
|
+
|
557
|
+
opts.on('-c', '--use-cache [FILE]',
|
558
|
+
"Use the cached .yardoc db to generate documentation.",
|
559
|
+
" (defaults to no cache)") do |file|
|
560
|
+
YARD::Registry.yardoc_file = file if file
|
561
|
+
self.use_cache = true
|
562
|
+
end
|
563
|
+
|
564
|
+
opts.on('--no-cache', "Clear .yardoc db before parsing source.") do
|
565
|
+
self.use_cache = false
|
566
|
+
end
|
567
|
+
|
568
|
+
yardopts_options(opts)
|
569
|
+
|
570
|
+
opts.on('--no-save', 'Do not save the parsed data to the yardoc db') do
|
571
|
+
self.save_yardoc = false
|
572
|
+
end
|
573
|
+
|
574
|
+
opts.on('--exclude REGEXP', 'Ignores a file if it matches path match (regexp)') do |path|
|
575
|
+
excluded << path
|
576
|
+
end
|
577
|
+
|
578
|
+
opts.on('--fail-on-warning', 'Exit with error status code if a warning occurs') do
|
579
|
+
self.fail_on_warning = true
|
580
|
+
end
|
581
|
+
end
|
582
|
+
|
583
|
+
# Adds output options
|
584
|
+
def output_options(opts)
|
585
|
+
opts.separator ""
|
586
|
+
opts.separator "Output options:"
|
587
|
+
|
588
|
+
opts.on('--one-file', 'Generates output as a single file') do
|
589
|
+
options.onefile = true
|
590
|
+
end
|
591
|
+
|
592
|
+
opts.on('--list', 'List objects to standard out (implies -n)') do |_format|
|
593
|
+
self.generate = false
|
594
|
+
self.list = true
|
595
|
+
end
|
596
|
+
|
597
|
+
opts.on('--no-public', "Don't show public methods. (default shows public)") do
|
598
|
+
visibilities.delete(:public)
|
599
|
+
end
|
600
|
+
|
601
|
+
opts.on('--protected', "Show protected methods. (default hides protected)") do
|
602
|
+
visibilities.push(:protected)
|
603
|
+
end
|
604
|
+
|
605
|
+
opts.on('--private', "Show private methods. (default hides private)") do
|
606
|
+
visibilities.push(:private)
|
607
|
+
end
|
608
|
+
|
609
|
+
opts.on('--no-private', "Hide objects with @private tag") do
|
610
|
+
options.verifier.add_expressions '!object.tag(:private) &&
|
611
|
+
(object.namespace.is_a?(CodeObjects::Proxy) || !object.namespace.tag(:private))'
|
612
|
+
end
|
613
|
+
|
614
|
+
opts.on('--[no-]api API', 'Generates documentation for a given API',
|
615
|
+
'(objects which define the correct @api tag).',
|
616
|
+
'If --no-api is given, displays objects with',
|
617
|
+
'no @api tag.') do |api|
|
618
|
+
api = '' if api == false
|
619
|
+
apis.push(api)
|
620
|
+
end
|
621
|
+
|
622
|
+
opts.on('--hide-api API', 'Hides given @api tag from documentation') do |api|
|
623
|
+
hidden_apis.push(api)
|
624
|
+
end
|
625
|
+
|
626
|
+
opts.on('--embed-mixins', "Embeds mixin methods into class documentation") do
|
627
|
+
options.embed_mixins << '*'
|
628
|
+
end
|
629
|
+
|
630
|
+
opts.on('--embed-mixin [MODULE]', "Embeds mixin methods from a particular",
|
631
|
+
" module into class documentation") do |mod|
|
632
|
+
options.embed_mixins << mod
|
633
|
+
end
|
634
|
+
|
635
|
+
opts.on('--no-highlight', "Don't highlight code blocks in output.") do
|
636
|
+
options.highlight = false
|
637
|
+
end
|
638
|
+
|
639
|
+
opts.on('--default-return TYPE', "Shown if method has no return type. ",
|
640
|
+
" (defaults to 'Object')") do |type|
|
641
|
+
options.default_return = type
|
642
|
+
end
|
643
|
+
|
644
|
+
opts.on('--hide-void-return', "Hides return types specified as 'void'. ",
|
645
|
+
" (default is shown)") do
|
646
|
+
options.hide_void_return = true
|
647
|
+
end
|
648
|
+
|
649
|
+
opts.on('--query QUERY', "Only show objects that match a specific query") do |query|
|
650
|
+
next if YARD::Config.options[:safe_mode]
|
651
|
+
options.verifier.add_expressions(query.taint)
|
652
|
+
end
|
653
|
+
|
654
|
+
opts.on('--title TITLE', 'Add a specific title to HTML documents') do |title|
|
655
|
+
options.title = title
|
656
|
+
end
|
657
|
+
|
658
|
+
opts.on('-r', '--readme FILE', '--main FILE', 'The readme file used as the title page',
|
659
|
+
' of documentation.') do |readme|
|
660
|
+
if extra_file_valid?(readme)
|
661
|
+
options.readme = CodeObjects::ExtraFileObject.new(readme)
|
662
|
+
end
|
663
|
+
end
|
664
|
+
|
665
|
+
opts.on('--files FILE1,FILE2,...', 'Any extra comma separated static files to be ',
|
666
|
+
' included (eg. FAQ)') do |files|
|
667
|
+
add_extra_files(*files.split(","))
|
668
|
+
end
|
669
|
+
|
670
|
+
opts.on('--asset FROM[:TO]', 'A file or directory to copy over to output ',
|
671
|
+
' directory after generating') do |asset|
|
672
|
+
from, to = *asset.split(':').map {|f| File.cleanpath(f, true) }
|
673
|
+
to ||= from
|
674
|
+
if extra_file_valid?(from, false) && extra_file_valid?(to, false)
|
675
|
+
assets[from] = to
|
676
|
+
end
|
677
|
+
end
|
678
|
+
|
679
|
+
opts.on('-o', '--output-dir PATH',
|
680
|
+
'The output directory. (defaults to ./doc)') do |dir|
|
681
|
+
options.serializer.basepath = dir
|
682
|
+
end
|
683
|
+
|
684
|
+
opts.on('-m', '--markup MARKUP',
|
685
|
+
'Markup style used in documentation, like textile, ',
|
686
|
+
' markdown or rdoc. (defaults to rdoc)') do |markup|
|
687
|
+
self.has_markup = true
|
688
|
+
options.markup = markup.to_sym
|
689
|
+
end
|
690
|
+
|
691
|
+
opts.on('-M', '--markup-provider MARKUP_PROVIDER',
|
692
|
+
'Overrides the library used to process markup ',
|
693
|
+
' formatting (specify the gem name)') do |markup_provider|
|
694
|
+
options.markup_provider = markup_provider.to_sym
|
695
|
+
end
|
696
|
+
|
697
|
+
opts.on('--charset ENC', 'Character set to use when parsing files ',
|
698
|
+
' (default is system locale)') do |encoding|
|
699
|
+
begin
|
700
|
+
if defined?(Encoding) && Encoding.respond_to?(:default_external=)
|
701
|
+
Encoding.default_external = encoding
|
702
|
+
Encoding.default_internal = encoding
|
703
|
+
end
|
704
|
+
rescue ArgumentError => e
|
705
|
+
raise OptionParser::InvalidOption, e
|
706
|
+
end
|
707
|
+
end
|
708
|
+
|
709
|
+
opts.on('-t', '--template TEMPLATE',
|
710
|
+
'The template to use. (defaults to "default")') do |template|
|
711
|
+
options.template = template.to_sym
|
712
|
+
end
|
713
|
+
|
714
|
+
opts.on('-p', '--template-path PATH',
|
715
|
+
'The template path to look for templates in.',
|
716
|
+
' (used with -t).') do |path|
|
717
|
+
next if YARD::Config.options[:safe_mode]
|
718
|
+
YARD::Templates::Engine.register_template_path(File.expand_path(path))
|
719
|
+
end
|
720
|
+
|
721
|
+
opts.on('-f', '--format FORMAT',
|
722
|
+
'The output format for the template.',
|
723
|
+
' (defaults to html)') do |format|
|
724
|
+
options.format = format.to_sym
|
725
|
+
end
|
726
|
+
|
727
|
+
opts.on('--no-stats', 'Don\'t print statistics') do
|
728
|
+
self.statistics = false
|
729
|
+
end
|
730
|
+
|
731
|
+
opts.on('--no-progress', 'Don\'t show progress bar') do
|
732
|
+
log.show_progress = false
|
733
|
+
end
|
734
|
+
|
735
|
+
opts.on('--locale LOCALE',
|
736
|
+
'The locale for generated documentation.',
|
737
|
+
' (defaults to en)') do |locale|
|
738
|
+
options.locale = locale
|
739
|
+
end
|
740
|
+
|
741
|
+
opts.on('--po-dir DIR',
|
742
|
+
'The directory that has .po files.',
|
743
|
+
" (defaults to #{YARD::Registry.po_dir})") do |dir|
|
744
|
+
YARD::Registry.po_dir = dir
|
745
|
+
end
|
746
|
+
end
|
747
|
+
|
748
|
+
# Adds tag options
|
749
|
+
# @since 0.6.0
|
750
|
+
def tag_options(opts)
|
751
|
+
opts.separator ""
|
752
|
+
opts.separator "Tag options: (TAG:TITLE looks like: 'overload:Overloaded Method')"
|
753
|
+
|
754
|
+
opts.on('--tag TAG:TITLE', 'Registers a new free-form metadata @tag') do |tag|
|
755
|
+
add_tag(tag)
|
756
|
+
end
|
757
|
+
|
758
|
+
opts.on('--type-tag TAG:TITLE', 'Tag with an optional types field') do |tag|
|
759
|
+
add_tag(tag, :with_types)
|
760
|
+
end
|
761
|
+
|
762
|
+
opts.on('--type-name-tag TAG:TITLE', 'Tag with optional types and a name field') do |tag|
|
763
|
+
add_tag(tag, :with_types_and_name)
|
764
|
+
end
|
765
|
+
|
766
|
+
opts.on('--name-tag TAG:TITLE', 'Tag with a name field') do |tag|
|
767
|
+
add_tag(tag, :with_name)
|
768
|
+
end
|
769
|
+
|
770
|
+
opts.on('--title-tag TAG:TITLE', 'Tag with first line as title field') do |tag|
|
771
|
+
add_tag(tag, :with_title_and_text)
|
772
|
+
end
|
773
|
+
|
774
|
+
opts.on('--hide-tag TAG', 'Hides a previously defined tag from templates') do |tag|
|
775
|
+
self.hidden_tags |= [tag.to_sym]
|
776
|
+
end
|
777
|
+
|
778
|
+
opts.on('--transitive-tag TAG', 'Marks a tag as transitive') do |tag|
|
779
|
+
Tags::Library.transitive_tags |= [tag.to_sym]
|
780
|
+
end
|
781
|
+
|
782
|
+
opts.on('--non-transitive-tag TAG', 'Marks a tag as not transitive') do |tag|
|
783
|
+
Tags::Library.transitive_tags -= [tag.to_sym]
|
784
|
+
end
|
785
|
+
end
|
786
|
+
end
|
787
|
+
end
|
788
|
+
end
|