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
data/lib/yard/handlers/base.rb
CHANGED
@@ -233,6 +233,7 @@ module YARD
|
|
233
233
|
# match for a handler. If no file match is specified, returns true.
|
234
234
|
# @since 0.6.2
|
235
235
|
def matches_file?(filename)
|
236
|
+
@in_files ||= nil # avoid ruby warnings
|
236
237
|
return true unless @in_files
|
237
238
|
@in_files.any? do |in_file|
|
238
239
|
case in_file
|
@@ -251,8 +252,8 @@ module YARD
|
|
251
252
|
# module so that the handler class can be extended with mixins that
|
252
253
|
# override the +process+ method without alias chaining.
|
253
254
|
#
|
254
|
-
#
|
255
|
-
#
|
255
|
+
# @!macro yard.handlers.process
|
256
|
+
# @!method process
|
256
257
|
# Main processing callback
|
257
258
|
# @return [void]
|
258
259
|
# @see #process
|
@@ -297,8 +298,6 @@ module YARD
|
|
297
298
|
raise NotImplementedError, "#{self} did not implement a #parse_block method for handling"
|
298
299
|
end
|
299
300
|
|
300
|
-
protected
|
301
|
-
|
302
301
|
# @return [Processor] the processor object that manages all global state
|
303
302
|
# during handling.
|
304
303
|
attr_reader :parser
|
@@ -325,9 +324,10 @@ module YARD
|
|
325
324
|
|
326
325
|
# (see Processor#extra_state)
|
327
326
|
attr_reader :extra_state
|
328
|
-
|
327
|
+
|
329
328
|
undef owner, owner=, namespace, namespace=
|
330
329
|
undef visibility, visibility=, scope, scope=
|
330
|
+
undef globals, extra_state
|
331
331
|
|
332
332
|
def owner; parser.owner end
|
333
333
|
def owner=(v) parser.owner=(v) end
|
@@ -388,62 +388,136 @@ module YARD
|
|
388
388
|
def register(*objects)
|
389
389
|
objects.flatten.each do |object|
|
390
390
|
next unless object.is_a?(CodeObjects::Base)
|
391
|
-
|
392
|
-
begin
|
393
|
-
ensure_loaded!(object.namespace)
|
394
|
-
object.namespace.children << object
|
395
|
-
rescue NamespaceMissingError
|
396
|
-
end
|
397
|
-
|
398
|
-
# Yield the object to the calling block because ruby will parse the syntax
|
399
|
-
#
|
400
|
-
# register obj = ClassObject.new {|o| ... }
|
401
|
-
#
|
402
|
-
# as the block for #register. We need to make sure this gets to the object.
|
391
|
+
register_ensure_loaded(object)
|
403
392
|
yield(object) if block_given?
|
393
|
+
register_file_info(object)
|
394
|
+
register_source(object)
|
395
|
+
register_visibility(object)
|
396
|
+
register_docstring(object)
|
397
|
+
register_group(object)
|
398
|
+
register_dynamic(object)
|
399
|
+
register_module_function(object)
|
400
|
+
end
|
401
|
+
objects.size == 1 ? objects.first : objects
|
402
|
+
end
|
404
403
|
|
405
|
-
|
404
|
+
# Ensures that the object's namespace is loaded before attaching it
|
405
|
+
# to the namespace.
|
406
|
+
#
|
407
|
+
# @param [CodeObjects::Base] object the object to register
|
408
|
+
# @return [void]
|
409
|
+
# @since 0.8.0
|
410
|
+
def register_ensure_loaded(object)
|
411
|
+
begin
|
412
|
+
ensure_loaded!(object.namespace)
|
413
|
+
object.namespace.children << object
|
414
|
+
rescue NamespaceMissingError
|
415
|
+
end
|
416
|
+
end
|
406
417
|
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
418
|
+
# Registers the file/line of the declaration with the object
|
419
|
+
#
|
420
|
+
# @param [CodeObjects::Base] object the object to register
|
421
|
+
# @return [void]
|
422
|
+
# @since 0.8.0
|
423
|
+
def register_file_info(object, file = parser.file, line = statement.line, comments = statement.comments)
|
424
|
+
object.add_file(file, line, comments)
|
425
|
+
end
|
411
426
|
|
412
|
-
|
413
|
-
|
427
|
+
# Registers any docstring found for the object and expands macros
|
428
|
+
#
|
429
|
+
# @param [CodeObjects::Base] object the object to register
|
430
|
+
# @return [void]
|
431
|
+
# @since 0.8.0
|
432
|
+
def register_docstring(object, docstring = statement.comments, stmt = statement)
|
433
|
+
docstring = docstring.join("\n") if Array === docstring
|
434
|
+
parser = DocstringParser.new
|
435
|
+
parser.parse(docstring || "", object, self)
|
414
436
|
|
415
|
-
|
416
|
-
|
417
|
-
object.docstring.hash_flag = statement.comments_hash_flag
|
418
|
-
object.docstring.line_range = statement.comments_range
|
419
|
-
end
|
437
|
+
if object && docstring
|
438
|
+
object.docstring = parser.to_docstring
|
420
439
|
|
421
|
-
# Add
|
422
|
-
if
|
423
|
-
|
424
|
-
|
425
|
-
end
|
426
|
-
object.group = statement.group
|
440
|
+
# Add hash_flag/line_range
|
441
|
+
if stmt
|
442
|
+
object.docstring.hash_flag = stmt.comments_hash_flag
|
443
|
+
object.docstring.line_range = stmt.comments_range
|
427
444
|
end
|
445
|
+
end
|
428
446
|
|
429
|
-
|
430
|
-
|
431
|
-
next if object.namespace.is_a?(Proxy)
|
432
|
-
next unless object.namespace.has_tag?(tag)
|
433
|
-
next if object.has_tag?(tag)
|
434
|
-
object.docstring.add_tag(*object.namespace.tags(tag))
|
435
|
-
end
|
447
|
+
register_transitive_tags(object)
|
448
|
+
end
|
436
449
|
|
437
|
-
|
438
|
-
|
439
|
-
|
450
|
+
# Registers the object as being inside a specific group
|
451
|
+
#
|
452
|
+
# @param [CodeObjects::Base] object the object to register
|
453
|
+
# @return [void]
|
454
|
+
# @since 0.8.0
|
455
|
+
def register_group(object, group = extra_state.group)
|
456
|
+
if group
|
457
|
+
unless object.namespace.is_a?(Proxy)
|
458
|
+
object.namespace.groups |= [group]
|
440
459
|
end
|
460
|
+
object.group = group
|
461
|
+
end
|
462
|
+
end
|
441
463
|
|
442
|
-
|
443
|
-
|
444
|
-
|
464
|
+
# Registers any transitive tags from the namespace on the object
|
465
|
+
#
|
466
|
+
# @param [CodeObjects::Base, nil] object the object to register
|
467
|
+
# @return [void]
|
468
|
+
# @since 0.8.0
|
469
|
+
def register_transitive_tags(object)
|
470
|
+
return unless object
|
471
|
+
Tags::Library.transitive_tags.each do |tag|
|
472
|
+
next if object.namespace.is_a?(Proxy)
|
473
|
+
next unless object.namespace.has_tag?(tag)
|
474
|
+
next if object.has_tag?(tag)
|
475
|
+
object.docstring.add_tag(*object.namespace.tags(tag))
|
445
476
|
end
|
446
|
-
|
477
|
+
end
|
478
|
+
|
479
|
+
# @param [CodeObjects::Base] object the object to register
|
480
|
+
# @return [void]
|
481
|
+
# @since 0.8.0
|
482
|
+
def register_source(object, source = statement, type = parser.parser_type)
|
483
|
+
return unless object.is_a?(MethodObject)
|
484
|
+
object.source ||= source
|
485
|
+
object.source_type = type
|
486
|
+
end
|
487
|
+
|
488
|
+
# Registers visibility on a method object. If the object does not
|
489
|
+
# respond to setting visibility, nothing is done.
|
490
|
+
#
|
491
|
+
# @param [#visibility=] object the object to register
|
492
|
+
# @param [Symbol] visibility the visibility to set on the object
|
493
|
+
# @since 0.8.0
|
494
|
+
def register_visibility(object, visibility = self.visibility)
|
495
|
+
return unless object.respond_to?(:visibility=)
|
496
|
+
object.visibility = visibility
|
497
|
+
end
|
498
|
+
|
499
|
+
# Registers the same method information on the module function, if
|
500
|
+
# the object was defined as a module function.
|
501
|
+
#
|
502
|
+
# @param [CodeObjects::Base] object the possible module function object
|
503
|
+
# to copy data for
|
504
|
+
# @since 0.8.0
|
505
|
+
def register_module_function(object)
|
506
|
+
return unless object.is_a?(MethodObject)
|
507
|
+
return unless object.module_function?
|
508
|
+
modobj = MethodObject.new(object.namespace, object.name)
|
509
|
+
object.copy_to(modobj)
|
510
|
+
modobj.visibility = :private
|
511
|
+
end
|
512
|
+
|
513
|
+
# Registers the object as dynamic if the object is defined inside
|
514
|
+
# a method or block (owner != namespace)
|
515
|
+
#
|
516
|
+
# @param [CodeObjects::Base] object the object to register
|
517
|
+
# @return [void]
|
518
|
+
# @since 0.8.0
|
519
|
+
def register_dynamic(object)
|
520
|
+
object.dynamic = true if owner != namespace
|
447
521
|
end
|
448
522
|
|
449
523
|
# Ensures that a specific +object+ has been parsed and loaded into the
|
@@ -469,36 +543,22 @@ module YARD
|
|
469
543
|
def ensure_loaded!(object, max_retries = 1)
|
470
544
|
return if object.root?
|
471
545
|
return object unless object.is_a?(Proxy)
|
472
|
-
unless parser.load_order_errors
|
473
|
-
if object.is_a?(Proxy)
|
474
|
-
raise NamespaceMissingError, object
|
475
|
-
else
|
476
|
-
nil
|
477
|
-
end
|
478
|
-
end
|
479
|
-
|
480
|
-
unless CONTINUATIONS_SUPPORTED
|
481
|
-
log.warn_no_continuations
|
482
|
-
raise NamespaceMissingError, object
|
483
|
-
end
|
484
546
|
|
485
547
|
retries = 0
|
486
|
-
|
487
|
-
retries += 1
|
488
|
-
|
489
|
-
if object.is_a?(Proxy)
|
548
|
+
while object.is_a?(Proxy)
|
490
549
|
if retries <= max_retries
|
491
550
|
log.debug "Missing object #{object} in file `#{parser.file}', moving it to the back of the line."
|
492
|
-
|
551
|
+
parser.parse_remaining_files
|
493
552
|
else
|
494
553
|
raise NamespaceMissingError, object
|
495
554
|
end
|
555
|
+
retries += 1
|
496
556
|
end
|
497
557
|
object
|
498
558
|
end
|
499
|
-
|
559
|
+
|
500
560
|
# @group Macro Support
|
501
|
-
|
561
|
+
|
502
562
|
# @abstract Implement this method to return the parameters in a method call
|
503
563
|
# statement. It should return an empty list if the statement is not a
|
504
564
|
# method call.
|
@@ -506,7 +566,7 @@ module YARD
|
|
506
566
|
def call_params
|
507
567
|
raise NotImplementedError
|
508
568
|
end
|
509
|
-
|
569
|
+
|
510
570
|
# @abstract Implement this method to return the method being called in
|
511
571
|
# a method call. It should return nil if the statement is not a method
|
512
572
|
# call.
|
@@ -515,55 +575,6 @@ module YARD
|
|
515
575
|
def caller_method
|
516
576
|
raise NotImplementedError
|
517
577
|
end
|
518
|
-
|
519
|
-
# Attempts to find or create a macro if a +@macro+ tag is found in the
|
520
|
-
# docstring (or the object's docstring).
|
521
|
-
#
|
522
|
-
# @param [Docstring, CodeObjects::Base] object_or_docstring the docstring
|
523
|
-
# or it's object with which to check for a macro
|
524
|
-
# @return [CodeObjects::MacroObject] the newly created macro
|
525
|
-
# @return [nil] if the docstring does not create or reference a macro
|
526
|
-
def find_or_create_macro(object_or_docstring)
|
527
|
-
if object_or_docstring.is_a?(Docstring)
|
528
|
-
object, docstring = nil, object_or_docstring
|
529
|
-
else
|
530
|
-
object, docstring = object_or_docstring, object_or_docstring.docstring
|
531
|
-
end
|
532
|
-
return unless macro_tag = docstring.tag(:macro)
|
533
|
-
unless macro_tag.name
|
534
|
-
if object
|
535
|
-
log.warn "Invalid/missing macro name for #{object.path} (#{parser.file}:#{statement.line})"
|
536
|
-
return nil
|
537
|
-
else
|
538
|
-
raise UndocumentableError, 'method/attribute, missing macro name'
|
539
|
-
end
|
540
|
-
end
|
541
|
-
caller_obj = caller_method ? P(namespace, caller_method) : nil
|
542
|
-
if macro = MacroObject.find_or_create(docstring, caller_obj)
|
543
|
-
attached_method_name = caller_method
|
544
|
-
if object && object.is_a?(MethodObject) && object.scope == :class
|
545
|
-
macro.method_object = object
|
546
|
-
attached_method_name = object.name.to_s
|
547
|
-
end
|
548
|
-
if macro.attached?
|
549
|
-
globals.__attached_macros ||= {}
|
550
|
-
globals.__attached_macros[attached_method_name] ||= []
|
551
|
-
globals.__attached_macros[attached_method_name] |= [macro]
|
552
|
-
end
|
553
|
-
end
|
554
|
-
macro
|
555
|
-
end
|
556
|
-
|
557
|
-
# Sets the docstring on +object+ to the expanded macro.
|
558
|
-
# @param [CodeObjects::Base] object the object to expand the macro on
|
559
|
-
# @param [CodeObjects::MacroObject] macro the macro object to expand
|
560
|
-
# @return [void]
|
561
|
-
def expand_macro(object, macro)
|
562
|
-
return unless macro
|
563
|
-
all_params = ([caller_method] + call_params).compact
|
564
|
-
data = MacroObject.apply_macro(macro, object.docstring, all_params, statement.source)
|
565
|
-
object.docstring = Docstring.new(data, object)
|
566
|
-
end
|
567
578
|
end
|
568
579
|
end
|
569
580
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class YARD::Handlers::C::AliasHandler < YARD::Handlers::C::Base
|
2
|
+
MATCH = %r{rb_define_alias
|
3
|
+
\s*\(\s*([\w\.]+),
|
4
|
+
\s*"([^"]+)",
|
5
|
+
\s*"([^"]+)"\s*\)}xm
|
6
|
+
handles MATCH
|
7
|
+
statement_class BodyStatement
|
8
|
+
|
9
|
+
process do
|
10
|
+
statement.source.scan(MATCH) do |var_name, new_name, old_name|
|
11
|
+
var_name = "rb_cObject" if var_name == "rb_mKernel"
|
12
|
+
handle_alias(var_name, new_name, old_name)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class YARD::Handlers::C::AttributeHandler < YARD::Handlers::C::Base
|
2
|
+
MATCH = %r{rb_define_attr\s*\(\s*([\w\.]+),\s*"([^"]+)",\s*(0|1)\s*,\s*(0|1)\s*\)}
|
3
|
+
handles MATCH
|
4
|
+
|
5
|
+
process do
|
6
|
+
return if ToplevelStatement == statement
|
7
|
+
return if Comment === statement && statement.type != :multi
|
8
|
+
statement.source.scan(MATCH) do |var_name, name, read, write|
|
9
|
+
handle_attribute(var_name, name, read, write)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
module YARD
|
2
|
+
module Handlers
|
3
|
+
module C
|
4
|
+
class Base < Handlers::Base
|
5
|
+
include YARD::Parser::C
|
6
|
+
include HandlerMethods
|
7
|
+
|
8
|
+
# @return [Boolean] whether the handler handles this statement
|
9
|
+
def self.handles?(statement, processor)
|
10
|
+
processor.globals.cruby_processed_files ||= {}
|
11
|
+
processor.globals.cruby_processed_files[processor.file] = true
|
12
|
+
|
13
|
+
if statement.respond_to? :declaration
|
14
|
+
src = statement.declaration
|
15
|
+
else
|
16
|
+
src = statement.source
|
17
|
+
end
|
18
|
+
|
19
|
+
handlers.any? do |a_handler|
|
20
|
+
statement_class >= statement.class &&
|
21
|
+
case a_handler
|
22
|
+
when String
|
23
|
+
src == a_handler
|
24
|
+
when Regexp
|
25
|
+
src =~ a_handler
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.statement_class(type = nil)
|
31
|
+
type ? @statement_class = type : (@statement_class || Statement)
|
32
|
+
end
|
33
|
+
|
34
|
+
# @group Registering objects
|
35
|
+
|
36
|
+
def register_docstring(object, docstring = nil, stmt = nil)
|
37
|
+
super(object, docstring, stmt) if docstring
|
38
|
+
end
|
39
|
+
|
40
|
+
def register_file_info(object, file = nil, line = nil, comments = nil)
|
41
|
+
super(object, file, line, comments) if file
|
42
|
+
end
|
43
|
+
|
44
|
+
def register_source(object, source = nil, type = nil)
|
45
|
+
super(object, source, type) if source
|
46
|
+
end
|
47
|
+
|
48
|
+
def register_visibility(object, visibility = nil)
|
49
|
+
super(object, visibility) if visibility
|
50
|
+
end
|
51
|
+
|
52
|
+
# @group Looking up Symbol and Var Values
|
53
|
+
|
54
|
+
def symbols
|
55
|
+
globals.cruby_symbols ||= {}
|
56
|
+
end
|
57
|
+
|
58
|
+
def override_comments
|
59
|
+
globals.cruby_override_comments ||= []
|
60
|
+
end
|
61
|
+
|
62
|
+
def namespace_for_variable(var)
|
63
|
+
return namespaces[var] if namespaces[var]
|
64
|
+
var = remove_var_prefix(var)
|
65
|
+
var.empty? ? nil : P(var)
|
66
|
+
end
|
67
|
+
|
68
|
+
def namespaces
|
69
|
+
globals.cruby_namespaces ||= {}
|
70
|
+
end
|
71
|
+
|
72
|
+
def processed_files
|
73
|
+
globals.cruby_processed_files ||= {}
|
74
|
+
end
|
75
|
+
|
76
|
+
# @group Parsing an Inner Block
|
77
|
+
|
78
|
+
def parse_block(opts = {})
|
79
|
+
return if !statement.block || statement.block.empty?
|
80
|
+
push_state(opts) do
|
81
|
+
parser.process(statement.block)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# @group Processing other files
|
86
|
+
|
87
|
+
def process_file(file, object)
|
88
|
+
file = File.cleanpath(File.relative_path(statement.file, file))
|
89
|
+
return if processed_files[file]
|
90
|
+
processed_files[file] = file
|
91
|
+
begin
|
92
|
+
log.debug "Processing embedded call to C source #{file}..."
|
93
|
+
globals.ordered_parser.files.delete(file) if globals.ordered_parser
|
94
|
+
parser.process(Parser::C::CParser.new(File.read(file), file).parse)
|
95
|
+
rescue Errno::ENOENT
|
96
|
+
log.warn "Missing source file `#{file}' when parsing #{object}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# @endgroup
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def remove_var_prefix(var)
|
105
|
+
var.gsub(/^rb_[mc]|^[a-z_]+/, '')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|