yard 0.7.5 → 0.8.0
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.
Potentially problematic release.
This version of yard might be problematic. Click here for more details.
- data/.yardopts +10 -2
- data/ChangeLog +1263 -38
- data/LEGAL +5 -5
- data/LICENSE +1 -1
- data/README.md +91 -82
- data/Rakefile +6 -6
- data/benchmarks/builtins_vs_eval.rb +1 -1
- data/benchmarks/erb_vs_erubis.rb +4 -4
- data/benchmarks/generation.rb +5 -5
- data/benchmarks/parsing.rb +2 -2
- data/benchmarks/registry_store_types.rb +48 -0
- data/bin/yard +9 -1
- data/bin/yardoc +9 -1
- data/bin/yri +10 -2
- data/docs/CodeObjects.md +10 -10
- data/docs/GettingStarted.md +85 -83
- data/docs/Handlers.md +21 -21
- data/docs/Overview.md +7 -7
- data/docs/Parser.md +30 -30
- data/docs/Tags.md +250 -554
- data/docs/TagsArch.md +123 -0
- data/docs/Templates.md +58 -80
- data/docs/WhatsNew.md +378 -133
- 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/yard.rb +1 -10
- data/lib/yard/autoload.rb +75 -27
- data/lib/yard/cli/command.rb +5 -2
- data/lib/yard/cli/command_parser.rb +3 -2
- data/lib/yard/cli/diff.rb +1 -1
- data/lib/yard/cli/i18n.rb +69 -0
- data/lib/yard/cli/list.rb +1 -1
- data/lib/yard/cli/server.rb +30 -7
- data/lib/yard/cli/stats.rb +5 -6
- data/lib/yard/cli/yardoc.rb +95 -45
- data/lib/yard/cli/yri.rb +24 -3
- data/lib/yard/code_objects/base.rb +35 -4
- data/lib/yard/code_objects/extra_file_object.rb +1 -1
- data/lib/yard/code_objects/macro_object.rb +56 -99
- data/lib/yard/code_objects/method_object.rb +44 -6
- data/lib/yard/config.rb +18 -8
- data/lib/yard/core_ext/symbol_hash.rb +1 -1
- data/lib/yard/docstring.rb +45 -85
- data/lib/yard/docstring_parser.rb +269 -0
- data/lib/yard/handlers/base.rb +129 -118
- 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 +165 -0
- data/lib/yard/handlers/c/init_handler.rb +16 -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 +22 -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 +41 -30
- data/lib/yard/handlers/ruby/alias_handler.rb +0 -2
- data/lib/yard/handlers/ruby/attribute_handler.rb +16 -17
- data/lib/yard/handlers/ruby/base.rb +10 -6
- data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
- data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
- data/lib/yard/handlers/ruby/dsl_handler_methods.rb +71 -0
- data/lib/yard/handlers/ruby/legacy/alias_handler.rb +0 -3
- data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +16 -17
- data/lib/yard/handlers/ruby/legacy/base.rb +28 -6
- data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
- data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
- data/lib/yard/handlers/ruby/legacy/method_handler.rb +0 -2
- data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +1 -1
- data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
- data/lib/yard/handlers/ruby/method_handler.rb +10 -15
- data/lib/yard/handlers/ruby/mixin_handler.rb +1 -1
- data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
- data/lib/yard/handlers/ruby/struct_handler_methods.rb +3 -2
- data/lib/yard/i18n/pot_generator.rb +281 -0
- data/lib/yard/i18n/text.rb +72 -0
- data/lib/yard/logging.rb +3 -7
- data/lib/yard/options.rb +216 -0
- data/lib/yard/parser/c/c_parser.rb +225 -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 +91 -1
- data/lib/yard/parser/ruby/legacy/ruby_parser.rb +1 -0
- data/lib/yard/parser/ruby/legacy/statement.rb +7 -2
- data/lib/yard/parser/ruby/legacy/statement_list.rb +13 -22
- data/lib/yard/parser/ruby/ruby_parser.rb +87 -26
- data/lib/yard/parser/source_parser.rb +89 -88
- data/lib/yard/rake/yardoc_task.rb +1 -1
- data/lib/yard/registry.rb +21 -10
- data/lib/yard/registry_store.rb +48 -0
- data/lib/yard/serializers/file_system_serializer.rb +18 -20
- data/lib/yard/serializers/yardoc_serializer.rb +1 -0
- data/lib/yard/server/adapter.rb +2 -2
- data/lib/yard/server/commands/base.rb +1 -1
- data/lib/yard/server/commands/display_object_command.rb +13 -6
- data/lib/yard/server/commands/frames_command.rb +4 -21
- data/lib/yard/server/commands/library_command.rb +57 -11
- data/lib/yard/server/commands/list_command.rb +10 -34
- data/lib/yard/server/commands/search_command.rb +8 -2
- data/lib/yard/server/doc_server_helper.rb +34 -0
- data/lib/yard/server/rack_adapter.rb +5 -1
- data/lib/yard/server/router.rb +4 -10
- data/lib/yard/server/static_caching.rb +2 -2
- data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +2 -2
- data/lib/yard/server/templates/default/fulldoc/html/js/live.js +0 -15
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +3 -3
- data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +1 -1
- data/lib/yard/server/templates/doc_server/search/html/setup.rb +1 -1
- data/lib/yard/tags/default_factory.rb +31 -4
- data/lib/yard/tags/directives.rb +593 -0
- data/lib/yard/tags/library.rb +437 -35
- data/lib/yard/templates/engine.rb +17 -12
- data/lib/yard/templates/helpers/base_helper.rb +8 -2
- data/lib/yard/templates/helpers/html_helper.rb +57 -14
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +1 -1
- data/lib/yard/templates/helpers/markup_helper.rb +9 -9
- data/lib/yard/templates/helpers/text_helper.rb +2 -2
- data/lib/yard/templates/template.rb +42 -13
- data/lib/yard/templates/template_options.rb +81 -0
- data/spec/cli/command_parser_spec.rb +4 -4
- data/spec/cli/command_spec.rb +3 -3
- data/spec/cli/config_spec.rb +13 -13
- data/spec/cli/diff_spec.rb +13 -10
- data/spec/cli/gems_spec.rb +12 -12
- data/spec/cli/help_spec.rb +2 -2
- data/spec/cli/i18n_spec.rb +111 -0
- data/spec/cli/server_spec.rb +66 -18
- data/spec/cli/stats_spec.rb +15 -15
- data/spec/cli/yardoc_spec.rb +124 -97
- data/spec/cli/yri_spec.rb +14 -12
- data/spec/code_objects/base_spec.rb +104 -46
- data/spec/code_objects/class_object_spec.rb +33 -33
- data/spec/code_objects/code_object_list_spec.rb +5 -5
- data/spec/code_objects/constants_spec.rb +4 -3
- data/spec/code_objects/extra_file_object_spec.rb +19 -19
- data/spec/code_objects/macro_object_spec.rb +31 -37
- data/spec/code_objects/method_object_spec.rb +46 -23
- data/spec/code_objects/module_object_spec.rb +16 -16
- data/spec/code_objects/namespace_object_spec.rb +6 -6
- data/spec/code_objects/proxy_spec.rb +19 -19
- data/spec/config_spec.rb +33 -24
- data/spec/core_ext/array_spec.rb +1 -1
- data/spec/core_ext/file_spec.rb +8 -8
- data/spec/core_ext/hash_spec.rb +1 -1
- data/spec/core_ext/insertion_spec.rb +3 -3
- data/spec/core_ext/module_spec.rb +1 -1
- data/spec/core_ext/string_spec.rb +6 -6
- data/spec/core_ext/symbol_hash_spec.rb +11 -11
- data/spec/docstring_parser_spec.rb +207 -0
- data/spec/docstring_spec.rb +33 -146
- data/spec/handlers/alias_handler_spec.rb +14 -14
- data/spec/handlers/attribute_handler_spec.rb +20 -20
- data/spec/handlers/base_spec.rb +16 -16
- 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 +64 -0
- data/spec/handlers/c/constant_handler_spec.rb +68 -0
- data/spec/handlers/c/init_handler_spec.rb +36 -0
- data/spec/handlers/c/method_handler_spec.rb +228 -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 +43 -0
- data/spec/handlers/c/path_handler_spec.rb +35 -0
- data/spec/handlers/c/spec_helper.rb +11 -0
- data/spec/handlers/c/struct_handler_spec.rb +15 -0
- data/spec/handlers/class_condition_handler_spec.rb +10 -10
- data/spec/handlers/class_handler_spec.rb +38 -38
- data/spec/handlers/class_variable_handler_spec.rb +1 -1
- data/spec/handlers/constant_handler_spec.rb +7 -7
- data/spec/handlers/{macro_handler_spec.rb → dsl_handler_spec.rb} +72 -53
- data/spec/handlers/examples/alias_handler_001.rb.txt +5 -5
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/class_handler_001.rb.txt +1 -1
- data/spec/handlers/examples/dsl_handler_001.rb.txt +110 -0
- data/spec/handlers/examples/exception_handler_001.rb.txt +14 -14
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +2 -2
- data/spec/handlers/examples/method_handler_001.rb.txt +16 -16
- data/spec/handlers/examples/mixin_handler_001.rb.txt +8 -4
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +1 -1
- data/spec/handlers/examples/visibility_handler_001.rb.txt +3 -3
- data/spec/handlers/examples/yield_handler_001.rb.txt +13 -14
- data/spec/handlers/exception_handler_spec.rb +9 -9
- data/spec/handlers/extend_handler_spec.rb +2 -2
- data/spec/handlers/legacy_base_spec.rb +34 -34
- data/spec/handlers/method_condition_handler_spec.rb +2 -2
- data/spec/handlers/method_handler_spec.rb +33 -33
- data/spec/handlers/mixin_handler_spec.rb +13 -9
- data/spec/handlers/module_function_handler_spec.rb +82 -0
- data/spec/handlers/module_handler_spec.rb +6 -6
- data/spec/handlers/private_constant_handler_spec.rb +3 -3
- data/spec/handlers/processor_spec.rb +5 -5
- data/spec/handlers/ruby/base_spec.rb +10 -6
- data/spec/handlers/ruby/legacy/base_spec.rb +11 -7
- data/spec/handlers/spec_helper.rb +2 -3
- data/spec/handlers/visibility_handler_spec.rb +6 -6
- data/spec/handlers/yield_handler_spec.rb +8 -8
- data/spec/i18n/pot_generator_spec.rb +244 -0
- data/spec/i18n/text_spec.rb +69 -0
- data/spec/options_spec.rb +160 -0
- data/spec/parser/base_spec.rb +3 -3
- data/spec/parser/c_parser_spec.rb +31 -257
- data/spec/parser/examples/array.c.txt +187 -187
- data/spec/parser/examples/extrafile.c.txt +1 -1
- data/spec/parser/examples/override.c.txt +1 -1
- data/spec/parser/ruby/ast_node_spec.rb +1 -1
- data/spec/parser/ruby/legacy/statement_list_spec.rb +24 -24
- data/spec/parser/ruby/legacy/token_list_spec.rb +7 -7
- data/spec/parser/ruby/ruby_parser_spec.rb +56 -34
- data/spec/parser/source_parser_spec.rb +125 -65
- data/spec/parser/tag_parsing_spec.rb +4 -4
- data/spec/rake/yardoc_task_spec.rb +10 -8
- data/spec/registry_spec.rb +65 -36
- data/spec/registry_store_spec.rb +90 -40
- data/spec/serializers/file_system_serializer_spec.rb +12 -12
- data/spec/serializers/yardoc_serializer_spec.rb +2 -2
- data/spec/server/adapter_spec.rb +3 -3
- data/spec/server/commands/base_spec.rb +8 -8
- data/spec/server/commands/library_command_spec.rb +3 -3
- data/spec/server/commands/static_file_command_spec.rb +7 -7
- data/spec/server/doc_server_helper_spec.rb +1 -1
- data/spec/server/doc_server_serializer_spec.rb +6 -6
- data/spec/server/rack_adapter_spec.rb +3 -3
- data/spec/server/router_spec.rb +19 -19
- data/spec/server/static_caching_spec.rb +4 -4
- data/spec/spec_helper.rb +7 -7
- data/spec/tags/default_factory_spec.rb +24 -16
- data/spec/tags/directives_spec.rb +422 -0
- data/spec/tags/library_spec.rb +15 -4
- data/spec/tags/overload_tag_spec.rb +6 -6
- data/spec/tags/ref_tag_list_spec.rb +8 -8
- data/spec/templates/class_spec.rb +7 -7
- data/spec/templates/constant_spec.rb +7 -7
- data/spec/templates/engine_spec.rb +28 -36
- data/spec/templates/examples/class001.html +108 -108
- data/spec/templates/examples/class002.html +17 -17
- data/spec/templates/examples/constant001.txt +1 -1
- data/spec/templates/examples/method001.html +45 -45
- data/spec/templates/examples/method002.html +25 -25
- data/spec/templates/examples/method003.html +60 -60
- data/spec/templates/examples/method004.html +7 -7
- data/spec/templates/examples/method005.html +28 -28
- data/spec/templates/examples/module001.html +321 -321
- data/spec/templates/examples/module001.txt +1 -1
- data/spec/templates/examples/module002.html +130 -130
- data/spec/templates/examples/module003.html +74 -74
- data/spec/templates/examples/module004.html +388 -0
- data/spec/templates/helpers/base_helper_spec.rb +32 -32
- data/spec/templates/helpers/html_helper_spec.rb +87 -68
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +9 -9
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +16 -16
- data/spec/templates/helpers/markup_helper_spec.rb +31 -28
- data/spec/templates/helpers/method_helper_spec.rb +7 -7
- data/spec/templates/helpers/shared_signature_examples.rb +9 -7
- data/spec/templates/helpers/text_helper_spec.rb +3 -3
- data/spec/templates/method_spec.rb +13 -13
- data/spec/templates/module_spec.rb +70 -24
- data/spec/templates/onefile_spec.rb +32 -15
- data/spec/templates/section_spec.rb +23 -23
- data/spec/templates/spec_helper.rb +31 -1
- data/spec/templates/tag_spec.rb +5 -5
- data/spec/templates/template_spec.rb +54 -46
- data/spec/verifier_spec.rb +5 -5
- data/templates/default/class/setup.rb +2 -2
- data/templates/default/docstring/html/abstract.erb +1 -1
- data/templates/default/docstring/html/note.erb +1 -1
- data/templates/default/docstring/html/private.erb +1 -1
- data/templates/default/docstring/html/todo.erb +1 -1
- data/templates/default/docstring/setup.rb +2 -2
- data/templates/default/fulldoc/html/css/full_list.css +4 -2
- data/templates/default/fulldoc/html/css/style.css +50 -44
- data/templates/default/fulldoc/html/frames.erb +21 -6
- data/templates/default/fulldoc/html/full_list.erb +5 -3
- data/templates/default/fulldoc/html/{full_list_files.erb → full_list_file.erb} +0 -0
- data/templates/default/fulldoc/html/js/app.js +29 -26
- data/templates/default/fulldoc/html/js/full_list.js +9 -9
- data/templates/default/fulldoc/html/js/jquery.js +4 -16
- data/templates/default/fulldoc/html/setup.rb +42 -38
- data/templates/default/layout/dot/header.erb +1 -1
- data/templates/default/layout/html/breadcrumb.erb +6 -6
- data/templates/default/layout/html/files.erb +1 -1
- data/templates/default/layout/html/footer.erb +1 -1
- data/templates/default/layout/html/headers.erb +3 -6
- data/templates/default/layout/html/index.erb +1 -1
- data/templates/default/layout/html/layout.erb +3 -7
- data/templates/default/layout/html/objects.erb +1 -1
- data/templates/default/layout/html/script_setup.erb +5 -0
- data/templates/default/layout/html/search.erb +4 -1
- data/templates/default/layout/html/setup.rb +8 -8
- data/templates/default/method_details/html/method_signature.erb +10 -3
- data/templates/default/method_details/setup.rb +1 -0
- data/templates/default/module/dot/info.erb +1 -1
- data/templates/default/module/dot/setup.rb +2 -2
- data/templates/default/module/html/attribute_details.erb +1 -1
- data/templates/default/module/html/children.erb +1 -1
- data/templates/default/module/html/defines.erb +1 -1
- data/templates/default/module/html/inherited_methods.erb +5 -4
- data/templates/default/module/html/item_summary.erb +15 -5
- data/templates/default/module/html/method_details_list.erb +2 -2
- data/templates/default/module/setup.rb +25 -12
- data/templates/default/module/text/setup.rb +1 -1
- data/templates/default/onefile/html/layout.erb +1 -1
- data/templates/default/onefile/html/setup.rb +2 -2
- data/templates/default/tags/html/example.erb +4 -2
- data/templates/default/tags/html/option.erb +1 -1
- data/templates/default/tags/html/overload.erb +1 -1
- data/templates/default/tags/html/see.erb +1 -1
- data/templates/default/tags/html/tag.erb +1 -1
- data/templates/default/tags/setup.rb +4 -3
- data/templates/guide/fulldoc/html/css/style.css +8 -8
- data/templates/guide/fulldoc/html/js/app.js +6 -6
- data/templates/guide/fulldoc/html/setup.rb +12 -12
- data/templates/guide/layout/html/layout.erb +11 -11
- data/templates/guide/layout/html/setup.rb +9 -9
- data/templates/guide/method/html/header.erb +2 -2
- data/templates/guide/method/html/setup.rb +1 -1
- metadata +68 -18
- data/bin/yard-graph +0 -4
- data/bin/yard-server +0 -4
- data/docs/Glossary.md +0 -12
- data/lib/yard/handlers/ruby/legacy/macro_handler.rb +0 -39
- data/lib/yard/handlers/ruby/macro_handler.rb +0 -40
- data/lib/yard/handlers/ruby/macro_handler_methods.rb +0 -131
- data/lib/yard/parser/c_parser.rb +0 -497
- data/lib/yard/server/templates/default/layout/html/headers.erb +0 -16
- data/lib/yard/server/templates/doc_server/frames/html/frames.erb +0 -13
- data/lib/yard/server/templates/doc_server/frames/html/setup.rb +0 -3
- data/lib/yard/server/templates/doc_server/full_list/html/full_list.erb +0 -34
- data/lib/yard/server/templates/doc_server/full_list/html/setup.rb +0 -20
- data/spec/handlers/examples/macro_handler_001.rb.txt +0 -83
@@ -22,8 +22,6 @@ class YARD::Handlers::Ruby::AliasHandler < YARD::Handlers::Ruby::Base
|
|
22
22
|
new_meth, old_meth = names[0].to_sym, names[1].to_sym
|
23
23
|
old_obj = namespace.child(:name => old_meth, :scope => scope)
|
24
24
|
new_obj = register MethodObject.new(namespace, new_meth, scope) do |o|
|
25
|
-
o.visibility = visibility
|
26
|
-
o.scope = scope
|
27
25
|
o.add_file(parser.file, statement.line)
|
28
26
|
end
|
29
27
|
|
@@ -33,25 +33,24 @@ class YARD::Handlers::Ruby::AttributeHandler < YARD::Handlers::Ruby::Base
|
|
33
33
|
# Show their methods as well
|
34
34
|
{:read => name, :write => "#{name}="}.each do |type, meth|
|
35
35
|
if (type == :read ? read : write)
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end
|
47
|
-
o.source ||= full_src
|
48
|
-
o.signature ||= src
|
49
|
-
o.docstring = statement.comments.to_s.empty? ? doc : statement.comments
|
50
|
-
o.visibility = visibility
|
36
|
+
o = MethodObject.new(namespace, meth, scope)
|
37
|
+
if type == :write
|
38
|
+
o.parameters = [['value', nil]]
|
39
|
+
src = "def #{meth}(value)"
|
40
|
+
full_src = "#{src}\n @#{name} = value\nend"
|
41
|
+
doc = "Sets the attribute #{name}\n@param value the value to set the attribute #{name} to."
|
42
|
+
else
|
43
|
+
src = "def #{meth}"
|
44
|
+
full_src = "#{src}\n @#{name}\nend"
|
45
|
+
doc = "Returns the value of attribute #{name}"
|
51
46
|
end
|
47
|
+
o.source ||= full_src
|
48
|
+
o.signature ||= src
|
49
|
+
register(o)
|
50
|
+
o.docstring = doc if o.docstring.blank?(false)
|
52
51
|
|
53
|
-
#
|
54
|
-
|
52
|
+
# Regsiter the object explicitly
|
53
|
+
namespace.attributes[scope][name][type] = o
|
55
54
|
elsif obj = namespace.children.find {|o| o.name == meth.to_sym && o.scope == scope }
|
56
55
|
# register an existing method as attribute
|
57
56
|
namespace.attributes[scope][name][type] = obj
|
@@ -135,21 +135,25 @@ module YARD
|
|
135
135
|
parser.process(nodes)
|
136
136
|
end
|
137
137
|
end
|
138
|
-
|
138
|
+
|
139
139
|
# @group Macro Handling
|
140
140
|
|
141
141
|
def call_params
|
142
142
|
return [] unless statement.respond_to?(:parameters)
|
143
|
-
statement.parameters(false).map do |param|
|
144
|
-
param.
|
145
|
-
|
143
|
+
statement.parameters(false).compact.map do |param|
|
144
|
+
if param.type == :list
|
145
|
+
param.map {|n| n.jump(:ident, :kw, :tstring_content).source }
|
146
|
+
else
|
147
|
+
param.jump(:ident, :kw, :tstring_content).source
|
148
|
+
end
|
149
|
+
end.flatten
|
146
150
|
end
|
147
151
|
|
148
152
|
def caller_method
|
149
|
-
if statement.call?
|
153
|
+
if statement.call? || statement.def?
|
150
154
|
statement.method_name(true).to_s
|
151
155
|
elsif statement.type == :var_ref || statement.type == :vcall
|
152
|
-
statement[0].jump(:ident).source
|
156
|
+
statement[0].jump(:ident, :kw).source
|
153
157
|
else
|
154
158
|
nil
|
155
159
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module YARD
|
2
|
+
module Handlers
|
3
|
+
module Ruby
|
4
|
+
# Handles automatic detection of dsl-style methods
|
5
|
+
class DSLHandler < Base
|
6
|
+
include CodeObjects
|
7
|
+
include DSLHandlerMethods
|
8
|
+
handles method_call
|
9
|
+
namespace_only
|
10
|
+
process { handle_comments }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module YARD
|
2
|
+
module Handlers
|
3
|
+
module Ruby
|
4
|
+
module DSLHandlerMethods
|
5
|
+
include CodeObjects
|
6
|
+
include Parser
|
7
|
+
|
8
|
+
IGNORE_METHODS = Hash[*%w(alias alias_method autoload attr attr_accessor
|
9
|
+
attr_reader attr_writer extend include public private protected
|
10
|
+
private_constant).map {|n| [n, true] }.flatten]
|
11
|
+
|
12
|
+
def handle_comments
|
13
|
+
return if IGNORE_METHODS[caller_method]
|
14
|
+
|
15
|
+
@docstring = statement.comments || ""
|
16
|
+
@docstring = @docstring.join("\n") if @docstring.is_a?(Array)
|
17
|
+
if macro = find_attached_macro
|
18
|
+
@docstring += "\n" +
|
19
|
+
macro.expand([caller_method, *call_params], statement.source)
|
20
|
+
elsif !statement.comments_hash_flag && !implicit_docstring?
|
21
|
+
return register_docstring(nil)
|
22
|
+
end
|
23
|
+
|
24
|
+
# ignore DSL definitions if @method/@attribute directive is used
|
25
|
+
if @docstring =~ /^@!?(method|attribute)\b/
|
26
|
+
return register_docstring(nil)
|
27
|
+
end
|
28
|
+
|
29
|
+
object = MethodObject.new(namespace, method_name, scope)
|
30
|
+
object.signature = method_signature
|
31
|
+
register(object)
|
32
|
+
end
|
33
|
+
|
34
|
+
def register_docstring(object, docstring = @docstring, stmt = statement)
|
35
|
+
super
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def implicit_docstring?
|
41
|
+
tags = %w(method attribute overload visibility scope return)
|
42
|
+
tags.any? {|tag| @docstring =~ /^@!?#{tag}\b/ }
|
43
|
+
end
|
44
|
+
|
45
|
+
def method_name
|
46
|
+
name = call_params.first || ""
|
47
|
+
if name =~ /^#{CodeObjects::METHODNAMEMATCH}$/
|
48
|
+
name
|
49
|
+
else
|
50
|
+
raise UndocumentableError, "method, missing name"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def method_signature
|
55
|
+
"def #{method_name}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def find_attached_macro
|
59
|
+
Registry.all(:macro).each do |macro|
|
60
|
+
next unless macro.method_object
|
61
|
+
next unless macro.method_object.name.to_s == caller_method.to_s
|
62
|
+
(namespace.inheritance_tree + [P('Object')]).each do |obj|
|
63
|
+
return macro if obj == macro.method_object.namespace
|
64
|
+
end
|
65
|
+
end
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -15,10 +15,7 @@ class YARD::Handlers::Ruby::Legacy::AliasHandler < YARD::Handlers::Ruby::Legacy:
|
|
15
15
|
new_meth, old_meth = names[0].to_sym, names[1].to_sym
|
16
16
|
old_obj = namespace.child(:name => old_meth, :scope => scope)
|
17
17
|
new_obj = register MethodObject.new(namespace, new_meth, scope) do |o|
|
18
|
-
o.visibility = visibility
|
19
|
-
o.scope = scope
|
20
18
|
o.add_file(parser.file, statement.tokens.first.line_no, statement.comments)
|
21
|
-
o.docstring = statement.comments
|
22
19
|
end
|
23
20
|
|
24
21
|
if old_obj
|
@@ -32,25 +32,24 @@ class YARD::Handlers::Ruby::Legacy::AttributeHandler < YARD::Handlers::Ruby::Leg
|
|
32
32
|
# Show their methods as well
|
33
33
|
{:read => name, :write => "#{name}="}.each do |type, meth|
|
34
34
|
if (type == :read ? read : write)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
end
|
46
|
-
o.source ||= full_src
|
47
|
-
o.signature ||= src
|
48
|
-
o.docstring = statement.comments.to_s.empty? ? doc : statement.comments
|
49
|
-
o.visibility = visibility
|
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}"
|
50
45
|
end
|
46
|
+
o.source ||= full_src
|
47
|
+
o.signature ||= src
|
48
|
+
register(o)
|
49
|
+
o.docstring = doc if o.docstring.blank?(false)
|
51
50
|
|
52
|
-
#
|
53
|
-
|
51
|
+
# Regsiter the object explicitly
|
52
|
+
namespace.attributes[scope][name][type] = o
|
54
53
|
elsif obj = namespace.children.find {|o| o.name == meth.to_sym && o.scope == scope }
|
55
54
|
# register an existing method as attribute
|
56
55
|
namespace.attributes[scope][name][type] = obj
|
@@ -24,8 +24,6 @@ module YARD
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
protected
|
28
|
-
|
29
27
|
# Parses a statement's block with a set of state values. If the
|
30
28
|
# statement has no block, nothing happens. A description of state
|
31
29
|
# values can be found at {Handlers::Base#push_state}
|
@@ -41,17 +39,23 @@ module YARD
|
|
41
39
|
end
|
42
40
|
end
|
43
41
|
end
|
44
|
-
|
42
|
+
|
45
43
|
def call_params
|
46
|
-
|
47
|
-
|
48
|
-
|
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
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
52
54
|
def caller_method
|
53
55
|
if statement.tokens.first.is_a?(TkIDENTIFIER)
|
54
56
|
statement.tokens.first.text
|
57
|
+
elsif statement.tokens.first.is_a?(TkDEF)
|
58
|
+
extract_method_details.first
|
55
59
|
else
|
56
60
|
nil
|
57
61
|
end
|
@@ -59,6 +63,24 @@ module YARD
|
|
59
63
|
|
60
64
|
private
|
61
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
|
+
|
62
84
|
# The string value of a token. For example, the return value for the symbol :sym
|
63
85
|
# would be :sym. The return value for a string +"foo #{ bar}"+ would be the literal
|
64
86
|
# +"foo #{ bar}"+ without any interpolation. The return value of the identifier
|
@@ -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
|
@@ -26,8 +26,6 @@ class YARD::Handlers::Ruby::Legacy::MethodHandler < YARD::Handlers::Ruby::Legacy
|
|
26
26
|
|
27
27
|
nobj = P(namespace, nobj.value) while nobj.type == :constant
|
28
28
|
obj = register MethodObject.new(nobj, meth, mscope) do |o|
|
29
|
-
o.visibility = visibility
|
30
|
-
o.source = statement
|
31
29
|
o.explicit = true
|
32
30
|
o.parameters = args
|
33
31
|
end
|
@@ -5,7 +5,7 @@ class YARD::Handlers::Ruby::Legacy::MixinHandler < YARD::Handlers::Ruby::Legacy:
|
|
5
5
|
|
6
6
|
process do
|
7
7
|
errors = []
|
8
|
-
statement.tokens[1..-1].to_s.split(/\s*,\s*/).each do |mixin|
|
8
|
+
statement.tokens[1..-1].to_s.split(/\s*,\s*/).reverse.each do |mixin|
|
9
9
|
mixin = mixin.strip
|
10
10
|
begin
|
11
11
|
process_mixin(mixin)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# (see Ruby::ModuleFunctionHandler)
|
2
|
+
class YARD::Handlers::Ruby::Legacy::ModuleFunctionHandler < YARD::Handlers::Ruby::Legacy::Base
|
3
|
+
handles /\A(module_function)(\s|\(|$)/
|
4
|
+
namespace_only
|
5
|
+
|
6
|
+
process do
|
7
|
+
if statement.tokens.size == 1
|
8
|
+
self.scope = :module
|
9
|
+
else
|
10
|
+
tokval_list(statement.tokens[2..-1], :attr).each do |name|
|
11
|
+
instance_method = MethodObject.new(namespace, name)
|
12
|
+
class_method = MethodObject.new(namespace, name, :module)
|
13
|
+
instance_method.copy_to(class_method)
|
14
|
+
class_method.visibility = :public
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -3,28 +3,22 @@ class YARD::Handlers::Ruby::MethodHandler < YARD::Handlers::Ruby::Base
|
|
3
3
|
handles :def, :defs
|
4
4
|
|
5
5
|
process do
|
6
|
+
meth = statement.method_name(true).to_s
|
7
|
+
args = format_args
|
8
|
+
blk = statement.block
|
6
9
|
nobj = namespace
|
7
10
|
mscope = scope
|
8
11
|
if statement.type == :defs
|
9
12
|
if statement[0][0].type == :ident
|
10
13
|
raise YARD::Parser::UndocumentableError, 'method defined on object instance'
|
11
14
|
end
|
12
|
-
meth = statement[2][0]
|
13
15
|
nobj = P(namespace, statement[0].source) if statement[0][0].type == :const
|
14
|
-
args = format_args(statement[3])
|
15
|
-
blk = statement[4]
|
16
16
|
mscope = :class
|
17
|
-
else
|
18
|
-
meth = statement[0][0]
|
19
|
-
args = format_args(statement[1])
|
20
|
-
blk = statement[2]
|
21
17
|
end
|
22
18
|
|
23
19
|
nobj = P(namespace, nobj.value) while nobj.type == :constant
|
24
20
|
obj = register MethodObject.new(nobj, meth, mscope) do |o|
|
25
|
-
o.
|
26
|
-
o.source = statement.source
|
27
|
-
o.signature = method_signature(meth)
|
21
|
+
o.signature = method_signature
|
28
22
|
o.explicit = true
|
29
23
|
o.parameters = args
|
30
24
|
end
|
@@ -75,8 +69,8 @@ class YARD::Handlers::Ruby::MethodHandler < YARD::Handlers::Ruby::Base
|
|
75
69
|
parse_block(blk, :owner => obj) # mainly for yield/exceptions
|
76
70
|
end
|
77
71
|
|
78
|
-
def format_args
|
79
|
-
args =
|
72
|
+
def format_args
|
73
|
+
args = statement.parameters
|
80
74
|
params = []
|
81
75
|
params += args.required_params.map {|a| [a.source, nil] } if args.required_params
|
82
76
|
params += args.optional_params.map {|a| [a[0].source, a[1].source] } if args.optional_params
|
@@ -86,9 +80,10 @@ class YARD::Handlers::Ruby::MethodHandler < YARD::Handlers::Ruby::Base
|
|
86
80
|
params
|
87
81
|
end
|
88
82
|
|
89
|
-
def method_signature
|
90
|
-
|
91
|
-
|
83
|
+
def method_signature
|
84
|
+
method_name = statement.method_name(true)
|
85
|
+
if statement.parameters.any? {|e| e }
|
86
|
+
"def #{method_name}(#{statement.parameters.source})"
|
92
87
|
else
|
93
88
|
"def #{method_name}"
|
94
89
|
end
|
@@ -5,7 +5,7 @@ class YARD::Handlers::Ruby::MixinHandler < YARD::Handlers::Ruby::Base
|
|
5
5
|
|
6
6
|
process do
|
7
7
|
errors = []
|
8
|
-
statement.parameters(false).each do |mixin|
|
8
|
+
statement.parameters(false).reverse.each do |mixin|
|
9
9
|
begin
|
10
10
|
process_mixin(mixin)
|
11
11
|
rescue YARD::Parser::UndocumentableError => err
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Handles module_function calls to turn methods into public class methods.
|
2
|
+
# Also creates a private instance copy of the method.
|
3
|
+
class YARD::Handlers::Ruby::ModuleFunctionHandler < YARD::Handlers::Ruby::Base
|
4
|
+
handles method_call(:module_function)
|
5
|
+
namespace_only
|
6
|
+
|
7
|
+
process do
|
8
|
+
return if (ident = statement.jump(:ident)) == statement
|
9
|
+
case statement.type
|
10
|
+
when :var_ref, :vcall
|
11
|
+
self.scope = :module
|
12
|
+
when :fcall, :command
|
13
|
+
statement[1].traverse do |node|
|
14
|
+
case node.type
|
15
|
+
when :symbol; name = node.first.source
|
16
|
+
when :string_content; name = node.source
|
17
|
+
else next
|
18
|
+
end
|
19
|
+
instance_method = MethodObject.new(namespace, name)
|
20
|
+
class_method = MethodObject.new(namespace, name, :module)
|
21
|
+
instance_method.copy_to(class_method)
|
22
|
+
class_method.visibility = :public
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|