deg-yard 0.8.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +39 -0
- data/.yardopts +25 -0
- data/.yardopts_guide +19 -0
- data/.yardopts_i18n +22 -0
- data/Gemfile +35 -0
- data/LEGAL +66 -0
- data/LICENSE +22 -0
- data/README.md +609 -0
- data/Rakefile +66 -0
- data/benchmarks/builtins_vs_eval.rb +23 -0
- data/benchmarks/concat_vs_join.rb +12 -0
- data/benchmarks/erb_vs_erubis.rb +53 -0
- data/benchmarks/format_args.rb +46 -0
- data/benchmarks/generation.rb +37 -0
- data/benchmarks/marshal_vs_dbm.rb +63 -0
- data/benchmarks/parsing.rb +46 -0
- data/benchmarks/pathname_vs_string.rb +50 -0
- data/benchmarks/rdoc_vs_yardoc.rb +10 -0
- data/benchmarks/registry_store_types.rb +48 -0
- data/benchmarks/ri_vs_yri.rb +18 -0
- data/benchmarks/ripper_parser.rb +12 -0
- data/benchmarks/splat_vs_flatten.rb +12 -0
- data/benchmarks/template_erb.rb +22 -0
- data/benchmarks/template_format.rb +6 -0
- data/benchmarks/template_profile.rb +17 -0
- data/benchmarks/yri_cache.rb +19 -0
- data/bin/yard +12 -0
- data/bin/yardoc +12 -0
- data/bin/yri +12 -0
- data/docs/CodeObjects.md +115 -0
- data/docs/GettingStarted.md +592 -0
- data/docs/Handlers.md +152 -0
- data/docs/Overview.md +61 -0
- data/docs/Parser.md +191 -0
- data/docs/Tags.md +282 -0
- data/docs/TagsArch.md +123 -0
- data/docs/Templates.md +496 -0
- data/docs/WhatsNew.md +1244 -0
- data/docs/images/code-objects-class-diagram.png +0 -0
- data/docs/images/handlers-class-diagram.png +0 -0
- data/docs/images/overview-class-diagram.png +0 -0
- data/docs/images/parser-class-diagram.png +0 -0
- data/docs/images/tags-class-diagram.png +0 -0
- data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
- data/docs/templates/default/fulldoc/html/setup.rb +6 -0
- data/docs/templates/default/layout/html/setup.rb +8 -0
- data/docs/templates/default/layout/html/tag_list.erb +11 -0
- data/docs/templates/default/yard_tags/html/list.erb +18 -0
- data/docs/templates/default/yard_tags/html/setup.rb +27 -0
- data/docs/templates/plugin.rb +65 -0
- data/lib/rubygems_plugin.rb +4 -0
- data/lib/yard/autoload.rb +290 -0
- data/lib/yard/cli/command.rb +84 -0
- data/lib/yard/cli/command_parser.rb +92 -0
- data/lib/yard/cli/config.rb +136 -0
- data/lib/yard/cli/diff.rb +270 -0
- data/lib/yard/cli/display.rb +68 -0
- data/lib/yard/cli/gems.rb +83 -0
- data/lib/yard/cli/graph.rb +126 -0
- data/lib/yard/cli/help.rb +18 -0
- data/lib/yard/cli/i18n.rb +69 -0
- data/lib/yard/cli/list.rb +22 -0
- data/lib/yard/cli/markup_types.rb +33 -0
- data/lib/yard/cli/server.rb +253 -0
- data/lib/yard/cli/stats.rb +213 -0
- data/lib/yard/cli/yardoc.rb +752 -0
- data/lib/yard/cli/yardopts_command.rb +109 -0
- data/lib/yard/cli/yri.rb +214 -0
- data/lib/yard/code_objects/base.rb +585 -0
- data/lib/yard/code_objects/class_object.rb +143 -0
- data/lib/yard/code_objects/class_variable_object.rb +8 -0
- data/lib/yard/code_objects/constant_object.rb +13 -0
- data/lib/yard/code_objects/extended_method_object.rb +23 -0
- data/lib/yard/code_objects/extra_file_object.rb +128 -0
- data/lib/yard/code_objects/macro_object.rb +172 -0
- data/lib/yard/code_objects/method_object.rb +191 -0
- data/lib/yard/code_objects/module_object.rb +18 -0
- data/lib/yard/code_objects/namespace_object.rb +200 -0
- data/lib/yard/code_objects/proxy.rb +258 -0
- data/lib/yard/code_objects/root_object.rb +17 -0
- data/lib/yard/config.rb +269 -0
- data/lib/yard/core_ext/array.rb +15 -0
- data/lib/yard/core_ext/file.rb +65 -0
- data/lib/yard/core_ext/hash.rb +15 -0
- data/lib/yard/core_ext/insertion.rb +60 -0
- data/lib/yard/core_ext/module.rb +19 -0
- data/lib/yard/core_ext/string.rb +67 -0
- data/lib/yard/core_ext/symbol_hash.rb +73 -0
- data/lib/yard/docstring.rb +362 -0
- data/lib/yard/docstring_parser.rb +321 -0
- data/lib/yard/globals.rb +18 -0
- data/lib/yard/handlers/base.rb +597 -0
- data/lib/yard/handlers/c/alias_handler.rb +15 -0
- data/lib/yard/handlers/c/attribute_handler.rb +13 -0
- data/lib/yard/handlers/c/base.rb +110 -0
- data/lib/yard/handlers/c/class_handler.rb +26 -0
- data/lib/yard/handlers/c/constant_handler.rb +12 -0
- data/lib/yard/handlers/c/handler_methods.rb +166 -0
- data/lib/yard/handlers/c/init_handler.rb +18 -0
- data/lib/yard/handlers/c/method_handler.rb +35 -0
- data/lib/yard/handlers/c/mixin_handler.rb +13 -0
- data/lib/yard/handlers/c/module_handler.rb +16 -0
- data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
- data/lib/yard/handlers/c/path_handler.rb +10 -0
- data/lib/yard/handlers/c/struct_handler.rb +12 -0
- data/lib/yard/handlers/c/symbol_handler.rb +7 -0
- data/lib/yard/handlers/processor.rb +201 -0
- data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
- data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
- data/lib/yard/handlers/ruby/base.rb +164 -0
- data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
- data/lib/yard/handlers/ruby/class_handler.rb +121 -0
- data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
- data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
- data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
- data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
- data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
- data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
- data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
- data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
- data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
- data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
- data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
- data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
- data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
- data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
- data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
- data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
- data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
- data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
- data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
- data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
- data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
- data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
- data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
- data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
- data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
- data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
- data/lib/yard/handlers/ruby/method_handler.rb +92 -0
- data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
- data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
- data/lib/yard/handlers/ruby/module_handler.rb +11 -0
- data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
- data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
- data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
- data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
- data/lib/yard/i18n/locale.rb +74 -0
- data/lib/yard/i18n/message.rb +56 -0
- data/lib/yard/i18n/messages.rb +55 -0
- data/lib/yard/i18n/pot_generator.rb +280 -0
- data/lib/yard/i18n/text.rb +173 -0
- data/lib/yard/logging.rb +190 -0
- data/lib/yard/options.rb +216 -0
- data/lib/yard/parser/base.rb +56 -0
- data/lib/yard/parser/c/c_parser.rb +231 -0
- data/lib/yard/parser/c/comment_parser.rb +131 -0
- data/lib/yard/parser/c/statement.rb +63 -0
- data/lib/yard/parser/ruby/ast_node.rb +496 -0
- data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
- data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
- data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
- data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
- data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
- data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
- data/lib/yard/parser/source_parser.rb +517 -0
- data/lib/yard/rake/yardoc_task.rb +74 -0
- data/lib/yard/registry.rb +438 -0
- data/lib/yard/registry_store.rb +319 -0
- data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
- data/lib/yard/rubygems/backports/MIT.txt +20 -0
- data/lib/yard/rubygems/backports/gem.rb +9 -0
- data/lib/yard/rubygems/backports/source_index.rb +370 -0
- data/lib/yard/rubygems/backports.rb +8 -0
- data/lib/yard/rubygems/doc_manager.rb +88 -0
- data/lib/yard/rubygems/specification.rb +41 -0
- data/lib/yard/serializers/base.rb +80 -0
- data/lib/yard/serializers/file_system_serializer.rb +90 -0
- data/lib/yard/serializers/process_serializer.rb +24 -0
- data/lib/yard/serializers/stdout_serializer.rb +32 -0
- data/lib/yard/serializers/yardoc_serializer.rb +124 -0
- data/lib/yard/server/adapter.rb +100 -0
- data/lib/yard/server/commands/base.rb +192 -0
- data/lib/yard/server/commands/display_file_command.rb +24 -0
- data/lib/yard/server/commands/display_object_command.rb +58 -0
- data/lib/yard/server/commands/frames_command.rb +15 -0
- data/lib/yard/server/commands/library_command.rb +148 -0
- data/lib/yard/server/commands/library_index_command.rb +24 -0
- data/lib/yard/server/commands/list_command.rb +24 -0
- data/lib/yard/server/commands/search_command.rb +78 -0
- data/lib/yard/server/commands/static_file_command.rb +57 -0
- data/lib/yard/server/doc_server_helper.rb +76 -0
- data/lib/yard/server/doc_server_serializer.rb +33 -0
- data/lib/yard/server/library_version.rb +227 -0
- data/lib/yard/server/rack_adapter.rb +88 -0
- data/lib/yard/server/router.rb +176 -0
- data/lib/yard/server/static_caching.rb +45 -0
- data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
- data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
- data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
- data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
- data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
- data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
- data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
- data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
- data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
- data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
- data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
- data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
- data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
- data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
- data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
- data/lib/yard/server/webrick_adapter.rb +43 -0
- data/lib/yard/server.rb +11 -0
- data/lib/yard/tags/default_factory.rb +176 -0
- data/lib/yard/tags/default_tag.rb +12 -0
- data/lib/yard/tags/directives.rb +599 -0
- data/lib/yard/tags/library.rb +630 -0
- data/lib/yard/tags/option_tag.rb +12 -0
- data/lib/yard/tags/overload_tag.rb +66 -0
- data/lib/yard/tags/ref_tag.rb +7 -0
- data/lib/yard/tags/ref_tag_list.rb +27 -0
- data/lib/yard/tags/tag.rb +57 -0
- data/lib/yard/tags/tag_format_error.rb +6 -0
- data/lib/yard/templates/engine.rb +185 -0
- data/lib/yard/templates/erb_cache.rb +22 -0
- data/lib/yard/templates/helpers/base_helper.rb +212 -0
- data/lib/yard/templates/helpers/filter_helper.rb +26 -0
- data/lib/yard/templates/helpers/html_helper.rb +599 -0
- data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
- data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
- data/lib/yard/templates/helpers/markup_helper.rb +169 -0
- data/lib/yard/templates/helpers/method_helper.rb +74 -0
- data/lib/yard/templates/helpers/module_helper.rb +19 -0
- data/lib/yard/templates/helpers/text_helper.rb +95 -0
- data/lib/yard/templates/helpers/uml_helper.rb +46 -0
- data/lib/yard/templates/section.rb +106 -0
- data/lib/yard/templates/template.rb +407 -0
- data/lib/yard/templates/template_options.rb +88 -0
- data/lib/yard/verifier.rb +148 -0
- data/lib/yard/version.rb +3 -0
- data/lib/yard.rb +71 -0
- data/po/ja.po +31118 -0
- data/spec/cli/command_parser_spec.rb +43 -0
- data/spec/cli/command_spec.rb +36 -0
- data/spec/cli/config_spec.rb +92 -0
- data/spec/cli/diff_spec.rb +260 -0
- data/spec/cli/display_spec.rb +30 -0
- data/spec/cli/gems_spec.rb +81 -0
- data/spec/cli/graph_spec.rb +17 -0
- data/spec/cli/help_spec.rb +22 -0
- data/spec/cli/i18n_spec.rb +111 -0
- data/spec/cli/list_spec.rb +8 -0
- data/spec/cli/markup_types_spec.rb +22 -0
- data/spec/cli/server_spec.rb +327 -0
- data/spec/cli/stats_spec.rb +90 -0
- data/spec/cli/yardoc_spec.rb +804 -0
- data/spec/cli/yri_spec.rb +99 -0
- data/spec/code_objects/base_spec.rb +438 -0
- data/spec/code_objects/class_object_spec.rb +225 -0
- data/spec/code_objects/code_object_list_spec.rb +33 -0
- data/spec/code_objects/constants_spec.rb +82 -0
- data/spec/code_objects/extra_file_object_spec.rb +147 -0
- data/spec/code_objects/macro_object_spec.rb +148 -0
- data/spec/code_objects/method_object_spec.rb +175 -0
- data/spec/code_objects/module_object_spec.rb +141 -0
- data/spec/code_objects/namespace_object_spec.rb +170 -0
- data/spec/code_objects/proxy_spec.rb +140 -0
- data/spec/code_objects/spec_helper.rb +3 -0
- data/spec/config_spec.rb +176 -0
- data/spec/core_ext/array_spec.rb +14 -0
- data/spec/core_ext/file_spec.rb +68 -0
- data/spec/core_ext/hash_spec.rb +14 -0
- data/spec/core_ext/insertion_spec.rb +37 -0
- data/spec/core_ext/module_spec.rb +15 -0
- data/spec/core_ext/string_spec.rb +42 -0
- data/spec/core_ext/symbol_hash_spec.rb +86 -0
- data/spec/docstring_parser_spec.rb +228 -0
- data/spec/docstring_spec.rb +335 -0
- data/spec/handlers/alias_handler_spec.rb +80 -0
- data/spec/handlers/attribute_handler_spec.rb +94 -0
- data/spec/handlers/base_spec.rb +206 -0
- data/spec/handlers/c/alias_handler_spec.rb +33 -0
- data/spec/handlers/c/attribute_handler_spec.rb +40 -0
- data/spec/handlers/c/class_handler_spec.rb +63 -0
- data/spec/handlers/c/constant_handler_spec.rb +68 -0
- data/spec/handlers/c/init_handler_spec.rb +47 -0
- data/spec/handlers/c/method_handler_spec.rb +229 -0
- data/spec/handlers/c/mixin_handler_spec.rb +27 -0
- data/spec/handlers/c/module_handler_spec.rb +38 -0
- data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
- data/spec/handlers/c/path_handler_spec.rb +35 -0
- data/spec/handlers/c/spec_helper.rb +13 -0
- data/spec/handlers/c/struct_handler_spec.rb +15 -0
- data/spec/handlers/class_condition_handler_spec.rb +67 -0
- data/spec/handlers/class_handler_spec.rb +246 -0
- data/spec/handlers/class_variable_handler_spec.rb +11 -0
- data/spec/handlers/constant_handler_spec.rb +64 -0
- data/spec/handlers/dsl_handler_spec.rb +197 -0
- data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
- data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
- data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
- data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
- data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
- data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
- data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
- data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
- data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
- data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
- data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
- data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
- data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
- data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
- data/spec/handlers/exception_handler_spec.rb +48 -0
- data/spec/handlers/extend_handler_spec.rb +23 -0
- data/spec/handlers/legacy_base_spec.rb +128 -0
- data/spec/handlers/method_condition_handler_spec.rb +14 -0
- data/spec/handlers/method_handler_spec.rb +184 -0
- data/spec/handlers/mixin_handler_spec.rb +55 -0
- data/spec/handlers/module_function_handler_spec.rb +105 -0
- data/spec/handlers/module_handler_spec.rb +34 -0
- data/spec/handlers/private_constant_handler_spec.rb +24 -0
- data/spec/handlers/processor_spec.rb +34 -0
- data/spec/handlers/ruby/base_spec.rb +94 -0
- data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
- data/spec/handlers/spec_helper.rb +33 -0
- data/spec/handlers/visibility_handler_spec.rb +39 -0
- data/spec/handlers/yield_handler_spec.rb +51 -0
- data/spec/i18n/locale_spec.rb +68 -0
- data/spec/i18n/message_spec.rb +52 -0
- data/spec/i18n/messages_spec.rb +67 -0
- data/spec/i18n/pot_generator_spec.rb +262 -0
- data/spec/i18n/text_spec.rb +180 -0
- data/spec/logging_spec.rb +35 -0
- data/spec/options_spec.rb +171 -0
- data/spec/parser/base_spec.rb +24 -0
- data/spec/parser/c_parser_spec.rb +171 -0
- data/spec/parser/examples/array.c.txt +3887 -0
- data/spec/parser/examples/example1.rb.txt +8 -0
- data/spec/parser/examples/extrafile.c.txt +8 -0
- data/spec/parser/examples/multifile.c.txt +22 -0
- data/spec/parser/examples/override.c.txt +424 -0
- data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
- data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
- data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
- data/spec/parser/ruby/ast_node_spec.rb +33 -0
- data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
- data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
- data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
- data/spec/parser/source_parser_spec.rb +717 -0
- data/spec/parser/tag_parsing_spec.rb +18 -0
- data/spec/rake/yardoc_task_spec.rb +101 -0
- data/spec/registry_spec.rb +393 -0
- data/spec/registry_store_spec.rb +315 -0
- data/spec/rubygems/doc_manager_spec.rb +112 -0
- data/spec/serializers/data/serialized_yardoc/checksums +1 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
- data/spec/serializers/file_system_serializer_spec.rb +124 -0
- data/spec/serializers/spec_helper.rb +2 -0
- data/spec/serializers/yardoc_serializer_spec.rb +46 -0
- data/spec/server/adapter_spec.rb +38 -0
- data/spec/server/commands/base_spec.rb +87 -0
- data/spec/server/commands/library_command_spec.rb +39 -0
- data/spec/server/commands/static_file_command_spec.rb +84 -0
- data/spec/server/doc_server_helper_spec.rb +53 -0
- data/spec/server/doc_server_serializer_spec.rb +45 -0
- data/spec/server/rack_adapter_spec.rb +20 -0
- data/spec/server/router_spec.rb +122 -0
- data/spec/server/spec_helper.rb +17 -0
- data/spec/server/static_caching_spec.rb +39 -0
- data/spec/server/webrick_servlet_spec.rb +20 -0
- data/spec/server_spec.rb +10 -0
- data/spec/spec_helper.rb +128 -0
- data/spec/tags/default_factory_spec.rb +152 -0
- data/spec/tags/default_tag_spec.rb +11 -0
- data/spec/tags/directives_spec.rb +453 -0
- data/spec/tags/library_spec.rb +34 -0
- data/spec/tags/overload_tag_spec.rb +53 -0
- data/spec/tags/ref_tag_list_spec.rb +53 -0
- data/spec/templates/class_spec.rb +44 -0
- data/spec/templates/constant_spec.rb +40 -0
- data/spec/templates/engine_spec.rb +121 -0
- data/spec/templates/examples/class001.html +280 -0
- data/spec/templates/examples/class001.txt +36 -0
- data/spec/templates/examples/class002.html +35 -0
- data/spec/templates/examples/constant001.txt +25 -0
- data/spec/templates/examples/constant002.txt +7 -0
- data/spec/templates/examples/constant003.txt +11 -0
- data/spec/templates/examples/method001.html +130 -0
- data/spec/templates/examples/method001.txt +35 -0
- data/spec/templates/examples/method002.html +86 -0
- data/spec/templates/examples/method002.txt +20 -0
- data/spec/templates/examples/method003.html +159 -0
- data/spec/templates/examples/method003.txt +45 -0
- data/spec/templates/examples/method004.html +44 -0
- data/spec/templates/examples/method004.txt +10 -0
- data/spec/templates/examples/method005.html +99 -0
- data/spec/templates/examples/method005.txt +33 -0
- data/spec/templates/examples/module001.dot +33 -0
- data/spec/templates/examples/module001.html +825 -0
- data/spec/templates/examples/module001.txt +33 -0
- data/spec/templates/examples/module002.html +318 -0
- data/spec/templates/examples/module003.html +185 -0
- data/spec/templates/examples/module004.html +387 -0
- data/spec/templates/examples/tag001.txt +82 -0
- data/spec/templates/helpers/base_helper_spec.rb +175 -0
- data/spec/templates/helpers/html_helper_spec.rb +612 -0
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
- data/spec/templates/helpers/markup_helper_spec.rb +135 -0
- data/spec/templates/helpers/method_helper_spec.rb +82 -0
- data/spec/templates/helpers/shared_signature_examples.rb +123 -0
- data/spec/templates/helpers/text_helper_spec.rb +44 -0
- data/spec/templates/method_spec.rb +102 -0
- data/spec/templates/module_spec.rb +181 -0
- data/spec/templates/onefile_spec.rb +64 -0
- data/spec/templates/section_spec.rb +146 -0
- data/spec/templates/spec_helper.rb +73 -0
- data/spec/templates/tag_spec.rb +51 -0
- data/spec/templates/template_spec.rb +409 -0
- data/spec/verifier_spec.rb +106 -0
- data/templates/default/class/dot/setup.rb +6 -0
- data/templates/default/class/dot/superklass.erb +3 -0
- data/templates/default/class/html/constructor_details.erb +8 -0
- data/templates/default/class/html/setup.rb +1 -0
- data/templates/default/class/html/subclasses.erb +4 -0
- data/templates/default/class/setup.rb +36 -0
- data/templates/default/class/text/setup.rb +11 -0
- data/templates/default/class/text/subclasses.erb +5 -0
- data/templates/default/constant/text/header.erb +11 -0
- data/templates/default/constant/text/setup.rb +3 -0
- data/templates/default/docstring/html/abstract.erb +4 -0
- data/templates/default/docstring/html/deprecated.erb +1 -0
- data/templates/default/docstring/html/index.erb +5 -0
- data/templates/default/docstring/html/note.erb +6 -0
- data/templates/default/docstring/html/private.erb +4 -0
- data/templates/default/docstring/html/returns_void.erb +1 -0
- data/templates/default/docstring/html/text.erb +1 -0
- data/templates/default/docstring/html/todo.erb +6 -0
- data/templates/default/docstring/setup.rb +51 -0
- data/templates/default/docstring/text/abstract.erb +2 -0
- data/templates/default/docstring/text/deprecated.erb +2 -0
- data/templates/default/docstring/text/index.erb +2 -0
- data/templates/default/docstring/text/note.erb +4 -0
- data/templates/default/docstring/text/private.erb +2 -0
- data/templates/default/docstring/text/returns_void.erb +1 -0
- data/templates/default/docstring/text/text.erb +1 -0
- data/templates/default/docstring/text/todo.erb +4 -0
- data/templates/default/fulldoc/html/css/common.css +1 -0
- data/templates/default/fulldoc/html/css/full_list.css +57 -0
- data/templates/default/fulldoc/html/css/style.css +338 -0
- data/templates/default/fulldoc/html/frames.erb +28 -0
- data/templates/default/fulldoc/html/full_list.erb +40 -0
- data/templates/default/fulldoc/html/full_list_class.erb +2 -0
- data/templates/default/fulldoc/html/full_list_file.erb +5 -0
- data/templates/default/fulldoc/html/full_list_method.erb +8 -0
- data/templates/default/fulldoc/html/js/app.js +214 -0
- data/templates/default/fulldoc/html/js/full_list.js +178 -0
- data/templates/default/fulldoc/html/js/jquery.js +4 -0
- data/templates/default/fulldoc/html/setup.rb +199 -0
- data/templates/default/layout/dot/header.erb +6 -0
- data/templates/default/layout/dot/setup.rb +14 -0
- data/templates/default/layout/html/breadcrumb.erb +13 -0
- data/templates/default/layout/html/files.erb +11 -0
- data/templates/default/layout/html/footer.erb +5 -0
- data/templates/default/layout/html/headers.erb +14 -0
- data/templates/default/layout/html/index.erb +2 -0
- data/templates/default/layout/html/layout.erb +20 -0
- data/templates/default/layout/html/listing.erb +4 -0
- data/templates/default/layout/html/objects.erb +32 -0
- data/templates/default/layout/html/script_setup.erb +5 -0
- data/templates/default/layout/html/search.erb +8 -0
- data/templates/default/layout/html/setup.rb +71 -0
- data/templates/default/method/html/header.erb +16 -0
- data/templates/default/method/setup.rb +3 -0
- data/templates/default/method/text/header.erb +1 -0
- data/templates/default/method_details/html/header.erb +3 -0
- data/templates/default/method_details/html/method_signature.erb +25 -0
- data/templates/default/method_details/html/source.erb +10 -0
- data/templates/default/method_details/setup.rb +10 -0
- data/templates/default/method_details/text/header.erb +10 -0
- data/templates/default/method_details/text/method_signature.erb +12 -0
- data/templates/default/method_details/text/setup.rb +10 -0
- data/templates/default/module/dot/child.erb +1 -0
- data/templates/default/module/dot/dependencies.erb +3 -0
- data/templates/default/module/dot/header.erb +6 -0
- data/templates/default/module/dot/info.erb +14 -0
- data/templates/default/module/dot/setup.rb +14 -0
- data/templates/default/module/html/attribute_details.erb +10 -0
- data/templates/default/module/html/attribute_summary.erb +8 -0
- data/templates/default/module/html/box_info.erb +37 -0
- data/templates/default/module/html/children.erb +8 -0
- data/templates/default/module/html/constant_summary.erb +13 -0
- data/templates/default/module/html/defines.erb +3 -0
- data/templates/default/module/html/header.erb +5 -0
- data/templates/default/module/html/inherited_attributes.erb +14 -0
- data/templates/default/module/html/inherited_constants.erb +8 -0
- data/templates/default/module/html/inherited_methods.erb +19 -0
- data/templates/default/module/html/item_summary.erb +40 -0
- data/templates/default/module/html/method_details_list.erb +9 -0
- data/templates/default/module/html/method_summary.erb +14 -0
- data/templates/default/module/html/methodmissing.erb +12 -0
- data/templates/default/module/html/pre_docstring.erb +1 -0
- data/templates/default/module/setup.rb +164 -0
- data/templates/default/module/text/children.erb +10 -0
- data/templates/default/module/text/class_meths_list.erb +8 -0
- data/templates/default/module/text/extends.erb +8 -0
- data/templates/default/module/text/header.erb +7 -0
- data/templates/default/module/text/includes.erb +8 -0
- data/templates/default/module/text/instance_meths_list.erb +8 -0
- data/templates/default/module/text/setup.rb +12 -0
- data/templates/default/onefile/html/files.erb +5 -0
- data/templates/default/onefile/html/headers.erb +6 -0
- data/templates/default/onefile/html/layout.erb +17 -0
- data/templates/default/onefile/html/readme.erb +3 -0
- data/templates/default/onefile/html/setup.rb +61 -0
- data/templates/default/root/dot/child.erb +3 -0
- data/templates/default/root/dot/setup.rb +5 -0
- data/templates/default/root/html/setup.rb +1 -0
- data/templates/default/tags/html/example.erb +11 -0
- data/templates/default/tags/html/index.erb +3 -0
- data/templates/default/tags/html/option.erb +24 -0
- data/templates/default/tags/html/overload.erb +14 -0
- data/templates/default/tags/html/see.erb +8 -0
- data/templates/default/tags/html/tag.erb +20 -0
- data/templates/default/tags/setup.rb +55 -0
- data/templates/default/tags/text/example.erb +12 -0
- data/templates/default/tags/text/index.erb +1 -0
- data/templates/default/tags/text/option.erb +20 -0
- data/templates/default/tags/text/overload.erb +19 -0
- data/templates/default/tags/text/see.erb +11 -0
- data/templates/default/tags/text/tag.erb +13 -0
- data/templates/guide/class/html/setup.rb +1 -0
- data/templates/guide/docstring/html/setup.rb +1 -0
- data/templates/guide/fulldoc/html/css/style.css +108 -0
- data/templates/guide/fulldoc/html/js/app.js +33 -0
- data/templates/guide/fulldoc/html/setup.rb +73 -0
- data/templates/guide/layout/html/layout.erb +81 -0
- data/templates/guide/layout/html/setup.rb +28 -0
- data/templates/guide/method/html/header.erb +18 -0
- data/templates/guide/method/html/setup.rb +21 -0
- data/templates/guide/module/html/header.erb +7 -0
- data/templates/guide/module/html/method_list.erb +5 -0
- data/templates/guide/module/html/setup.rb +26 -0
- data/templates/guide/onefile/html/files.erb +4 -0
- data/templates/guide/onefile/html/setup.rb +5 -0
- data/templates/guide/onefile/html/toc.erb +3 -0
- data/templates/guide/tags/html/setup.rb +8 -0
- metadata +689 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Handles alias and alias_method calls
|
|
2
|
+
class YARD::Handlers::Ruby::AliasHandler < YARD::Handlers::Ruby::Base
|
|
3
|
+
handles :alias, method_call(:alias_method)
|
|
4
|
+
namespace_only
|
|
5
|
+
|
|
6
|
+
process do
|
|
7
|
+
names = []
|
|
8
|
+
if statement.type == :alias
|
|
9
|
+
names = statement.map {|o| o.jump(:ident, :op, :kw, :const).source }
|
|
10
|
+
elsif statement.call?
|
|
11
|
+
statement.parameters(false).each do |obj|
|
|
12
|
+
case obj.type
|
|
13
|
+
when :symbol_literal
|
|
14
|
+
names << obj.jump(:ident, :op, :kw, :const).source
|
|
15
|
+
when :string_literal
|
|
16
|
+
names << obj.jump(:string_content).source
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
raise YARD::Parser::UndocumentableError, "alias/alias_method" if names.size != 2
|
|
21
|
+
|
|
22
|
+
new_meth, old_meth = names[0].to_sym, names[1].to_sym
|
|
23
|
+
old_obj = namespace.child(:name => old_meth, :scope => scope)
|
|
24
|
+
new_obj = register MethodObject.new(namespace, new_meth, scope) do |o|
|
|
25
|
+
o.add_file(parser.file, statement.line)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
if old_obj
|
|
29
|
+
new_obj.signature = old_obj.signature
|
|
30
|
+
new_obj.source = old_obj.source
|
|
31
|
+
new_obj.docstring = old_obj.docstring + YARD::Docstring.new(statement.comments)
|
|
32
|
+
new_obj.docstring.line_range = statement.comments_range
|
|
33
|
+
new_obj.docstring.hash_flag = statement.comments_hash_flag
|
|
34
|
+
new_obj.docstring.object = new_obj
|
|
35
|
+
else
|
|
36
|
+
new_obj.signature = "def #{new_meth}" # this is all we know.
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
namespace.aliases[new_obj] = old_meth
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Handles +attr_*+ statements in modules/classes
|
|
2
|
+
class YARD::Handlers::Ruby::AttributeHandler < YARD::Handlers::Ruby::Base
|
|
3
|
+
handles method_call(:attr)
|
|
4
|
+
handles method_call(:attr_reader)
|
|
5
|
+
handles method_call(:attr_writer)
|
|
6
|
+
handles method_call(:attr_accessor)
|
|
7
|
+
namespace_only
|
|
8
|
+
|
|
9
|
+
process do
|
|
10
|
+
return if statement.type == :var_ref || statement.type == :vcall
|
|
11
|
+
read, write = true, false
|
|
12
|
+
params = statement.parameters(false).dup
|
|
13
|
+
|
|
14
|
+
# Change read/write based on attr_reader/writer/accessor
|
|
15
|
+
case statement.method_name(true)
|
|
16
|
+
when :attr
|
|
17
|
+
# In the case of 'attr', the second parameter (if given) isn't a symbol.
|
|
18
|
+
if params.size == 2
|
|
19
|
+
write = true if params.pop == s(:var_ref, s(:kw, "true"))
|
|
20
|
+
end
|
|
21
|
+
when :attr_accessor
|
|
22
|
+
write = true
|
|
23
|
+
when :attr_reader
|
|
24
|
+
# change nothing
|
|
25
|
+
when :attr_writer
|
|
26
|
+
read, write = false, true
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Add all attributes
|
|
30
|
+
validated_attribute_names(params).each do |name|
|
|
31
|
+
namespace.attributes[scope][name] ||= SymbolHash[:read => nil, :write => nil]
|
|
32
|
+
|
|
33
|
+
# Show their methods as well
|
|
34
|
+
{:read => name, :write => "#{name}="}.each do |type, meth|
|
|
35
|
+
if (type == :read ? read : write)
|
|
36
|
+
o = MethodObject.new(namespace, meth, scope)
|
|
37
|
+
if type == :write
|
|
38
|
+
o.parameters = [['value', nil]]
|
|
39
|
+
src = "def #{meth}(value)"
|
|
40
|
+
full_src = "#{src}\n @#{name} = value\nend"
|
|
41
|
+
doc = "Sets the attribute #{name}\n@param value the value to set the attribute #{name} to."
|
|
42
|
+
else
|
|
43
|
+
src = "def #{meth}"
|
|
44
|
+
full_src = "#{src}\n @#{name}\nend"
|
|
45
|
+
doc = "Returns the value of attribute #{name}"
|
|
46
|
+
end
|
|
47
|
+
o.source ||= full_src
|
|
48
|
+
o.signature ||= src
|
|
49
|
+
register(o)
|
|
50
|
+
o.docstring = doc if o.docstring.blank?(false)
|
|
51
|
+
|
|
52
|
+
# Regsiter the object explicitly
|
|
53
|
+
namespace.attributes[scope][name][type] = o
|
|
54
|
+
elsif obj = namespace.children.find {|o| o.name == meth.to_sym && o.scope == scope }
|
|
55
|
+
# register an existing method as attribute
|
|
56
|
+
namespace.attributes[scope][name][type] = obj
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
protected
|
|
63
|
+
|
|
64
|
+
# Strips out any non-essential arguments from the attr statement.
|
|
65
|
+
#
|
|
66
|
+
# @param [Array<Parser::Ruby::AstNode>] params a list of the parameters
|
|
67
|
+
# in the attr call.
|
|
68
|
+
# @return [Array<String>] the validated attribute names
|
|
69
|
+
# @raise [Parser::UndocumentableError] if the arguments are not valid.
|
|
70
|
+
def validated_attribute_names(params)
|
|
71
|
+
params.map do |obj|
|
|
72
|
+
case obj.type
|
|
73
|
+
when :symbol_literal
|
|
74
|
+
obj.jump(:ident, :op, :kw, :const).source
|
|
75
|
+
when :string_literal
|
|
76
|
+
obj.jump(:string_content).source
|
|
77
|
+
else
|
|
78
|
+
raise YARD::Parser::UndocumentableError, obj.source
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
module YARD
|
|
2
|
+
module Handlers
|
|
3
|
+
module Ruby
|
|
4
|
+
# To implement a custom handler matcher, subclass this class and implement
|
|
5
|
+
# {#matches?} to return whether a node matches the handler.
|
|
6
|
+
#
|
|
7
|
+
# @example A Custom Handler Matcher Extension
|
|
8
|
+
# # Implements a handler that checks for a specific string
|
|
9
|
+
# # in the node's source.
|
|
10
|
+
# class MyExtension < HandlesExtension
|
|
11
|
+
# def matches?(node) node.source.include?(name) end
|
|
12
|
+
# end
|
|
13
|
+
#
|
|
14
|
+
# # This handler will handle any node where the source includes 'foo'
|
|
15
|
+
# class MyHandler < Handlers::Ruby::Base
|
|
16
|
+
# handles MyExtension.new('foo')
|
|
17
|
+
# end
|
|
18
|
+
class HandlesExtension
|
|
19
|
+
# Creates a new extension with a specific matcher value +name+
|
|
20
|
+
# @param [Object] name the matcher value to check against {#matches?}
|
|
21
|
+
def initialize(name) @name = name end
|
|
22
|
+
|
|
23
|
+
# Tests if the node matches the handler
|
|
24
|
+
# @param [Parser::Ruby::AstNode] node a Ruby node
|
|
25
|
+
# @return [Boolean] whether the +node+ matches the handler
|
|
26
|
+
def matches?(node) raise NotImplementedError end
|
|
27
|
+
|
|
28
|
+
protected
|
|
29
|
+
|
|
30
|
+
# @return [String] the extension matcher value
|
|
31
|
+
attr_reader :name
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class MethodCallWrapper < HandlesExtension
|
|
35
|
+
def matches?(node)
|
|
36
|
+
case node.type
|
|
37
|
+
when :var_ref
|
|
38
|
+
if !node.parent || node.parent.type == :list
|
|
39
|
+
return true if node[0].type == :ident && (name.nil? || node[0][0] == name)
|
|
40
|
+
end
|
|
41
|
+
when :fcall, :command, :vcall
|
|
42
|
+
return true if name.nil? || node[0][0] == name
|
|
43
|
+
when :call, :command_call
|
|
44
|
+
return true if name.nil? || node[2][0] == name
|
|
45
|
+
end
|
|
46
|
+
false
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class TestNodeWrapper < HandlesExtension
|
|
51
|
+
def matches?(node) !node.send(name).is_a?(FalseClass) end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# This is the base handler class for the new-style (1.9) Ruby parser.
|
|
55
|
+
# All handlers that subclass this base class will be used when the
|
|
56
|
+
# new-style parser is used. For implementing legacy handlers, see
|
|
57
|
+
# {Legacy::Base}.
|
|
58
|
+
#
|
|
59
|
+
# @abstract See {Handlers::Base} for subclassing information.
|
|
60
|
+
# @see Handlers::Base
|
|
61
|
+
# @see Legacy::Base
|
|
62
|
+
class Base < Handlers::Base
|
|
63
|
+
class << self
|
|
64
|
+
include Parser::Ruby
|
|
65
|
+
|
|
66
|
+
# @group Statement Matcher Extensions
|
|
67
|
+
|
|
68
|
+
# Matcher for handling any type of method call. Method calls can
|
|
69
|
+
# be expressed by many {AstNode} types depending on the syntax
|
|
70
|
+
# with which it is called, so YARD allows you to use this matcher
|
|
71
|
+
# to simplify matching a method call.
|
|
72
|
+
#
|
|
73
|
+
# @example Match the "describe" method call
|
|
74
|
+
# handles method_call(:describe)
|
|
75
|
+
#
|
|
76
|
+
# # The following will be matched:
|
|
77
|
+
# # describe(...)
|
|
78
|
+
# # object.describe(...)
|
|
79
|
+
# # describe "argument" do ... end
|
|
80
|
+
#
|
|
81
|
+
# @param [#to_s] name matches the method call of this name
|
|
82
|
+
# @return [void]
|
|
83
|
+
def method_call(name = nil)
|
|
84
|
+
MethodCallWrapper.new(name ? name.to_s : nil)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Matcher for handling a node with a specific meta-type. An {AstNode}
|
|
88
|
+
# has a {AstNode#type} to define its type but can also be associated
|
|
89
|
+
# with a set of types. For instance, +:if+ and +:unless+ are both
|
|
90
|
+
# of the meta-type +:condition+.
|
|
91
|
+
#
|
|
92
|
+
# A meta-type is any method on the {AstNode} class ending in "?",
|
|
93
|
+
# though you should not include the "?" suffix in your declaration.
|
|
94
|
+
# Some examples are: "condition", "call", "literal", "kw", "token",
|
|
95
|
+
# "ref".
|
|
96
|
+
#
|
|
97
|
+
# @example Handling any conditional statement (if, unless)
|
|
98
|
+
# handles meta_type(:condition)
|
|
99
|
+
# @param [Symbol] type the meta-type to match. A meta-type can be
|
|
100
|
+
# any method name + "?" that {AstNode} responds to.
|
|
101
|
+
# @return [void]
|
|
102
|
+
def meta_type(type)
|
|
103
|
+
TestNodeWrapper.new(type.to_s + "?")
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# @group Testing for a Handler
|
|
107
|
+
|
|
108
|
+
# @return [Boolean] whether or not an {AstNode} object should be
|
|
109
|
+
# handled by this handler
|
|
110
|
+
def handles?(node)
|
|
111
|
+
handlers.any? do |a_handler|
|
|
112
|
+
case a_handler
|
|
113
|
+
when Symbol
|
|
114
|
+
a_handler == node.type
|
|
115
|
+
when String
|
|
116
|
+
node.source == a_handler
|
|
117
|
+
when Regexp
|
|
118
|
+
node.source =~ a_handler
|
|
119
|
+
when Parser::Ruby::AstNode
|
|
120
|
+
a_handler == node
|
|
121
|
+
when HandlesExtension
|
|
122
|
+
a_handler.matches?(node)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
include Parser::Ruby
|
|
129
|
+
|
|
130
|
+
# @group Parsing an Inner Block
|
|
131
|
+
|
|
132
|
+
def parse_block(inner_node, opts = {})
|
|
133
|
+
push_state(opts) do
|
|
134
|
+
nodes = inner_node.type == :list ? inner_node.children : [inner_node]
|
|
135
|
+
parser.process(nodes)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# @group Macro Handling
|
|
140
|
+
|
|
141
|
+
def call_params
|
|
142
|
+
return [] unless statement.respond_to?(:parameters)
|
|
143
|
+
statement.parameters(false).compact.map do |param|
|
|
144
|
+
if param.type == :list
|
|
145
|
+
param.map {|n| n.jump(:ident, :kw, :tstring_content).source }
|
|
146
|
+
else
|
|
147
|
+
param.jump(:ident, :kw, :tstring_content).source
|
|
148
|
+
end
|
|
149
|
+
end.flatten
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def caller_method
|
|
153
|
+
if statement.call? || statement.def?
|
|
154
|
+
statement.method_name(true).to_s
|
|
155
|
+
elsif statement.type == :var_ref || statement.type == :vcall
|
|
156
|
+
statement[0].jump(:ident, :kw).source
|
|
157
|
+
else
|
|
158
|
+
nil
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Matches if/unless conditions inside classes and attempts to process only
|
|
2
|
+
# one branch (by evaluating the condition if possible).
|
|
3
|
+
#
|
|
4
|
+
# @example A simple class conditional
|
|
5
|
+
# class Foo
|
|
6
|
+
# if 0
|
|
7
|
+
# # This method is ignored
|
|
8
|
+
# def xyz; end
|
|
9
|
+
# end
|
|
10
|
+
# end
|
|
11
|
+
class YARD::Handlers::Ruby::ClassConditionHandler < YARD::Handlers::Ruby::Base
|
|
12
|
+
handles meta_type(:condition)
|
|
13
|
+
namespace_only
|
|
14
|
+
|
|
15
|
+
process do
|
|
16
|
+
condition = parse_condition
|
|
17
|
+
if condition == nil
|
|
18
|
+
# Parse both blocks if we're unsure of the condition
|
|
19
|
+
parse_then_block
|
|
20
|
+
parse_else_block
|
|
21
|
+
elsif condition
|
|
22
|
+
parse_then_block
|
|
23
|
+
else
|
|
24
|
+
parse_else_block
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
protected
|
|
29
|
+
|
|
30
|
+
# Parses the condition part of the if/unless statement
|
|
31
|
+
#
|
|
32
|
+
# @return [true, false, nil] true if the condition can be definitely
|
|
33
|
+
# parsed to true, false if not, and nil if the condition cannot be
|
|
34
|
+
# parsed with certainty (it's dynamic)
|
|
35
|
+
def parse_condition
|
|
36
|
+
condition = nil
|
|
37
|
+
|
|
38
|
+
# Right now we can handle very simple unary conditions like:
|
|
39
|
+
# if true
|
|
40
|
+
# if false
|
|
41
|
+
# if 0
|
|
42
|
+
# if 100 (not 0)
|
|
43
|
+
# if defined? SOME_CONSTANT
|
|
44
|
+
#
|
|
45
|
+
# The last case will do a lookup in the registry and then one
|
|
46
|
+
# in the Ruby world (using eval).
|
|
47
|
+
case statement.condition.type
|
|
48
|
+
when :int
|
|
49
|
+
condition = statement.condition[0] != "0"
|
|
50
|
+
when :defined
|
|
51
|
+
# defined? keyword used, let's see if we can look up the name
|
|
52
|
+
# in the registry, then we'll try using Ruby's powers. eval() is not
|
|
53
|
+
# *too* dangerous here since code is not actually executed.
|
|
54
|
+
name = statement.condition[0].source
|
|
55
|
+
obj = YARD::Registry.resolve(namespace, name, true)
|
|
56
|
+
begin
|
|
57
|
+
condition = true if obj || Object.instance_eval("defined? #{name}")
|
|
58
|
+
rescue SyntaxError, NameError
|
|
59
|
+
condition = false
|
|
60
|
+
end
|
|
61
|
+
when :var_ref
|
|
62
|
+
var = statement.condition[0]
|
|
63
|
+
if var == s(:kw, "true")
|
|
64
|
+
condition = true
|
|
65
|
+
elsif var == s(:kw, "false")
|
|
66
|
+
condition = false
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Invert an unless condition
|
|
71
|
+
if statement.type == :unless || statement.type == :unless_mod
|
|
72
|
+
condition = !condition if condition != nil
|
|
73
|
+
end
|
|
74
|
+
condition
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def parse_then_block
|
|
78
|
+
parse_block(statement.then_block, :visibility => visibility)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def parse_else_block
|
|
82
|
+
if statement.else_block
|
|
83
|
+
parse_block(statement.else_block, :visibility => visibility)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Handles class declarations
|
|
2
|
+
class YARD::Handlers::Ruby::ClassHandler < YARD::Handlers::Ruby::Base
|
|
3
|
+
include YARD::Handlers::Ruby::StructHandlerMethods
|
|
4
|
+
handles :class, :sclass
|
|
5
|
+
namespace_only
|
|
6
|
+
|
|
7
|
+
process do
|
|
8
|
+
classname = statement[0].source.gsub(/\s/, '')
|
|
9
|
+
if statement.type == :class
|
|
10
|
+
superclass = parse_superclass(statement[1])
|
|
11
|
+
if superclass == "Struct"
|
|
12
|
+
is_a_struct = true
|
|
13
|
+
superclass = struct_superclass_name(statement[1]) # refine the superclass if possible
|
|
14
|
+
create_struct_superclass(superclass, statement[1])
|
|
15
|
+
end
|
|
16
|
+
undocsuper = statement[1] && superclass.nil?
|
|
17
|
+
klass = register ClassObject.new(namespace, classname) do |o|
|
|
18
|
+
o.superclass = superclass if superclass
|
|
19
|
+
o.superclass.type = :class if o.superclass.is_a?(Proxy)
|
|
20
|
+
end
|
|
21
|
+
if is_a_struct
|
|
22
|
+
parse_struct_superclass(klass, statement[1])
|
|
23
|
+
elsif klass
|
|
24
|
+
create_attributes(klass, members_from_tags(klass))
|
|
25
|
+
end
|
|
26
|
+
parse_block(statement[2], :namespace => klass)
|
|
27
|
+
|
|
28
|
+
if undocsuper
|
|
29
|
+
raise YARD::Parser::UndocumentableError, 'superclass (class was added without superclass)'
|
|
30
|
+
end
|
|
31
|
+
elsif statement.type == :sclass
|
|
32
|
+
if statement[0] == s(:var_ref, s(:kw, "self"))
|
|
33
|
+
parse_block(statement[1], :namespace => namespace, :scope => :class)
|
|
34
|
+
else
|
|
35
|
+
proxy = Proxy.new(namespace, classname)
|
|
36
|
+
|
|
37
|
+
# Allow constants to reference class names
|
|
38
|
+
if ConstantObject === proxy
|
|
39
|
+
if proxy.value =~ /\A#{NAMESPACEMATCH}\Z/
|
|
40
|
+
proxy = Proxy.new(namespace, proxy.value)
|
|
41
|
+
else
|
|
42
|
+
raise YARD::Parser::UndocumentableError, "constant class reference '#{classname}'"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
if classname[0,1] =~ /[A-Z]/
|
|
47
|
+
register ClassObject.new(namespace, classname) if Proxy === proxy
|
|
48
|
+
parse_block(statement[1], :namespace => proxy, :scope => :class)
|
|
49
|
+
else
|
|
50
|
+
raise YARD::Parser::UndocumentableError, "class '#{classname}'"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
else
|
|
54
|
+
sig_end = (statement[1] ? statement[1].source_end : statement[0].source_end) - statement.source_start
|
|
55
|
+
raise YARD::Parser::UndocumentableError, "class: #{statement.source[0..sig_end]}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
# Extract the parameters from the Struct.new AST node, returning them as a list
|
|
62
|
+
# of strings
|
|
63
|
+
#
|
|
64
|
+
# @param [MethodCallNode] superclass the AST node for the Struct.new call
|
|
65
|
+
# @return [Array<String>] the member names to generate methods for
|
|
66
|
+
def extract_parameters(superclass)
|
|
67
|
+
members = superclass.parameters.select {|x| x && x.type == :symbol_literal}
|
|
68
|
+
members.map! {|x| x.source.strip[1..-1]}
|
|
69
|
+
members
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def create_struct_superclass(superclass, superclass_def)
|
|
73
|
+
return if superclass == "Struct"
|
|
74
|
+
the_super = register ClassObject.new(P("Struct"), superclass[8..-1]) do |o|
|
|
75
|
+
o.superclass = "Struct"
|
|
76
|
+
end
|
|
77
|
+
parse_struct_superclass(the_super, superclass_def)
|
|
78
|
+
the_super
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def struct_superclass_name(superclass)
|
|
82
|
+
if superclass.call?
|
|
83
|
+
first = superclass.parameters.first
|
|
84
|
+
if first.type == :string_literal && first[0].type == :string_content && first[0].size == 1
|
|
85
|
+
return "Struct::#{first[0][0][0]}"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
"Struct"
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def parse_struct_superclass(klass, superclass)
|
|
92
|
+
return unless superclass.call? && superclass.parameters
|
|
93
|
+
members = extract_parameters(superclass)
|
|
94
|
+
create_attributes(klass, members)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def parse_superclass(superclass)
|
|
98
|
+
return nil unless superclass
|
|
99
|
+
|
|
100
|
+
case superclass.type
|
|
101
|
+
when :var_ref
|
|
102
|
+
return namespace.path if superclass.first == s(:kw, "self")
|
|
103
|
+
return superclass.source if superclass.first.type == :const
|
|
104
|
+
when :const, :const_ref, :const_path_ref, :top_const_ref
|
|
105
|
+
return superclass.source
|
|
106
|
+
when :fcall, :command
|
|
107
|
+
methname = superclass.method_name.source
|
|
108
|
+
if methname == "DelegateClass"
|
|
109
|
+
return superclass.parameters.first.source
|
|
110
|
+
elsif superclass.method_name.type == :const
|
|
111
|
+
return methname
|
|
112
|
+
end
|
|
113
|
+
when :call, :command_call
|
|
114
|
+
cname = superclass.namespace.source
|
|
115
|
+
if cname =~ /^O?Struct$/ && superclass.method_name(true) == :new
|
|
116
|
+
return cname
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
nil
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Handles a class variable (@@variable)
|
|
2
|
+
class YARD::Handlers::Ruby::ClassVariableHandler < YARD::Handlers::Ruby::Base
|
|
3
|
+
handles :assign
|
|
4
|
+
namespace_only
|
|
5
|
+
|
|
6
|
+
process do
|
|
7
|
+
if statement[0].type == :var_field && statement[0][0].type == :cvar
|
|
8
|
+
name = statement[0][0][0]
|
|
9
|
+
value = statement[1].source
|
|
10
|
+
register ClassVariableObject.new(namespace, name) do |o|
|
|
11
|
+
o.source = statement
|
|
12
|
+
o.value = value
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Handles any constant assignment
|
|
2
|
+
class YARD::Handlers::Ruby::ConstantHandler < YARD::Handlers::Ruby::Base
|
|
3
|
+
include YARD::Handlers::Ruby::StructHandlerMethods
|
|
4
|
+
handles :assign
|
|
5
|
+
namespace_only
|
|
6
|
+
|
|
7
|
+
process do
|
|
8
|
+
if statement[1].call? && statement[1][0][0] == s(:const, "Struct") &&
|
|
9
|
+
statement[1][2] == s(:ident, "new")
|
|
10
|
+
process_structclass(statement)
|
|
11
|
+
elsif statement[0].type == :var_field && statement[0][0].type == :const
|
|
12
|
+
process_constant(statement)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def process_constant(statement)
|
|
19
|
+
name = statement[0][0][0]
|
|
20
|
+
value = statement[1].source
|
|
21
|
+
register ConstantObject.new(namespace, name) {|o| o.source = statement; o.value = value.strip }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def process_structclass(statement)
|
|
25
|
+
lhs = statement[0][0]
|
|
26
|
+
if lhs.type == :const
|
|
27
|
+
klass = create_class(lhs[0], P(:Struct))
|
|
28
|
+
create_attributes(klass, extract_parameters(statement[1]))
|
|
29
|
+
else
|
|
30
|
+
raise YARD::Parser::UndocumentableError, "Struct assignment to #{statement[0].source}"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Extract the parameters from the Struct.new AST node, returning them as a list
|
|
35
|
+
# of strings
|
|
36
|
+
#
|
|
37
|
+
# @param [MethodCallNode] superclass the AST node for the Struct.new call
|
|
38
|
+
# @return [Array<String>] the member names to generate methods for
|
|
39
|
+
def extract_parameters(superclass)
|
|
40
|
+
return [] unless superclass.parameters
|
|
41
|
+
members = superclass.parameters.select {|x| x && x.type == :symbol_literal}
|
|
42
|
+
members.map! {|x| x.source.strip[1..-1]}
|
|
43
|
+
members
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module YARD
|
|
2
|
+
module Handlers
|
|
3
|
+
module Ruby
|
|
4
|
+
# Handles automatic detection of dsl-style methods
|
|
5
|
+
class DSLHandler < Base
|
|
6
|
+
include CodeObjects
|
|
7
|
+
include DSLHandlerMethods
|
|
8
|
+
handles method_call
|
|
9
|
+
namespace_only
|
|
10
|
+
process { handle_comments }
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
module YARD
|
|
2
|
+
module Handlers
|
|
3
|
+
module Ruby
|
|
4
|
+
module DSLHandlerMethods
|
|
5
|
+
include CodeObjects
|
|
6
|
+
include Parser
|
|
7
|
+
|
|
8
|
+
IGNORE_METHODS = Hash[*%w(alias alias_method autoload attr attr_accessor
|
|
9
|
+
attr_reader attr_writer extend include public private protected
|
|
10
|
+
private_constant).map {|n| [n, true] }.flatten]
|
|
11
|
+
|
|
12
|
+
def handle_comments
|
|
13
|
+
return if IGNORE_METHODS[caller_method]
|
|
14
|
+
|
|
15
|
+
@docstring = statement.comments || ""
|
|
16
|
+
@docstring = @docstring.join("\n") if @docstring.is_a?(Array)
|
|
17
|
+
|
|
18
|
+
if @docstring =~ /^@!?macro\s+\[[^\]]*attach/
|
|
19
|
+
register_docstring(nil)
|
|
20
|
+
@docstring = ""
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
if macro = find_attached_macro
|
|
24
|
+
@docstring += "\n" +
|
|
25
|
+
macro.expand([caller_method, *call_params], statement.source)
|
|
26
|
+
elsif !statement.comments_hash_flag && !implicit_docstring?
|
|
27
|
+
return register_docstring(nil)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# ignore DSL definitions if @method/@attribute directive is used
|
|
31
|
+
if @docstring =~ /^@!?(method|attribute)\b/
|
|
32
|
+
return register_docstring(nil)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
object = MethodObject.new(namespace, method_name, scope)
|
|
36
|
+
object.signature = method_signature
|
|
37
|
+
register(object)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def register_docstring(object, docstring = @docstring, stmt = statement)
|
|
41
|
+
super
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
private
|
|
45
|
+
|
|
46
|
+
def implicit_docstring?
|
|
47
|
+
tags = %w(method attribute overload visibility scope return)
|
|
48
|
+
tags.any? {|tag| @docstring =~ /^@!?#{tag}\b/ }
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def method_name
|
|
52
|
+
name = call_params.first || ""
|
|
53
|
+
if name =~ /^#{CodeObjects::METHODNAMEMATCH}$/
|
|
54
|
+
name
|
|
55
|
+
else
|
|
56
|
+
raise UndocumentableError, "method, missing name"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def method_signature
|
|
61
|
+
"def #{method_name}"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def find_attached_macro
|
|
65
|
+
Registry.all(:macro).each do |macro|
|
|
66
|
+
next unless macro.method_object
|
|
67
|
+
next unless macro.method_object.name.to_s == caller_method.to_s
|
|
68
|
+
(namespace.inheritance_tree(true) + [P('Object')]).each do |obj|
|
|
69
|
+
return macro if obj == macro.method_object.namespace
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
nil
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Handles 'raise' calls inside methods
|
|
2
|
+
class YARD::Handlers::Ruby::ExceptionHandler < YARD::Handlers::Ruby::Base
|
|
3
|
+
handles method_call(:raise)
|
|
4
|
+
|
|
5
|
+
process do
|
|
6
|
+
return unless owner.is_a?(MethodObject) # Only methods yield
|
|
7
|
+
return if [:command_call, :call].include? statement.type
|
|
8
|
+
return if owner.has_tag?(:raise)
|
|
9
|
+
|
|
10
|
+
klass = nil
|
|
11
|
+
if statement.call?
|
|
12
|
+
params = statement.parameters(false)
|
|
13
|
+
if params.size == 1
|
|
14
|
+
if params.first.ref? && params.first.first.type != :ident
|
|
15
|
+
klass = params.first.source
|
|
16
|
+
elsif params.first.call? && params.first.method_name(true) == :new
|
|
17
|
+
klass = params.first.namespace.source
|
|
18
|
+
end
|
|
19
|
+
elsif params.size > 1
|
|
20
|
+
klass = params.first.source
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
owner.add_tag YARD::Tags::Tag.new(:raise, '', klass) if klass
|
|
25
|
+
end
|
|
26
|
+
end
|