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
@@ -224,6 +224,21 @@ module YARD
|
|
224
224
|
yield(self) if block_given?
|
225
225
|
end
|
226
226
|
|
227
|
+
# Copies all data in this object to another code object, except for
|
228
|
+
# uniquely identifying information (path, namespace, name, scope).
|
229
|
+
#
|
230
|
+
# @param [Base] other the object to copy data to
|
231
|
+
# @return [Base] the other object
|
232
|
+
# @since 0.8.0
|
233
|
+
def copy_to(other)
|
234
|
+
copyable_attributes.each do |ivar|
|
235
|
+
ivar = "@#{ivar}"
|
236
|
+
other.instance_variable_set(ivar, instance_variable_get(ivar))
|
237
|
+
end
|
238
|
+
other.docstring = docstring.to_raw
|
239
|
+
other
|
240
|
+
end
|
241
|
+
|
227
242
|
# The name of the object
|
228
243
|
# @param [Boolean] prefix whether to show a prefix. Implement
|
229
244
|
# this in a subclass to define how the prefix is showed.
|
@@ -286,7 +301,7 @@ module YARD
|
|
286
301
|
|
287
302
|
# @return [Integer] the object's hash value (for equality checking)
|
288
303
|
def hash; path.hash end
|
289
|
-
|
304
|
+
|
290
305
|
# @return [nil] this object does not turn into an array
|
291
306
|
def to_ary; nil end
|
292
307
|
|
@@ -348,6 +363,7 @@ module YARD
|
|
348
363
|
end
|
349
364
|
end
|
350
365
|
|
366
|
+
undef docstring
|
351
367
|
def docstring
|
352
368
|
return @docstring if !@docstring_extra
|
353
369
|
case @docstring
|
@@ -445,7 +461,7 @@ module YARD
|
|
445
461
|
# @return [String] the rendered template
|
446
462
|
# @see Templates::Engine#render
|
447
463
|
def format(options = {})
|
448
|
-
options.merge
|
464
|
+
options = options.merge(:object => self)
|
449
465
|
Templates::Engine.render(options)
|
450
466
|
end
|
451
467
|
|
@@ -494,8 +510,6 @@ module YARD
|
|
494
510
|
# @return whether or not this object is a RootObject
|
495
511
|
def root?; false end
|
496
512
|
|
497
|
-
protected
|
498
|
-
|
499
513
|
# Override this method with a custom component separator. For instance,
|
500
514
|
# {MethodObject} implements sep as '#' or '.' (depending on if the
|
501
515
|
# method is instance or class respectively). {#path} depends on this
|
@@ -505,6 +519,23 @@ module YARD
|
|
505
519
|
# and the name (default is {NSEP})
|
506
520
|
def sep; NSEP end
|
507
521
|
|
522
|
+
protected
|
523
|
+
|
524
|
+
# Override this method if your code object subclass does not allow
|
525
|
+
# copying of certain attributes.
|
526
|
+
#
|
527
|
+
# @return [Array<String>] the list of instance variable names (without
|
528
|
+
# "@" prefix) that should be copied when {#copy_to} is called
|
529
|
+
# @see #copy_to
|
530
|
+
# @since 0.8.0
|
531
|
+
def copyable_attributes
|
532
|
+
vars = instance_variables.map {|ivar| ivar.to_s[1..-1] }
|
533
|
+
vars -= %w(docstring namespace name path)
|
534
|
+
vars
|
535
|
+
end
|
536
|
+
|
537
|
+
private
|
538
|
+
|
508
539
|
# Formats source code by removing leading indentation
|
509
540
|
#
|
510
541
|
# @param [String] source the source code to format
|
@@ -1,27 +1,29 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
1
3
|
module YARD
|
2
4
|
module CodeObjects
|
3
|
-
# A MacroObject represents a docstring defined through
|
4
|
-
# reused by specifying the tag
|
5
|
+
# A MacroObject represents a docstring defined through +@!macro NAME+ and can be
|
6
|
+
# reused by specifying the tag +@!macro NAME+. You can also provide the
|
5
7
|
# +attached+ type flag to the macro definition to have it attached to the
|
6
8
|
# specific DSL method so it will be implicitly reused.
|
7
|
-
#
|
8
|
-
# Macros are fully described in the {file:docs/Tags.md#
|
9
|
+
#
|
10
|
+
# Macros are fully described in the {file:docs/Tags.md#macro Tags Overview}
|
9
11
|
# document.
|
10
|
-
#
|
12
|
+
#
|
11
13
|
# @example Creating a basic named macro
|
12
|
-
# #
|
13
|
-
# #
|
14
|
-
# #
|
14
|
+
# # @!macro prop
|
15
|
+
# # @!method $1(${3-})
|
16
|
+
# # @return [$2] the value of the $0
|
15
17
|
# property :foo, String, :a, :b
|
16
|
-
#
|
17
|
-
# #
|
18
|
+
#
|
19
|
+
# # @!macro prop
|
18
20
|
# property :bar, Numeric, :value
|
19
|
-
#
|
21
|
+
#
|
20
22
|
# @example Creating a macro that is attached to the method call
|
21
|
-
# #
|
22
|
-
# #
|
23
|
+
# # @!macro [attach] prop2
|
24
|
+
# # @!method $1(value)
|
23
25
|
# property :foo
|
24
|
-
#
|
26
|
+
#
|
25
27
|
# # Extra data added to docstring
|
26
28
|
# property :bar
|
27
29
|
class MacroObject < Base
|
@@ -40,56 +42,54 @@ module YARD
|
|
40
42
|
obj.method_object = method_object
|
41
43
|
obj
|
42
44
|
end
|
43
|
-
|
45
|
+
|
44
46
|
# Finds a macro using +macro_name+
|
47
|
+
# @param [#to_s] macro_name the name of the macro
|
45
48
|
# @return [MacroObject] if a macro is found
|
46
49
|
# @return [nil] if there is no registered macro by that name
|
47
50
|
def find(macro_name)
|
48
51
|
Registry.at('.macro.' + macro_name.to_s)
|
49
52
|
end
|
50
|
-
|
53
|
+
|
51
54
|
# Parses a given docstring and determines if the macro is "new" or
|
52
|
-
# not. If the macro has $variable names or if it has a
|
53
|
-
# with the [new] or [attached] flag, it is considered new.
|
54
|
-
#
|
55
|
+
# not. If the macro has $variable names or if it has a @!macro tag
|
56
|
+
# with the [new] or [attached] flag, it is considered new.
|
57
|
+
#
|
55
58
|
# If a new macro is found, the macro is created and registered. Otherwise
|
56
59
|
# the macro name is searched and returned. If a macro is not found,
|
57
60
|
# nil is returned.
|
58
|
-
#
|
61
|
+
#
|
62
|
+
# @param [#to_s] macro_name the name of the macro
|
59
63
|
# @param [CodeObjects::Base] method_object an optional method to attach
|
60
64
|
# the macro to. Only used if the macro is being created, otherwise
|
61
65
|
# this argument is ignored.
|
62
66
|
# @return [MacroObject] the newly created or existing macro, depending
|
63
|
-
# on whether the
|
67
|
+
# on whether the @!macro tag was a new tag or not.
|
64
68
|
# @return [nil] if the +data+ has no macro tag or if the macro is
|
65
69
|
# not new and no macro by the macro name is found.
|
66
|
-
def find_or_create(data, method_object = nil)
|
67
|
-
|
68
|
-
|
69
|
-
return unless name = macro_name(docstring)
|
70
|
-
if new_macro?(docstring)
|
71
|
-
method_object = nil unless attached_macro?(docstring, method_object)
|
72
|
-
create(name, macro_data(docstring), method_object)
|
70
|
+
def find_or_create(macro_name, data, method_object = nil)
|
71
|
+
if macro = find(name)
|
72
|
+
macro
|
73
73
|
else
|
74
|
-
|
74
|
+
create(macro_name, data, method_object)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
alias create_docstring find_or_create
|
78
|
-
|
78
|
+
|
79
79
|
# Expands +macro_data+ using the interpolation parameters.
|
80
|
-
#
|
80
|
+
#
|
81
81
|
# Interpolation rules:
|
82
82
|
# * $0, $1, $2, ... = the Nth parameter in +call_params+
|
83
83
|
# * $* = the full statement source (excluding block)
|
84
84
|
# * Also supports $!{N-M} ranges, as well as negative indexes on N or M
|
85
85
|
# * Use \$ to escape the variable name in a macro.
|
86
|
-
#
|
87
|
-
#
|
86
|
+
#
|
87
|
+
# @!macro [new] macro.expand
|
88
88
|
# @param [Array<String>] call_params the method name and parameters
|
89
89
|
# to the method call. These arguments will fill \$0-N
|
90
|
-
# @param [String] full_source the full source line (excluding block)
|
90
|
+
# @param [String] full_source the full source line (excluding block)
|
91
91
|
# interpolated as \$*
|
92
|
-
# @param [String] block_source Currently unused. Will support
|
92
|
+
# @param [String] block_source Currently unused. Will support
|
93
93
|
# interpolating the block data as a variable.
|
94
94
|
# @return [String] the expanded macro data
|
95
95
|
# @param [String] macro_data the macro data to expand (taken from {#macro_data})
|
@@ -113,91 +113,48 @@ module YARD
|
|
113
113
|
# Applies a macro on a docstring by creating any macro data inside of
|
114
114
|
# the docstring first. Equivalent to calling {find_or_create} and {apply_macro}
|
115
115
|
# on the new macro object.
|
116
|
-
#
|
116
|
+
#
|
117
117
|
# @param [Docstring] docstring the docstring to create a macro out of
|
118
|
-
#
|
118
|
+
# @!macro macro.expand
|
119
119
|
# @see find_or_create
|
120
120
|
def apply(docstring, call_params = [], full_source = '', block_source = '', method_object = nil)
|
121
|
-
|
122
|
-
|
121
|
+
docstring = docstring.all if Docstring === docstring
|
122
|
+
parser = DocstringParser.new
|
123
|
+
handler = OpenStruct.new
|
124
|
+
handler.call_params = call_params[1..-1]
|
125
|
+
handler.caller_method = call_params.first
|
126
|
+
handler.statement = OpenStruct.new(:source => full_source)
|
127
|
+
parser.parse(docstring, nil, handler).to_docstring.to_raw
|
123
128
|
end
|
124
129
|
|
125
130
|
# Applies a macro to a docstring, interpolating the macro's data on the
|
126
131
|
# docstring and appending any extra local docstring data that was in
|
127
132
|
# the original +docstring+ object.
|
128
|
-
#
|
133
|
+
#
|
129
134
|
# @param [MacroObject] macro the macro object
|
130
|
-
#
|
135
|
+
# @!macro macro.expand
|
131
136
|
def apply_macro(macro, docstring, call_params = [], full_source = '', block_source = '')
|
132
|
-
|
133
|
-
data = []
|
134
|
-
data << macro.expand(call_params, full_source, block_source) if macro
|
135
|
-
if !macro && new_macro?(docstring)
|
136
|
-
data << expand(macro_data(docstring), call_params, full_source, block_source)
|
137
|
-
end
|
138
|
-
data << nonmacro_data(docstring)
|
139
|
-
data.join("\n").strip
|
140
|
-
end
|
141
|
-
|
142
|
-
private
|
143
|
-
|
144
|
-
def new_macro?(docstring)
|
145
|
-
if docstring.tag(:macro)
|
146
|
-
if types = docstring.tag(:macro).types
|
147
|
-
return true if types.include?('new') || types.include?('attach')
|
148
|
-
end
|
149
|
-
if docstring.all =~ MACRO_MATCH
|
150
|
-
return true
|
151
|
-
end
|
152
|
-
end
|
153
|
-
false
|
154
|
-
end
|
155
|
-
|
156
|
-
def attached_macro?(docstring, method_object)
|
157
|
-
return false if method_object.nil?
|
158
|
-
return false if docstring.tag(:macro).types.nil?
|
159
|
-
docstring.tag(:macro).types.include?('attach')
|
160
|
-
end
|
161
|
-
|
162
|
-
def macro_name(docstring)
|
163
|
-
docstring.tag(:macro).name
|
164
|
-
end
|
165
|
-
|
166
|
-
def macro_data(docstring)
|
167
|
-
new_docstring = docstring.dup
|
168
|
-
new_docstring.delete_tags(:macro)
|
169
|
-
tag_text = docstring.tag(:macro).text
|
170
|
-
if !tag_text || tag_text.strip.empty?
|
171
|
-
new_docstring.to_raw.strip
|
172
|
-
else
|
173
|
-
tag_text
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
def nonmacro_data(docstring)
|
178
|
-
if new_macro?(docstring)
|
179
|
-
text = docstring.tag(:macro).text
|
180
|
-
return '' if !text || text.strip.empty?
|
181
|
-
end
|
182
|
-
new_docstring = docstring.dup
|
183
|
-
new_docstring.delete_tags(:macro)
|
184
|
-
new_docstring.to_raw
|
137
|
+
apply(docstring, call_params, full_source, block_source)
|
185
138
|
end
|
186
139
|
end
|
187
|
-
|
140
|
+
|
188
141
|
# @return [String] the macro data stored on the object
|
189
142
|
attr_accessor :macro_data
|
190
|
-
|
143
|
+
|
191
144
|
# @return [CodeObjects::Base] the method object that this macro is
|
192
145
|
# attached to.
|
193
146
|
attr_accessor :method_object
|
194
|
-
|
147
|
+
|
195
148
|
# @return [Boolean] whether this macro is attached to a method
|
196
149
|
def attached?; method_object ? true : false end
|
150
|
+
|
151
|
+
# Overrides {Base#path} so the macro path is ".macro.MACRONAME"
|
197
152
|
def path; '.macro.' + name.to_s end
|
153
|
+
|
154
|
+
# Overrides the separator to be '.'
|
198
155
|
def sep; '.' end
|
199
|
-
|
200
|
-
# Expands the macro using
|
156
|
+
|
157
|
+
# Expands the macro using
|
201
158
|
# @param [Array<String>] call_params a list of tokens that are passed
|
202
159
|
# to the method call
|
203
160
|
# @param [String] full_source the full method call (not including the block)
|
@@ -23,12 +23,26 @@ module YARD::CodeObjects
|
|
23
23
|
# Creates a new method object in +namespace+ with +name+ and an instance
|
24
24
|
# or class +scope+
|
25
25
|
#
|
26
|
+
# If scope is +:module+, this object is instantiated as a public
|
27
|
+
# method in +:class+ scope, but also creates a new (empty) method
|
28
|
+
# as a private +:instance+ method on the same class or module.
|
29
|
+
#
|
26
30
|
# @param [NamespaceObject] namespace the namespace
|
27
31
|
# @param [String, Symbol] name the method name
|
28
|
-
# @param [Symbol] scope +:instance
|
29
|
-
def initialize(namespace, name, scope = :instance)
|
32
|
+
# @param [Symbol] scope +:instance+, +:class+, or +:module+
|
33
|
+
def initialize(namespace, name, scope = :instance, &block)
|
34
|
+
@module_function = false
|
30
35
|
@scope = nil
|
31
|
-
|
36
|
+
|
37
|
+
# handle module function
|
38
|
+
if scope == :module
|
39
|
+
other = self.class.new(namespace, name, &block)
|
40
|
+
other.visibility = :private
|
41
|
+
scope = :class
|
42
|
+
@module_function = true
|
43
|
+
end
|
44
|
+
|
45
|
+
@visibility = :public
|
32
46
|
self.scope = scope
|
33
47
|
self.parameters = []
|
34
48
|
|
@@ -39,9 +53,22 @@ module YARD::CodeObjects
|
|
39
53
|
# @param [Symbol] v the new scope
|
40
54
|
def scope=(v)
|
41
55
|
reregister = @scope ? true : false
|
42
|
-
|
56
|
+
|
57
|
+
# handle module function
|
58
|
+
if v == :module
|
59
|
+
other = self.class.new(namespace, name)
|
60
|
+
other.visibility = :private
|
61
|
+
@visibility = :public
|
62
|
+
@module_function = true
|
63
|
+
@path = nil
|
64
|
+
end
|
65
|
+
|
66
|
+
YARD::Registry.delete(self)
|
43
67
|
@path = nil
|
44
68
|
@scope = v.to_sym
|
69
|
+
if @scope == :module
|
70
|
+
@scope = :class
|
71
|
+
end
|
45
72
|
YARD::Registry.register(self) if reregister
|
46
73
|
end
|
47
74
|
|
@@ -50,6 +77,13 @@ module YARD::CodeObjects
|
|
50
77
|
name == :initialize && scope == :instance && namespace.is_a?(ClassObject)
|
51
78
|
end
|
52
79
|
|
80
|
+
# @return [Boolean] whether or not this method was created as a module
|
81
|
+
# function
|
82
|
+
# @since 0.8.0
|
83
|
+
def module_function?
|
84
|
+
@module_function
|
85
|
+
end
|
86
|
+
|
53
87
|
# Returns the read/writer info for the attribute if it is one
|
54
88
|
# @return [SymbolHash] if there is information about the attribute
|
55
89
|
# @return [nil] if the method is not an attribute
|
@@ -137,8 +171,6 @@ module YARD::CodeObjects
|
|
137
171
|
prefix ? (sep == ISEP ? "#{sep}#{super}" : super.to_s) : super
|
138
172
|
end
|
139
173
|
|
140
|
-
protected
|
141
|
-
|
142
174
|
# Override separator to differentiate between class and instance
|
143
175
|
# methods.
|
144
176
|
# @return [String] "#" for an instance method, "." for class
|
@@ -149,5 +181,11 @@ module YARD::CodeObjects
|
|
149
181
|
ISEP
|
150
182
|
end
|
151
183
|
end
|
184
|
+
|
185
|
+
protected
|
186
|
+
|
187
|
+
def copyable_attributes
|
188
|
+
super - %w(scope module_function)
|
189
|
+
end
|
152
190
|
end
|
153
191
|
end
|
data/lib/yard/config.rb
CHANGED
@@ -45,14 +45,14 @@ module YARD
|
|
45
45
|
# loaded with safe mode on, because plugins are properly namespaced with
|
46
46
|
# a 'yard-' prefix, must be installed as a gem, and therefore cannot be
|
47
47
|
# touched by the user. To specify safe mode, use the +safe_mode+ key.
|
48
|
-
#
|
48
|
+
#
|
49
49
|
# == Plugin Specific Configuration
|
50
|
-
#
|
50
|
+
#
|
51
51
|
# Additional settings can be defined within the configuration file
|
52
52
|
# specifically to provide configuration for a plugin. A plugin that utilizes
|
53
53
|
# the YARD configuration is strongly encouraged to utilize namespacing of
|
54
54
|
# their configuration content.
|
55
|
-
#
|
55
|
+
#
|
56
56
|
# !!!yaml
|
57
57
|
# load_plugins: true # Auto-load plugins when YARD starts
|
58
58
|
# ignored_plugins:
|
@@ -63,23 +63,23 @@ module YARD
|
|
63
63
|
# # Plugin Specific Configuration
|
64
64
|
# yard-sample-plugin:
|
65
65
|
# show-results-inline: true
|
66
|
-
#
|
66
|
+
#
|
67
67
|
# As the configuration is available system wide, it can be
|
68
68
|
# accessed within the plugin code.
|
69
|
-
#
|
70
|
-
#
|
69
|
+
#
|
70
|
+
#
|
71
71
|
# if YARD::Config.options['yard-sample-plugin'] and
|
72
72
|
# YARD::Config.options['yard-sample-plugin']['show-results-inline']
|
73
73
|
# # ... perform the action that places the results inline ...
|
74
74
|
# else
|
75
75
|
# # ... do the default behavior of not showing the results inline ...
|
76
76
|
# end
|
77
|
-
#
|
77
|
+
#
|
78
78
|
# When accessing the configuration, be aware that this file is user managed
|
79
79
|
# so configuration keys and values may not be present. Make no assumptions and
|
80
80
|
# instead ensure that you check for the existence of keys before proceeding to
|
81
81
|
# retrieve values.
|
82
|
-
#
|
82
|
+
#
|
83
83
|
# @since 0.6.2
|
84
84
|
# @see options
|
85
85
|
class Config
|
@@ -119,6 +119,7 @@ module YARD
|
|
119
119
|
self.options = SymbolHash.new(false)
|
120
120
|
options.update(DEFAULT_CONFIG_OPTIONS)
|
121
121
|
options.update(read_config_file)
|
122
|
+
load_commandline_safemode
|
122
123
|
add_ignored_plugins_file
|
123
124
|
translate_plugin_names
|
124
125
|
load_plugins
|
@@ -198,6 +199,15 @@ module YARD
|
|
198
199
|
end
|
199
200
|
end
|
200
201
|
|
202
|
+
# Check for command-line safe_mode switch in {#arguments}
|
203
|
+
def self.load_commandline_safemode
|
204
|
+
with_yardopts do
|
205
|
+
arguments.each_with_index do |arg, i|
|
206
|
+
options[:safe_mode] = true if arg == '--safe'
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
201
211
|
# Print a warning if the plugin failed to load
|
202
212
|
# @return [false]
|
203
213
|
def self.load_plugin_failed(name, exception)
|