yard 0.9.16 → 0.9.17
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of yard might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.yardopts +26 -26
- data/CHANGELOG.md +728 -728
- data/LEGAL +66 -66
- data/LICENSE +22 -22
- data/README.md +328 -328
- data/Rakefile +53 -47
- data/benchmarks/builtins_vs_eval.rb +24 -24
- data/benchmarks/concat_vs_join.rb +13 -13
- data/benchmarks/erb_vs_erubis.rb +54 -54
- data/benchmarks/format_args.rb +47 -47
- data/benchmarks/generation.rb +38 -38
- data/benchmarks/marshal_vs_dbm.rb +64 -64
- data/benchmarks/parsing.rb +46 -46
- data/benchmarks/pathname_vs_string.rb +50 -50
- data/benchmarks/rdoc_vs_yardoc.rb +11 -11
- data/benchmarks/registry_store_types.rb +49 -49
- data/benchmarks/ri_vs_yri.rb +19 -19
- data/benchmarks/ripper_parser.rb +13 -13
- data/benchmarks/splat_vs_flatten.rb +13 -13
- data/benchmarks/template_erb.rb +23 -23
- data/benchmarks/template_format.rb +7 -7
- data/benchmarks/template_profile.rb +18 -18
- data/benchmarks/yri_cache.rb +20 -20
- data/bin/yard +13 -13
- data/bin/yardoc +13 -13
- data/bin/yri +13 -13
- data/docs/CodeObjects.md +115 -115
- data/docs/GettingStarted.md +679 -679
- data/docs/Handlers.md +152 -152
- data/docs/Overview.md +61 -61
- data/docs/Parser.md +191 -191
- data/docs/Tags.md +283 -283
- data/docs/TagsArch.md +123 -123
- data/docs/Templates.md +496 -496
- data/docs/WhatsNew.md +1245 -1245
- data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
- data/docs/templates/default/fulldoc/html/setup.rb +6 -6
- data/docs/templates/default/layout/html/setup.rb +9 -9
- data/docs/templates/default/layout/html/tag_list.erb +11 -11
- data/docs/templates/default/yard_tags/html/list.erb +18 -18
- data/docs/templates/default/yard_tags/html/setup.rb +26 -26
- data/docs/templates/plugin.rb +70 -70
- data/lib/rubygems_plugin.rb +9 -9
- data/lib/yard.rb +69 -69
- data/lib/yard/autoload.rb +303 -303
- data/lib/yard/cli/command.rb +85 -85
- data/lib/yard/cli/command_parser.rb +93 -93
- data/lib/yard/cli/config.rb +198 -198
- data/lib/yard/cli/diff.rb +270 -270
- data/lib/yard/cli/display.rb +69 -69
- data/lib/yard/cli/gems.rb +84 -84
- data/lib/yard/cli/graph.rb +125 -125
- data/lib/yard/cli/help.rb +20 -20
- data/lib/yard/cli/i18n.rb +70 -70
- data/lib/yard/cli/list.rb +23 -23
- data/lib/yard/cli/markup_types.rb +32 -32
- data/lib/yard/cli/server.rb +257 -257
- data/lib/yard/cli/stats.rb +231 -231
- data/lib/yard/cli/yardoc.rb +788 -788
- data/lib/yard/cli/yardopts_command.rb +110 -110
- data/lib/yard/cli/yri.rb +215 -215
- data/lib/yard/code_objects/base.rb +615 -610
- data/lib/yard/code_objects/class_object.rb +146 -146
- data/lib/yard/code_objects/class_variable_object.rb +11 -11
- data/lib/yard/code_objects/constant_object.rb +16 -16
- data/lib/yard/code_objects/extended_method_object.rb +24 -24
- data/lib/yard/code_objects/extra_file_object.rb +131 -131
- data/lib/yard/code_objects/macro_object.rb +172 -172
- data/lib/yard/code_objects/method_object.rb +196 -196
- data/lib/yard/code_objects/module_object.rb +21 -21
- data/lib/yard/code_objects/namespace_mapper.rb +114 -114
- data/lib/yard/code_objects/namespace_object.rb +200 -200
- data/lib/yard/code_objects/proxy.rb +240 -240
- data/lib/yard/code_objects/root_object.rb +19 -19
- data/lib/yard/config.rb +270 -270
- data/lib/yard/core_ext/array.rb +16 -16
- data/lib/yard/core_ext/file.rb +69 -69
- data/lib/yard/core_ext/hash.rb +16 -16
- data/lib/yard/core_ext/insertion.rb +63 -63
- data/lib/yard/core_ext/module.rb +20 -20
- data/lib/yard/core_ext/string.rb +68 -68
- data/lib/yard/core_ext/symbol_hash.rb +75 -75
- data/lib/yard/docstring.rb +386 -378
- data/lib/yard/docstring_parser.rb +345 -345
- data/lib/yard/gem_index.rb +29 -29
- data/lib/yard/globals.rb +22 -22
- data/lib/yard/handlers/base.rb +595 -595
- data/lib/yard/handlers/c/alias_handler.rb +16 -16
- data/lib/yard/handlers/c/attribute_handler.rb +13 -13
- data/lib/yard/handlers/c/base.rb +129 -129
- data/lib/yard/handlers/c/class_handler.rb +27 -27
- data/lib/yard/handlers/c/constant_handler.rb +13 -13
- data/lib/yard/handlers/c/handler_methods.rb +211 -211
- data/lib/yard/handlers/c/init_handler.rb +20 -20
- data/lib/yard/handlers/c/method_handler.rb +45 -36
- data/lib/yard/handlers/c/mixin_handler.rb +21 -21
- data/lib/yard/handlers/c/module_handler.rb +17 -17
- data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
- data/lib/yard/handlers/c/path_handler.rb +11 -11
- data/lib/yard/handlers/c/struct_handler.rb +13 -13
- data/lib/yard/handlers/c/symbol_handler.rb +8 -8
- data/lib/yard/handlers/processor.rb +200 -200
- data/lib/yard/handlers/ruby/alias_handler.rb +44 -44
- data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
- data/lib/yard/handlers/ruby/base.rb +165 -165
- data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
- data/lib/yard/handlers/ruby/class_handler.rb +119 -119
- data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
- data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
- data/lib/yard/handlers/ruby/constant_handler.rb +59 -59
- data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
- data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
- data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -95
- data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
- data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
- data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
- data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
- data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
- data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
- data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
- data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
- data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
- data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
- data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
- data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
- data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
- data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
- data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
- data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
- data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
- data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
- data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
- data/lib/yard/handlers/ruby/method_handler.rb +118 -118
- data/lib/yard/handlers/ruby/mixin_handler.rb +37 -37
- data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
- data/lib/yard/handlers/ruby/module_handler.rb +12 -12
- data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
- data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
- data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
- data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
- data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
- data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
- data/lib/yard/i18n/locale.rb +67 -67
- data/lib/yard/i18n/message.rb +57 -57
- data/lib/yard/i18n/messages.rb +56 -56
- data/lib/yard/i18n/po_parser.rb +61 -61
- data/lib/yard/i18n/pot_generator.rb +290 -290
- data/lib/yard/i18n/text.rb +173 -173
- data/lib/yard/logging.rb +205 -205
- data/lib/yard/options.rb +217 -217
- data/lib/yard/parser/base.rb +57 -57
- data/lib/yard/parser/c/c_parser.rb +235 -235
- data/lib/yard/parser/c/comment_parser.rb +134 -134
- data/lib/yard/parser/c/statement.rb +64 -64
- data/lib/yard/parser/ruby/ast_node.rb +540 -540
- data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1354 -1354
- data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
- data/lib/yard/parser/ruby/legacy/statement.rb +66 -66
- data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
- data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
- data/lib/yard/parser/ruby/ruby_parser.rb +687 -687
- data/lib/yard/parser/ruby/token_resolver.rb +156 -156
- data/lib/yard/parser/source_parser.rb +526 -526
- data/lib/yard/rake/yardoc_task.rb +81 -81
- data/lib/yard/registry.rb +439 -439
- data/lib/yard/registry_resolver.rb +189 -189
- data/lib/yard/registry_store.rb +337 -337
- data/lib/yard/rubygems/backports.rb +10 -10
- data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
- data/lib/yard/rubygems/backports/MIT.txt +20 -20
- data/lib/yard/rubygems/backports/gem.rb +10 -10
- data/lib/yard/rubygems/backports/source_index.rb +365 -365
- data/lib/yard/rubygems/doc_manager.rb +90 -90
- data/lib/yard/rubygems/hook.rb +197 -197
- data/lib/yard/rubygems/specification.rb +50 -50
- data/lib/yard/serializers/base.rb +83 -83
- data/lib/yard/serializers/file_system_serializer.rb +123 -123
- data/lib/yard/serializers/process_serializer.rb +24 -24
- data/lib/yard/serializers/stdout_serializer.rb +34 -34
- data/lib/yard/serializers/yardoc_serializer.rb +152 -152
- data/lib/yard/server.rb +13 -13
- data/lib/yard/server/adapter.rb +100 -100
- data/lib/yard/server/commands/base.rb +209 -209
- data/lib/yard/server/commands/display_file_command.rb +29 -29
- data/lib/yard/server/commands/display_object_command.rb +65 -65
- data/lib/yard/server/commands/frames_command.rb +16 -16
- data/lib/yard/server/commands/library_command.rb +187 -187
- data/lib/yard/server/commands/library_index_command.rb +28 -28
- data/lib/yard/server/commands/list_command.rb +25 -25
- data/lib/yard/server/commands/root_request_command.rb +15 -15
- data/lib/yard/server/commands/search_command.rb +79 -79
- data/lib/yard/server/commands/static_file_command.rb +23 -23
- data/lib/yard/server/commands/static_file_helpers.rb +62 -62
- data/lib/yard/server/doc_server_helper.rb +91 -91
- data/lib/yard/server/doc_server_serializer.rb +39 -39
- data/lib/yard/server/library_version.rb +277 -277
- data/lib/yard/server/rack_adapter.rb +89 -89
- data/lib/yard/server/router.rb +187 -187
- data/lib/yard/server/static_caching.rb +46 -46
- data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
- data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
- data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
- data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
- data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
- data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
- data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
- data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
- data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
- data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
- data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
- data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
- data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
- data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
- data/lib/yard/server/webrick_adapter.rb +45 -45
- data/lib/yard/tags/default_factory.rb +191 -191
- data/lib/yard/tags/default_tag.rb +13 -13
- data/lib/yard/tags/directives.rb +616 -616
- data/lib/yard/tags/library.rb +633 -633
- data/lib/yard/tags/option_tag.rb +13 -13
- data/lib/yard/tags/overload_tag.rb +71 -71
- data/lib/yard/tags/ref_tag.rb +8 -8
- data/lib/yard/tags/ref_tag_list.rb +28 -28
- data/lib/yard/tags/tag.rb +71 -71
- data/lib/yard/tags/tag_format_error.rb +7 -7
- data/lib/yard/tags/types_explainer.rb +162 -162
- data/lib/yard/templates/engine.rb +186 -186
- data/lib/yard/templates/erb_cache.rb +23 -23
- data/lib/yard/templates/helpers/base_helper.rb +215 -215
- data/lib/yard/templates/helpers/filter_helper.rb +27 -27
- data/lib/yard/templates/helpers/html_helper.rb +646 -642
- data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
- data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
- data/lib/yard/templates/helpers/markup_helper.rb +172 -172
- data/lib/yard/templates/helpers/method_helper.rb +75 -75
- data/lib/yard/templates/helpers/module_helper.rb +21 -21
- data/lib/yard/templates/helpers/text_helper.rb +112 -112
- data/lib/yard/templates/helpers/uml_helper.rb +47 -47
- data/lib/yard/templates/section.rb +105 -105
- data/lib/yard/templates/template.rb +418 -418
- data/lib/yard/templates/template_options.rb +92 -92
- data/lib/yard/verifier.rb +151 -151
- data/lib/yard/version.rb +3 -1
- data/spec/cli/command_parser_spec.rb +43 -43
- data/spec/cli/command_spec.rb +36 -36
- data/spec/cli/config_spec.rb +148 -148
- data/spec/cli/diff_spec.rb +254 -254
- data/spec/cli/display_spec.rb +30 -30
- data/spec/cli/gems_spec.rb +81 -81
- data/spec/cli/graph_spec.rb +18 -18
- data/spec/cli/help_spec.rb +22 -22
- data/spec/cli/i18n_spec.rb +107 -107
- data/spec/cli/list_spec.rb +8 -8
- data/spec/cli/markup_types_spec.rb +22 -22
- data/spec/cli/server_spec.rb +324 -324
- data/spec/cli/stats_spec.rb +96 -96
- data/spec/cli/yard_on_yard_spec.rb +38 -38
- data/spec/cli/yardoc_spec.rb +862 -849
- data/spec/cli/yri_spec.rb +101 -101
- data/spec/code_objects/base_spec.rb +470 -460
- data/spec/code_objects/class_object_spec.rb +226 -226
- data/spec/code_objects/code_object_list_spec.rb +36 -36
- data/spec/code_objects/constants_spec.rb +116 -116
- data/spec/code_objects/extra_file_object_spec.rb +160 -160
- data/spec/code_objects/macro_object_spec.rb +150 -150
- data/spec/code_objects/method_object_spec.rb +184 -184
- data/spec/code_objects/module_object_spec.rb +142 -142
- data/spec/code_objects/namespace_object_spec.rb +171 -171
- data/spec/code_objects/proxy_spec.rb +141 -141
- data/spec/code_objects/spec_helper.rb +3 -3
- data/spec/config_spec.rb +171 -171
- data/spec/core_ext/array_spec.rb +13 -13
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +14 -14
- data/spec/core_ext/insertion_spec.rb +37 -37
- data/spec/core_ext/module_spec.rb +15 -15
- data/spec/core_ext/string_spec.rb +42 -42
- data/spec/core_ext/symbol_hash_spec.rb +89 -89
- data/spec/docstring_parser_spec.rb +280 -262
- data/spec/docstring_spec.rb +373 -364
- data/spec/examples.txt +1875 -1871
- data/spec/handlers/alias_handler_spec.rb +82 -82
- data/spec/handlers/attribute_handler_spec.rb +96 -96
- data/spec/handlers/base_spec.rb +216 -216
- data/spec/handlers/c/alias_handler_spec.rb +34 -34
- data/spec/handlers/c/attribute_handler_spec.rb +41 -41
- data/spec/handlers/c/class_handler_spec.rb +78 -78
- data/spec/handlers/c/constant_handler_spec.rb +71 -71
- data/spec/handlers/c/init_handler_spec.rb +48 -48
- data/spec/handlers/c/method_handler_spec.rb +325 -325
- data/spec/handlers/c/mixin_handler_spec.rb +44 -44
- data/spec/handlers/c/module_handler_spec.rb +71 -71
- data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
- data/spec/handlers/c/path_handler_spec.rb +36 -36
- data/spec/handlers/c/spec_helper.rb +23 -23
- data/spec/handlers/c/struct_handler_spec.rb +16 -16
- data/spec/handlers/class_condition_handler_spec.rb +87 -87
- data/spec/handlers/class_handler_spec.rb +247 -247
- data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
- data/spec/handlers/class_variable_handler_spec.rb +12 -12
- data/spec/handlers/constant_handler_spec.rb +112 -112
- data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
- data/spec/handlers/dsl_handler_spec.rb +219 -219
- data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
- data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
- data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
- data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
- data/spec/handlers/examples/dsl_handler_001.rb.txt +154 -154
- data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
- data/spec/handlers/examples/extend_handler_001.rb.txt +15 -15
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
- data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -37
- data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
- data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
- data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
- data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
- data/spec/handlers/exception_handler_spec.rb +49 -49
- data/spec/handlers/extend_handler_spec.rb +24 -24
- data/spec/handlers/legacy_base_spec.rb +128 -128
- data/spec/handlers/method_condition_handler_spec.rb +15 -15
- data/spec/handlers/method_handler_spec.rb +190 -190
- data/spec/handlers/mixin_handler_spec.rb +56 -56
- data/spec/handlers/module_function_handler_spec.rb +106 -106
- data/spec/handlers/module_handler_spec.rb +35 -35
- data/spec/handlers/private_class_method_handler_spec.rb +11 -11
- data/spec/handlers/private_constant_handler_spec.rb +25 -25
- data/spec/handlers/processor_spec.rb +35 -35
- data/spec/handlers/public_class_method_handler_spec.rb +11 -11
- data/spec/handlers/ruby/base_spec.rb +95 -95
- data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
- data/spec/handlers/spec_helper.rb +33 -33
- data/spec/handlers/visibility_handler_spec.rb +44 -44
- data/spec/handlers/yield_handler_spec.rb +52 -52
- data/spec/i18n/locale_spec.rb +81 -81
- data/spec/i18n/message_spec.rb +52 -52
- data/spec/i18n/messages_spec.rb +67 -67
- data/spec/i18n/pot_generator_spec.rb +295 -295
- data/spec/i18n/text_spec.rb +184 -184
- data/spec/logging_spec.rb +44 -44
- data/spec/options_spec.rb +171 -171
- data/spec/parser/base_spec.rb +24 -24
- data/spec/parser/c_parser_spec.rb +236 -223
- data/spec/parser/examples/array.c.txt +6267 -6267
- data/spec/parser/examples/example1.rb.txt +7 -7
- data/spec/parser/examples/extrafile.c.txt +8 -8
- data/spec/parser/examples/file.c.txt +28 -0
- data/spec/parser/examples/multifile.c.txt +22 -22
- data/spec/parser/examples/namespace.cpp.txt +68 -68
- data/spec/parser/examples/override.c.txt +424 -424
- data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
- data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
- data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
- data/spec/parser/ruby/ast_node_spec.rb +33 -33
- data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
- data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
- data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
- data/spec/parser/ruby/token_resolver_spec.rb +165 -165
- data/spec/parser/source_parser_spec.rb +727 -727
- data/spec/parser/tag_parsing_spec.rb +17 -17
- data/spec/rake/yardoc_task_spec.rb +118 -118
- data/spec/registry_spec.rb +463 -463
- data/spec/registry_store_spec.rb +316 -316
- data/spec/rubygems/doc_manager_spec.rb +112 -112
- data/spec/serializers/data/serialized_yardoc/checksums +1 -1
- data/spec/serializers/file_system_serializer_spec.rb +145 -145
- data/spec/serializers/spec_helper.rb +2 -2
- data/spec/serializers/yardoc_serializer_spec.rb +78 -78
- data/spec/server/adapter_spec.rb +39 -39
- data/spec/server/commands/base_spec.rb +91 -91
- data/spec/server/commands/library_command_spec.rb +39 -39
- data/spec/server/doc_server_helper_spec.rb +72 -72
- data/spec/server/doc_server_serializer_spec.rb +60 -60
- data/spec/server/rack_adapter_spec.rb +21 -21
- data/spec/server/router_spec.rb +123 -123
- data/spec/server/spec_helper.rb +22 -22
- data/spec/server/static_caching_spec.rb +47 -47
- data/spec/server/webrick_servlet_spec.rb +20 -20
- data/spec/server_spec.rb +19 -19
- data/spec/spec_helper.rb +212 -212
- data/spec/tags/default_factory_spec.rb +168 -168
- data/spec/tags/default_tag_spec.rb +11 -11
- data/spec/tags/directives_spec.rb +463 -463
- data/spec/tags/library_spec.rb +48 -48
- data/spec/tags/overload_tag_spec.rb +53 -53
- data/spec/tags/ref_tag_list_spec.rb +53 -53
- data/spec/tags/types_explainer_spec.rb +203 -203
- data/spec/templates/class_spec.rb +45 -45
- data/spec/templates/constant_spec.rb +41 -41
- data/spec/templates/engine_spec.rb +131 -131
- data/spec/templates/examples/class001.html +308 -308
- data/spec/templates/examples/class001.txt +36 -36
- data/spec/templates/examples/class002.html +39 -39
- data/spec/templates/examples/constant001.txt +24 -24
- data/spec/templates/examples/constant002.txt +6 -6
- data/spec/templates/examples/constant003.txt +10 -10
- data/spec/templates/examples/method001.html +137 -137
- data/spec/templates/examples/method001.txt +35 -35
- data/spec/templates/examples/method002.html +91 -91
- data/spec/templates/examples/method002.txt +20 -20
- data/spec/templates/examples/method003.html +165 -165
- data/spec/templates/examples/method003.txt +45 -45
- data/spec/templates/examples/method004.html +48 -48
- data/spec/templates/examples/method004.txt +10 -10
- data/spec/templates/examples/method005.html +105 -105
- data/spec/templates/examples/method005.txt +33 -33
- data/spec/templates/examples/method006.html +107 -107
- data/spec/templates/examples/method006.txt +20 -20
- data/spec/templates/examples/module001.dot +33 -33
- data/spec/templates/examples/module001.html +833 -833
- data/spec/templates/examples/module001.txt +33 -33
- data/spec/templates/examples/module002.html +341 -341
- data/spec/templates/examples/module003.html +202 -202
- data/spec/templates/examples/module004.html +394 -394
- data/spec/templates/examples/module005.html +81 -81
- data/spec/templates/examples/tag001.txt +82 -82
- data/spec/templates/helpers/base_helper_spec.rb +171 -171
- data/spec/templates/helpers/html_helper_spec.rb +668 -653
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
- data/spec/templates/helpers/markup_helper_spec.rb +136 -136
- data/spec/templates/helpers/method_helper_spec.rb +107 -107
- data/spec/templates/helpers/module_helper_spec.rb +35 -35
- data/spec/templates/helpers/shared_signature_examples.rb +126 -126
- data/spec/templates/helpers/text_helper_spec.rb +65 -65
- data/spec/templates/method_spec.rb +118 -118
- data/spec/templates/module_spec.rb +203 -203
- data/spec/templates/onefile_spec.rb +66 -66
- data/spec/templates/section_spec.rb +144 -144
- data/spec/templates/spec_helper.rb +76 -76
- data/spec/templates/tag_spec.rb +52 -52
- data/spec/templates/template_spec.rb +410 -410
- data/spec/verifier_spec.rb +106 -106
- data/templates/default/class/dot/setup.rb +7 -7
- data/templates/default/class/dot/superklass.erb +2 -2
- data/templates/default/class/html/constructor_details.erb +8 -8
- data/templates/default/class/html/setup.rb +2 -2
- data/templates/default/class/html/subclasses.erb +4 -4
- data/templates/default/class/setup.rb +36 -36
- data/templates/default/class/text/setup.rb +12 -12
- data/templates/default/class/text/subclasses.erb +5 -5
- data/templates/default/constant/text/header.erb +11 -11
- data/templates/default/constant/text/setup.rb +4 -4
- data/templates/default/docstring/html/abstract.erb +4 -4
- data/templates/default/docstring/html/deprecated.erb +1 -1
- data/templates/default/docstring/html/index.erb +5 -5
- data/templates/default/docstring/html/note.erb +6 -6
- data/templates/default/docstring/html/private.erb +4 -4
- data/templates/default/docstring/html/text.erb +1 -1
- data/templates/default/docstring/html/todo.erb +6 -6
- data/templates/default/docstring/setup.rb +52 -52
- data/templates/default/docstring/text/abstract.erb +2 -2
- data/templates/default/docstring/text/deprecated.erb +2 -2
- data/templates/default/docstring/text/index.erb +2 -2
- data/templates/default/docstring/text/note.erb +3 -3
- data/templates/default/docstring/text/private.erb +2 -2
- data/templates/default/docstring/text/text.erb +1 -1
- data/templates/default/docstring/text/todo.erb +3 -3
- data/templates/default/fulldoc/html/css/full_list.css +58 -58
- data/templates/default/fulldoc/html/css/style.css +496 -496
- data/templates/default/fulldoc/html/frames.erb +17 -17
- data/templates/default/fulldoc/html/full_list.erb +37 -37
- data/templates/default/fulldoc/html/full_list_class.erb +2 -2
- data/templates/default/fulldoc/html/full_list_file.erb +7 -7
- data/templates/default/fulldoc/html/full_list_method.erb +10 -10
- data/templates/default/fulldoc/html/js/app.js +292 -292
- data/templates/default/fulldoc/html/js/full_list.js +216 -216
- data/templates/default/fulldoc/html/js/jquery.js +3 -3
- data/templates/default/fulldoc/html/setup.rb +241 -241
- data/templates/default/layout/dot/header.erb +5 -5
- data/templates/default/layout/dot/setup.rb +15 -15
- data/templates/default/layout/html/breadcrumb.erb +11 -11
- data/templates/default/layout/html/files.erb +11 -11
- data/templates/default/layout/html/footer.erb +5 -5
- data/templates/default/layout/html/headers.erb +15 -15
- data/templates/default/layout/html/index.erb +2 -2
- data/templates/default/layout/html/layout.erb +23 -23
- data/templates/default/layout/html/listing.erb +4 -4
- data/templates/default/layout/html/objects.erb +32 -32
- data/templates/default/layout/html/script_setup.erb +4 -4
- data/templates/default/layout/html/search.erb +12 -12
- data/templates/default/layout/html/setup.rb +89 -89
- data/templates/default/method/html/header.erb +16 -16
- data/templates/default/method/setup.rb +4 -4
- data/templates/default/method_details/html/header.erb +2 -2
- data/templates/default/method_details/html/method_signature.erb +24 -24
- data/templates/default/method_details/html/source.erb +9 -9
- data/templates/default/method_details/setup.rb +11 -11
- data/templates/default/method_details/text/header.erb +10 -10
- data/templates/default/method_details/text/method_signature.erb +12 -12
- data/templates/default/method_details/text/setup.rb +11 -11
- data/templates/default/module/dot/child.erb +1 -1
- data/templates/default/module/dot/dependencies.erb +2 -2
- data/templates/default/module/dot/header.erb +6 -6
- data/templates/default/module/dot/info.erb +13 -13
- data/templates/default/module/dot/setup.rb +15 -15
- data/templates/default/module/html/attribute_details.erb +10 -10
- data/templates/default/module/html/attribute_summary.erb +8 -8
- data/templates/default/module/html/box_info.erb +43 -43
- data/templates/default/module/html/children.erb +8 -8
- data/templates/default/module/html/constant_summary.erb +17 -17
- data/templates/default/module/html/defines.erb +2 -2
- data/templates/default/module/html/header.erb +5 -5
- data/templates/default/module/html/inherited_attributes.erb +14 -14
- data/templates/default/module/html/inherited_constants.erb +8 -8
- data/templates/default/module/html/inherited_methods.erb +18 -18
- data/templates/default/module/html/item_summary.erb +40 -40
- data/templates/default/module/html/method_details_list.erb +9 -9
- data/templates/default/module/html/method_summary.erb +13 -13
- data/templates/default/module/html/methodmissing.erb +12 -12
- data/templates/default/module/setup.rb +167 -167
- data/templates/default/module/text/children.erb +9 -9
- data/templates/default/module/text/class_meths_list.erb +7 -7
- data/templates/default/module/text/extends.erb +7 -7
- data/templates/default/module/text/header.erb +7 -7
- data/templates/default/module/text/includes.erb +7 -7
- data/templates/default/module/text/instance_meths_list.erb +7 -7
- data/templates/default/module/text/setup.rb +13 -13
- data/templates/default/onefile/html/files.erb +4 -4
- data/templates/default/onefile/html/headers.erb +6 -6
- data/templates/default/onefile/html/layout.erb +17 -17
- data/templates/default/onefile/html/readme.erb +2 -2
- data/templates/default/onefile/html/setup.rb +62 -62
- data/templates/default/root/dot/child.erb +2 -2
- data/templates/default/root/dot/setup.rb +6 -6
- data/templates/default/root/html/setup.rb +2 -2
- data/templates/default/tags/html/example.erb +10 -10
- data/templates/default/tags/html/index.erb +2 -2
- data/templates/default/tags/html/option.erb +24 -24
- data/templates/default/tags/html/overload.erb +13 -13
- data/templates/default/tags/html/see.erb +7 -7
- data/templates/default/tags/html/tag.erb +20 -20
- data/templates/default/tags/setup.rb +57 -57
- data/templates/default/tags/text/example.erb +12 -12
- data/templates/default/tags/text/index.erb +1 -1
- data/templates/default/tags/text/option.erb +20 -20
- data/templates/default/tags/text/overload.erb +19 -19
- data/templates/default/tags/text/see.erb +11 -11
- data/templates/default/tags/text/tag.erb +13 -13
- data/templates/guide/class/html/setup.rb +2 -2
- data/templates/guide/docstring/html/setup.rb +2 -2
- data/templates/guide/fulldoc/html/css/style.css +108 -108
- data/templates/guide/fulldoc/html/js/app.js +33 -33
- data/templates/guide/fulldoc/html/setup.rb +74 -74
- data/templates/guide/layout/html/layout.erb +81 -81
- data/templates/guide/layout/html/setup.rb +25 -25
- data/templates/guide/method/html/header.erb +17 -17
- data/templates/guide/method/html/setup.rb +22 -22
- data/templates/guide/module/html/header.erb +6 -6
- data/templates/guide/module/html/method_list.erb +4 -4
- data/templates/guide/module/html/setup.rb +27 -27
- data/templates/guide/onefile/html/files.erb +4 -4
- data/templates/guide/onefile/html/setup.rb +6 -6
- data/templates/guide/onefile/html/toc.erb +3 -3
- data/templates/guide/tags/html/setup.rb +9 -9
- data/yard.gemspec +43 -43
- metadata +4 -4
@@ -1,27 +1,27 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# Handles 'raise' calls inside methods
|
3
|
-
class YARD::Handlers::Ruby::ExceptionHandler < YARD::Handlers::Ruby::Base
|
4
|
-
handles method_call(:raise)
|
5
|
-
|
6
|
-
process do
|
7
|
-
return unless owner.is_a?(MethodObject) # Only methods yield
|
8
|
-
return if [:command_call, :call].include? statement.type
|
9
|
-
return if owner.has_tag?(:raise)
|
10
|
-
|
11
|
-
klass = nil
|
12
|
-
if statement.call?
|
13
|
-
params = statement.parameters(false)
|
14
|
-
if params.size == 1
|
15
|
-
if params.first.ref? && params.first.first.type != :ident
|
16
|
-
klass = params.first.source
|
17
|
-
elsif params.first.call? && params.first.method_name(true) == :new
|
18
|
-
klass = params.first.namespace.source
|
19
|
-
end
|
20
|
-
elsif params.size > 1
|
21
|
-
klass = params.first.source
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
owner.add_tag YARD::Tags::Tag.new(:raise, '', klass) if klass
|
26
|
-
end
|
27
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Handles 'raise' calls inside methods
|
3
|
+
class YARD::Handlers::Ruby::ExceptionHandler < YARD::Handlers::Ruby::Base
|
4
|
+
handles method_call(:raise)
|
5
|
+
|
6
|
+
process do
|
7
|
+
return unless owner.is_a?(MethodObject) # Only methods yield
|
8
|
+
return if [:command_call, :call].include? statement.type
|
9
|
+
return if owner.has_tag?(:raise)
|
10
|
+
|
11
|
+
klass = nil
|
12
|
+
if statement.call?
|
13
|
+
params = statement.parameters(false)
|
14
|
+
if params.size == 1
|
15
|
+
if params.first.ref? && params.first.first.type != :ident
|
16
|
+
klass = params.first.source
|
17
|
+
elsif params.first.call? && params.first.method_name(true) == :new
|
18
|
+
klass = params.first.namespace.source
|
19
|
+
end
|
20
|
+
elsif params.size > 1
|
21
|
+
klass = params.first.source
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
owner.add_tag YARD::Tags::Tag.new(:raise, '', klass) if klass
|
26
|
+
end
|
27
|
+
end
|
@@ -1,22 +1,22 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# Handles 'extend' call to include modules into the class scope of another
|
3
|
-
# @see MixinHandler
|
4
|
-
class YARD::Handlers::Ruby::ExtendHandler < YARD::Handlers::Ruby::MixinHandler
|
5
|
-
handles method_call(:extend)
|
6
|
-
namespace_only
|
7
|
-
|
8
|
-
def scope; :class end
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
def process_mixin(mixin)
|
13
|
-
if mixin == s(:var_ref, s(:kw, "self"))
|
14
|
-
if namespace.is_a?(ClassObject)
|
15
|
-
raise UndocumentableError, "extend(self) statement on class"
|
16
|
-
end
|
17
|
-
namespace.mixins(scope) << namespace
|
18
|
-
else
|
19
|
-
super
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Handles 'extend' call to include modules into the class scope of another
|
3
|
+
# @see MixinHandler
|
4
|
+
class YARD::Handlers::Ruby::ExtendHandler < YARD::Handlers::Ruby::MixinHandler
|
5
|
+
handles method_call(:extend)
|
6
|
+
namespace_only
|
7
|
+
|
8
|
+
def scope; :class end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def process_mixin(mixin)
|
13
|
+
if mixin == s(:var_ref, s(:kw, "self"))
|
14
|
+
if namespace.is_a?(ClassObject)
|
15
|
+
raise UndocumentableError, "extend(self) statement on class"
|
16
|
+
end
|
17
|
+
namespace.mixins(scope) << namespace
|
18
|
+
else
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,37 +1,37 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# (see Ruby::AliasHandler)
|
3
|
-
class YARD::Handlers::Ruby::Legacy::AliasHandler < YARD::Handlers::Ruby::Legacy::Base
|
4
|
-
handles(/\Aalias(_method)?(\s|\()/)
|
5
|
-
namespace_only
|
6
|
-
|
7
|
-
process do
|
8
|
-
if TkALIAS === statement.tokens.first
|
9
|
-
tokens = statement.tokens[2..-1].to_s.split(/\s+/)
|
10
|
-
names = [tokens[0], tokens[1]].map {|t| t.gsub(/^:(['"])?(.+?)\1?$|^(:)(.+)/, '\2') }
|
11
|
-
else
|
12
|
-
names = tokval_list(statement.tokens[2..-1], :attr)
|
13
|
-
end
|
14
|
-
raise YARD::Parser::UndocumentableError, statement.tokens.first.text if names.size != 2
|
15
|
-
|
16
|
-
names = names.map {|n| Symbol === n ? n.to_s.delete('"') : n }
|
17
|
-
new_meth = names[0].to_sym
|
18
|
-
old_meth = names[1].to_sym
|
19
|
-
old_obj = namespace.child(:name => old_meth, :scope => scope)
|
20
|
-
new_obj = register MethodObject.new(namespace, new_meth, scope) do |o|
|
21
|
-
o.add_file(parser.file, statement.tokens.first.line_no, statement.comments)
|
22
|
-
end
|
23
|
-
|
24
|
-
if old_obj
|
25
|
-
new_obj.signature = old_obj.signature
|
26
|
-
new_obj.source = old_obj.source
|
27
|
-
new_obj.docstring = old_obj.docstring + YARD::Docstring.new(statement.comments)
|
28
|
-
new_obj.docstring.line_range = statement.comments_range
|
29
|
-
new_obj.docstring.hash_flag = statement.comments_hash_flag
|
30
|
-
new_obj.docstring.object = new_obj
|
31
|
-
else
|
32
|
-
new_obj.signature = "def #{new_meth}" # this is all we know.
|
33
|
-
end
|
34
|
-
|
35
|
-
namespace.aliases[new_obj] = old_meth
|
36
|
-
end
|
37
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# (see Ruby::AliasHandler)
|
3
|
+
class YARD::Handlers::Ruby::Legacy::AliasHandler < YARD::Handlers::Ruby::Legacy::Base
|
4
|
+
handles(/\Aalias(_method)?(\s|\()/)
|
5
|
+
namespace_only
|
6
|
+
|
7
|
+
process do
|
8
|
+
if TkALIAS === statement.tokens.first
|
9
|
+
tokens = statement.tokens[2..-1].to_s.split(/\s+/)
|
10
|
+
names = [tokens[0], tokens[1]].map {|t| t.gsub(/^:(['"])?(.+?)\1?$|^(:)(.+)/, '\2') }
|
11
|
+
else
|
12
|
+
names = tokval_list(statement.tokens[2..-1], :attr)
|
13
|
+
end
|
14
|
+
raise YARD::Parser::UndocumentableError, statement.tokens.first.text if names.size != 2
|
15
|
+
|
16
|
+
names = names.map {|n| Symbol === n ? n.to_s.delete('"') : n }
|
17
|
+
new_meth = names[0].to_sym
|
18
|
+
old_meth = names[1].to_sym
|
19
|
+
old_obj = namespace.child(:name => old_meth, :scope => scope)
|
20
|
+
new_obj = register MethodObject.new(namespace, new_meth, scope) do |o|
|
21
|
+
o.add_file(parser.file, statement.tokens.first.line_no, statement.comments)
|
22
|
+
end
|
23
|
+
|
24
|
+
if old_obj
|
25
|
+
new_obj.signature = old_obj.signature
|
26
|
+
new_obj.source = old_obj.source
|
27
|
+
new_obj.docstring = old_obj.docstring + YARD::Docstring.new(statement.comments)
|
28
|
+
new_obj.docstring.line_range = statement.comments_range
|
29
|
+
new_obj.docstring.hash_flag = statement.comments_hash_flag
|
30
|
+
new_obj.docstring.object = new_obj
|
31
|
+
else
|
32
|
+
new_obj.signature = "def #{new_meth}" # this is all we know.
|
33
|
+
end
|
34
|
+
|
35
|
+
namespace.aliases[new_obj] = old_meth
|
36
|
+
end
|
37
|
+
end
|
@@ -1,65 +1,65 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
# (see Ruby::AttributeHandler)
|
3
|
-
class YARD::Handlers::Ruby::Legacy::AttributeHandler < YARD::Handlers::Ruby::Legacy::Base
|
4
|
-
handles(/\Aattr(?:_(?:reader|writer|accessor))?(?:\s|\()/)
|
5
|
-
namespace_only
|
6
|
-
|
7
|
-
process do
|
8
|
-
begin
|
9
|
-
attr_type = statement.tokens.first.text.to_sym
|
10
|
-
symbols = tokval_list statement.tokens[2..-1], :attr, TkTRUE, TkFALSE
|
11
|
-
read = true
|
12
|
-
write = false
|
13
|
-
rescue SyntaxError
|
14
|
-
raise YARD::Parser::UndocumentableError, attr_type
|
15
|
-
end
|
16
|
-
|
17
|
-
# Change read/write based on attr_reader/writer/accessor
|
18
|
-
case attr_type
|
19
|
-
when :attr
|
20
|
-
# In the case of 'attr', the second parameter (if given) isn't a symbol.
|
21
|
-
write = symbols.pop if symbols.size == 2
|
22
|
-
when :attr_accessor
|
23
|
-
write = true
|
24
|
-
when :attr_reader
|
25
|
-
# change nothing
|
26
|
-
when :attr_writer
|
27
|
-
read = false
|
28
|
-
write = true
|
29
|
-
end
|
30
|
-
|
31
|
-
# Add all attributes
|
32
|
-
symbols.each do |name|
|
33
|
-
namespace.attributes[scope][name] = SymbolHash[:read => nil, :write => nil]
|
34
|
-
|
35
|
-
# Show their methods as well
|
36
|
-
{:read => name, :write => "#{name}="}.each do |type, meth|
|
37
|
-
if type == :read ? read : write
|
38
|
-
o = MethodObject.new(namespace, meth, scope)
|
39
|
-
if type == :write
|
40
|
-
o.parameters = [['value', nil]]
|
41
|
-
src = "def #{meth}(value)"
|
42
|
-
full_src = "#{src}\n @#{name} = value\nend"
|
43
|
-
doc = "Sets the attribute #{name}\n@param value the value to set the attribute #{name} to."
|
44
|
-
else
|
45
|
-
src = "def #{meth}"
|
46
|
-
full_src = "#{src}\n @#{name}\nend"
|
47
|
-
doc = "Returns the value of attribute #{name}"
|
48
|
-
end
|
49
|
-
o.source ||= full_src
|
50
|
-
o.signature ||= src
|
51
|
-
register(o)
|
52
|
-
o.docstring = doc if o.docstring.blank?(false)
|
53
|
-
|
54
|
-
# Regsiter the object explicitly
|
55
|
-
namespace.attributes[scope][name][type] = o
|
56
|
-
else
|
57
|
-
obj = namespace.children.find {|other| other.name == meth.to_sym && other.scope == scope }
|
58
|
-
|
59
|
-
# register an existing method as attribute
|
60
|
-
namespace.attributes[scope][name][type] = obj if obj
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# (see Ruby::AttributeHandler)
|
3
|
+
class YARD::Handlers::Ruby::Legacy::AttributeHandler < YARD::Handlers::Ruby::Legacy::Base
|
4
|
+
handles(/\Aattr(?:_(?:reader|writer|accessor))?(?:\s|\()/)
|
5
|
+
namespace_only
|
6
|
+
|
7
|
+
process do
|
8
|
+
begin
|
9
|
+
attr_type = statement.tokens.first.text.to_sym
|
10
|
+
symbols = tokval_list statement.tokens[2..-1], :attr, TkTRUE, TkFALSE
|
11
|
+
read = true
|
12
|
+
write = false
|
13
|
+
rescue SyntaxError
|
14
|
+
raise YARD::Parser::UndocumentableError, attr_type
|
15
|
+
end
|
16
|
+
|
17
|
+
# Change read/write based on attr_reader/writer/accessor
|
18
|
+
case attr_type
|
19
|
+
when :attr
|
20
|
+
# In the case of 'attr', the second parameter (if given) isn't a symbol.
|
21
|
+
write = symbols.pop if symbols.size == 2
|
22
|
+
when :attr_accessor
|
23
|
+
write = true
|
24
|
+
when :attr_reader
|
25
|
+
# change nothing
|
26
|
+
when :attr_writer
|
27
|
+
read = false
|
28
|
+
write = true
|
29
|
+
end
|
30
|
+
|
31
|
+
# Add all attributes
|
32
|
+
symbols.each do |name|
|
33
|
+
namespace.attributes[scope][name] = SymbolHash[:read => nil, :write => nil]
|
34
|
+
|
35
|
+
# Show their methods as well
|
36
|
+
{:read => name, :write => "#{name}="}.each do |type, meth|
|
37
|
+
if type == :read ? read : write
|
38
|
+
o = MethodObject.new(namespace, meth, scope)
|
39
|
+
if type == :write
|
40
|
+
o.parameters = [['value', nil]]
|
41
|
+
src = "def #{meth}(value)"
|
42
|
+
full_src = "#{src}\n @#{name} = value\nend"
|
43
|
+
doc = "Sets the attribute #{name}\n@param value the value to set the attribute #{name} to."
|
44
|
+
else
|
45
|
+
src = "def #{meth}"
|
46
|
+
full_src = "#{src}\n @#{name}\nend"
|
47
|
+
doc = "Returns the value of attribute #{name}"
|
48
|
+
end
|
49
|
+
o.source ||= full_src
|
50
|
+
o.signature ||= src
|
51
|
+
register(o)
|
52
|
+
o.docstring = doc if o.docstring.blank?(false)
|
53
|
+
|
54
|
+
# Regsiter the object explicitly
|
55
|
+
namespace.attributes[scope][name][type] = o
|
56
|
+
else
|
57
|
+
obj = namespace.children.find {|other| other.name == meth.to_sym && other.scope == scope }
|
58
|
+
|
59
|
+
# register an existing method as attribute
|
60
|
+
namespace.attributes[scope][name][type] = obj if obj
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -1,245 +1,245 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module YARD
|
3
|
-
module Handlers
|
4
|
-
module Ruby::Legacy
|
5
|
-
# This is the base handler for the legacy parser. To implement a legacy
|
6
|
-
# handler, subclass this class.
|
7
|
-
#
|
8
|
-
# @abstract (see Ruby::Base)
|
9
|
-
class Base < Handlers::Base
|
10
|
-
# For tokens like TkDEF, TkCLASS, etc.
|
11
|
-
include YARD::Parser::Ruby::Legacy::RubyToken
|
12
|
-
|
13
|
-
# @return [Boolean] whether or not a {Parser::Ruby::Legacy::Statement} object should be handled
|
14
|
-
# by this handler.
|
15
|
-
def self.handles?(stmt)
|
16
|
-
handlers.any? do |a_handler|
|
17
|
-
case a_handler
|
18
|
-
when String
|
19
|
-
stmt.tokens.first.text == a_handler
|
20
|
-
when Regexp
|
21
|
-
stmt.tokens.to_s =~ a_handler
|
22
|
-
else
|
23
|
-
a_handler == stmt.tokens.first.class
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Parses a statement's block with a set of state values. If the
|
29
|
-
# statement has no block, nothing happens. A description of state
|
30
|
-
# values can be found at {Handlers::Base#push_state}
|
31
|
-
#
|
32
|
-
# @param [Hash] opts State options
|
33
|
-
# @option opts (see Handlers::Base#push_state)
|
34
|
-
# @see Handlers::Base#push_state #push_state
|
35
|
-
def parse_block(opts = {})
|
36
|
-
push_state(opts) do
|
37
|
-
if statement.block
|
38
|
-
blk = Parser::Ruby::Legacy::StatementList.new(statement.block)
|
39
|
-
parser.process(blk)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def call_params
|
45
|
-
if statement.tokens.first.is_a?(TkDEF)
|
46
|
-
extract_method_details.last.map(&:first)
|
47
|
-
else
|
48
|
-
tokens = statement.tokens[1..-1]
|
49
|
-
tokval_list(tokens, :attr, :identifier, TkId).map(&:to_s)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def caller_method
|
54
|
-
if statement.tokens.first.is_a?(TkIDENTIFIER)
|
55
|
-
statement.tokens.first.text
|
56
|
-
elsif statement.tokens.first.is_a?(TkDEF)
|
57
|
-
extract_method_details.first
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
private
|
62
|
-
|
63
|
-
# Extracts method information for macro expansion only
|
64
|
-
#
|
65
|
-
# @todo This is a duplicate implementation of {MethodHandler}. Refactor.
|
66
|
-
# @return [Array<String,Array<Array<String>>>] the method name followed by method
|
67
|
-
# arguments (name and optional value)
|
68
|
-
def extract_method_details
|
69
|
-
if statement.tokens.to_s =~ /^def\s+(#{METHODMATCH})(?:(?:\s+|\s*\()(.*)(?:\)\s*$)?)?/m
|
70
|
-
meth = $1
|
71
|
-
args = $2
|
72
|
-
meth.gsub!(/\s+/, '')
|
73
|
-
args = tokval_list(Parser::Ruby::Legacy::TokenList.new(args), :all)
|
74
|
-
args.map! {|a| k, v = *a.split('=', 2); [k.strip, (v ? v.strip : nil)] } if args
|
75
|
-
meth = $` if meth =~ /(?:#{NSEPQ}|#{CSEPQ})([^#{NSEP}#{CSEPQ}]+)$/
|
76
|
-
[meth, args]
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
# The string value of a token. For example, the return value for the symbol :sym
|
81
|
-
# would be :sym. The return value for a string +"foo #{ bar}"+ would be the literal
|
82
|
-
# +"foo #{ bar}"+ without any interpolation. The return value of the identifier
|
83
|
-
# 'test' would be the same value: 'test'. Here is a list of common types and
|
84
|
-
# their return values:
|
85
|
-
#
|
86
|
-
# @example
|
87
|
-
# tokval(TokenList.new('"foo"').first) => "foo"
|
88
|
-
# tokval(TokenList.new(':foo').first) => :foo
|
89
|
-
# tokval(TokenList.new('CONSTANT').first, RubyToken::TkId) => "CONSTANT"
|
90
|
-
# tokval(TokenList.new('identifier').first, RubyToken::TkId) => "identifier"
|
91
|
-
# tokval(TokenList.new('3.25').first) => 3.25
|
92
|
-
# tokval(TokenList.new('/xyz/i').first) => /xyz/i
|
93
|
-
#
|
94
|
-
# @param [Token] token The token of the class
|
95
|
-
#
|
96
|
-
# @param [Array<Class<Token>>, Symbol] accepted_types
|
97
|
-
# The allowed token types that this token can be. Defaults to [{TkVal}].
|
98
|
-
# A list of types would be, for example, [+TkSTRING+, +TkSYMBOL+], to return
|
99
|
-
# the token's value if it is either of those types. If +TkVal+ is accepted,
|
100
|
-
# +TkNode+ is also accepted.
|
101
|
-
#
|
102
|
-
# Certain symbol keys are allowed to specify multiple types in one fell swoop.
|
103
|
-
# These symbols are:
|
104
|
-
# :string => +TkSTRING+, +TkDSTRING+, +TkDXSTRING+ and +TkXSTRING+
|
105
|
-
# :attr => +TkSYMBOL+ and +TkSTRING+
|
106
|
-
# :identifier => +TkIDENTIFIER, +TkFID+ and +TkGVAR+.
|
107
|
-
# :number => +TkFLOAT+, +TkINTEGER+
|
108
|
-
#
|
109
|
-
# @return [Object] if the token is one of the accepted types, in its real value form.
|
110
|
-
# It should be noted that identifiers and constants are kept in String form.
|
111
|
-
# @return [nil] if the token is not any of the specified accepted types
|
112
|
-
def tokval(token, *accepted_types)
|
113
|
-
accepted_types = [TkVal] if accepted_types.empty?
|
114
|
-
accepted_types.push(TkNode) if accepted_types.include? TkVal
|
115
|
-
|
116
|
-
if accepted_types.include?(:attr)
|
117
|
-
accepted_types.push(TkSTRING, TkSYMBOL)
|
118
|
-
end
|
119
|
-
|
120
|
-
if accepted_types.include?(:string)
|
121
|
-
accepted_types.push(TkSTRING, TkDSTRING, TkXSTRING, TkDXSTRING)
|
122
|
-
end
|
123
|
-
|
124
|
-
if accepted_types.include?(:identifier)
|
125
|
-
accepted_types.push(TkIDENTIFIER, TkFID, TkGVAR)
|
126
|
-
end
|
127
|
-
|
128
|
-
if accepted_types.include?(:number)
|
129
|
-
accepted_types.push(TkFLOAT, TkINTEGER)
|
130
|
-
end
|
131
|
-
|
132
|
-
return unless accepted_types.any? {|t| t === token }
|
133
|
-
|
134
|
-
case token
|
135
|
-
when TkSTRING, TkDSTRING, TkXSTRING, TkDXSTRING
|
136
|
-
token.text[1..-2]
|
137
|
-
when TkSYMBOL
|
138
|
-
token.text[1..-1].to_sym
|
139
|
-
when TkFLOAT
|
140
|
-
token.text.to_f
|
141
|
-
when TkINTEGER
|
142
|
-
token.text.to_i
|
143
|
-
when TkREGEXP
|
144
|
-
token.text =~ %r{\A/(.+)/([^/])\Z}
|
145
|
-
Regexp.new($1, $2)
|
146
|
-
when TkTRUE
|
147
|
-
true
|
148
|
-
when TkFALSE
|
149
|
-
false
|
150
|
-
when TkNIL
|
151
|
-
nil
|
152
|
-
else
|
153
|
-
token.text
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
# Returns a list of symbols or string values from a statement.
|
158
|
-
# The list must be a valid comma delimited list, and values
|
159
|
-
# will only be returned to the end of the list only.
|
160
|
-
#
|
161
|
-
# Example:
|
162
|
-
# attr_accessor :a, 'b', :c, :d => ['a', 'b', 'c', 'd']
|
163
|
-
# attr_accessor 'a', UNACCEPTED_TYPE, 'c' => ['a', 'c']
|
164
|
-
#
|
165
|
-
# The tokval list of a {Parser::Ruby::Legacy::TokenList} of the above
|
166
|
-
# code would be the {#tokval} value of :a, 'b',
|
167
|
-
# :c and :d.
|
168
|
-
#
|
169
|
-
# It should also be noted that this function stops immediately at
|
170
|
-
# any ruby keyword encountered:
|
171
|
-
# "attr_accessor :a, :b, :c if x == 5" => ['a', 'b', 'c']
|
172
|
-
#
|
173
|
-
# @param [TokenList] tokenlist The list of tokens to process.
|
174
|
-
# @param [Array<Class<Token>>] accepted_types passed to {#tokval}
|
175
|
-
# @return [Array<String>] the list of tokvalues in the list.
|
176
|
-
# @return [Array<EMPTY>] if there are no symbols or Strings in the list
|
177
|
-
# @see #tokval
|
178
|
-
def tokval_list(tokenlist, *accepted_types)
|
179
|
-
return [] unless tokenlist
|
180
|
-
out = [[]]
|
181
|
-
parencount = 0
|
182
|
-
beforeparen = 0
|
183
|
-
needcomma = false
|
184
|
-
seen_comma = true
|
185
|
-
tokenlist.each do |token|
|
186
|
-
tokval = accepted_types == [:all] ? token.text : tokval(token, *accepted_types)
|
187
|
-
parencond = !out.last.empty? && !tokval.nil?
|
188
|
-
# puts "#{seen_comma.inspect} #{parencount} #{token.class.class_name} #{out.inspect}"
|
189
|
-
case token
|
190
|
-
when TkCOMMA
|
191
|
-
if parencount == 0
|
192
|
-
out << [] unless out.last.empty?
|
193
|
-
needcomma = false
|
194
|
-
seen_comma = true
|
195
|
-
elsif parencond
|
196
|
-
out.last << token.text
|
197
|
-
end
|
198
|
-
when TkLPAREN
|
199
|
-
if seen_comma
|
200
|
-
beforeparen += 1
|
201
|
-
else
|
202
|
-
parencount += 1
|
203
|
-
out.last << token.text if parencond
|
204
|
-
end
|
205
|
-
when TkRPAREN
|
206
|
-
if beforeparen > 0
|
207
|
-
beforeparen -= 1
|
208
|
-
else
|
209
|
-
out.last << token.text if parencount > 0 && !tokval.nil?
|
210
|
-
parencount -= 1
|
211
|
-
end
|
212
|
-
when TkLBRACE, TkLBRACK, TkDO
|
213
|
-
parencount += 1
|
214
|
-
out.last << token.text unless tokval.nil?
|
215
|
-
when TkRBRACE, TkRBRACK, TkEND
|
216
|
-
out.last << token.text unless tokval.nil?
|
217
|
-
parencount -= 1
|
218
|
-
else
|
219
|
-
break if TkKW === token && ![TkTRUE, TkFALSE, TkSUPER, TkSELF, TkNIL].include?(token.class)
|
220
|
-
|
221
|
-
seen_comma = false unless TkWhitespace === token
|
222
|
-
if parencount == 0
|
223
|
-
next if needcomma
|
224
|
-
next if TkWhitespace === token
|
225
|
-
if !tokval.nil?
|
226
|
-
out.last << tokval
|
227
|
-
else
|
228
|
-
out.last.clear
|
229
|
-
needcomma = true
|
230
|
-
end
|
231
|
-
elsif parencond
|
232
|
-
needcomma = true
|
233
|
-
out.last << token.text
|
234
|
-
end
|
235
|
-
end
|
236
|
-
|
237
|
-
break if beforeparen == 0 && parencount < 0
|
238
|
-
end
|
239
|
-
# Flatten any single element lists
|
240
|
-
out.map {|e| e.empty? ? nil : (e.size == 1 ? e.pop : e.flatten.join) }.compact
|
241
|
-
end
|
242
|
-
end
|
243
|
-
end
|
244
|
-
end
|
245
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module YARD
|
3
|
+
module Handlers
|
4
|
+
module Ruby::Legacy
|
5
|
+
# This is the base handler for the legacy parser. To implement a legacy
|
6
|
+
# handler, subclass this class.
|
7
|
+
#
|
8
|
+
# @abstract (see Ruby::Base)
|
9
|
+
class Base < Handlers::Base
|
10
|
+
# For tokens like TkDEF, TkCLASS, etc.
|
11
|
+
include YARD::Parser::Ruby::Legacy::RubyToken
|
12
|
+
|
13
|
+
# @return [Boolean] whether or not a {Parser::Ruby::Legacy::Statement} object should be handled
|
14
|
+
# by this handler.
|
15
|
+
def self.handles?(stmt)
|
16
|
+
handlers.any? do |a_handler|
|
17
|
+
case a_handler
|
18
|
+
when String
|
19
|
+
stmt.tokens.first.text == a_handler
|
20
|
+
when Regexp
|
21
|
+
stmt.tokens.to_s =~ a_handler
|
22
|
+
else
|
23
|
+
a_handler == stmt.tokens.first.class
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Parses a statement's block with a set of state values. If the
|
29
|
+
# statement has no block, nothing happens. A description of state
|
30
|
+
# values can be found at {Handlers::Base#push_state}
|
31
|
+
#
|
32
|
+
# @param [Hash] opts State options
|
33
|
+
# @option opts (see Handlers::Base#push_state)
|
34
|
+
# @see Handlers::Base#push_state #push_state
|
35
|
+
def parse_block(opts = {})
|
36
|
+
push_state(opts) do
|
37
|
+
if statement.block
|
38
|
+
blk = Parser::Ruby::Legacy::StatementList.new(statement.block)
|
39
|
+
parser.process(blk)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def call_params
|
45
|
+
if statement.tokens.first.is_a?(TkDEF)
|
46
|
+
extract_method_details.last.map(&:first)
|
47
|
+
else
|
48
|
+
tokens = statement.tokens[1..-1]
|
49
|
+
tokval_list(tokens, :attr, :identifier, TkId).map(&:to_s)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def caller_method
|
54
|
+
if statement.tokens.first.is_a?(TkIDENTIFIER)
|
55
|
+
statement.tokens.first.text
|
56
|
+
elsif statement.tokens.first.is_a?(TkDEF)
|
57
|
+
extract_method_details.first
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
# Extracts method information for macro expansion only
|
64
|
+
#
|
65
|
+
# @todo This is a duplicate implementation of {MethodHandler}. Refactor.
|
66
|
+
# @return [Array<String,Array<Array<String>>>] the method name followed by method
|
67
|
+
# arguments (name and optional value)
|
68
|
+
def extract_method_details
|
69
|
+
if statement.tokens.to_s =~ /^def\s+(#{METHODMATCH})(?:(?:\s+|\s*\()(.*)(?:\)\s*$)?)?/m
|
70
|
+
meth = $1
|
71
|
+
args = $2
|
72
|
+
meth.gsub!(/\s+/, '')
|
73
|
+
args = tokval_list(Parser::Ruby::Legacy::TokenList.new(args), :all)
|
74
|
+
args.map! {|a| k, v = *a.split('=', 2); [k.strip, (v ? v.strip : nil)] } if args
|
75
|
+
meth = $` if meth =~ /(?:#{NSEPQ}|#{CSEPQ})([^#{NSEP}#{CSEPQ}]+)$/
|
76
|
+
[meth, args]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# The string value of a token. For example, the return value for the symbol :sym
|
81
|
+
# would be :sym. The return value for a string +"foo #{ bar}"+ would be the literal
|
82
|
+
# +"foo #{ bar}"+ without any interpolation. The return value of the identifier
|
83
|
+
# 'test' would be the same value: 'test'. Here is a list of common types and
|
84
|
+
# their return values:
|
85
|
+
#
|
86
|
+
# @example
|
87
|
+
# tokval(TokenList.new('"foo"').first) => "foo"
|
88
|
+
# tokval(TokenList.new(':foo').first) => :foo
|
89
|
+
# tokval(TokenList.new('CONSTANT').first, RubyToken::TkId) => "CONSTANT"
|
90
|
+
# tokval(TokenList.new('identifier').first, RubyToken::TkId) => "identifier"
|
91
|
+
# tokval(TokenList.new('3.25').first) => 3.25
|
92
|
+
# tokval(TokenList.new('/xyz/i').first) => /xyz/i
|
93
|
+
#
|
94
|
+
# @param [Token] token The token of the class
|
95
|
+
#
|
96
|
+
# @param [Array<Class<Token>>, Symbol] accepted_types
|
97
|
+
# The allowed token types that this token can be. Defaults to [{TkVal}].
|
98
|
+
# A list of types would be, for example, [+TkSTRING+, +TkSYMBOL+], to return
|
99
|
+
# the token's value if it is either of those types. If +TkVal+ is accepted,
|
100
|
+
# +TkNode+ is also accepted.
|
101
|
+
#
|
102
|
+
# Certain symbol keys are allowed to specify multiple types in one fell swoop.
|
103
|
+
# These symbols are:
|
104
|
+
# :string => +TkSTRING+, +TkDSTRING+, +TkDXSTRING+ and +TkXSTRING+
|
105
|
+
# :attr => +TkSYMBOL+ and +TkSTRING+
|
106
|
+
# :identifier => +TkIDENTIFIER, +TkFID+ and +TkGVAR+.
|
107
|
+
# :number => +TkFLOAT+, +TkINTEGER+
|
108
|
+
#
|
109
|
+
# @return [Object] if the token is one of the accepted types, in its real value form.
|
110
|
+
# It should be noted that identifiers and constants are kept in String form.
|
111
|
+
# @return [nil] if the token is not any of the specified accepted types
|
112
|
+
def tokval(token, *accepted_types)
|
113
|
+
accepted_types = [TkVal] if accepted_types.empty?
|
114
|
+
accepted_types.push(TkNode) if accepted_types.include? TkVal
|
115
|
+
|
116
|
+
if accepted_types.include?(:attr)
|
117
|
+
accepted_types.push(TkSTRING, TkSYMBOL)
|
118
|
+
end
|
119
|
+
|
120
|
+
if accepted_types.include?(:string)
|
121
|
+
accepted_types.push(TkSTRING, TkDSTRING, TkXSTRING, TkDXSTRING)
|
122
|
+
end
|
123
|
+
|
124
|
+
if accepted_types.include?(:identifier)
|
125
|
+
accepted_types.push(TkIDENTIFIER, TkFID, TkGVAR)
|
126
|
+
end
|
127
|
+
|
128
|
+
if accepted_types.include?(:number)
|
129
|
+
accepted_types.push(TkFLOAT, TkINTEGER)
|
130
|
+
end
|
131
|
+
|
132
|
+
return unless accepted_types.any? {|t| t === token }
|
133
|
+
|
134
|
+
case token
|
135
|
+
when TkSTRING, TkDSTRING, TkXSTRING, TkDXSTRING
|
136
|
+
token.text[1..-2]
|
137
|
+
when TkSYMBOL
|
138
|
+
token.text[1..-1].to_sym
|
139
|
+
when TkFLOAT
|
140
|
+
token.text.to_f
|
141
|
+
when TkINTEGER
|
142
|
+
token.text.to_i
|
143
|
+
when TkREGEXP
|
144
|
+
token.text =~ %r{\A/(.+)/([^/])\Z}
|
145
|
+
Regexp.new($1, $2)
|
146
|
+
when TkTRUE
|
147
|
+
true
|
148
|
+
when TkFALSE
|
149
|
+
false
|
150
|
+
when TkNIL
|
151
|
+
nil
|
152
|
+
else
|
153
|
+
token.text
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
# Returns a list of symbols or string values from a statement.
|
158
|
+
# The list must be a valid comma delimited list, and values
|
159
|
+
# will only be returned to the end of the list only.
|
160
|
+
#
|
161
|
+
# Example:
|
162
|
+
# attr_accessor :a, 'b', :c, :d => ['a', 'b', 'c', 'd']
|
163
|
+
# attr_accessor 'a', UNACCEPTED_TYPE, 'c' => ['a', 'c']
|
164
|
+
#
|
165
|
+
# The tokval list of a {Parser::Ruby::Legacy::TokenList} of the above
|
166
|
+
# code would be the {#tokval} value of :a, 'b',
|
167
|
+
# :c and :d.
|
168
|
+
#
|
169
|
+
# It should also be noted that this function stops immediately at
|
170
|
+
# any ruby keyword encountered:
|
171
|
+
# "attr_accessor :a, :b, :c if x == 5" => ['a', 'b', 'c']
|
172
|
+
#
|
173
|
+
# @param [TokenList] tokenlist The list of tokens to process.
|
174
|
+
# @param [Array<Class<Token>>] accepted_types passed to {#tokval}
|
175
|
+
# @return [Array<String>] the list of tokvalues in the list.
|
176
|
+
# @return [Array<EMPTY>] if there are no symbols or Strings in the list
|
177
|
+
# @see #tokval
|
178
|
+
def tokval_list(tokenlist, *accepted_types)
|
179
|
+
return [] unless tokenlist
|
180
|
+
out = [[]]
|
181
|
+
parencount = 0
|
182
|
+
beforeparen = 0
|
183
|
+
needcomma = false
|
184
|
+
seen_comma = true
|
185
|
+
tokenlist.each do |token|
|
186
|
+
tokval = accepted_types == [:all] ? token.text : tokval(token, *accepted_types)
|
187
|
+
parencond = !out.last.empty? && !tokval.nil?
|
188
|
+
# puts "#{seen_comma.inspect} #{parencount} #{token.class.class_name} #{out.inspect}"
|
189
|
+
case token
|
190
|
+
when TkCOMMA
|
191
|
+
if parencount == 0
|
192
|
+
out << [] unless out.last.empty?
|
193
|
+
needcomma = false
|
194
|
+
seen_comma = true
|
195
|
+
elsif parencond
|
196
|
+
out.last << token.text
|
197
|
+
end
|
198
|
+
when TkLPAREN
|
199
|
+
if seen_comma
|
200
|
+
beforeparen += 1
|
201
|
+
else
|
202
|
+
parencount += 1
|
203
|
+
out.last << token.text if parencond
|
204
|
+
end
|
205
|
+
when TkRPAREN
|
206
|
+
if beforeparen > 0
|
207
|
+
beforeparen -= 1
|
208
|
+
else
|
209
|
+
out.last << token.text if parencount > 0 && !tokval.nil?
|
210
|
+
parencount -= 1
|
211
|
+
end
|
212
|
+
when TkLBRACE, TkLBRACK, TkDO
|
213
|
+
parencount += 1
|
214
|
+
out.last << token.text unless tokval.nil?
|
215
|
+
when TkRBRACE, TkRBRACK, TkEND
|
216
|
+
out.last << token.text unless tokval.nil?
|
217
|
+
parencount -= 1
|
218
|
+
else
|
219
|
+
break if TkKW === token && ![TkTRUE, TkFALSE, TkSUPER, TkSELF, TkNIL].include?(token.class)
|
220
|
+
|
221
|
+
seen_comma = false unless TkWhitespace === token
|
222
|
+
if parencount == 0
|
223
|
+
next if needcomma
|
224
|
+
next if TkWhitespace === token
|
225
|
+
if !tokval.nil?
|
226
|
+
out.last << tokval
|
227
|
+
else
|
228
|
+
out.last.clear
|
229
|
+
needcomma = true
|
230
|
+
end
|
231
|
+
elsif parencond
|
232
|
+
needcomma = true
|
233
|
+
out.last << token.text
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
break if beforeparen == 0 && parencount < 0
|
238
|
+
end
|
239
|
+
# Flatten any single element lists
|
240
|
+
out.map {|e| e.empty? ? nil : (e.size == 1 ? e.pop : e.flatten.join) }.compact
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|