yard 0.7.5 → 0.8.0
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.
- 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
|