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
@@ -1,172 +1,172 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'ostruct'
|
3
|
-
|
4
|
-
module YARD
|
5
|
-
module CodeObjects
|
6
|
-
# A MacroObject represents a docstring defined through +@!macro NAME+ and can be
|
7
|
-
# reused by specifying the tag +@!macro NAME+. You can also provide the
|
8
|
-
# +attached+ type flag to the macro definition to have it attached to the
|
9
|
-
# specific DSL method so it will be implicitly reused.
|
10
|
-
#
|
11
|
-
# Macros are fully described in the {file:docs/Tags.md#macro Tags Overview}
|
12
|
-
# document.
|
13
|
-
#
|
14
|
-
# @example Creating a basic named macro
|
15
|
-
# # @!macro prop
|
16
|
-
# # @!method $1(${3-})
|
17
|
-
# # @return [$2] the value of the $0
|
18
|
-
# property :foo, String, :a, :b
|
19
|
-
#
|
20
|
-
# # @!macro prop
|
21
|
-
# property :bar, Numeric, :value
|
22
|
-
#
|
23
|
-
# @example Creating a macro that is attached to the method call
|
24
|
-
# # @!macro [attach] prop2
|
25
|
-
# # @!method $1(value)
|
26
|
-
# property :foo
|
27
|
-
#
|
28
|
-
# # Extra data added to docstring
|
29
|
-
# property :bar
|
30
|
-
class MacroObject < Base
|
31
|
-
MACRO_MATCH = /(\\)?\$(?:\{(-?\d+|\*)(-)?(-?\d+)?\}|(-?\d+|\*))/
|
32
|
-
|
33
|
-
class << self
|
34
|
-
# Creates a new macro and fills in the relevant properties.
|
35
|
-
# @param [String] macro_name the name of the macro, must be unique.
|
36
|
-
# @param [String] data the data the macro should expand when re-used
|
37
|
-
# @param [CodeObjects::Base] method_object an object to attach this
|
38
|
-
# macro to. If supplied, {#attached?} will be true
|
39
|
-
# @return [MacroObject] the newly created object
|
40
|
-
def create(macro_name, data, method_object = nil)
|
41
|
-
obj = new(:root, macro_name)
|
42
|
-
obj.macro_data = data
|
43
|
-
obj.method_object = method_object
|
44
|
-
obj
|
45
|
-
end
|
46
|
-
|
47
|
-
# Finds a macro using +macro_name+
|
48
|
-
# @param [#to_s] macro_name the name of the macro
|
49
|
-
# @return [MacroObject] if a macro is found
|
50
|
-
# @return [nil] if there is no registered macro by that name
|
51
|
-
def find(macro_name)
|
52
|
-
Registry.at('.macro.' + macro_name.to_s)
|
53
|
-
end
|
54
|
-
|
55
|
-
# Parses a given docstring and determines if the macro is "new" or
|
56
|
-
# not. If the macro has $variable names or if it has a @!macro tag
|
57
|
-
# with the [new] or [attached] flag, it is considered new.
|
58
|
-
#
|
59
|
-
# If a new macro is found, the macro is created and registered. Otherwise
|
60
|
-
# the macro name is searched and returned. If a macro is not found,
|
61
|
-
# nil is returned.
|
62
|
-
#
|
63
|
-
# @param [#to_s] macro_name the name of the macro
|
64
|
-
# @param [CodeObjects::Base] method_object an optional method to attach
|
65
|
-
# the macro to. Only used if the macro is being created, otherwise
|
66
|
-
# this argument is ignored.
|
67
|
-
# @return [MacroObject] the newly created or existing macro, depending
|
68
|
-
# on whether the @!macro tag was a new tag or not.
|
69
|
-
# @return [nil] if the +data+ has no macro tag or if the macro is
|
70
|
-
# not new and no macro by the macro name is found.
|
71
|
-
def find_or_create(macro_name, data, method_object = nil)
|
72
|
-
find(name) || create(macro_name, data, method_object)
|
73
|
-
end
|
74
|
-
alias create_docstring find_or_create
|
75
|
-
|
76
|
-
# Expands +macro_data+ using the interpolation parameters.
|
77
|
-
#
|
78
|
-
# Interpolation rules:
|
79
|
-
# * $0, $1, $2, ... = the Nth parameter in +call_params+
|
80
|
-
# * $* = the full statement source (excluding block)
|
81
|
-
# * Also supports $!{N-M} ranges, as well as negative indexes on N or M
|
82
|
-
# * Use \$ to escape the variable name in a macro.
|
83
|
-
#
|
84
|
-
# @!macro [new] macro.expand
|
85
|
-
# @param [Array<String>] call_params the method name and parameters
|
86
|
-
# to the method call. These arguments will fill \$0-N
|
87
|
-
# @param [String] full_source the full source line (excluding block)
|
88
|
-
# interpolated as \$*
|
89
|
-
# @param [String] block_source Currently unused. Will support
|
90
|
-
# interpolating the block data as a variable.
|
91
|
-
# @return [String] the expanded macro data
|
92
|
-
# @param [String] macro_data the macro data to expand (taken from {#macro_data})
|
93
|
-
def expand(macro_data, call_params = [], full_source = '', block_source = '') # rubocop:disable Lint/UnusedMethodArgument
|
94
|
-
macro_data = macro_data.all if macro_data.is_a?(Docstring)
|
95
|
-
macro_data.gsub(MACRO_MATCH) do
|
96
|
-
escape = $1
|
97
|
-
first = $2 || $5
|
98
|
-
last = $4
|
99
|
-
rng = $3 ? true : false
|
100
|
-
next $&[1..-1] if escape
|
101
|
-
if first == '*'
|
102
|
-
last ? $& : full_source
|
103
|
-
else
|
104
|
-
first_i = first.to_i
|
105
|
-
last_i = (last ? last.to_i : call_params.size)
|
106
|
-
last_i = first_i unless rng
|
107
|
-
params = call_params[first_i..last_i]
|
108
|
-
params ? params.join(", ") : ''
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
# Applies a macro on a docstring by creating any macro data inside of
|
114
|
-
# the docstring first. Equivalent to calling {find_or_create} and {apply_macro}
|
115
|
-
# on the new macro object.
|
116
|
-
#
|
117
|
-
# @param [Docstring] docstring the docstring to create a macro out of
|
118
|
-
# @!macro macro.expand
|
119
|
-
# @see find_or_create
|
120
|
-
def apply(docstring, call_params = [], full_source = '', block_source = '', _method_object = nil) # rubocop:disable Lint/UnusedMethodArgument
|
121
|
-
docstring = docstring.all if Docstring === docstring
|
122
|
-
parser = Docstring.parser
|
123
|
-
handler = OpenStruct.new
|
124
|
-
handler.call_params = call_params[1..-1]
|
125
|
-
handler.caller_method = call_params.first
|
126
|
-
handler.statement = OpenStruct.new(:source => full_source)
|
127
|
-
parser.parse(docstring, nil, handler).to_docstring.to_raw
|
128
|
-
end
|
129
|
-
|
130
|
-
# Applies a macro to a docstring, interpolating the macro's data on the
|
131
|
-
# docstring and appending any extra local docstring data that was in
|
132
|
-
# the original +docstring+ object.
|
133
|
-
#
|
134
|
-
# @param [MacroObject] macro the macro object
|
135
|
-
# @!macro macro.expand
|
136
|
-
def apply_macro(macro, docstring, call_params = [], full_source = '', block_source = '') # rubocop:disable Lint/UnusedMethodArgument
|
137
|
-
apply(docstring, call_params, full_source, block_source)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
# @return [String] the macro data stored on the object
|
142
|
-
attr_accessor :macro_data
|
143
|
-
|
144
|
-
# @return [CodeObjects::Base] the method object that this macro is
|
145
|
-
# attached to.
|
146
|
-
attr_accessor :method_object
|
147
|
-
|
148
|
-
# @return [Boolean] whether this macro is attached to a method
|
149
|
-
def attached?; method_object ? true : false end
|
150
|
-
|
151
|
-
# Overrides {Base#path} so the macro path is ".macro.MACRONAME"
|
152
|
-
def path; '.macro.' + name.to_s end
|
153
|
-
|
154
|
-
# Overrides the separator to be '.'
|
155
|
-
def sep; '.' end
|
156
|
-
|
157
|
-
# Expands the macro using
|
158
|
-
# @param [Array<String>] call_params a list of tokens that are passed
|
159
|
-
# to the method call
|
160
|
-
# @param [String] full_source the full method call (not including the block)
|
161
|
-
# @param [String] block_source the source passed in the block of the method
|
162
|
-
# call, if there is a block.
|
163
|
-
# @example Expanding a Macro
|
164
|
-
# macro.expand(%w(property foo bar), 'property :foo, :bar', '') #=>
|
165
|
-
# "...macro data interpolating this line of code..."
|
166
|
-
# @see expand
|
167
|
-
def expand(call_params = [], full_source = '', block_source = '')
|
168
|
-
self.class.expand(macro_data, call_params, full_source, block_source)
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module YARD
|
5
|
+
module CodeObjects
|
6
|
+
# A MacroObject represents a docstring defined through +@!macro NAME+ and can be
|
7
|
+
# reused by specifying the tag +@!macro NAME+. You can also provide the
|
8
|
+
# +attached+ type flag to the macro definition to have it attached to the
|
9
|
+
# specific DSL method so it will be implicitly reused.
|
10
|
+
#
|
11
|
+
# Macros are fully described in the {file:docs/Tags.md#macro Tags Overview}
|
12
|
+
# document.
|
13
|
+
#
|
14
|
+
# @example Creating a basic named macro
|
15
|
+
# # @!macro prop
|
16
|
+
# # @!method $1(${3-})
|
17
|
+
# # @return [$2] the value of the $0
|
18
|
+
# property :foo, String, :a, :b
|
19
|
+
#
|
20
|
+
# # @!macro prop
|
21
|
+
# property :bar, Numeric, :value
|
22
|
+
#
|
23
|
+
# @example Creating a macro that is attached to the method call
|
24
|
+
# # @!macro [attach] prop2
|
25
|
+
# # @!method $1(value)
|
26
|
+
# property :foo
|
27
|
+
#
|
28
|
+
# # Extra data added to docstring
|
29
|
+
# property :bar
|
30
|
+
class MacroObject < Base
|
31
|
+
MACRO_MATCH = /(\\)?\$(?:\{(-?\d+|\*)(-)?(-?\d+)?\}|(-?\d+|\*))/
|
32
|
+
|
33
|
+
class << self
|
34
|
+
# Creates a new macro and fills in the relevant properties.
|
35
|
+
# @param [String] macro_name the name of the macro, must be unique.
|
36
|
+
# @param [String] data the data the macro should expand when re-used
|
37
|
+
# @param [CodeObjects::Base] method_object an object to attach this
|
38
|
+
# macro to. If supplied, {#attached?} will be true
|
39
|
+
# @return [MacroObject] the newly created object
|
40
|
+
def create(macro_name, data, method_object = nil)
|
41
|
+
obj = new(:root, macro_name)
|
42
|
+
obj.macro_data = data
|
43
|
+
obj.method_object = method_object
|
44
|
+
obj
|
45
|
+
end
|
46
|
+
|
47
|
+
# Finds a macro using +macro_name+
|
48
|
+
# @param [#to_s] macro_name the name of the macro
|
49
|
+
# @return [MacroObject] if a macro is found
|
50
|
+
# @return [nil] if there is no registered macro by that name
|
51
|
+
def find(macro_name)
|
52
|
+
Registry.at('.macro.' + macro_name.to_s)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Parses a given docstring and determines if the macro is "new" or
|
56
|
+
# not. If the macro has $variable names or if it has a @!macro tag
|
57
|
+
# with the [new] or [attached] flag, it is considered new.
|
58
|
+
#
|
59
|
+
# If a new macro is found, the macro is created and registered. Otherwise
|
60
|
+
# the macro name is searched and returned. If a macro is not found,
|
61
|
+
# nil is returned.
|
62
|
+
#
|
63
|
+
# @param [#to_s] macro_name the name of the macro
|
64
|
+
# @param [CodeObjects::Base] method_object an optional method to attach
|
65
|
+
# the macro to. Only used if the macro is being created, otherwise
|
66
|
+
# this argument is ignored.
|
67
|
+
# @return [MacroObject] the newly created or existing macro, depending
|
68
|
+
# on whether the @!macro tag was a new tag or not.
|
69
|
+
# @return [nil] if the +data+ has no macro tag or if the macro is
|
70
|
+
# not new and no macro by the macro name is found.
|
71
|
+
def find_or_create(macro_name, data, method_object = nil)
|
72
|
+
find(name) || create(macro_name, data, method_object)
|
73
|
+
end
|
74
|
+
alias create_docstring find_or_create
|
75
|
+
|
76
|
+
# Expands +macro_data+ using the interpolation parameters.
|
77
|
+
#
|
78
|
+
# Interpolation rules:
|
79
|
+
# * $0, $1, $2, ... = the Nth parameter in +call_params+
|
80
|
+
# * $* = the full statement source (excluding block)
|
81
|
+
# * Also supports $!{N-M} ranges, as well as negative indexes on N or M
|
82
|
+
# * Use \$ to escape the variable name in a macro.
|
83
|
+
#
|
84
|
+
# @!macro [new] macro.expand
|
85
|
+
# @param [Array<String>] call_params the method name and parameters
|
86
|
+
# to the method call. These arguments will fill \$0-N
|
87
|
+
# @param [String] full_source the full source line (excluding block)
|
88
|
+
# interpolated as \$*
|
89
|
+
# @param [String] block_source Currently unused. Will support
|
90
|
+
# interpolating the block data as a variable.
|
91
|
+
# @return [String] the expanded macro data
|
92
|
+
# @param [String] macro_data the macro data to expand (taken from {#macro_data})
|
93
|
+
def expand(macro_data, call_params = [], full_source = '', block_source = '') # rubocop:disable Lint/UnusedMethodArgument
|
94
|
+
macro_data = macro_data.all if macro_data.is_a?(Docstring)
|
95
|
+
macro_data.gsub(MACRO_MATCH) do
|
96
|
+
escape = $1
|
97
|
+
first = $2 || $5
|
98
|
+
last = $4
|
99
|
+
rng = $3 ? true : false
|
100
|
+
next $&[1..-1] if escape
|
101
|
+
if first == '*'
|
102
|
+
last ? $& : full_source
|
103
|
+
else
|
104
|
+
first_i = first.to_i
|
105
|
+
last_i = (last ? last.to_i : call_params.size)
|
106
|
+
last_i = first_i unless rng
|
107
|
+
params = call_params[first_i..last_i]
|
108
|
+
params ? params.join(", ") : ''
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# Applies a macro on a docstring by creating any macro data inside of
|
114
|
+
# the docstring first. Equivalent to calling {find_or_create} and {apply_macro}
|
115
|
+
# on the new macro object.
|
116
|
+
#
|
117
|
+
# @param [Docstring] docstring the docstring to create a macro out of
|
118
|
+
# @!macro macro.expand
|
119
|
+
# @see find_or_create
|
120
|
+
def apply(docstring, call_params = [], full_source = '', block_source = '', _method_object = nil) # rubocop:disable Lint/UnusedMethodArgument
|
121
|
+
docstring = docstring.all if Docstring === docstring
|
122
|
+
parser = Docstring.parser
|
123
|
+
handler = OpenStruct.new
|
124
|
+
handler.call_params = call_params[1..-1]
|
125
|
+
handler.caller_method = call_params.first
|
126
|
+
handler.statement = OpenStruct.new(:source => full_source)
|
127
|
+
parser.parse(docstring, nil, handler).to_docstring.to_raw
|
128
|
+
end
|
129
|
+
|
130
|
+
# Applies a macro to a docstring, interpolating the macro's data on the
|
131
|
+
# docstring and appending any extra local docstring data that was in
|
132
|
+
# the original +docstring+ object.
|
133
|
+
#
|
134
|
+
# @param [MacroObject] macro the macro object
|
135
|
+
# @!macro macro.expand
|
136
|
+
def apply_macro(macro, docstring, call_params = [], full_source = '', block_source = '') # rubocop:disable Lint/UnusedMethodArgument
|
137
|
+
apply(docstring, call_params, full_source, block_source)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
# @return [String] the macro data stored on the object
|
142
|
+
attr_accessor :macro_data
|
143
|
+
|
144
|
+
# @return [CodeObjects::Base] the method object that this macro is
|
145
|
+
# attached to.
|
146
|
+
attr_accessor :method_object
|
147
|
+
|
148
|
+
# @return [Boolean] whether this macro is attached to a method
|
149
|
+
def attached?; method_object ? true : false end
|
150
|
+
|
151
|
+
# Overrides {Base#path} so the macro path is ".macro.MACRONAME"
|
152
|
+
def path; '.macro.' + name.to_s end
|
153
|
+
|
154
|
+
# Overrides the separator to be '.'
|
155
|
+
def sep; '.' end
|
156
|
+
|
157
|
+
# Expands the macro using
|
158
|
+
# @param [Array<String>] call_params a list of tokens that are passed
|
159
|
+
# to the method call
|
160
|
+
# @param [String] full_source the full method call (not including the block)
|
161
|
+
# @param [String] block_source the source passed in the block of the method
|
162
|
+
# call, if there is a block.
|
163
|
+
# @example Expanding a Macro
|
164
|
+
# macro.expand(%w(property foo bar), 'property :foo, :bar', '') #=>
|
165
|
+
# "...macro data interpolating this line of code..."
|
166
|
+
# @see expand
|
167
|
+
def expand(call_params = [], full_source = '', block_source = '')
|
168
|
+
self.class.expand(macro_data, call_params, full_source, block_source)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
@@ -1,196 +1,196 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module YARD::CodeObjects
|
3
|
-
register_separator CSEP, :method
|
4
|
-
register_separator ISEP, :method
|
5
|
-
|
6
|
-
# Represents a Ruby method in source
|
7
|
-
class MethodObject < Base
|
8
|
-
# The scope of the method (+:class+ or +:instance+)
|
9
|
-
#
|
10
|
-
# @return [Symbol] the scope
|
11
|
-
attr_reader :scope
|
12
|
-
|
13
|
-
# Whether the object is explicitly defined in source or whether it was
|
14
|
-
# inferred by a handler. For instance, attribute methods are generally
|
15
|
-
# inferred and therefore not explicitly defined in source.
|
16
|
-
#
|
17
|
-
# @return [Boolean] whether the object is explicitly defined in source.
|
18
|
-
attr_accessor :explicit
|
19
|
-
|
20
|
-
# Returns the list of parameters parsed out of the method signature
|
21
|
-
# with their default values.
|
22
|
-
#
|
23
|
-
# @return [Array<Array(String, String)>] a list of parameter names followed
|
24
|
-
# by their default values (or nil)
|
25
|
-
attr_accessor :parameters
|
26
|
-
|
27
|
-
# Creates a new method object in +namespace+ with +name+ and an instance
|
28
|
-
# or class +scope+
|
29
|
-
#
|
30
|
-
# If scope is +:module+, this object is instantiated as a public
|
31
|
-
# method in +:class+ scope, but also creates a new (empty) method
|
32
|
-
# as a private +:instance+ method on the same class or module.
|
33
|
-
#
|
34
|
-
# @param [NamespaceObject] namespace the namespace
|
35
|
-
# @param [String, Symbol] name the method name
|
36
|
-
# @param [Symbol] scope +:instance+, +:class+, or +:module+
|
37
|
-
def initialize(namespace, name, scope = :instance, &block)
|
38
|
-
@module_function = false
|
39
|
-
@scope = nil
|
40
|
-
|
41
|
-
# handle module function
|
42
|
-
if scope == :module
|
43
|
-
other = self.class.new(namespace, name, &block)
|
44
|
-
other.visibility = :private
|
45
|
-
scope = :class
|
46
|
-
@module_function = true
|
47
|
-
end
|
48
|
-
|
49
|
-
@visibility = :public
|
50
|
-
self.scope = scope
|
51
|
-
self.parameters = []
|
52
|
-
|
53
|
-
super
|
54
|
-
end
|
55
|
-
|
56
|
-
# Changes the scope of an object from :instance or :class
|
57
|
-
# @param [Symbol] v the new scope
|
58
|
-
def scope=(v)
|
59
|
-
reregister = @scope ? true : false
|
60
|
-
|
61
|
-
# handle module function
|
62
|
-
if v == :module
|
63
|
-
other = self.class.new(namespace, name)
|
64
|
-
other.visibility = :private
|
65
|
-
@visibility = :public
|
66
|
-
@module_function = true
|
67
|
-
@path = nil
|
68
|
-
end
|
69
|
-
|
70
|
-
YARD::Registry.delete(self)
|
71
|
-
@path = nil
|
72
|
-
@scope = v.to_sym
|
73
|
-
@scope = :class if @scope == :module
|
74
|
-
YARD::Registry.register(self) if reregister
|
75
|
-
end
|
76
|
-
|
77
|
-
# @return whether or not the method is the #initialize constructor method
|
78
|
-
def constructor?
|
79
|
-
name == :initialize && scope == :instance && namespace.is_a?(ClassObject)
|
80
|
-
end
|
81
|
-
|
82
|
-
# @return [Boolean] whether or not this method was created as a module
|
83
|
-
# function
|
84
|
-
# @since 0.8.0
|
85
|
-
def module_function?
|
86
|
-
@module_function
|
87
|
-
end
|
88
|
-
|
89
|
-
# Returns the read/writer info for the attribute if it is one
|
90
|
-
# @return [SymbolHash] if there is information about the attribute
|
91
|
-
# @return [nil] if the method is not an attribute
|
92
|
-
# @since 0.5.3
|
93
|
-
def attr_info
|
94
|
-
return nil unless namespace.is_a?(NamespaceObject)
|
95
|
-
namespace.attributes[scope][name.to_s.gsub(/=$/, '')]
|
96
|
-
end
|
97
|
-
|
98
|
-
# @return [Boolean] whether the method is a writer attribute
|
99
|
-
# @since 0.5.3
|
100
|
-
def writer?
|
101
|
-
info = attr_info
|
102
|
-
info && info[:write] == self ? true : false
|
103
|
-
end
|
104
|
-
|
105
|
-
# @return [Boolean] whether the method is a reader attribute
|
106
|
-
# @since 0.5.3
|
107
|
-
def reader?
|
108
|
-
info = attr_info
|
109
|
-
info && info[:read] == self ? true : false
|
110
|
-
end
|
111
|
-
|
112
|
-
# Tests if the object is defined as an attribute in the namespace
|
113
|
-
# @return [Boolean] whether the object is an attribute
|
114
|
-
def is_attribute?
|
115
|
-
info = attr_info
|
116
|
-
if info
|
117
|
-
read_or_write = name.to_s =~ /=$/ ? :write : :read
|
118
|
-
info[read_or_write] ? true : false
|
119
|
-
else
|
120
|
-
false
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
# Tests if the object is defined as an alias of another method
|
125
|
-
# @return [Boolean] whether the object is an alias
|
126
|
-
def is_alias?
|
127
|
-
return false unless namespace.is_a?(NamespaceObject)
|
128
|
-
namespace.aliases.key? self
|
129
|
-
end
|
130
|
-
|
131
|
-
# Tests boolean {#explicit} value.
|
132
|
-
#
|
133
|
-
# @return [Boolean] whether the method is explicitly defined in source
|
134
|
-
def is_explicit?
|
135
|
-
explicit ? true : false
|
136
|
-
end
|
137
|
-
|
138
|
-
# @return [MethodObject] the object that this method overrides
|
139
|
-
# @return [nil] if it does not override a method
|
140
|
-
# @since 0.6.0
|
141
|
-
def overridden_method
|
142
|
-
return nil if namespace.is_a?(Proxy)
|
143
|
-
meths = namespace.meths(:all => true)
|
144
|
-
meths.find {|m| m.path != path && m.name == name && m.scope == scope }
|
145
|
-
end
|
146
|
-
|
147
|
-
# Returns all alias names of the object
|
148
|
-
# @return [Array<Symbol>] the alias names
|
149
|
-
def aliases
|
150
|
-
list = []
|
151
|
-
return list unless namespace.is_a?(NamespaceObject)
|
152
|
-
namespace.aliases.each do |o, aname|
|
153
|
-
list << o if aname == name && o.scope == scope
|
154
|
-
end
|
155
|
-
list
|
156
|
-
end
|
157
|
-
|
158
|
-
# Override path handling for instance methods in the root namespace
|
159
|
-
# (they should still have a separator as a prefix).
|
160
|
-
# @return [String] the path of a method
|
161
|
-
def path
|
162
|
-
@path ||= !namespace || namespace.path == "" ? sep + super : super
|
163
|
-
end
|
164
|
-
|
165
|
-
# Returns the name of the object.
|
166
|
-
#
|
167
|
-
# @example The name of an instance method (with prefix)
|
168
|
-
# an_instance_method.name(true) # => "#mymethod"
|
169
|
-
# @example The name of a class method (with prefix)
|
170
|
-
# a_class_method.name(true) # => "mymethod"
|
171
|
-
# @param [Boolean] prefix whether or not to show the prefix
|
172
|
-
# @return [String] returns {#sep} + +name+ for an instance method if
|
173
|
-
# prefix is true
|
174
|
-
# @return [Symbol] the name without {#sep} if prefix is set to false
|
175
|
-
def name(prefix = false)
|
176
|
-
prefix ? (sep == ISEP ? "#{sep}#{super}" : super.to_s) : super
|
177
|
-
end
|
178
|
-
|
179
|
-
# Override separator to differentiate between class and instance
|
180
|
-
# methods.
|
181
|
-
# @return [String] "#" for an instance method, "." for class
|
182
|
-
def sep
|
183
|
-
if scope == :class
|
184
|
-
namespace && namespace != YARD::Registry.root ? CSEP : NSEP
|
185
|
-
else
|
186
|
-
ISEP
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
protected
|
191
|
-
|
192
|
-
def copyable_attributes
|
193
|
-
super - %w(scope module_function)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module YARD::CodeObjects
|
3
|
+
register_separator CSEP, :method
|
4
|
+
register_separator ISEP, :method
|
5
|
+
|
6
|
+
# Represents a Ruby method in source
|
7
|
+
class MethodObject < Base
|
8
|
+
# The scope of the method (+:class+ or +:instance+)
|
9
|
+
#
|
10
|
+
# @return [Symbol] the scope
|
11
|
+
attr_reader :scope
|
12
|
+
|
13
|
+
# Whether the object is explicitly defined in source or whether it was
|
14
|
+
# inferred by a handler. For instance, attribute methods are generally
|
15
|
+
# inferred and therefore not explicitly defined in source.
|
16
|
+
#
|
17
|
+
# @return [Boolean] whether the object is explicitly defined in source.
|
18
|
+
attr_accessor :explicit
|
19
|
+
|
20
|
+
# Returns the list of parameters parsed out of the method signature
|
21
|
+
# with their default values.
|
22
|
+
#
|
23
|
+
# @return [Array<Array(String, String)>] a list of parameter names followed
|
24
|
+
# by their default values (or nil)
|
25
|
+
attr_accessor :parameters
|
26
|
+
|
27
|
+
# Creates a new method object in +namespace+ with +name+ and an instance
|
28
|
+
# or class +scope+
|
29
|
+
#
|
30
|
+
# If scope is +:module+, this object is instantiated as a public
|
31
|
+
# method in +:class+ scope, but also creates a new (empty) method
|
32
|
+
# as a private +:instance+ method on the same class or module.
|
33
|
+
#
|
34
|
+
# @param [NamespaceObject] namespace the namespace
|
35
|
+
# @param [String, Symbol] name the method name
|
36
|
+
# @param [Symbol] scope +:instance+, +:class+, or +:module+
|
37
|
+
def initialize(namespace, name, scope = :instance, &block)
|
38
|
+
@module_function = false
|
39
|
+
@scope = nil
|
40
|
+
|
41
|
+
# handle module function
|
42
|
+
if scope == :module
|
43
|
+
other = self.class.new(namespace, name, &block)
|
44
|
+
other.visibility = :private
|
45
|
+
scope = :class
|
46
|
+
@module_function = true
|
47
|
+
end
|
48
|
+
|
49
|
+
@visibility = :public
|
50
|
+
self.scope = scope
|
51
|
+
self.parameters = []
|
52
|
+
|
53
|
+
super
|
54
|
+
end
|
55
|
+
|
56
|
+
# Changes the scope of an object from :instance or :class
|
57
|
+
# @param [Symbol] v the new scope
|
58
|
+
def scope=(v)
|
59
|
+
reregister = @scope ? true : false
|
60
|
+
|
61
|
+
# handle module function
|
62
|
+
if v == :module
|
63
|
+
other = self.class.new(namespace, name)
|
64
|
+
other.visibility = :private
|
65
|
+
@visibility = :public
|
66
|
+
@module_function = true
|
67
|
+
@path = nil
|
68
|
+
end
|
69
|
+
|
70
|
+
YARD::Registry.delete(self)
|
71
|
+
@path = nil
|
72
|
+
@scope = v.to_sym
|
73
|
+
@scope = :class if @scope == :module
|
74
|
+
YARD::Registry.register(self) if reregister
|
75
|
+
end
|
76
|
+
|
77
|
+
# @return whether or not the method is the #initialize constructor method
|
78
|
+
def constructor?
|
79
|
+
name == :initialize && scope == :instance && namespace.is_a?(ClassObject)
|
80
|
+
end
|
81
|
+
|
82
|
+
# @return [Boolean] whether or not this method was created as a module
|
83
|
+
# function
|
84
|
+
# @since 0.8.0
|
85
|
+
def module_function?
|
86
|
+
@module_function
|
87
|
+
end
|
88
|
+
|
89
|
+
# Returns the read/writer info for the attribute if it is one
|
90
|
+
# @return [SymbolHash] if there is information about the attribute
|
91
|
+
# @return [nil] if the method is not an attribute
|
92
|
+
# @since 0.5.3
|
93
|
+
def attr_info
|
94
|
+
return nil unless namespace.is_a?(NamespaceObject)
|
95
|
+
namespace.attributes[scope][name.to_s.gsub(/=$/, '')]
|
96
|
+
end
|
97
|
+
|
98
|
+
# @return [Boolean] whether the method is a writer attribute
|
99
|
+
# @since 0.5.3
|
100
|
+
def writer?
|
101
|
+
info = attr_info
|
102
|
+
info && info[:write] == self ? true : false
|
103
|
+
end
|
104
|
+
|
105
|
+
# @return [Boolean] whether the method is a reader attribute
|
106
|
+
# @since 0.5.3
|
107
|
+
def reader?
|
108
|
+
info = attr_info
|
109
|
+
info && info[:read] == self ? true : false
|
110
|
+
end
|
111
|
+
|
112
|
+
# Tests if the object is defined as an attribute in the namespace
|
113
|
+
# @return [Boolean] whether the object is an attribute
|
114
|
+
def is_attribute?
|
115
|
+
info = attr_info
|
116
|
+
if info
|
117
|
+
read_or_write = name.to_s =~ /=$/ ? :write : :read
|
118
|
+
info[read_or_write] ? true : false
|
119
|
+
else
|
120
|
+
false
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Tests if the object is defined as an alias of another method
|
125
|
+
# @return [Boolean] whether the object is an alias
|
126
|
+
def is_alias?
|
127
|
+
return false unless namespace.is_a?(NamespaceObject)
|
128
|
+
namespace.aliases.key? self
|
129
|
+
end
|
130
|
+
|
131
|
+
# Tests boolean {#explicit} value.
|
132
|
+
#
|
133
|
+
# @return [Boolean] whether the method is explicitly defined in source
|
134
|
+
def is_explicit?
|
135
|
+
explicit ? true : false
|
136
|
+
end
|
137
|
+
|
138
|
+
# @return [MethodObject] the object that this method overrides
|
139
|
+
# @return [nil] if it does not override a method
|
140
|
+
# @since 0.6.0
|
141
|
+
def overridden_method
|
142
|
+
return nil if namespace.is_a?(Proxy)
|
143
|
+
meths = namespace.meths(:all => true)
|
144
|
+
meths.find {|m| m.path != path && m.name == name && m.scope == scope }
|
145
|
+
end
|
146
|
+
|
147
|
+
# Returns all alias names of the object
|
148
|
+
# @return [Array<Symbol>] the alias names
|
149
|
+
def aliases
|
150
|
+
list = []
|
151
|
+
return list unless namespace.is_a?(NamespaceObject)
|
152
|
+
namespace.aliases.each do |o, aname|
|
153
|
+
list << o if aname == name && o.scope == scope
|
154
|
+
end
|
155
|
+
list
|
156
|
+
end
|
157
|
+
|
158
|
+
# Override path handling for instance methods in the root namespace
|
159
|
+
# (they should still have a separator as a prefix).
|
160
|
+
# @return [String] the path of a method
|
161
|
+
def path
|
162
|
+
@path ||= !namespace || namespace.path == "" ? sep + super : super
|
163
|
+
end
|
164
|
+
|
165
|
+
# Returns the name of the object.
|
166
|
+
#
|
167
|
+
# @example The name of an instance method (with prefix)
|
168
|
+
# an_instance_method.name(true) # => "#mymethod"
|
169
|
+
# @example The name of a class method (with prefix)
|
170
|
+
# a_class_method.name(true) # => "mymethod"
|
171
|
+
# @param [Boolean] prefix whether or not to show the prefix
|
172
|
+
# @return [String] returns {#sep} + +name+ for an instance method if
|
173
|
+
# prefix is true
|
174
|
+
# @return [Symbol] the name without {#sep} if prefix is set to false
|
175
|
+
def name(prefix = false)
|
176
|
+
prefix ? (sep == ISEP ? "#{sep}#{super}" : super.to_s) : super
|
177
|
+
end
|
178
|
+
|
179
|
+
# Override separator to differentiate between class and instance
|
180
|
+
# methods.
|
181
|
+
# @return [String] "#" for an instance method, "." for class
|
182
|
+
def sep
|
183
|
+
if scope == :class
|
184
|
+
namespace && namespace != YARD::Registry.root ? CSEP : NSEP
|
185
|
+
else
|
186
|
+
ISEP
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
protected
|
191
|
+
|
192
|
+
def copyable_attributes
|
193
|
+
super - %w(scope module_function)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|