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
@@ -2,7 +2,12 @@ module YARD
|
|
2
2
|
module Parser::Ruby::Legacy
|
3
3
|
class Statement
|
4
4
|
attr_reader :tokens, :comments, :block
|
5
|
-
attr_accessor :comments_range
|
5
|
+
attr_accessor :comments_range
|
6
|
+
|
7
|
+
# @deprecated Groups are now defined by directives
|
8
|
+
# @see Tags::GroupDirective
|
9
|
+
attr_accessor :group
|
10
|
+
|
6
11
|
attr_accessor :comments_hash_flag
|
7
12
|
|
8
13
|
def initialize(tokens, block = nil, comments = nil)
|
@@ -31,7 +36,7 @@ module YARD
|
|
31
36
|
end
|
32
37
|
|
33
38
|
def show
|
34
|
-
"\t
|
39
|
+
"\t#{line}: #{first_line}"
|
35
40
|
end
|
36
41
|
|
37
42
|
# @return [Fixnum] the first line of Ruby source
|
@@ -14,7 +14,6 @@ module YARD
|
|
14
14
|
#
|
15
15
|
# @param [TokenList, String] content the tokens to create the list from
|
16
16
|
def initialize(content)
|
17
|
-
@group = nil
|
18
17
|
@shebang_line = nil
|
19
18
|
@encoding_line = nil
|
20
19
|
if content.is_a? TokenList
|
@@ -69,12 +68,15 @@ module YARD
|
|
69
68
|
sanitize_block
|
70
69
|
@statement.pop if [TkNL, TkSPACE, TkSEMICOLON].include?(@statement.last.class)
|
71
70
|
stmt = Statement.new(@statement, @block, @comments)
|
72
|
-
stmt.group = @group
|
73
71
|
if @comments && @comments_line
|
74
72
|
stmt.comments_range = (@comments_line..(@comments_line + @comments.size - 1))
|
75
73
|
stmt.comments_hash_flag = @comments_hash_flag
|
76
74
|
end
|
77
75
|
stmt
|
76
|
+
elsif @comments
|
77
|
+
@statement << TkCOMMENT.new(@comments_line, 0)
|
78
|
+
@statement.first.set_text("# " + @comments.join("\n# "))
|
79
|
+
Statement.new(@statement, nil, @comments)
|
78
80
|
else
|
79
81
|
nil
|
80
82
|
end
|
@@ -111,23 +113,6 @@ module YARD
|
|
111
113
|
end
|
112
114
|
end
|
113
115
|
|
114
|
-
def preprocess_token(tk)
|
115
|
-
if tk.is_a?(TkCOMMENT)
|
116
|
-
case tk.text
|
117
|
-
when /\A# @group\s+(.+)\s*\Z/
|
118
|
-
@group = $1
|
119
|
-
true
|
120
|
-
when /\A# @endgroup\s*\Z/
|
121
|
-
@group = nil
|
122
|
-
true
|
123
|
-
else
|
124
|
-
false
|
125
|
-
end
|
126
|
-
else
|
127
|
-
false
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
116
|
# Processes a single token
|
132
117
|
#
|
133
118
|
# @param [RubyToken::Token] tk the token to process
|
@@ -135,7 +120,6 @@ module YARD
|
|
135
120
|
# p tk.class, tk.text, @state, @level, @current_block, "<br/>"
|
136
121
|
case @state
|
137
122
|
when :first_statement
|
138
|
-
return if preprocess_token(tk)
|
139
123
|
return if process_initial_comment(tk)
|
140
124
|
return if @statement.empty? && [TkSPACE, TkNL, TkCOMMENT].include?(tk.class)
|
141
125
|
@comments_last_line = nil
|
@@ -235,10 +219,17 @@ module YARD
|
|
235
219
|
return
|
236
220
|
end
|
237
221
|
end
|
222
|
+
|
238
223
|
return if !@statement.empty? && @comments
|
239
224
|
return if @first_line && tk.line_no > @first_line
|
240
225
|
|
241
|
-
|
226
|
+
if @comments_last_line && @comments_last_line < tk.line_no - 1
|
227
|
+
if @comments && @statement.empty?
|
228
|
+
@tokens.unshift(tk)
|
229
|
+
return @done = true
|
230
|
+
end
|
231
|
+
@comments = nil
|
232
|
+
end
|
242
233
|
@comments_line = tk.line_no unless @comments
|
243
234
|
|
244
235
|
# Remove the "#" and up to 1 space before the text
|
@@ -356,7 +347,7 @@ module YARD
|
|
356
347
|
# @return [Boolean] whether or not the current statement's parentheses and blocks
|
357
348
|
# are balanced after +tk+
|
358
349
|
def balances?(tk)
|
359
|
-
unless [TkALIAS, TkDEF].include?(@last_ns_tk.class) || @before_last_ns_tk.class == TkALIAS
|
350
|
+
unless [TkALIAS, TkDEF].include?(@last_ns_tk.class) || @before_last_ns_tk.class == TkALIAS
|
360
351
|
if [TkLPAREN, TkLBRACK, TkLBRACE, TkDO, TkBEGIN].include?(tk.class)
|
361
352
|
@level += 1
|
362
353
|
elsif OPEN_BLOCK_TOKENS.include?(tk.class)
|
@@ -4,9 +4,9 @@ module YARD
|
|
4
4
|
module Parser
|
5
5
|
module Ruby
|
6
6
|
# Ruby 1.9 parser
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
7
|
+
# @!attribute [r] encoding_line
|
8
|
+
# @!attribute [r] shebang_line
|
9
|
+
# @!attribute [r] enumerator
|
10
10
|
class RubyParser < Parser::Base
|
11
11
|
def initialize(source, filename)
|
12
12
|
@parser = RipperParser.new(source, filename)
|
@@ -33,6 +33,7 @@ module YARD
|
|
33
33
|
@source = source
|
34
34
|
@tokens = []
|
35
35
|
@comments = {}
|
36
|
+
@comments_range = {}
|
36
37
|
@comments_flags = {}
|
37
38
|
@heredoc_tokens = nil
|
38
39
|
@heredoc_state = nil
|
@@ -40,9 +41,9 @@ module YARD
|
|
40
41
|
@ns_charno = 0
|
41
42
|
@list = []
|
42
43
|
@charno = 0
|
43
|
-
@groups = []
|
44
44
|
@shebang_line = nil
|
45
45
|
@encoding_line = nil
|
46
|
+
@file_encoding = nil
|
46
47
|
end
|
47
48
|
|
48
49
|
def parse
|
@@ -58,6 +59,15 @@ module YARD
|
|
58
59
|
ast.children
|
59
60
|
end
|
60
61
|
|
62
|
+
def file_encoding
|
63
|
+
return nil unless defined?(::Encoding)
|
64
|
+
return @file_encoding if @file_encoding
|
65
|
+
return Encoding.default_internal unless @encoding_line
|
66
|
+
if match = @encoding_line.match(SourceParser::ENCODING_LINE)
|
67
|
+
@file_encoding = match.captures.last
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
61
71
|
private
|
62
72
|
|
63
73
|
MAPPINGS = {
|
@@ -234,6 +244,11 @@ module YARD
|
|
234
244
|
@tokens[-1] = [:symbol, ":" + data]
|
235
245
|
elsif @heredoc_state == :started
|
236
246
|
@heredoc_tokens << [token, data]
|
247
|
+
|
248
|
+
# fix ripper encoding of heredoc bug
|
249
|
+
# (see http://bugs.ruby-lang.org/issues/6200)
|
250
|
+
data.force_encoding(file_encoding) if file_encoding
|
251
|
+
|
237
252
|
@heredoc_state = :ended if token == :heredoc_end
|
238
253
|
elsif (token == :nl || token == :comment) && @heredoc_state == :ended
|
239
254
|
@heredoc_tokens.unshift([token, data])
|
@@ -244,7 +259,7 @@ module YARD
|
|
244
259
|
@tokens << [token, data]
|
245
260
|
if token == :heredoc_beg
|
246
261
|
@heredoc_state = :started
|
247
|
-
@heredoc_tokens = []
|
262
|
+
@heredoc_tokens = []
|
248
263
|
end
|
249
264
|
end
|
250
265
|
end
|
@@ -274,6 +289,9 @@ module YARD
|
|
274
289
|
undef on_embdoc
|
275
290
|
undef on_embdoc_end
|
276
291
|
undef on_parse_error
|
292
|
+
undef on_bodystmt
|
293
|
+
undef on_top_const_ref
|
294
|
+
undef on_const_path_ref
|
277
295
|
|
278
296
|
def on_program(*args)
|
279
297
|
args.first
|
@@ -299,7 +317,7 @@ module YARD
|
|
299
317
|
def on_assoclist_from_args(*args)
|
300
318
|
args.first
|
301
319
|
end
|
302
|
-
|
320
|
+
|
303
321
|
def on_unary(op, val)
|
304
322
|
map = @map[op.to_s[0,1]]
|
305
323
|
lstart, sstart = *(map ? map.pop : [lineno, @ns_charno - 1])
|
@@ -340,7 +358,7 @@ module YARD
|
|
340
358
|
end
|
341
359
|
node
|
342
360
|
end
|
343
|
-
|
361
|
+
|
344
362
|
def on_lbracket(tok)
|
345
363
|
(@map[:lbracket] ||= []) << [lineno, charno]
|
346
364
|
visit_ns_token(:lbracket, tok, false)
|
@@ -378,7 +396,7 @@ module YARD
|
|
378
396
|
end
|
379
397
|
eof
|
380
398
|
end
|
381
|
-
|
399
|
+
|
382
400
|
def on_qwords_new(*args)
|
383
401
|
node = LiteralNode.new(:qwords_literal, args)
|
384
402
|
if @map[:qwords_beg]
|
@@ -388,7 +406,7 @@ module YARD
|
|
388
406
|
end
|
389
407
|
node
|
390
408
|
end
|
391
|
-
|
409
|
+
|
392
410
|
def on_qwords_add(list, item)
|
393
411
|
last = @source[@ns_charno,1] == "\n" ? @ns_charno - 1 : @ns_charno
|
394
412
|
list.source_range = (list.source_range.first..last)
|
@@ -467,32 +485,30 @@ module YARD
|
|
467
485
|
end
|
468
486
|
end
|
469
487
|
|
488
|
+
ch = charno
|
470
489
|
visit_ns_token(:comment, comment)
|
471
490
|
if not_comment
|
472
491
|
@last_ns_token = nil
|
473
492
|
return
|
474
493
|
end
|
475
|
-
case comment
|
476
|
-
when /\A#+ @group\s+(.+)\s*\Z/
|
477
|
-
@groups.unshift [lineno, $1]
|
478
|
-
return
|
479
|
-
when /\A#+ @endgroup\s*\Z/
|
480
|
-
@groups.unshift [lineno, nil]
|
481
|
-
return
|
482
|
-
end
|
483
494
|
|
495
|
+
source_range = ch..(charno-1)
|
484
496
|
comment = comment.gsub(/^(\#+)\s{0,1}/, '').chomp
|
485
497
|
append_comment = @comments[lineno - 1]
|
498
|
+
|
486
499
|
hash_flag = $1 == '##' ? true : false
|
487
500
|
|
488
501
|
if append_comment && @comments_last_column == column
|
489
502
|
@comments.delete(lineno - 1)
|
490
503
|
@comments_flags[lineno] = @comments_flags[lineno - 1]
|
491
504
|
@comments_flags.delete(lineno - 1)
|
505
|
+
range = @comments_range.delete(lineno - 1)
|
506
|
+
source_range = range.first..source_range.last
|
492
507
|
comment = append_comment + "\n" + comment
|
493
508
|
end
|
494
509
|
|
495
510
|
@comments[lineno] = comment
|
511
|
+
@comments_range[lineno] = source_range
|
496
512
|
@comments_flags[lineno] = hash_flag if !append_comment
|
497
513
|
@comments_last_column = column
|
498
514
|
end
|
@@ -523,22 +539,67 @@ module YARD
|
|
523
539
|
(node.line - 2).upto(node.line) do |line|
|
524
540
|
comment = @comments[line]
|
525
541
|
if comment && !comment.empty?
|
526
|
-
node
|
527
|
-
node.docstring = comment
|
528
|
-
node.docstring_range = ((line - comment.count("\n"))..line)
|
529
|
-
@comments.delete(line)
|
530
|
-
@comments_flags.delete(line)
|
542
|
+
add_comment(line, node)
|
531
543
|
break
|
532
544
|
end
|
533
545
|
end
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
546
|
+
|
547
|
+
@comments.keys.each do |line|
|
548
|
+
if node.line > line
|
549
|
+
add_comment(line, nil, node)
|
550
|
+
end
|
551
|
+
end
|
552
|
+
end
|
553
|
+
|
554
|
+
# insert any lone unadded comments before node
|
555
|
+
root.traverse do |node|
|
556
|
+
next if node.type == :list || node.parent.type != :list
|
557
|
+
@comments.keys.each do |line|
|
558
|
+
if node.line_range.include?(line)
|
559
|
+
pick = nil
|
560
|
+
node.traverse do |subnode|
|
561
|
+
next unless subnode.type == :list
|
562
|
+
pick ||= subnode
|
563
|
+
next unless subnode.line_range.include?(line)
|
564
|
+
pick = subnode
|
538
565
|
end
|
566
|
+
add_comment(line, nil, pick, true) if pick
|
539
567
|
end
|
540
568
|
end
|
569
|
+
end if @comments.size > 0
|
570
|
+
|
571
|
+
# insert all remaining comments
|
572
|
+
@comments.each do |line, comment|
|
573
|
+
add_comment(line, nil, root, true)
|
574
|
+
end
|
575
|
+
|
576
|
+
@comments = {}
|
577
|
+
end
|
578
|
+
|
579
|
+
def add_comment(line, node = nil, before_node = nil, into = false)
|
580
|
+
comment = @comments[line]
|
581
|
+
source_range = @comments_range[line]
|
582
|
+
line_range = ((line - comment.count("\n"))..line)
|
583
|
+
if node.nil?
|
584
|
+
node = CommentNode.new(:comment, [comment], :line => line_range, :char => source_range)
|
585
|
+
if into
|
586
|
+
before_node.push(node)
|
587
|
+
before_node.unfreeze
|
588
|
+
node.parent = before_node
|
589
|
+
elsif before_node
|
590
|
+
parent_node = before_node.parent
|
591
|
+
idx = parent_node.index(before_node)
|
592
|
+
parent_node.insert(idx, node)
|
593
|
+
parent_node.unfreeze
|
594
|
+
node.parent = parent_node
|
595
|
+
end
|
541
596
|
end
|
597
|
+
node.docstring = comment
|
598
|
+
node.docstring_hash_flag = @comments_flags[line]
|
599
|
+
node.docstring_range = line_range
|
600
|
+
@comments.delete(line)
|
601
|
+
@comments_range.delete(line)
|
602
|
+
@comments_flags.delete(line)
|
542
603
|
end
|
543
604
|
|
544
605
|
def freeze_tree(node = nil)
|
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'stringio'
|
2
2
|
require 'ostruct'
|
3
3
|
|
4
|
-
begin require 'continuation'; rescue LoadError; end
|
5
|
-
|
6
4
|
module YARD
|
7
5
|
module Parser
|
8
6
|
# Raised when an object is recognized but cannot be documented. This
|
@@ -13,19 +11,38 @@ module YARD
|
|
13
11
|
# Raised when the parser sees a Ruby syntax error
|
14
12
|
class ParserSyntaxError < UndocumentableError; end
|
15
13
|
|
16
|
-
#
|
17
|
-
# {
|
18
|
-
#
|
14
|
+
# Responsible for parsing a list of files in order. The
|
15
|
+
# {#parse} method of this class can be called from the
|
16
|
+
# {SourceParser#globals} globals state list to re-enter
|
17
|
+
# parsing for the remainder of files in the list recursively.
|
19
18
|
#
|
20
|
-
# @see
|
21
|
-
class
|
22
|
-
# @return [
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
#
|
27
|
-
|
28
|
-
|
19
|
+
# @see Processor#parse_remaining_files
|
20
|
+
class OrderedParser
|
21
|
+
# @return [Array<String>] the list of remaining files to parse
|
22
|
+
attr_accessor :files
|
23
|
+
|
24
|
+
# Creates a new OrderedParser with the global state and a list
|
25
|
+
# of files to parse.
|
26
|
+
#
|
27
|
+
# @note OrderedParser sets itself as the +ordered_parser+ key on
|
28
|
+
# global_state for later use in {Handlers::Processor}.
|
29
|
+
# @param [OpenStruct] global_state a structure containing all global
|
30
|
+
# state during parsing
|
31
|
+
# @param [Array<String>] files the list of files to parse
|
32
|
+
def initialize(global_state, files)
|
33
|
+
@global_state = global_state
|
34
|
+
@files = files.dup
|
35
|
+
@global_state.ordered_parser = self
|
36
|
+
end
|
37
|
+
|
38
|
+
# Parses the remainder of the {#files} list.
|
39
|
+
#
|
40
|
+
# @see Processor#parse_remaining_files
|
41
|
+
def parse
|
42
|
+
while file = files.shift
|
43
|
+
log.debug("Processing #{file}...")
|
44
|
+
SourceParser.new(SourceParser.parser_type, @global_state).parse(file)
|
45
|
+
end
|
29
46
|
end
|
30
47
|
end
|
31
48
|
|
@@ -44,7 +61,7 @@ module YARD
|
|
44
61
|
class SourceParser
|
45
62
|
SHEBANG_LINE = /\A\s*#!\S+/
|
46
63
|
ENCODING_LINE = /\A(?:\s*#*!.*\r?\n)?\s*(?:#+|\/\*+|\/\/+).*coding\s*[:=]{1,2}\s*([a-z\d_\-]+)/i
|
47
|
-
|
64
|
+
|
48
65
|
# Byte order marks for various encodings
|
49
66
|
# @since 0.7.0
|
50
67
|
ENCODING_BYTE_ORDER_MARKS = {
|
@@ -163,20 +180,20 @@ module YARD
|
|
163
180
|
def validated_parser_type(type)
|
164
181
|
!defined?(::Ripper) && type == :ruby ? :ruby18 : type
|
165
182
|
end
|
166
|
-
|
183
|
+
|
167
184
|
# @group Parser Callbacks
|
168
|
-
|
169
|
-
# Registers a callback to be called before a list of files is parsed
|
170
|
-
# via {parse}. The block passed to this method will be called on
|
185
|
+
|
186
|
+
# Registers a callback to be called before a list of files is parsed
|
187
|
+
# via {parse}. The block passed to this method will be called on
|
171
188
|
# subsequent parse calls.
|
172
|
-
#
|
189
|
+
#
|
173
190
|
# @example Installing a simple callback
|
174
191
|
# SourceParser.before_parse_list do |files, globals|
|
175
192
|
# puts "Starting to parse..."
|
176
193
|
# end
|
177
194
|
# YARD.parse('lib/**/*.rb')
|
178
195
|
# # prints "Starting to parse..."
|
179
|
-
#
|
196
|
+
#
|
180
197
|
# @example Setting global state
|
181
198
|
# SourceParser.before_parse_list do |files, globals|
|
182
199
|
# globals.method_count = 0
|
@@ -190,16 +207,16 @@ module YARD
|
|
190
207
|
# end
|
191
208
|
# YARD.parse
|
192
209
|
# # Prints: "Found 37 methods"
|
193
|
-
#
|
210
|
+
#
|
194
211
|
# @example Using a global callback to cancel parsing
|
195
212
|
# SourceParser.before_parse_list do |files, globals|
|
196
213
|
# return false if files.include?('foo.rb')
|
197
214
|
# end
|
198
|
-
#
|
215
|
+
#
|
199
216
|
# YARD.parse(['foo.rb', 'bar.rb']) # callback cancels this method
|
200
217
|
# YARD.parse('bar.rb') # parses normally
|
201
|
-
#
|
202
|
-
# @yield [files, globals] the yielded block is called once before
|
218
|
+
#
|
219
|
+
# @yield [files, globals] the yielded block is called once before
|
203
220
|
# parsing all files
|
204
221
|
# @yieldparam [Array<String>] files the list of files that will be parsed.
|
205
222
|
# @yieldparam [OpenStruct] globals a global structure to store arbitrary
|
@@ -213,18 +230,18 @@ module YARD
|
|
213
230
|
def before_parse_list(&block)
|
214
231
|
before_parse_list_callbacks << block
|
215
232
|
end
|
216
|
-
|
217
|
-
# Registers a callback to be called after a list of files is parsed
|
218
|
-
# via {parse}. The block passed to this method will be called on
|
233
|
+
|
234
|
+
# Registers a callback to be called after a list of files is parsed
|
235
|
+
# via {parse}. The block passed to this method will be called on
|
219
236
|
# subsequent parse calls.
|
220
|
-
#
|
237
|
+
#
|
221
238
|
# @example Printing results after parsing occurs
|
222
239
|
# SourceParser.after_parse_list do
|
223
240
|
# puts "Finished parsing!"
|
224
241
|
# end
|
225
242
|
# YARD.parse
|
226
243
|
# # Prints "Finished parsing!" after parsing files
|
227
|
-
# @yield [files, globals] the yielded block is called once before
|
244
|
+
# @yield [files, globals] the yielded block is called once before
|
228
245
|
# parsing all files
|
229
246
|
# @yieldparam [Array<String>] files the list of files that will be parsed.
|
230
247
|
# @yieldparam [OpenStruct] globals a global structure to store arbitrary
|
@@ -237,14 +254,14 @@ module YARD
|
|
237
254
|
def after_parse_list(&block)
|
238
255
|
after_parse_list_callbacks << block
|
239
256
|
end
|
240
|
-
|
241
|
-
# Registers a callback to be called before an individual file is parsed.
|
242
|
-
# The block passed to this method will be called on subsequent parse
|
257
|
+
|
258
|
+
# Registers a callback to be called before an individual file is parsed.
|
259
|
+
# The block passed to this method will be called on subsequent parse
|
243
260
|
# calls.
|
244
|
-
#
|
261
|
+
#
|
245
262
|
# To register a callback that is called before the entire list of files
|
246
263
|
# is processed, see {before_parse_list}.
|
247
|
-
#
|
264
|
+
#
|
248
265
|
# @example Installing a simple callback
|
249
266
|
# SourceParser.before_parse_file do |parser|
|
250
267
|
# puts "I'm parsing #{parser.file}"
|
@@ -254,18 +271,18 @@ module YARD
|
|
254
271
|
# "I'm parsing lib/foo.rb"
|
255
272
|
# "I'm parsing lib/foo_bar.rb"
|
256
273
|
# "I'm parsing lib/last_file.rb"
|
257
|
-
#
|
274
|
+
#
|
258
275
|
# @example Cancel parsing of any test_*.rb files
|
259
276
|
# SourceParser.before_parse_file do |parser|
|
260
277
|
# return false if parser.file =~ /^test_.+\.rb$/
|
261
278
|
# end
|
262
|
-
#
|
279
|
+
#
|
263
280
|
# @yield [parser] the yielded block is called once before each
|
264
281
|
# file that is parsed. This might happen many times for a single
|
265
282
|
# codebase.
|
266
283
|
# @yieldparam [SourceParser] parser the parser object that will {#parse}
|
267
284
|
# the file.
|
268
|
-
# @yieldreturn [Boolean] if the block returns +false+, parsing for
|
285
|
+
# @yieldreturn [Boolean] if the block returns +false+, parsing for
|
269
286
|
# the file is cancelled.
|
270
287
|
# @return [Proc] the yielded block
|
271
288
|
# @see after_parse_file
|
@@ -274,14 +291,14 @@ module YARD
|
|
274
291
|
def before_parse_file(&block)
|
275
292
|
before_parse_file_callbacks << block
|
276
293
|
end
|
277
|
-
|
278
|
-
# Registers a callback to be called after an individual file is parsed.
|
279
|
-
# The block passed to this method will be called on subsequent parse
|
294
|
+
|
295
|
+
# Registers a callback to be called after an individual file is parsed.
|
296
|
+
# The block passed to this method will be called on subsequent parse
|
280
297
|
# calls.
|
281
|
-
#
|
298
|
+
#
|
282
299
|
# To register a callback that is called after the entire list of files
|
283
300
|
# is processed, see {after_parse_list}.
|
284
|
-
#
|
301
|
+
#
|
285
302
|
# @example Printing the length of each file after it is parsed
|
286
303
|
# SourceParser.after_parse_file do |parser|
|
287
304
|
# puts "#{parser.file} is #{parser.contents.size} characters"
|
@@ -290,8 +307,8 @@ module YARD
|
|
290
307
|
# # prints:
|
291
308
|
# "lib/foo.rb is 1240 characters"
|
292
309
|
# "lib/foo_bar.rb is 248 characters"
|
293
|
-
#
|
294
|
-
# @yield [parser] the yielded block is called once after each file
|
310
|
+
#
|
311
|
+
# @yield [parser] the yielded block is called once after each file
|
295
312
|
# that is parsed. This might happen many times for a single codebase.
|
296
313
|
# @yieldparam [SourceParser] parser the parser object that parsed
|
297
314
|
# the file.
|
@@ -303,104 +320,88 @@ module YARD
|
|
303
320
|
def after_parse_file(&block)
|
304
321
|
after_parse_file_callbacks << block
|
305
322
|
end
|
306
|
-
|
323
|
+
|
307
324
|
# @return [Array<Proc>] the list of callbacks to be called before
|
308
325
|
# parsing a list of files. Should only be used for testing.
|
309
326
|
# @since 0.7.0
|
310
327
|
def before_parse_list_callbacks
|
311
328
|
@before_parse_list_callbacks ||= []
|
312
329
|
end
|
313
|
-
|
330
|
+
|
314
331
|
# @return [Array<Proc>] the list of callbacks to be called after
|
315
332
|
# parsing a list of files. Should only be used for testing.
|
316
333
|
# @since 0.7.0
|
317
334
|
def after_parse_list_callbacks
|
318
335
|
@after_parse_list_callbacks ||= []
|
319
336
|
end
|
320
|
-
|
337
|
+
|
321
338
|
# @return [Array<Proc>] the list of callbacks to be called before
|
322
339
|
# parsing a file. Should only be used for testing.
|
323
340
|
# @since 0.7.0
|
324
341
|
def before_parse_file_callbacks
|
325
342
|
@before_parse_file_callbacks ||= []
|
326
343
|
end
|
327
|
-
|
344
|
+
|
328
345
|
# @return [Array<Proc>] the list of callbacks to be called after
|
329
346
|
# parsing a file. Should only be used for testing.
|
330
347
|
# @since 0.7.0
|
331
348
|
def after_parse_file_callbacks
|
332
349
|
@after_parse_file_callbacks ||= []
|
333
350
|
end
|
334
|
-
|
351
|
+
|
335
352
|
# @endgroup
|
336
353
|
|
337
354
|
private
|
338
355
|
|
339
|
-
# Parses a list of files in a queue.
|
340
|
-
# the file is moved to the back of the queue with a Continuation object
|
341
|
-
# that can continue processing the file.
|
356
|
+
# Parses a list of files in a queue.
|
342
357
|
#
|
343
358
|
# @param [Array<String>] files a list of files to queue for parsing
|
344
359
|
# @return [void]
|
345
360
|
def parse_in_order(*files)
|
346
361
|
global_state = OpenStruct.new
|
347
362
|
files = files.sort_by {|x| x.length if x }
|
348
|
-
|
349
|
-
|
363
|
+
|
350
364
|
before_parse_list_callbacks.each do |cb|
|
351
|
-
return if cb.call(
|
365
|
+
return if cb.call(files, global_state) == false
|
352
366
|
end
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
if file.is_a?(Array) && file.last.is_a?(Continuation)
|
357
|
-
log.debug("Re-processing #{file.first}")
|
358
|
-
file.last.call
|
359
|
-
elsif file.is_a?(String)
|
360
|
-
log.debug("Processing #{file}...")
|
361
|
-
new(parser_type, true, global_state).parse(file)
|
362
|
-
end
|
363
|
-
rescue LoadOrderError => e
|
364
|
-
# Out of order file. Push the context to the end and we'll call it
|
365
|
-
files.push([file, e.context])
|
366
|
-
end
|
367
|
-
end
|
368
|
-
|
367
|
+
|
368
|
+
OrderedParser.new(global_state, files).parse
|
369
|
+
|
369
370
|
after_parse_list_callbacks.each do |cb|
|
370
|
-
cb.call(
|
371
|
+
cb.call(files, global_state)
|
371
372
|
end
|
372
373
|
end
|
373
374
|
end
|
374
375
|
|
375
376
|
register_parser_type :ruby, Ruby::RubyParser
|
376
377
|
register_parser_type :ruby18, Ruby::Legacy::RubyParser
|
377
|
-
register_parser_type :c, CParser, ['c', 'cc', 'cxx', 'cpp']
|
378
|
+
register_parser_type :c, C::CParser, ['c', 'cc', 'cxx', 'cpp']
|
378
379
|
|
379
380
|
self.parser_type = :ruby
|
380
381
|
|
381
382
|
# @return [String] the filename being parsed by the parser.
|
382
|
-
|
383
|
+
attr_accessor :file
|
383
384
|
|
384
385
|
# @return [Symbol] the parser type associated with the parser instance.
|
385
386
|
# This should be set by the {#initialize constructor}.
|
386
387
|
attr_reader :parser_type
|
387
|
-
|
388
|
+
|
388
389
|
# @return [OpenStruct] an open struct containing arbitrary global state
|
389
390
|
# shared between files and handlers.
|
390
391
|
# @since 0.7.0
|
391
392
|
attr_reader :globals
|
392
|
-
|
393
|
+
|
393
394
|
# @return [String] the contents of the file to be parsed
|
394
395
|
# @since 0.7.0
|
395
396
|
attr_reader :contents
|
396
397
|
|
397
|
-
#
|
398
|
+
# @overload initialize(parser_type = SourceParser.parser_type, globals = nil)
|
399
|
+
# Creates a new parser object for code parsing with a specific parser type.
|
398
400
|
#
|
399
|
-
#
|
400
|
-
#
|
401
|
-
|
402
|
-
|
403
|
-
@load_order_errors = load_order_errors
|
401
|
+
# @param [Symbol] parser_type the parser type to use
|
402
|
+
# @param [OpenStruct] globals global state to be re-used across separate source files
|
403
|
+
def initialize(parser_type = SourceParser.parser_type, globals1 = nil, globals2 = nil)
|
404
|
+
globals = [true, false].include?(globals1) ? globals2 : globals1
|
404
405
|
@file = '(stdin)'
|
405
406
|
@globals = globals || OpenStruct.new
|
406
407
|
self.parser_type = parser_type
|
@@ -430,18 +431,18 @@ module YARD
|
|
430
431
|
|
431
432
|
@contents = content
|
432
433
|
@parser = parser_class.new(content, file)
|
433
|
-
|
434
|
+
|
434
435
|
self.class.before_parse_file_callbacks.each do |cb|
|
435
436
|
return @parser if cb.call(self) == false
|
436
437
|
end
|
437
|
-
|
438
|
+
|
438
439
|
@parser.parse
|
439
440
|
post_process
|
440
|
-
|
441
|
+
|
441
442
|
self.class.after_parse_file_callbacks.each do |cb|
|
442
443
|
cb.call(self)
|
443
444
|
end
|
444
|
-
|
445
|
+
|
445
446
|
@parser
|
446
447
|
rescue ArgumentError, NotImplementedError => e
|
447
448
|
log.warn("Cannot parse `#{file}': #{e.message}")
|
@@ -488,7 +489,7 @@ module YARD
|
|
488
489
|
def post_process
|
489
490
|
return unless @parser.respond_to? :enumerator
|
490
491
|
return unless enumerator = @parser.enumerator
|
491
|
-
post = Handlers::Processor.new(
|
492
|
+
post = Handlers::Processor.new(self)
|
492
493
|
post.process(enumerator)
|
493
494
|
end
|
494
495
|
|