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
@@ -79,11 +79,11 @@ module YARD
|
|
79
79
|
# @option options [Symbol] :template (:default) the default template
|
80
80
|
# @return [String] the rendered template
|
81
81
|
def render(options = {})
|
82
|
-
set_default_options(options)
|
83
|
-
mod = template(options
|
82
|
+
options = set_default_options(options)
|
83
|
+
mod = template(options.template, options.type, options.format)
|
84
84
|
|
85
|
-
if options
|
86
|
-
with_serializer(options
|
85
|
+
if options.serialize != false
|
86
|
+
with_serializer(options.object, options.serializer) { mod.run(options) }
|
87
87
|
else
|
88
88
|
mod.run(options)
|
89
89
|
end
|
@@ -98,9 +98,10 @@ module YARD
|
|
98
98
|
# @param [Hash] options (see {render})
|
99
99
|
# @return [void]
|
100
100
|
def generate(objects, options = {})
|
101
|
-
set_default_options(options)
|
102
|
-
options
|
103
|
-
|
101
|
+
options = set_default_options(options)
|
102
|
+
options.objects = objects
|
103
|
+
options.object = Registry.root
|
104
|
+
template(options.template, :fulldoc, options.format).run(options)
|
104
105
|
end
|
105
106
|
|
106
107
|
# Serializes the results of a block with a +serializer+ object.
|
@@ -130,10 +131,14 @@ module YARD
|
|
130
131
|
# @option options [Symbol] :template (:default) the default template
|
131
132
|
# @return [void]
|
132
133
|
def set_default_options(options = {})
|
133
|
-
options
|
134
|
-
|
135
|
-
|
136
|
-
|
134
|
+
if options.is_a?(Hash)
|
135
|
+
options = TemplateOptions.new.tap do |o|
|
136
|
+
o.reset_defaults
|
137
|
+
o.update(options)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
options.type ||= options.object.type if options.object
|
141
|
+
options
|
137
142
|
end
|
138
143
|
|
139
144
|
# Searches through the registered {template_paths} and returns
|
@@ -158,7 +163,7 @@ module YARD
|
|
158
163
|
|
159
164
|
# The name of the module that represents a +path+
|
160
165
|
#
|
161
|
-
# @param [String] the path
|
166
|
+
# @param [String] path the path to generate a module name for
|
162
167
|
# @return [String] the module name
|
163
168
|
def template_module_name(path)
|
164
169
|
'Template_' + path.to_s.gsub(/[^a-z0-9]/i, '_')
|
@@ -3,6 +3,12 @@ module YARD::Templates::Helpers
|
|
3
3
|
module BaseHelper
|
4
4
|
attr_accessor :object, :serializer
|
5
5
|
|
6
|
+
# @return [CodeObjects::Base] the object representing the current generated
|
7
|
+
# page. Might not be the current {#object} when inside sub-templates.
|
8
|
+
attr_reader :owner
|
9
|
+
undef owner
|
10
|
+
def owner; @owner || object.namespace end
|
11
|
+
|
6
12
|
# @group Managing Global Template State
|
7
13
|
|
8
14
|
# An object that keeps track of global state throughout the entire template
|
@@ -10,7 +16,7 @@ module YARD::Templates::Helpers
|
|
10
16
|
#
|
11
17
|
# @return [OpenStruct] a struct object that stores state
|
12
18
|
# @since 0.6.0
|
13
|
-
def globals; options
|
19
|
+
def globals; options.globals end
|
14
20
|
|
15
21
|
# @group Running the Verifier
|
16
22
|
|
@@ -21,7 +27,7 @@ module YARD::Templates::Helpers
|
|
21
27
|
# @return [Array<CodeObjects::Base>] a list of code objects that match
|
22
28
|
# the verifier. If no verifier is supplied, all objects are returned.
|
23
29
|
def run_verifier(list)
|
24
|
-
options
|
30
|
+
options.verifier ? options.verifier.run(list) : list
|
25
31
|
end
|
26
32
|
|
27
33
|
# @group Escaping Text
|
@@ -33,7 +33,7 @@ module YARD
|
|
33
33
|
# @param [Symbol] markup examples are +:markdown+, +:textile+, +:rdoc+.
|
34
34
|
# To add a custom markup type, see {MarkupHelper}
|
35
35
|
# @return [String] the HTML
|
36
|
-
def htmlify(text, markup = options
|
36
|
+
def htmlify(text, markup = options.markup)
|
37
37
|
markup_meth = "html_markup_#{markup}"
|
38
38
|
return text unless respond_to?(markup_meth)
|
39
39
|
return "" unless text
|
@@ -153,7 +153,7 @@ module YARD
|
|
153
153
|
# @return [String] the highlighted source
|
154
154
|
def html_syntax_highlight(source, type = nil)
|
155
155
|
return "" unless source
|
156
|
-
return h(source)
|
156
|
+
return h(source) unless options.highlight
|
157
157
|
|
158
158
|
new_type, source = parse_lang_for_codeblock(source)
|
159
159
|
type ||= new_type || :ruby
|
@@ -196,6 +196,8 @@ module YARD
|
|
196
196
|
title = nil if title.empty?
|
197
197
|
end
|
198
198
|
|
199
|
+
name = CGI.unescapeHTML(name)
|
200
|
+
|
199
201
|
if object.is_a?(String)
|
200
202
|
object
|
201
203
|
else
|
@@ -231,7 +233,7 @@ module YARD
|
|
231
233
|
file = CodeObjects::ExtraFileObject.new(file)
|
232
234
|
end
|
233
235
|
file.attributes[:markup] ||= markup_for_file('', file.filename)
|
234
|
-
htmlify(file.contents, file.attributes[:markup] || options
|
236
|
+
htmlify(file.contents, file.attributes[:markup] || options.markup)
|
235
237
|
end
|
236
238
|
|
237
239
|
# (see BaseHelper#link_include_object)
|
@@ -248,7 +250,14 @@ module YARD
|
|
248
250
|
elsif otitle
|
249
251
|
title = otitle.to_s
|
250
252
|
elsif object.is_a?(CodeObjects::Base)
|
251
|
-
|
253
|
+
# Check if we're linking to a class method in the current
|
254
|
+
# object. If we are, create a title in the format of
|
255
|
+
# "CurrentClass.method_name"
|
256
|
+
if obj.is_a?(CodeObjects::MethodObject) && obj.scope == :class && obj.parent == object
|
257
|
+
title = h([object.name, obj.sep, obj.name].join)
|
258
|
+
else
|
259
|
+
title = h(object.relative_path(obj))
|
260
|
+
end
|
252
261
|
else
|
253
262
|
title = h(obj.to_s)
|
254
263
|
end
|
@@ -313,7 +322,7 @@ module YARD
|
|
313
322
|
fromobj = object
|
314
323
|
if object.is_a?(CodeObjects::Base) &&
|
315
324
|
!object.is_a?(CodeObjects::NamespaceObject)
|
316
|
-
fromobj =
|
325
|
+
fromobj = owner
|
317
326
|
end
|
318
327
|
|
319
328
|
from = serializer.serialized_path(fromobj)
|
@@ -337,7 +346,7 @@ module YARD
|
|
337
346
|
fromobj = fromobj.namespace
|
338
347
|
end
|
339
348
|
from = serializer.serialized_path(fromobj)
|
340
|
-
if filename == options
|
349
|
+
if filename == options.readme
|
341
350
|
path = 'index.html'
|
342
351
|
else
|
343
352
|
path = serializer.serialized_path(filename)
|
@@ -347,6 +356,39 @@ module YARD
|
|
347
356
|
link
|
348
357
|
end
|
349
358
|
|
359
|
+
# Returns the URL for a list type
|
360
|
+
#
|
361
|
+
# @param [String, Symbol] type the list type to generate a URL for
|
362
|
+
# @return [String] the URL pointing to the list
|
363
|
+
# @since 0.8.0
|
364
|
+
def url_for_list(type)
|
365
|
+
url_for_file("#{type}_list.html")
|
366
|
+
end
|
367
|
+
|
368
|
+
# Returns the URL for the frameset page
|
369
|
+
#
|
370
|
+
# @return [String] the URL pointing to the frames page
|
371
|
+
# @since 0.8.0
|
372
|
+
def url_for_frameset
|
373
|
+
url_for_file("frames.html")
|
374
|
+
end
|
375
|
+
|
376
|
+
# Returns the URL for the main page (README or alphabetic index)
|
377
|
+
#
|
378
|
+
# @return [String] the URL pointing to the first main page the
|
379
|
+
# user should see.
|
380
|
+
def url_for_main
|
381
|
+
url_for_file("index.html")
|
382
|
+
end
|
383
|
+
|
384
|
+
# Returns the URL for the alphabetic index page
|
385
|
+
#
|
386
|
+
# @return [String] the URL pointing to the first main page the
|
387
|
+
# user should see.
|
388
|
+
def url_for_index
|
389
|
+
url_for_file("_index.html")
|
390
|
+
end
|
391
|
+
|
350
392
|
# @group Formatting Objects and Attributes
|
351
393
|
|
352
394
|
# Formats a list of objects and links them
|
@@ -391,7 +433,7 @@ module YARD
|
|
391
433
|
meth = meth.object
|
392
434
|
end
|
393
435
|
|
394
|
-
type = options
|
436
|
+
type = options.default_return || ""
|
395
437
|
if meth.tag(:return) && meth.tag(:return).types
|
396
438
|
types = meth.tags(:return).map {|t| t.types ? t.types : [] }.flatten.uniq
|
397
439
|
first = link ? h(types.first) : format_types([types.first], false)
|
@@ -401,7 +443,7 @@ module YARD
|
|
401
443
|
type = first + '<sup>+</sup>'
|
402
444
|
elsif types.size > 2
|
403
445
|
type = [first, '...'].join(', ')
|
404
|
-
elsif types == ['void'] && options
|
446
|
+
elsif types == ['void'] && options.hide_void_return
|
405
447
|
type = ""
|
406
448
|
else
|
407
449
|
type = link ? h(types.join(", ")) : format_types(types, false)
|
@@ -449,7 +491,8 @@ module YARD
|
|
449
491
|
link_title = "#{h name} (#{meth.type})"
|
450
492
|
end
|
451
493
|
obj = meth.respond_to?(:object) ? meth.object : meth
|
452
|
-
|
494
|
+
url = url_for(object, obj)
|
495
|
+
link_url(url, title, :title => link_title) + extras_text
|
453
496
|
else
|
454
497
|
title + extras_text
|
455
498
|
end
|
@@ -506,9 +549,9 @@ module YARD
|
|
506
549
|
|
507
550
|
# Parses !!!lang out of codeblock, returning the codeblock language
|
508
551
|
# followed by the source code.
|
509
|
-
#
|
552
|
+
#
|
510
553
|
# @param [String] source the source code whose language to determine
|
511
|
-
# @return [Array(String, String)] the language, if any, and the
|
554
|
+
# @return [Array(String, String)] the language, if any, and the
|
512
555
|
# remaining source
|
513
556
|
# @since 0.7.5
|
514
557
|
def parse_lang_for_codeblock(source)
|
@@ -519,10 +562,10 @@ module YARD
|
|
519
562
|
|
520
563
|
[type, source]
|
521
564
|
end
|
522
|
-
|
565
|
+
|
523
566
|
# Parses code blocks out of html and performs syntax highlighting
|
524
567
|
# on code inside of the blocks.
|
525
|
-
#
|
568
|
+
#
|
526
569
|
# @param [String] html the html to search for code in
|
527
570
|
# @return [String] highlighted html
|
528
571
|
# @see #html_syntax_highlight
|
@@ -533,7 +576,7 @@ module YARD
|
|
533
576
|
language, _ = parse_lang_for_codeblock(string)
|
534
577
|
language ||= $1 || $2 || object.source_type
|
535
578
|
|
536
|
-
|
579
|
+
if options.highlight
|
537
580
|
string = html_syntax_highlight(CGI.unescapeHTML(string), language)
|
538
581
|
end
|
539
582
|
classes = ['code', language].compact.join(' ')
|
@@ -73,19 +73,19 @@ module YARD
|
|
73
73
|
# found and exit the program.
|
74
74
|
#
|
75
75
|
# @return [Boolean] whether the markup provider was successfully loaded.
|
76
|
-
def load_markup_provider(type = options
|
76
|
+
def load_markup_provider(type = options.markup)
|
77
77
|
return true if MarkupHelper.markup_cache[type]
|
78
78
|
MarkupHelper.markup_cache[type] ||= {}
|
79
79
|
|
80
80
|
providers = MARKUP_PROVIDERS[type.to_sym]
|
81
81
|
return true if providers && providers.empty?
|
82
|
-
if providers && options
|
83
|
-
providers = providers.select {|p| p[:lib] == options
|
82
|
+
if providers && options.markup_provider
|
83
|
+
providers = providers.select {|p| p[:lib] == options.markup_provider }
|
84
84
|
end
|
85
85
|
|
86
86
|
if providers == nil || providers.empty?
|
87
87
|
log.error "Invalid markup type '#{type}' or markup provider " +
|
88
|
-
"(#{options
|
88
|
+
"(#{options.markup_provider}) is not registered."
|
89
89
|
return false
|
90
90
|
end
|
91
91
|
|
@@ -128,7 +128,7 @@ module YARD
|
|
128
128
|
MARKUP_EXTENSIONS.each do |type, exts|
|
129
129
|
return type if exts.include?(ext)
|
130
130
|
end
|
131
|
-
options
|
131
|
+
options.markup
|
132
132
|
end
|
133
133
|
|
134
134
|
# Strips any shebang lines on the file contents that pertain to
|
@@ -144,9 +144,9 @@ module YARD
|
|
144
144
|
# Gets the markup provider class/module constant for a markup type
|
145
145
|
# Call {#load_markup_provider} before using this method.
|
146
146
|
#
|
147
|
-
# @param [Symbol] the markup type (:rdoc, :markdown, etc.)
|
147
|
+
# @param [Symbol] type the markup type (:rdoc, :markdown, etc.)
|
148
148
|
# @return [Class] the markup class
|
149
|
-
def markup_class(type = options
|
149
|
+
def markup_class(type = options.markup)
|
150
150
|
load_markup_provider(type)
|
151
151
|
MarkupHelper.markup_cache[type][:class]
|
152
152
|
end
|
@@ -154,9 +154,9 @@ module YARD
|
|
154
154
|
# Gets the markup provider name for a markup type
|
155
155
|
# Call {#load_markup_provider} before using this method.
|
156
156
|
#
|
157
|
-
# @param [Symbol] the markup type (:rdoc, :markdown, etc.)
|
157
|
+
# @param [Symbol] type the markup type (:rdoc, :markdown, etc.)
|
158
158
|
# @return [Symbol] the markup provider name (usually the gem name of the library)
|
159
|
-
def markup_provider(type = options
|
159
|
+
def markup_provider(type = options.markup)
|
160
160
|
MarkupHelper.markup_cache[type][:provider]
|
161
161
|
end
|
162
162
|
end
|
@@ -51,7 +51,7 @@ module YARD
|
|
51
51
|
meth = meth.tag(:overload)
|
52
52
|
end
|
53
53
|
|
54
|
-
type = options
|
54
|
+
type = options.default_return || ""
|
55
55
|
rmeth = meth
|
56
56
|
if !rmeth.has_tag?(:return) && rmeth.respond_to?(:object)
|
57
57
|
rmeth = meth.object
|
@@ -65,7 +65,7 @@ module YARD
|
|
65
65
|
type = first + '+'
|
66
66
|
elsif types.size > 2
|
67
67
|
type = [first, '...'].join(', ')
|
68
|
-
elsif types == ['void'] && options
|
68
|
+
elsif types == ['void'] && options.hide_void_return
|
69
69
|
type = ""
|
70
70
|
else
|
71
71
|
type = types.join(", ")
|
@@ -7,17 +7,49 @@ module YARD
|
|
7
7
|
attr_reader :options
|
8
8
|
|
9
9
|
class << self
|
10
|
-
#
|
10
|
+
# Extra includes are mixins that are included after a template is created. These
|
11
|
+
# mixins can be registered by plugins to operate on templates and override behaviour.
|
12
|
+
#
|
13
|
+
# Note that this array can be filled with modules or proc objects. If a proc object
|
14
|
+
# is given, the proc will be called with the {Template#options} hash containing
|
15
|
+
# relevant template information like the object, format, and more. The proc should
|
16
|
+
# return a module or nil if there is none.
|
17
|
+
#
|
18
|
+
# @example Adding in extra mixins to include on a template
|
19
|
+
# Template.extra_includes << MyHelper
|
20
|
+
# @example Conditionally including a mixin if the format is html
|
21
|
+
# Template.extra_includes << proc {|opts| MyHelper if opts.format == :html }
|
22
|
+
# @return [Array<Module, Proc>] a list of modules to be automatically included
|
11
23
|
# into any new template module
|
12
24
|
attr_accessor :extra_includes
|
13
25
|
|
26
|
+
# @!parse extend ClassMethods
|
14
27
|
# @private
|
15
28
|
def included(klass)
|
16
29
|
klass.extend(ClassMethods)
|
17
30
|
end
|
31
|
+
|
32
|
+
# Includes the {extra_includes} modules into the template object.
|
33
|
+
#
|
34
|
+
# @param [Template] template the template object to mixin the extra includes.
|
35
|
+
# @param [SymbolHash] options the options hash containing all template information
|
36
|
+
# @return [void]
|
37
|
+
def include_extra(template, options)
|
38
|
+
extra_includes.each do |mod|
|
39
|
+
mod = mod.call(options) if mod.is_a?(Proc)
|
40
|
+
next unless mod.is_a?(Module)
|
41
|
+
template.extend(mod)
|
42
|
+
end
|
43
|
+
end
|
18
44
|
end
|
19
45
|
|
20
|
-
self.extra_includes = [
|
46
|
+
self.extra_includes = [
|
47
|
+
proc {|options|
|
48
|
+
{ :html => Helpers::HtmlHelper,
|
49
|
+
:text => Helpers::TextHelper,
|
50
|
+
:dot => Helpers::UMLHelper }[options.format]
|
51
|
+
}
|
52
|
+
]
|
21
53
|
|
22
54
|
include ErbCache
|
23
55
|
include Helpers::BaseHelper
|
@@ -131,16 +163,13 @@ module YARD
|
|
131
163
|
end
|
132
164
|
end
|
133
165
|
|
134
|
-
def initialize(opts =
|
166
|
+
def initialize(opts = TemplateOptions.new)
|
167
|
+
opts_class = opts.class
|
168
|
+
opts_class = TemplateOptions if opts_class == Hash
|
135
169
|
@cache, @cache_filename = {}, {}
|
136
|
-
@sections, @options = [],
|
170
|
+
@sections, @options = [], opts_class.new
|
137
171
|
add_options(opts)
|
138
|
-
|
139
|
-
extend(Helpers::HtmlHelper) if options[:format] == :html
|
140
|
-
extend(Helpers::TextHelper) if options[:format] == :text
|
141
|
-
extend(Helpers::UMLHelper) if options[:format] == :dot
|
142
|
-
extend(*Template.extra_includes) unless Template.extra_includes.empty?
|
143
|
-
|
172
|
+
Template.include_extra(self, options)
|
144
173
|
init
|
145
174
|
end
|
146
175
|
|
@@ -151,8 +180,8 @@ module YARD
|
|
151
180
|
# @param [Array<String, Symbol>] path the path of the template
|
152
181
|
# @return [Template] the loaded template module
|
153
182
|
def T(*path)
|
154
|
-
path.unshift(options
|
155
|
-
path.push(options
|
183
|
+
path.unshift(options.template) if options.template
|
184
|
+
path.push(options.format) if options.format
|
156
185
|
self.class.T(*path)
|
157
186
|
end
|
158
187
|
|
@@ -299,7 +328,7 @@ module YARD
|
|
299
328
|
end
|
300
329
|
|
301
330
|
def erb_with(content, filename = nil)
|
302
|
-
erb = ERB.new(content, nil, options
|
331
|
+
erb = ERB.new(content, nil, options.format == :text ? '<>' : nil)
|
303
332
|
erb.filename = filename if filename
|
304
333
|
erb
|
305
334
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module YARD
|
4
|
+
module Templates
|
5
|
+
# An Options class containing default options for base template rendering. For
|
6
|
+
# options specific to generation of HTML output, see {CLI::YardocOptions}.
|
7
|
+
#
|
8
|
+
# @see CLI::YardocOptions
|
9
|
+
class TemplateOptions < YARD::Options
|
10
|
+
# @return [Symbol] the template output format
|
11
|
+
default_attr :format, :text
|
12
|
+
|
13
|
+
# @return [Symbol] the template name used to render output
|
14
|
+
default_attr :template, :default
|
15
|
+
|
16
|
+
# @return [Symbol] the markup format to use when parsing docstrings
|
17
|
+
default_attr :markup, :rdoc # default is :rdoc but falls back on :none
|
18
|
+
|
19
|
+
# @return [String] the default return type for a method with no return tags
|
20
|
+
default_attr :default_return, "Object"
|
21
|
+
|
22
|
+
# @return [Boolean] whether void methods should show "void" in their signature
|
23
|
+
default_attr :hide_void_return, false
|
24
|
+
|
25
|
+
# @return [Boolean] whether code blocks should be syntax highlighted
|
26
|
+
default_attr :highlight, true
|
27
|
+
|
28
|
+
# @return [Class] the markup provider class for the markup format
|
29
|
+
attr_accessor :markup_provider
|
30
|
+
|
31
|
+
# @return [OpenStruct] an open struct containing any global state across all
|
32
|
+
# generated objects in a template.
|
33
|
+
default_attr :globals, lambda { OpenStruct.new }
|
34
|
+
alias __globals globals
|
35
|
+
|
36
|
+
# @return [CodeObjects::Base] the main object being generated in the template
|
37
|
+
attr_accessor :object
|
38
|
+
|
39
|
+
# @return [Symbol] the template type used to generate output
|
40
|
+
attr_accessor :type
|
41
|
+
|
42
|
+
# @return [Boolean] whether serialization should be performed
|
43
|
+
default_attr :serialize, false
|
44
|
+
|
45
|
+
# @return [Serializers::Base] the serializer used to generate links and serialize
|
46
|
+
# output. Serialization output only occurs if {#serialize} is +true+.
|
47
|
+
attr_accessor :serializer
|
48
|
+
|
49
|
+
# @deprecated use {#highlight} instead.
|
50
|
+
# @return [Boolean] whether highlighting should be ignored
|
51
|
+
attr_reader :no_highlight
|
52
|
+
undef no_highlight
|
53
|
+
def no_highlight; !highlight end
|
54
|
+
def no_highlight=(value) self.highlight = !value end
|
55
|
+
|
56
|
+
# @return [String] the title of a given page
|
57
|
+
attr_accessor :page_title
|
58
|
+
|
59
|
+
# @example A list of mixin path names (including wildcards)
|
60
|
+
# opts.embed_mixins #=> ['ClassMethods', '*Helper', 'YARD::*']
|
61
|
+
# @return [Array<String>] an array of module name wildcards to embed into
|
62
|
+
# class documentation as if their methods were defined directly in the class.
|
63
|
+
# Useful for modules like ClassMethods. If the name contains '::', the module
|
64
|
+
# is matched against the full mixin path, otherwise only the module name is used.
|
65
|
+
default_attr :embed_mixins, lambda { [] }
|
66
|
+
|
67
|
+
# @param [CodeObjects::Base] mixin accepts any code object, but returns
|
68
|
+
# nil unless the object is a module.
|
69
|
+
# @return [Boolean] whether a mixin matches the embed_mixins list
|
70
|
+
# @return [nil] if the mixin is not a module object
|
71
|
+
def embed_mixins_match?(mixin)
|
72
|
+
return nil unless mixin.is_a?(CodeObjects::ModuleObject)
|
73
|
+
embed_mixins.any? do |embed_mixin|
|
74
|
+
re = /\A#{Regexp.quote(embed_mixin).gsub('\*', '.*')}\Z/
|
75
|
+
matchstr = embed_mixin.include?("::") ? mixin.path : mixin.name
|
76
|
+
re.match(matchstr.to_s)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|