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,21 @@
|
|
|
1
|
+
# Handles 'extend' call to include modules into the class scope of another
|
|
2
|
+
# @see MixinHandler
|
|
3
|
+
class YARD::Handlers::Ruby::ExtendHandler < YARD::Handlers::Ruby::MixinHandler
|
|
4
|
+
handles method_call(:extend)
|
|
5
|
+
namespace_only
|
|
6
|
+
|
|
7
|
+
def scope; :class end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def process_mixin(mixin)
|
|
12
|
+
if mixin == s(:var_ref, s(:kw, "self"))
|
|
13
|
+
if namespace.is_a?(ClassObject)
|
|
14
|
+
raise UndocumentableError, "extend(self) statement on class"
|
|
15
|
+
end
|
|
16
|
+
namespace.mixins(scope) << namespace
|
|
17
|
+
else
|
|
18
|
+
super
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# (see Ruby::AliasHandler)
|
|
2
|
+
class YARD::Handlers::Ruby::Legacy::AliasHandler < YARD::Handlers::Ruby::Legacy::Base
|
|
3
|
+
handles /\Aalias(_method)?(\s|\()/
|
|
4
|
+
namespace_only
|
|
5
|
+
|
|
6
|
+
process do
|
|
7
|
+
if TkALIAS === statement.tokens.first
|
|
8
|
+
tokens = statement.tokens[2..-1].to_s.split(/\s+/)
|
|
9
|
+
names = [tokens[0], tokens[1]].map {|t| t.gsub(/^:(['"])?(.+?)\1?$|^(:)(.+)/, '\2') }
|
|
10
|
+
else
|
|
11
|
+
names = tokval_list(statement.tokens[2..-1], :attr)
|
|
12
|
+
end
|
|
13
|
+
raise YARD::Parser::UndocumentableError, statement.tokens.first.text if names.size != 2
|
|
14
|
+
|
|
15
|
+
new_meth, old_meth = names[0].to_sym, names[1].to_sym
|
|
16
|
+
old_obj = namespace.child(:name => old_meth, :scope => scope)
|
|
17
|
+
new_obj = register MethodObject.new(namespace, new_meth, scope) do |o|
|
|
18
|
+
o.add_file(parser.file, statement.tokens.first.line_no, statement.comments)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
if old_obj
|
|
22
|
+
new_obj.signature = old_obj.signature
|
|
23
|
+
new_obj.source = old_obj.source
|
|
24
|
+
new_obj.docstring = old_obj.docstring + YARD::Docstring.new(statement.comments)
|
|
25
|
+
new_obj.docstring.line_range = statement.comments_range
|
|
26
|
+
new_obj.docstring.hash_flag = statement.comments_hash_flag
|
|
27
|
+
new_obj.docstring.object = new_obj
|
|
28
|
+
else
|
|
29
|
+
new_obj.signature = "def #{new_meth}" # this is all we know.
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
namespace.aliases[new_obj] = old_meth
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# (see Ruby::AttributeHandler)
|
|
2
|
+
class YARD::Handlers::Ruby::Legacy::AttributeHandler < YARD::Handlers::Ruby::Legacy::Base
|
|
3
|
+
handles /\Aattr(?:_(?:reader|writer|accessor))?(?:\s|\()/
|
|
4
|
+
namespace_only
|
|
5
|
+
|
|
6
|
+
process do
|
|
7
|
+
begin
|
|
8
|
+
attr_type = statement.tokens.first.text.to_sym
|
|
9
|
+
symbols = tokval_list statement.tokens[2..-1], :attr, TkTRUE, TkFALSE
|
|
10
|
+
read, write = true, false
|
|
11
|
+
rescue SyntaxError
|
|
12
|
+
raise YARD::Parser::UndocumentableError, attr_type
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Change read/write based on attr_reader/writer/accessor
|
|
16
|
+
case attr_type
|
|
17
|
+
when :attr
|
|
18
|
+
# In the case of 'attr', the second parameter (if given) isn't a symbol.
|
|
19
|
+
write = symbols.pop if symbols.size == 2
|
|
20
|
+
when :attr_accessor
|
|
21
|
+
write = true
|
|
22
|
+
when :attr_reader
|
|
23
|
+
# change nothing
|
|
24
|
+
when :attr_writer
|
|
25
|
+
read, write = false, true
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Add all attributes
|
|
29
|
+
symbols.each do |name|
|
|
30
|
+
namespace.attributes[scope][name] = SymbolHash[:read => nil, :write => nil]
|
|
31
|
+
|
|
32
|
+
# Show their methods as well
|
|
33
|
+
{:read => name, :write => "#{name}="}.each do |type, meth|
|
|
34
|
+
if (type == :read ? read : write)
|
|
35
|
+
o = MethodObject.new(namespace, meth, scope)
|
|
36
|
+
if type == :write
|
|
37
|
+
o.parameters = [['value', nil]]
|
|
38
|
+
src = "def #{meth}(value)"
|
|
39
|
+
full_src = "#{src}\n @#{name} = value\nend"
|
|
40
|
+
doc = "Sets the attribute #{name}\n@param value the value to set the attribute #{name} to."
|
|
41
|
+
else
|
|
42
|
+
src = "def #{meth}"
|
|
43
|
+
full_src = "#{src}\n @#{name}\nend"
|
|
44
|
+
doc = "Returns the value of attribute #{name}"
|
|
45
|
+
end
|
|
46
|
+
o.source ||= full_src
|
|
47
|
+
o.signature ||= src
|
|
48
|
+
register(o)
|
|
49
|
+
o.docstring = doc if o.docstring.blank?(false)
|
|
50
|
+
|
|
51
|
+
# Regsiter the object explicitly
|
|
52
|
+
namespace.attributes[scope][name][type] = o
|
|
53
|
+
elsif obj = namespace.children.find {|o| o.name == meth.to_sym && o.scope == scope }
|
|
54
|
+
# register an existing method as attribute
|
|
55
|
+
namespace.attributes[scope][name][type] = obj
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
module YARD
|
|
2
|
+
module Handlers
|
|
3
|
+
module Ruby::Legacy
|
|
4
|
+
# This is the base handler for the legacy parser. To implement a legacy
|
|
5
|
+
# handler, subclass this class.
|
|
6
|
+
#
|
|
7
|
+
# @abstract (see Ruby::Base)
|
|
8
|
+
class Base < Handlers::Base
|
|
9
|
+
# For tokens like TkDEF, TkCLASS, etc.
|
|
10
|
+
include YARD::Parser::Ruby::Legacy::RubyToken
|
|
11
|
+
|
|
12
|
+
# @return [Boolean] whether or not a {Parser::Ruby::Legacy::Statement} object should be handled
|
|
13
|
+
# by this handler.
|
|
14
|
+
def self.handles?(stmt)
|
|
15
|
+
handlers.any? do |a_handler|
|
|
16
|
+
case a_handler
|
|
17
|
+
when String
|
|
18
|
+
stmt.tokens.first.text == a_handler
|
|
19
|
+
when Regexp
|
|
20
|
+
stmt.tokens.to_s =~ a_handler
|
|
21
|
+
else
|
|
22
|
+
a_handler == stmt.tokens.first.class
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Parses a statement's block with a set of state values. If the
|
|
28
|
+
# statement has no block, nothing happens. A description of state
|
|
29
|
+
# values can be found at {Handlers::Base#push_state}
|
|
30
|
+
#
|
|
31
|
+
# @param [Hash] opts State options
|
|
32
|
+
# @option opts (see Handlers::Base#push_state)
|
|
33
|
+
# @see Handlers::Base#push_state #push_state
|
|
34
|
+
def parse_block(opts = {})
|
|
35
|
+
push_state(opts) do
|
|
36
|
+
if statement.block
|
|
37
|
+
blk = Parser::Ruby::Legacy::StatementList.new(statement.block)
|
|
38
|
+
parser.process(blk)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def call_params
|
|
44
|
+
if statement.tokens.first.is_a?(TkDEF)
|
|
45
|
+
extract_method_details.last.map {|param| param.first }
|
|
46
|
+
else
|
|
47
|
+
tokens = statement.tokens[1..-1]
|
|
48
|
+
tokval_list(tokens, :attr, :identifier, TkId).map do |value|
|
|
49
|
+
value.to_s
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def caller_method
|
|
55
|
+
if statement.tokens.first.is_a?(TkIDENTIFIER)
|
|
56
|
+
statement.tokens.first.text
|
|
57
|
+
elsif statement.tokens.first.is_a?(TkDEF)
|
|
58
|
+
extract_method_details.first
|
|
59
|
+
else
|
|
60
|
+
nil
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
# Extracts method information for macro expansion only
|
|
67
|
+
#
|
|
68
|
+
# @todo This is a duplicate implementation of {MethodHandler}. Refactor.
|
|
69
|
+
# @return [Array<String,Array<Array<String>>>] the method name followed by method
|
|
70
|
+
# arguments (name and optional value)
|
|
71
|
+
def extract_method_details
|
|
72
|
+
if statement.tokens.to_s =~ /^def\s+(#{METHODMATCH})(?:(?:\s+|\s*\()(.*)(?:\)\s*$)?)?/m
|
|
73
|
+
meth, args = $1, $2
|
|
74
|
+
meth.gsub!(/\s+/,'')
|
|
75
|
+
args = tokval_list(Parser::Ruby::Legacy::TokenList.new(args), :all)
|
|
76
|
+
args.map! {|a| k, v = *a.split('=', 2); [k.strip, (v ? v.strip : nil)] } if args
|
|
77
|
+
if meth =~ /(?:#{NSEPQ}|#{CSEPQ})([^#{NSEP}#{CSEPQ}]+)$/
|
|
78
|
+
meth = $`
|
|
79
|
+
end
|
|
80
|
+
return meth, args
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# The string value of a token. For example, the return value for the symbol :sym
|
|
85
|
+
# would be :sym. The return value for a string +"foo #{ bar}"+ would be the literal
|
|
86
|
+
# +"foo #{ bar}"+ without any interpolation. The return value of the identifier
|
|
87
|
+
# 'test' would be the same value: 'test'. Here is a list of common types and
|
|
88
|
+
# their return values:
|
|
89
|
+
#
|
|
90
|
+
# @example
|
|
91
|
+
# tokval(TokenList.new('"foo"').first) => "foo"
|
|
92
|
+
# tokval(TokenList.new(':foo').first) => :foo
|
|
93
|
+
# tokval(TokenList.new('CONSTANT').first, RubyToken::TkId) => "CONSTANT"
|
|
94
|
+
# tokval(TokenList.new('identifier').first, RubyToken::TkId) => "identifier"
|
|
95
|
+
# tokval(TokenList.new('3.25').first) => 3.25
|
|
96
|
+
# tokval(TokenList.new('/xyz/i').first) => /xyz/i
|
|
97
|
+
#
|
|
98
|
+
# @param [Token] token The token of the class
|
|
99
|
+
#
|
|
100
|
+
# @param [Array<Class<Token>>, Symbol] accepted_types
|
|
101
|
+
# The allowed token types that this token can be. Defaults to [{TkVal}].
|
|
102
|
+
# A list of types would be, for example, [+TkSTRING+, +TkSYMBOL+], to return
|
|
103
|
+
# the token's value if it is either of those types. If +TkVal+ is accepted,
|
|
104
|
+
# +TkNode+ is also accepted.
|
|
105
|
+
#
|
|
106
|
+
# Certain symbol keys are allowed to specify multiple types in one fell swoop.
|
|
107
|
+
# These symbols are:
|
|
108
|
+
# :string => +TkSTRING+, +TkDSTRING+, +TkDXSTRING+ and +TkXSTRING+
|
|
109
|
+
# :attr => +TkSYMBOL+ and +TkSTRING+
|
|
110
|
+
# :identifier => +TkIDENTIFIER, +TkFID+ and +TkGVAR+.
|
|
111
|
+
# :number => +TkFLOAT+, +TkINTEGER+
|
|
112
|
+
#
|
|
113
|
+
# @return [Object] if the token is one of the accepted types, in its real value form.
|
|
114
|
+
# It should be noted that identifiers and constants are kept in String form.
|
|
115
|
+
# @return [nil] if the token is not any of the specified accepted types
|
|
116
|
+
def tokval(token, *accepted_types)
|
|
117
|
+
accepted_types = [TkVal] if accepted_types.empty?
|
|
118
|
+
accepted_types.push(TkNode) if accepted_types.include? TkVal
|
|
119
|
+
|
|
120
|
+
if accepted_types.include?(:attr)
|
|
121
|
+
accepted_types.push(TkSTRING, TkSYMBOL)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
if accepted_types.include?(:string)
|
|
125
|
+
accepted_types.push(TkSTRING, TkDSTRING, TkXSTRING, TkDXSTRING)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
if accepted_types.include?(:identifier)
|
|
129
|
+
accepted_types.push(TkIDENTIFIER, TkFID, TkGVAR)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
if accepted_types.include?(:number)
|
|
133
|
+
accepted_types.push(TkFLOAT, TkINTEGER)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
return unless accepted_types.any? {|t| t === token }
|
|
137
|
+
|
|
138
|
+
case token
|
|
139
|
+
when TkSTRING, TkDSTRING, TkXSTRING, TkDXSTRING
|
|
140
|
+
token.text[1..-2]
|
|
141
|
+
when TkSYMBOL
|
|
142
|
+
token.text[1..-1].to_sym
|
|
143
|
+
when TkFLOAT
|
|
144
|
+
token.text.to_f
|
|
145
|
+
when TkINTEGER
|
|
146
|
+
token.text.to_i
|
|
147
|
+
when TkREGEXP
|
|
148
|
+
token.text =~ /\A\/(.+)\/([^\/])\Z/
|
|
149
|
+
Regexp.new($1, $2)
|
|
150
|
+
when TkTRUE
|
|
151
|
+
true
|
|
152
|
+
when TkFALSE
|
|
153
|
+
false
|
|
154
|
+
when TkNIL
|
|
155
|
+
nil
|
|
156
|
+
else
|
|
157
|
+
token.text
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
# Returns a list of symbols or string values from a statement.
|
|
162
|
+
# The list must be a valid comma delimited list, and values
|
|
163
|
+
# will only be returned to the end of the list only.
|
|
164
|
+
#
|
|
165
|
+
# Example:
|
|
166
|
+
# attr_accessor :a, 'b', :c, :d => ['a', 'b', 'c', 'd']
|
|
167
|
+
# attr_accessor 'a', UNACCEPTED_TYPE, 'c' => ['a', 'c']
|
|
168
|
+
#
|
|
169
|
+
# The tokval list of a {Parser::Ruby::Legacy::TokenList} of the above
|
|
170
|
+
# code would be the {#tokval} value of :a, 'b',
|
|
171
|
+
# :c and :d.
|
|
172
|
+
#
|
|
173
|
+
# It should also be noted that this function stops immediately at
|
|
174
|
+
# any ruby keyword encountered:
|
|
175
|
+
# "attr_accessor :a, :b, :c if x == 5" => ['a', 'b', 'c']
|
|
176
|
+
#
|
|
177
|
+
# @param [TokenList] tokenlist The list of tokens to process.
|
|
178
|
+
# @param [Array<Class<Token>>] accepted_types passed to {#tokval}
|
|
179
|
+
# @return [Array<String>] the list of tokvalues in the list.
|
|
180
|
+
# @return [Array<EMPTY>] if there are no symbols or Strings in the list
|
|
181
|
+
# @see #tokval
|
|
182
|
+
def tokval_list(tokenlist, *accepted_types)
|
|
183
|
+
return [] unless tokenlist
|
|
184
|
+
out = [[]]
|
|
185
|
+
parencount, beforeparen = 0, 0
|
|
186
|
+
needcomma = false
|
|
187
|
+
seen_comma = true
|
|
188
|
+
tokenlist.each do |token|
|
|
189
|
+
tokval = accepted_types == [:all] ? token.text : tokval(token, *accepted_types)
|
|
190
|
+
parencond = !out.last.empty? && tokval != nil
|
|
191
|
+
#puts "#{seen_comma.inspect} #{parencount} #{token.class.class_name} #{out.inspect}"
|
|
192
|
+
case token
|
|
193
|
+
when TkCOMMA
|
|
194
|
+
if parencount == 0
|
|
195
|
+
out << [] unless out.last.empty?
|
|
196
|
+
needcomma = false
|
|
197
|
+
seen_comma = true
|
|
198
|
+
else
|
|
199
|
+
out.last << token.text if parencond
|
|
200
|
+
end
|
|
201
|
+
when TkLPAREN
|
|
202
|
+
if seen_comma
|
|
203
|
+
beforeparen += 1
|
|
204
|
+
else
|
|
205
|
+
parencount += 1
|
|
206
|
+
out.last << token.text if parencond
|
|
207
|
+
end
|
|
208
|
+
when TkRPAREN
|
|
209
|
+
if beforeparen > 0
|
|
210
|
+
beforeparen -= 1
|
|
211
|
+
else
|
|
212
|
+
out.last << token.text if parencount > 0 && tokval != nil
|
|
213
|
+
parencount -= 1
|
|
214
|
+
end
|
|
215
|
+
when TkLBRACE, TkLBRACK, TkDO
|
|
216
|
+
parencount += 1
|
|
217
|
+
out.last << token.text if tokval != nil
|
|
218
|
+
when TkRBRACE, TkRBRACK, TkEND
|
|
219
|
+
out.last << token.text if tokval != nil
|
|
220
|
+
parencount -= 1
|
|
221
|
+
else
|
|
222
|
+
break if TkKW === token && ![TkTRUE, TkFALSE, TkSUPER, TkSELF, TkNIL].include?(token.class)
|
|
223
|
+
|
|
224
|
+
seen_comma = false unless TkWhitespace === token
|
|
225
|
+
if parencount == 0
|
|
226
|
+
next if needcomma
|
|
227
|
+
next if TkWhitespace === token
|
|
228
|
+
if tokval != nil
|
|
229
|
+
out.last << tokval
|
|
230
|
+
else
|
|
231
|
+
out.last.clear
|
|
232
|
+
needcomma = true
|
|
233
|
+
end
|
|
234
|
+
elsif parencond
|
|
235
|
+
needcomma = true
|
|
236
|
+
out.last << token.text
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
if beforeparen == 0 && parencount < 0
|
|
241
|
+
break
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
# Flatten any single element lists
|
|
245
|
+
out.map {|e| e.empty? ? nil : (e.size == 1 ? e.pop : e.flatten.join) }.compact
|
|
246
|
+
end
|
|
247
|
+
end
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# (see Ruby::ClassConditionHandler)
|
|
2
|
+
# @since 0.5.4
|
|
3
|
+
class YARD::Handlers::Ruby::Legacy::ClassConditionHandler < YARD::Handlers::Ruby::Legacy::Base
|
|
4
|
+
namespace_only
|
|
5
|
+
handles TkIF, TkELSIF, TkUNLESS
|
|
6
|
+
|
|
7
|
+
process do
|
|
8
|
+
condition = parse_condition
|
|
9
|
+
if condition == nil
|
|
10
|
+
# Parse both blocks if we're unsure of the condition
|
|
11
|
+
parse_then_block
|
|
12
|
+
parse_else_block
|
|
13
|
+
elsif condition
|
|
14
|
+
parse_then_block
|
|
15
|
+
else
|
|
16
|
+
parse_else_block
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
# Parses the condition part of the if/unless statement
|
|
23
|
+
#
|
|
24
|
+
# @return [true, false, nil] true if the condition can be definitely
|
|
25
|
+
# parsed to true, false if not, and nil if the condition cannot be
|
|
26
|
+
# parsed with certainty (it's dynamic)
|
|
27
|
+
# @since 0.5.5
|
|
28
|
+
def parse_condition
|
|
29
|
+
condition = nil
|
|
30
|
+
|
|
31
|
+
# Right now we can handle very simple unary conditions like:
|
|
32
|
+
# if true
|
|
33
|
+
# if false
|
|
34
|
+
# if 0
|
|
35
|
+
# if 100 (not 0)
|
|
36
|
+
# if defined? SOME_CONSTANT
|
|
37
|
+
#
|
|
38
|
+
# The last case will do a lookup in the registry and then one
|
|
39
|
+
# in the Ruby world (using eval).
|
|
40
|
+
case statement.tokens[1..-1].to_s.strip
|
|
41
|
+
when /^(\d+)$/
|
|
42
|
+
condition = $1 != "0"
|
|
43
|
+
when /^defined\?\s*\(?(.+?)\)?$/
|
|
44
|
+
# defined? keyword used, let's see if we can look up the name
|
|
45
|
+
# in the registry, then we'll try using Ruby's powers. eval() is not
|
|
46
|
+
# *too* dangerous here since code is not actually executed.
|
|
47
|
+
name = $1
|
|
48
|
+
obj = YARD::Registry.resolve(namespace, name, true)
|
|
49
|
+
begin
|
|
50
|
+
condition = true if obj || Object.instance_eval("defined? #{name}")
|
|
51
|
+
rescue SyntaxError, NameError
|
|
52
|
+
condition = false
|
|
53
|
+
end
|
|
54
|
+
when "true"
|
|
55
|
+
condition = true
|
|
56
|
+
when "false"
|
|
57
|
+
condition = false
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
if TkUNLESS === statement.tokens.first
|
|
61
|
+
condition = !condition if condition != nil
|
|
62
|
+
end
|
|
63
|
+
condition
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# @since 0.5.5
|
|
67
|
+
def parse_then_block
|
|
68
|
+
parse_block(:visibility => visibility)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# @since 0.5.5
|
|
72
|
+
def parse_else_block
|
|
73
|
+
return unless statement.block
|
|
74
|
+
stmtlist = YARD::Parser::Ruby::Legacy::StatementList
|
|
75
|
+
stmtlist.new(statement.block).each do |stmt|
|
|
76
|
+
if TkELSE === stmt.tokens.first
|
|
77
|
+
push_state(:visibility => visibility) do
|
|
78
|
+
parser.process(stmtlist.new(stmt.block))
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# (see Ruby::ClassHandler)
|
|
2
|
+
class YARD::Handlers::Ruby::Legacy::ClassHandler < YARD::Handlers::Ruby::Legacy::Base
|
|
3
|
+
include YARD::Handlers::Ruby::StructHandlerMethods
|
|
4
|
+
handles TkCLASS
|
|
5
|
+
namespace_only
|
|
6
|
+
|
|
7
|
+
process do
|
|
8
|
+
if statement.tokens.to_s =~ /^class\s+(#{NAMESPACEMATCH})\s*(?:<\s*(.+)|\Z)/m
|
|
9
|
+
classname = $1
|
|
10
|
+
superclass_def = $2
|
|
11
|
+
superclass = parse_superclass($2)
|
|
12
|
+
classname = classname.gsub(/\s/, '')
|
|
13
|
+
if superclass == "Struct"
|
|
14
|
+
is_a_struct = true
|
|
15
|
+
superclass = struct_superclass_name(superclass_def)
|
|
16
|
+
create_struct_superclass(superclass, superclass_def)
|
|
17
|
+
end
|
|
18
|
+
undocsuper = superclass_def && superclass.nil?
|
|
19
|
+
|
|
20
|
+
klass = register ClassObject.new(namespace, classname) do |o|
|
|
21
|
+
o.superclass = superclass if superclass
|
|
22
|
+
o.superclass.type = :class if o.superclass.is_a?(Proxy)
|
|
23
|
+
end
|
|
24
|
+
if is_a_struct
|
|
25
|
+
parse_struct_subclass(klass, superclass_def)
|
|
26
|
+
elsif klass
|
|
27
|
+
create_attributes(klass, members_from_tags(klass))
|
|
28
|
+
end
|
|
29
|
+
parse_block(:namespace => klass)
|
|
30
|
+
|
|
31
|
+
if undocsuper
|
|
32
|
+
raise YARD::Parser::UndocumentableError, 'superclass (class was added without superclass)'
|
|
33
|
+
end
|
|
34
|
+
elsif statement.tokens.to_s =~ /^class\s*<<\s*([\w\:\s]+)/
|
|
35
|
+
classname = $1.gsub(/\s/, '')
|
|
36
|
+
proxy = Proxy.new(namespace, classname)
|
|
37
|
+
|
|
38
|
+
# Allow constants to reference class names
|
|
39
|
+
if ConstantObject === proxy
|
|
40
|
+
if proxy.value =~ /\A#{NAMESPACEMATCH}\Z/
|
|
41
|
+
proxy = Proxy.new(namespace, proxy.value)
|
|
42
|
+
else
|
|
43
|
+
raise YARD::Parser::UndocumentableError, "constant class reference '#{classname}'"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
if classname == "self"
|
|
48
|
+
parse_block(:namespace => namespace, :scope => :class)
|
|
49
|
+
elsif classname[0,1] =~ /[A-Z]/
|
|
50
|
+
register ClassObject.new(namespace, classname) if Proxy === proxy
|
|
51
|
+
parse_block(:namespace => proxy, :scope => :class)
|
|
52
|
+
else
|
|
53
|
+
raise YARD::Parser::UndocumentableError, "class '#{classname}'"
|
|
54
|
+
end
|
|
55
|
+
else
|
|
56
|
+
raise YARD::Parser::UndocumentableError, "class: #{statement.tokens}"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
private
|
|
61
|
+
|
|
62
|
+
# Extracts the parameter list from the Struct.new declaration and returns it
|
|
63
|
+
# formatted as a list of member names. Expects the user will have used symbols
|
|
64
|
+
# to define the struct member names
|
|
65
|
+
#
|
|
66
|
+
# @param [String] superstring the string declaring the superclass
|
|
67
|
+
# @return [Array<String>] a list of member names
|
|
68
|
+
def extract_parameters(superstring)
|
|
69
|
+
paramstring = superstring.match(/\A(O?Struct)\.new\((.*?)\)/)[2]
|
|
70
|
+
paramstring.split(",").select {|x| x.strip[0,1] == ":"}.map {|x| x.strip[1..-1] } # the 1..-1 chops the leading :
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def create_struct_superclass(superclass, superclass_def)
|
|
74
|
+
return if superclass == "Struct"
|
|
75
|
+
the_super = register ClassObject.new(P("Struct"), superclass[8..-1]) do |o|
|
|
76
|
+
o.superclass = "Struct"
|
|
77
|
+
end
|
|
78
|
+
parse_struct_subclass(the_super, superclass_def)
|
|
79
|
+
the_super
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def struct_superclass_name(superclass)
|
|
83
|
+
if match = superclass.match(/\A(Struct)\.new\((.*?)\)/)
|
|
84
|
+
paramstring = match[2].split(",")
|
|
85
|
+
first = paramstring.first.strip
|
|
86
|
+
if first[0,1] =~ /['"]/ && first[-1,1] =~ /['"]/ && first !~ /\#\{/
|
|
87
|
+
return "Struct::#{first[1..-2]}"
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
"Struct"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def parse_struct_subclass(klass, superclass_def)
|
|
94
|
+
# Bounce if there's no parens
|
|
95
|
+
return unless superclass_def =~ /O?Struct\.new\((.*?)\)/
|
|
96
|
+
members = extract_parameters(superclass_def)
|
|
97
|
+
create_attributes(klass, members)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def parse_superclass(superclass)
|
|
101
|
+
case superclass
|
|
102
|
+
when /\A(#{NAMESPACEMATCH})(?:\s|\Z)/,
|
|
103
|
+
/\A(Struct|OStruct)\.new/,
|
|
104
|
+
/\ADelegateClass\((.+?)\)\s*\Z/,
|
|
105
|
+
/\A(#{NAMESPACEMATCH})\(/
|
|
106
|
+
$1
|
|
107
|
+
when "self"
|
|
108
|
+
namespace.path
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# (see Ruby::ClassVariableHandler)
|
|
2
|
+
class YARD::Handlers::Ruby::Legacy::ClassVariableHandler < YARD::Handlers::Ruby::Legacy::Base
|
|
3
|
+
HANDLER_MATCH = /\A@@\w+\s*=\s*/m
|
|
4
|
+
handles HANDLER_MATCH
|
|
5
|
+
namespace_only
|
|
6
|
+
|
|
7
|
+
process do
|
|
8
|
+
name, value = *statement.tokens.to_s.split(/\s*=\s*/, 2)
|
|
9
|
+
register ClassVariableObject.new(namespace, name) do |o|
|
|
10
|
+
o.source = statement
|
|
11
|
+
o.value = value.strip
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# (see Ruby::ConstantHandler)
|
|
2
|
+
class YARD::Handlers::Ruby::Legacy::ConstantHandler < YARD::Handlers::Ruby::Legacy::Base
|
|
3
|
+
include YARD::Handlers::Ruby::StructHandlerMethods
|
|
4
|
+
HANDLER_MATCH = /\A[A-Z]\w*\s*=[^=]\s*/m
|
|
5
|
+
handles HANDLER_MATCH
|
|
6
|
+
namespace_only
|
|
7
|
+
|
|
8
|
+
process do
|
|
9
|
+
name, value = *statement.tokens.to_s.split(/\s*=\s*/, 2)
|
|
10
|
+
if value =~ /\A\s*Struct.new(?:\s*\(?|\b)/
|
|
11
|
+
process_structclass(name, $')
|
|
12
|
+
else
|
|
13
|
+
register ConstantObject.new(namespace, name) {|o| o.source = statement; o.value = value.strip }
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def process_structclass(classname, parameters)
|
|
20
|
+
klass = create_class(classname, P(:Struct))
|
|
21
|
+
create_attributes(klass, extract_parameters(parameters))
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def extract_parameters(parameters)
|
|
25
|
+
members = tokval_list(YARD::Parser::Ruby::Legacy::TokenList.new(parameters), TkSYMBOL)
|
|
26
|
+
members.map {|m| m.to_s }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module YARD
|
|
2
|
+
module Handlers
|
|
3
|
+
module Ruby
|
|
4
|
+
module Legacy
|
|
5
|
+
# (see Ruby::DSLHandler)
|
|
6
|
+
class DSLHandler < Base
|
|
7
|
+
include CodeObjects
|
|
8
|
+
include DSLHandlerMethods
|
|
9
|
+
handles TkIDENTIFIER
|
|
10
|
+
namespace_only
|
|
11
|
+
process { handle_comments }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# (see Ruby::ExceptionHandler)
|
|
2
|
+
class YARD::Handlers::Ruby::Legacy::ExceptionHandler < YARD::Handlers::Ruby::Legacy::Base
|
|
3
|
+
handles /\Araise(\s|\(|\Z)/
|
|
4
|
+
|
|
5
|
+
process do
|
|
6
|
+
return unless owner.is_a?(MethodObject) # Only methods yield
|
|
7
|
+
return if owner.has_tag?(:raise)
|
|
8
|
+
|
|
9
|
+
klass = statement.tokens.to_s[/^raise[\(\s]*(#{NAMESPACEMATCH})\s*(?:\)|,|\s(?:if|unless|until)|;|(?:(?:\.|\:\:)\s*)?new|$)/, 1]
|
|
10
|
+
owner.add_tag YARD::Tags::Tag.new(:raise, '', klass) if klass
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# (see Ruby::ExtendHandler)
|
|
2
|
+
class YARD::Handlers::Ruby::Legacy::ExtendHandler < YARD::Handlers::Ruby::Legacy::MixinHandler
|
|
3
|
+
handles /\Aextend(\s|\()/
|
|
4
|
+
namespace_only
|
|
5
|
+
|
|
6
|
+
def scope; :class end
|
|
7
|
+
|
|
8
|
+
private
|
|
9
|
+
|
|
10
|
+
def process_mixin(mixin)
|
|
11
|
+
if mixin == "self"
|
|
12
|
+
if namespace.is_a?(ClassObject)
|
|
13
|
+
raise UndocumentableError, "extend(self) statement on class"
|
|
14
|
+
end
|
|
15
|
+
namespace.mixins(scope) << namespace
|
|
16
|
+
else
|
|
17
|
+
super
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|