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/docs/TagsArch.md
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
# @title Tags Architecture
|
2
|
+
|
3
|
+
# Tags Architecture
|
4
|
+
|
5
|
+
## Programmatic API
|
6
|
+
|
7
|
+
### Accessing Tag Information
|
8
|
+
|
9
|
+
Tag metadata is added when a {YARD::Docstring} is added to a {file:docs/CodeObjects.md code object}
|
10
|
+
using the {YARD::CodeObjects::Base#docstring=} attribute. In addition to adding
|
11
|
+
conventional comments, tags are parsed and associated with the object. The easiest
|
12
|
+
way to access tags on an object is to use the {YARD::CodeObjects::Base#tag} and `#tags`
|
13
|
+
methods, for example:
|
14
|
+
|
15
|
+
# Using the Foo class object from above
|
16
|
+
obj.tags(:tagname).first.text #=> "some data"
|
17
|
+
|
18
|
+
Because multiple tags can be stored with the same name, they are stored as a list
|
19
|
+
of tags. The `#tag` method is an alias for the first item in the list of tags.
|
20
|
+
Also note that the `#tag`, `#tags` and `#has_tag?` methods are all convenience
|
21
|
+
methods that delegate to the {YARD::Docstring} object described above.
|
22
|
+
|
23
|
+
### Adding Custom Tags
|
24
|
+
|
25
|
+
The `@tagname` tag used in the above examples is clearly not part of the tags
|
26
|
+
that come with YARD. If such a tag would actually be part of documentation under
|
27
|
+
a default install, YARD would raise a warning that the tag does not exist. It is,
|
28
|
+
however, trivial to add this tag to be recognized by YARD.
|
29
|
+
|
30
|
+
All tags in YARD are added to the {YARD::Tags::Library tag library} which makes
|
31
|
+
use of a tag factory class to parse the data inside the tags. To simply add a
|
32
|
+
tag that stores simple text like our `@tagname` tag above, use:
|
33
|
+
|
34
|
+
YARD::Tags::Library.define_tag("A Sample Tag", :tagname)
|
35
|
+
|
36
|
+
This will now allow YARD to add the metadata from `@tagname` to the docstring.
|
37
|
+
|
38
|
+
## Tag Factory Architecture
|
39
|
+
|
40
|
+
Recognizing a tag is one part of the process. Parsing the tag contents is the
|
41
|
+
second step. YARD has a tag architecture that allows developers to add or completely
|
42
|
+
change the way tags contents can be parsed.
|
43
|
+
|
44
|
+
The separation of registration and tag creation can be seen in the following
|
45
|
+
class diagram:
|
46
|
+
|
47
|
+
![Tags Architecture Class Diagram](images/tags-class-diagram.png)
|
48
|
+
|
49
|
+
### DefaultFactory
|
50
|
+
|
51
|
+
By default, YARD has a few standard syntaxes that can be parsed for tags. These
|
52
|
+
are all implemented by the {YARD::Tags::DefaultFactory} class. These syntaxes
|
53
|
+
are:
|
54
|
+
|
55
|
+
* Standard text: no parsing is done, but text is stripped of newlines and
|
56
|
+
multiple spaces.
|
57
|
+
|
58
|
+
* Raw text: does no parsing at all, no stripping of newlines or spaces. This
|
59
|
+
is best used for code snippets.
|
60
|
+
|
61
|
+
* Raw text with title: does no parsing on the text but extracts the first line
|
62
|
+
of the metadata as the "title", useful for tags such as `@example`:
|
63
|
+
|
64
|
+
# @example Inspect an element
|
65
|
+
# myobj.inspect #=> #<Object:0x123525>
|
66
|
+
|
67
|
+
* Text with types: parses a list of types at the beginning of the text. Types
|
68
|
+
are optional. The standard syntax is in the form `[type1, type2, ...]`,
|
69
|
+
for example:
|
70
|
+
|
71
|
+
# @return [String, Symbol] a description here
|
72
|
+
# @return description here with no types
|
73
|
+
|
74
|
+
* Text with types and a name: parses a list of types at the beginning of text
|
75
|
+
followed by a name and extra descriptive text. For example:
|
76
|
+
|
77
|
+
# @param [String] str the string to reverse
|
78
|
+
def reverse(str) '...' end
|
79
|
+
|
80
|
+
As mentioned above, this syntax is implemented by the `DefaultFactory` which can
|
81
|
+
be swapped out for any factory. In some cases, a developer may want to change
|
82
|
+
the type declaration syntax to be in the form:
|
83
|
+
|
84
|
+
# @tagname name <Types, here> description
|
85
|
+
|
86
|
+
This can be done by simply implementing a new factory that parses the data in
|
87
|
+
this form.
|
88
|
+
|
89
|
+
### Implementing a Factory
|
90
|
+
|
91
|
+
Factories should implement the method `parse_tag` as well as any `parse_tag_SUFFIX`
|
92
|
+
method where SUFFIX refers to the suffix added when declaring the tag. For example,
|
93
|
+
a tag can also be declared as follows:
|
94
|
+
|
95
|
+
YARD::Tags::Library.define_tag "Parameter", :param, :with_types
|
96
|
+
|
97
|
+
In such a case, the factory will be called with method `parse_tag_with_types`. In
|
98
|
+
all cases, the method should return a new {YARD::Tags::Tag} object. Generally,
|
99
|
+
the `parse_tag` methods take 2 or 3 parameters. A simple tag can be implemented
|
100
|
+
as:
|
101
|
+
|
102
|
+
def parse_tag(tag_name, text)
|
103
|
+
Tag.new(tag_name, text)
|
104
|
+
end
|
105
|
+
|
106
|
+
The text parameter contains pre-parsed text with extra spaces and newlines removed.
|
107
|
+
If required, the method could also be declared with a third parameter containing
|
108
|
+
unmodified raw text:
|
109
|
+
|
110
|
+
def parse_tag_with_raw_text(tag_name, text, raw_text)
|
111
|
+
Tag.new(tag_name, raw_text)
|
112
|
+
end
|
113
|
+
|
114
|
+
Note that this method would be invoked for a tag declared with the `:with_raw_text`
|
115
|
+
suffix.
|
116
|
+
|
117
|
+
### Changing the Factory
|
118
|
+
|
119
|
+
To change the factory, set the {YARD::Tags::Library.default_factory} attribute:
|
120
|
+
|
121
|
+
YARD::Tags::Library.default_factory = MyFactory
|
122
|
+
|
123
|
+
This must be done before any parsing is done, or the factory will not be used.
|
data/docs/Templates.md
CHANGED
@@ -29,32 +29,32 @@ The design goals can be summarized as follows:
|
|
29
29
|
3. Sections should be able to be inserted into any object without affecting
|
30
30
|
any existing sections in the document. This allows for easy modification
|
31
31
|
of templates by plugins.
|
32
|
-
|
32
|
+
|
33
33
|
## Templates
|
34
34
|
|
35
|
-
Template modules are the objects used to orchestrate the design goals listed
|
35
|
+
Template modules are the objects used to orchestrate the design goals listed
|
36
36
|
above. Specifically, they organize the sections and render the template contents
|
37
|
-
depending on the format.
|
37
|
+
depending on the format.
|
38
38
|
|
39
39
|
## Engine
|
40
40
|
|
41
|
-
The Engine class orchestrates the creation and rendering of Template modules and
|
41
|
+
The Engine class orchestrates the creation and rendering of Template modules and
|
42
42
|
handles serialization or specific rendering scenarios (like HTML). To create
|
43
|
-
a template, use the {YARD::Templates::Engine.template template} method. The two most
|
44
|
-
common methods used to initiate output are the {YARD::Templates::Engine.render render}
|
45
|
-
and {YARD::Templates::Engine.generate generate} methods which generate and
|
46
|
-
optionally serialize output to a file. The latter, `#generate`, is used
|
47
|
-
specially to generate HTML documentation and copy over assets that may be
|
43
|
+
a template, use the {YARD::Templates::Engine.template template} method. The two most
|
44
|
+
common methods used to initiate output are the {YARD::Templates::Engine.render render}
|
45
|
+
and {YARD::Templates::Engine.generate generate} methods which generate and
|
46
|
+
optionally serialize output to a file. The latter, `#generate`, is used
|
47
|
+
specially to generate HTML documentation and copy over assets that may be
|
48
48
|
needed. For instance, an object may be rendered with:
|
49
49
|
|
50
50
|
YARD::Templates::Engine.render(:object => myobject)
|
51
|
-
|
51
|
+
|
52
52
|
A set of objects may be rendered into HTML documentation by using:
|
53
53
|
|
54
54
|
# all_objects is an array of module and class objects
|
55
55
|
# options includes a :serializer key to copy output to the file system
|
56
56
|
YARD::Templates::Engine.generate(all_objects, options)
|
57
|
-
|
57
|
+
|
58
58
|
Note that these methods should not be called directly. The {YARD::CodeObjects::Base}
|
59
59
|
class has a {YARD::CodeObjects::Base#format #format} helper method to render an
|
60
60
|
object. For instance, the above render example is equivalent to the simple
|
@@ -67,11 +67,11 @@ A template keeps state when it is rendering output. This state is kept in
|
|
67
67
|
an options hash which is initially passed to it during instantiation. Some
|
68
68
|
default options set the template style (`:template`), the output format (`:format`),
|
69
69
|
and the serializer to use (`:serializer`). This options hash is modifiable
|
70
|
-
from all methods seen above. For example, initializing a template to output as
|
70
|
+
from all methods seen above. For example, initializing a template to output as
|
71
71
|
HTML instead of text can be done as follows:
|
72
72
|
|
73
73
|
myobject.format(:format => :html)
|
74
|
-
|
74
|
+
|
75
75
|
## Serializer
|
76
76
|
|
77
77
|
This class abstracts the logic involved in deciding how to serialize data to
|
@@ -82,7 +82,7 @@ are used (like files or URLs), the serializer implements the {YARD::Serializers:
|
|
82
82
|
method. This allows the translation from a code object to its path at the endpoint,
|
83
83
|
which enables inter-document linking.
|
84
84
|
|
85
|
-
Rendered objects are automatically serialized using the object if present,
|
85
|
+
Rendered objects are automatically serialized using the object if present,
|
86
86
|
otherwise the rendered object is returned as a string to its parent. Nested
|
87
87
|
Templates automatically set the serializer to nil so that they return
|
88
88
|
as a String to their parent.
|
@@ -120,13 +120,13 @@ on disk. A standard template directory looks like the following tree:
|
|
120
120
|
| |-- index.erb
|
121
121
|
| `-- text.erb
|
122
122
|
|
123
|
-
The path `default` refers to the template style (:template key in options hash)
|
123
|
+
The path `default` refers to the template style (:template key in options hash)
|
124
124
|
and the directories at the next level (such as `class`) refer to template
|
125
|
-
`:type` (options hash key) for a template. The next directory refers to the
|
126
|
-
output format being used defined by the `:format` template option.
|
125
|
+
`:type` (options hash key) for a template. The next directory refers to the
|
126
|
+
output format being used defined by the `:format` template option.
|
127
127
|
|
128
128
|
As we saw in the above example, the format option can be set to `:html`, which
|
129
|
-
would use the `html/` directory instead of `text/`. Finally, the individual .erb
|
129
|
+
would use the `html/` directory instead of `text/`. Finally, the individual .erb
|
130
130
|
files are the sections that make up the template.
|
131
131
|
|
132
132
|
Note that the subdirectory `html/` is also its own "template" that inherits
|
@@ -134,8 +134,8 @@ from the parent directory. We will see more on this later.
|
|
134
134
|
|
135
135
|
## setup.rb
|
136
136
|
|
137
|
-
Every template should have at least one `setup.rb` file that defines the
|
138
|
-
{YARD::Templates::Template#init #init} method to set the
|
137
|
+
Every template should have at least one `setup.rb` file that defines the
|
138
|
+
{YARD::Templates::Template#init #init} method to set the
|
139
139
|
{YARD::Templates::Template#sections #sections} used by the template. If
|
140
140
|
a setup.rb is not defined in the template itself, there should be a template
|
141
141
|
that is inherited (via parent directory or explcitly) that sets the sections
|
@@ -150,9 +150,9 @@ A standard setup.rb file looks like:
|
|
150
150
|
## Sections
|
151
151
|
|
152
152
|
Sections are smaller components that correlate to template
|
153
|
-
fragments. Practically speaking, a section can either be a template fragment
|
154
|
-
(a conventional .erb file or other supported templating language), a method
|
155
|
-
(which returns a String) or another {YARD::Templates::Template} (which in turn has its own
|
153
|
+
fragments. Practically speaking, a section can either be a template fragment
|
154
|
+
(a conventional .erb file or other supported templating language), a method
|
155
|
+
(which returns a String) or another {YARD::Templates::Template} (which in turn has its own
|
156
156
|
list of sections).
|
157
157
|
|
158
158
|
## Nested Sections
|
@@ -165,7 +165,7 @@ a section, for example:
|
|
165
165
|
def init
|
166
166
|
sections :header, [:section_a, :section_b]
|
167
167
|
end
|
168
|
-
|
168
|
+
|
169
169
|
The above example nests `section_a` and `section_b` within the `header` section.
|
170
170
|
Practically speaking, these sections can be placed in the result by `yield`ing
|
171
171
|
to them. A sample header.erb template might contain:
|
@@ -174,7 +174,7 @@ to them. A sample header.erb template might contain:
|
|
174
174
|
<div id="contents">
|
175
175
|
<%= yieldall %>
|
176
176
|
</div>
|
177
|
-
|
177
|
+
|
178
178
|
This template code would place the output of `section_a` and `section_b` within
|
179
179
|
the above div element. Using `yieldall`, we can also change the object that is being
|
180
180
|
rendered. For example, we may want to yield the first method of the class.
|
@@ -197,7 +197,7 @@ more accurate) by the current template. This means that the 'default/class/html'
|
|
197
197
|
template automatically inherits from 'default/class'. This also means that anything
|
198
198
|
defined in 'default/class/setup.rb' can be overridden by 'default/class/html/setup.rb'.
|
199
199
|
|
200
|
-
Since the Template module is a module, and not a class, they can be mixed in
|
200
|
+
Since the Template module is a module, and not a class, they can be mixed in
|
201
201
|
explicitly (via include/extend) from other templates, which allows templates
|
202
202
|
to share erb files or helper logic. The 'default/class' template explicitly
|
203
203
|
mixes in the 'default/module' template, since it uses much of the same sections.
|
@@ -225,29 +225,29 @@ instance, will modify the #init method to insert class specific sections:
|
|
225
225
|
sections.delete(:children)
|
226
226
|
sections.place([:constructor_details, [T('method_details')]]).before(:methodmissing)
|
227
227
|
end
|
228
|
-
|
228
|
+
|
229
229
|
Observe how sections has been modified after the super method was called (the
|
230
230
|
super method would have been defined in `default/module/setup.rb`). The
|
231
231
|
`sections` object is of the {YARD::Templates::Section} class and allows sections to be inserted
|
232
|
-
before or after another section using {Array#place} by it's given name rather
|
232
|
+
before or after another section using {Array#place} by it's given name rather
|
233
233
|
than index. This allows the overriding of templates in a way that does not
|
234
|
-
depend on where the section is located (since it may have been overriden by
|
234
|
+
depend on where the section is located (since it may have been overriden by
|
235
235
|
another module).
|
236
236
|
|
237
237
|
You can also use `sections[:name]` to find the first child section named `:name`.
|
238
238
|
For instance, with the following sections declaration:
|
239
239
|
|
240
240
|
sections :a, [:b, :c, [:d]]
|
241
|
-
|
241
|
+
|
242
242
|
You can get to the :d section with:
|
243
243
|
|
244
244
|
sections[:a][:c][:d]
|
245
|
-
|
245
|
+
|
246
246
|
You can use this to insert a section inside a nested set without using indexed
|
247
247
|
access. The following command would result in `[:a, [:b, :c, [:d, :e]]]`:
|
248
248
|
|
249
249
|
sections[:a][:c].place(:e).after(:d)
|
250
|
-
|
250
|
+
|
251
251
|
There are also two methods, {Insertion#before_any} and {Insertion#after_any},
|
252
252
|
which allow you to insert sections before or after the first matching section name
|
253
253
|
recursively. The above example could simply be rewritten as:
|
@@ -265,16 +265,16 @@ YARD solves this problem by allowing other template paths to be registered.
|
|
265
265
|
Because template modules are represented by a relative path such as 'default/class',
|
266
266
|
they can be found within any of the registered template paths. A new template
|
267
267
|
path is registered as:
|
268
|
-
|
268
|
+
|
269
269
|
YARD::Templates::Engine.register_template_path '/path/to/mytemplates'
|
270
|
-
|
270
|
+
|
271
271
|
At this point, any time the 'default/class' template is loaded, the template
|
272
272
|
will first be looked for inside the newly registered template path. If found,
|
273
273
|
it will be used as the template module, with the modules from the other
|
274
|
-
template paths implicitly mixed in.
|
274
|
+
template paths implicitly mixed in.
|
275
275
|
|
276
276
|
Therefore, by using the same directory structure as a builtin YARD template,
|
277
|
-
a user can customize or override individual templates as if the old ones were
|
277
|
+
a user can customize or override individual templates as if the old ones were
|
278
278
|
inherited. A real world example would further modify the 'default/class' template
|
279
279
|
seen above by creating such a path in our '/path/to/mytemplates' custom template
|
280
280
|
path:
|
@@ -292,7 +292,7 @@ The `setup.rb` file would look like:
|
|
292
292
|
sections.push :customsection
|
293
293
|
end
|
294
294
|
|
295
|
-
Now, when a class object is formatted as HTML, our customsection.erb will be
|
295
|
+
Now, when a class object is formatted as HTML, our customsection.erb will be
|
296
296
|
appended to the rendered data.
|
297
297
|
|
298
298
|
|
@@ -344,7 +344,7 @@ The `jquery.js` is copy of the jquery javascript library.
|
|
344
344
|
To load additional stylesheets and javascripts with every page (except the search
|
345
345
|
field menus) generated from the base `layout` template:
|
346
346
|
|
347
|
-
1. Define your own custom stylesheet and/or javascript file
|
347
|
+
1. Define your own custom stylesheet and/or javascript file
|
348
348
|
(default/ is the default template name inside of the /template root directory):
|
349
349
|
|
350
350
|
/template/default/:
|
@@ -355,28 +355,28 @@ field menus) generated from the base `layout` template:
|
|
355
355
|
| | |-- js
|
356
356
|
| | | |-- custom.js
|
357
357
|
|
358
|
-
2. Create a `setup.rb` in the `layout` template directory and override the methods
|
358
|
+
2. Create a `setup.rb` in the `layout` template directory and override the methods
|
359
359
|
`stylesheets` and `javascripts`. The path to the template would be:
|
360
|
-
|
360
|
+
|
361
361
|
/template/default/:
|
362
362
|
|-- layout
|
363
363
|
| |-- html
|
364
364
|
| | |-- setup.rb
|
365
|
-
|
365
|
+
|
366
366
|
And the code would look like:
|
367
|
-
|
367
|
+
|
368
368
|
def stylesheets
|
369
369
|
# Load the existing stylesheets while appending the custom one
|
370
370
|
super + %w(css/custom.css)
|
371
371
|
end
|
372
|
-
|
372
|
+
|
373
373
|
def javascripts
|
374
374
|
# Load the existing javascripts while appending the custom one
|
375
375
|
super + %w(js/custom.js)
|
376
376
|
end
|
377
|
-
|
378
377
|
|
379
|
-
|
378
|
+
|
379
|
+
To load additional stylesheets and javascripts for the search menus loaded from
|
380
380
|
the `fulldoc` template:
|
381
381
|
|
382
382
|
1. Define your own custom stylesheet and/or javascript file.
|
@@ -416,21 +416,21 @@ Their contents are rendered in methods within the `fulldoc` template:
|
|
416
416
|
* `generate_class_list`
|
417
417
|
* `generate_method_list`
|
418
418
|
* `generate_file_list`
|
419
|
-
|
419
|
+
|
420
420
|
To override these lists you will need to:
|
421
421
|
|
422
422
|
1. Create a `setup.rb` in the `fulldoc` template directory and override the
|
423
423
|
particular method.
|
424
|
-
|
424
|
+
|
425
425
|
/path/to/mytemplates/:
|
426
426
|
|-- fulldoc
|
427
427
|
| |-- html
|
428
428
|
| | |-- setup.rb
|
429
|
-
|
429
|
+
|
430
430
|
def generate_method_list
|
431
431
|
@items = prune_method_listing(Registry.all(:method), false)
|
432
432
|
@items = @items.reject {|m| m.name.to_s =~ /=$/ && m.is_attribute? }
|
433
|
-
|
433
|
+
|
434
434
|
# Here we changed the functionality to reverse the order of displayed methods
|
435
435
|
@items = @items.sort_by {|m| m.name.to_s }.reverse
|
436
436
|
@list_title = "Method List"
|
@@ -452,11 +452,11 @@ the `fulldoc` template through a similarly named method.
|
|
452
452
|
To load an additional menu item:
|
453
453
|
|
454
454
|
|
455
|
-
1. Create a `setup.rb` in the `layout` template directory and override the methods
|
455
|
+
1. Create a `setup.rb` in the `layout` template directory and override the methods
|
456
456
|
`menu_lists`. The `type` informs the search field the name of the file.
|
457
457
|
The `title` is the name that appears above the section when viewed in frames.
|
458
458
|
The `search_title` is the name that appears in the search field tab on the page.
|
459
|
-
|
459
|
+
|
460
460
|
|
461
461
|
/path/to/mytemplates/:
|
462
462
|
|-- layout
|
@@ -467,52 +467,30 @@ To load an additional menu item:
|
|
467
467
|
# Load the existing menus
|
468
468
|
super + [ { :type => 'feature', :title => 'Features', :search_title => 'Feature List' } ]
|
469
469
|
end
|
470
|
-
|
470
|
+
|
471
471
|
2. Create a `setup.rb` in the `fulldoc` template directory and create a method
|
472
|
-
to generate a menu for the specified `type`.
|
472
|
+
to generate a menu for the specified `type`.
|
473
473
|
The method `generate_assets` will look for a function with a signature prefixed
|
474
|
-
with `generate`, the type value specified, and the suffix `list`. Within that
|
474
|
+
with `generate`, the type value specified, and the suffix `list`. Within that
|
475
475
|
method you can configure and load the specific objects you wish to display.
|
476
|
-
|
476
|
+
|
477
477
|
/path/to/mytemplates/:
|
478
478
|
|-- fulldoc
|
479
479
|
| |-- html
|
480
480
|
| | |-- setup.rb
|
481
481
|
|
482
482
|
def generate_feature_list
|
483
|
-
|
483
|
+
|
484
484
|
# load all the features from the Registry
|
485
485
|
@items = Registry.all(:feature)
|
486
486
|
@list_title = "Feature List"
|
487
487
|
@list_type = "feature"
|
488
|
-
|
488
|
+
|
489
489
|
# optional: the specified stylesheet class
|
490
490
|
# when not specified it will default to the value of @list_type
|
491
491
|
@list_class = "class"
|
492
|
-
|
492
|
+
|
493
493
|
# Generate the full list html file with named feature_list.html
|
494
494
|
# @note this file must be match the name of the type
|
495
495
|
asset('feature_list.html', erb(:full_list))
|
496
496
|
end
|
497
|
-
|
498
|
-
|
499
|
-
3. Define custom javascript to load the search fields and the keyboard shortcuts.
|
500
|
-
|
501
|
-
function featureSearchFrameLinks() {
|
502
|
-
$('#feature_list_link').click(function() {
|
503
|
-
toggleSearchFrame(this, relpath + 'feature_list.html');
|
504
|
-
});
|
505
|
-
}
|
506
|
-
|
507
|
-
function featureKeyboardShortcuts() {
|
508
|
-
if (window.top.frames.main) return;
|
509
|
-
$(document).keypress(function(evt) {
|
510
|
-
if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return;
|
511
|
-
if (typeof evt.orignalTarget !== "undefined" &&
|
512
|
-
(evt.originalTarget.nodeName == "INPUT" ||
|
513
|
-
evt.originalTarget.nodeName == "TEXTAREA")) return;
|
514
|
-
switch (evt.charCode) {
|
515
|
-
case 82: case 114: $('#feature_list_link').click(); break; // 'r'
|
516
|
-
}
|
517
|
-
});
|
518
|
-
}
|