yard 0.9.23 → 0.9.27
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.
- checksums.yaml +4 -4
- data/.dockerignore +0 -0
- data/.gitattributes +4 -0
- data/.github/FUNDING.yml +3 -0
- data/.github/ISSUE_TEMPLATE.md +6 -6
- data/.github/PULL_REQUEST_TEMPLATE.md +5 -5
- data/.github/workflows/ci.yml +30 -0
- data/.github/workflows/gem.yml +19 -0
- data/.gitignore +0 -0
- data/.rspec +0 -0
- data/.rubocop.yml +37 -24
- data/.yardopts +0 -0
- data/.yardopts_guide +0 -0
- data/.yardopts_i18n +0 -0
- data/CHANGELOG.md +50 -4
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +5 -3
- data/README.md +97 -102
- data/Rakefile +2 -3
- data/lib/yard/cli/diff.rb +4 -1
- data/lib/yard/cli/server.rb +22 -13
- data/lib/yard/cli/stats.rb +2 -0
- data/lib/yard/cli/yardoc.rb +2 -1
- data/lib/yard/code_objects/method_object.rb +1 -1
- data/lib/yard/code_objects/namespace_mapper.rb +30 -3
- data/lib/yard/code_objects/proxy.rb +2 -1
- data/lib/yard/globals.rb +1 -1
- data/lib/yard/handlers/c/base.rb +35 -0
- data/lib/yard/handlers/ruby/method_handler.rb +1 -1
- data/lib/yard/handlers/ruby/mixin_handler.rb +7 -2
- data/lib/yard/handlers/ruby/module_function_handler.rb +15 -3
- data/lib/yard/parser/ruby/ast_node.rb +2 -2
- data/lib/yard/parser/ruby/ruby_parser.rb +7 -5
- data/lib/yard/parser/ruby/token_resolver.rb +3 -1
- data/lib/yard/parser/source_parser.rb +1 -1
- data/lib/yard/registry_resolver.rb +10 -24
- data/lib/yard/registry_store.rb +1 -1
- data/lib/yard/serializers/yardoc_serializer.rb +1 -1
- data/lib/yard/server/commands/base.rb +2 -2
- data/lib/yard/server/commands/library_command.rb +1 -1
- data/lib/yard/tags/directives.rb +10 -1
- data/lib/yard/templates/helpers/html_helper.rb +15 -5
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +5 -4
- data/lib/yard/templates/helpers/markup_helper.rb +2 -1
- data/lib/yard/templates/section.rb +1 -3
- data/lib/yard/version.rb +1 -1
- data/lib/yard.rb +3 -0
- data/samus.json +15 -46
- data/tasks/prepare_tag.rake +45 -0
- data/tasks/update_error_map.rake +53 -0
- data/templates/default/fulldoc/html/css/style.css +1 -0
- data/yard.gemspec +3 -2
- metadata +23 -207
- data/.travis.yml +0 -52
- data/spec/cli/command_parser_spec.rb +0 -43
- data/spec/cli/command_spec.rb +0 -36
- data/spec/cli/config_spec.rb +0 -148
- data/spec/cli/diff_spec.rb +0 -254
- data/spec/cli/display_spec.rb +0 -30
- data/spec/cli/gems_spec.rb +0 -81
- data/spec/cli/graph_spec.rb +0 -18
- data/spec/cli/help_spec.rb +0 -22
- data/spec/cli/i18n_spec.rb +0 -107
- data/spec/cli/list_spec.rb +0 -8
- data/spec/cli/markup_types_spec.rb +0 -22
- data/spec/cli/server_spec.rb +0 -324
- data/spec/cli/stats_spec.rb +0 -96
- data/spec/cli/yard_on_yard_spec.rb +0 -38
- data/spec/cli/yardoc_spec.rb +0 -896
- data/spec/cli/yri_spec.rb +0 -101
- data/spec/code_objects/base_spec.rb +0 -485
- data/spec/code_objects/class_object_spec.rb +0 -226
- data/spec/code_objects/code_object_list_spec.rb +0 -36
- data/spec/code_objects/constants_spec.rb +0 -116
- data/spec/code_objects/extra_file_object_spec.rb +0 -161
- data/spec/code_objects/macro_object_spec.rb +0 -150
- data/spec/code_objects/method_object_spec.rb +0 -184
- data/spec/code_objects/module_object_spec.rb +0 -142
- data/spec/code_objects/namespace_object_spec.rb +0 -171
- data/spec/code_objects/proxy_spec.rb +0 -147
- data/spec/code_objects/spec_helper.rb +0 -3
- data/spec/config_spec.rb +0 -171
- data/spec/core_ext/array_spec.rb +0 -13
- data/spec/core_ext/file_spec.rb +0 -72
- data/spec/core_ext/hash_spec.rb +0 -14
- data/spec/core_ext/insertion_spec.rb +0 -37
- data/spec/core_ext/module_spec.rb +0 -9
- data/spec/core_ext/string_spec.rb +0 -42
- data/spec/core_ext/symbol_hash_spec.rb +0 -89
- data/spec/docstring_parser_spec.rb +0 -280
- data/spec/docstring_spec.rb +0 -373
- data/spec/handlers/alias_handler_spec.rb +0 -82
- data/spec/handlers/attribute_handler_spec.rb +0 -96
- data/spec/handlers/base_spec.rb +0 -216
- data/spec/handlers/c/alias_handler_spec.rb +0 -34
- data/spec/handlers/c/attribute_handler_spec.rb +0 -41
- data/spec/handlers/c/class_handler_spec.rb +0 -78
- data/spec/handlers/c/constant_handler_spec.rb +0 -71
- data/spec/handlers/c/init_handler_spec.rb +0 -48
- data/spec/handlers/c/method_handler_spec.rb +0 -327
- data/spec/handlers/c/mixin_handler_spec.rb +0 -44
- data/spec/handlers/c/module_handler_spec.rb +0 -71
- data/spec/handlers/c/override_comment_handler_spec.rb +0 -47
- data/spec/handlers/c/path_handler_spec.rb +0 -36
- data/spec/handlers/c/spec_helper.rb +0 -23
- data/spec/handlers/c/struct_handler_spec.rb +0 -16
- data/spec/handlers/class_condition_handler_spec.rb +0 -87
- data/spec/handlers/class_handler_spec.rb +0 -247
- data/spec/handlers/class_method_handler_shared_examples.rb +0 -133
- data/spec/handlers/class_variable_handler_spec.rb +0 -12
- data/spec/handlers/constant_handler_spec.rb +0 -112
- data/spec/handlers/decorator_handler_methods_spec.rb +0 -393
- data/spec/handlers/dsl_handler_spec.rb +0 -226
- data/spec/handlers/examples/alias_handler_001.rb.txt +0 -46
- data/spec/handlers/examples/attribute_handler_001.rb.txt +0 -32
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +0 -69
- data/spec/handlers/examples/class_handler_001.rb.txt +0 -120
- data/spec/handlers/examples/class_variable_handler_001.rb.txt +0 -10
- data/spec/handlers/examples/constant_handler_001.rb.txt +0 -35
- data/spec/handlers/examples/dsl_handler_001.rb.txt +0 -156
- data/spec/handlers/examples/exception_handler_001.rb.txt +0 -59
- data/spec/handlers/examples/extend_handler_001.rb.txt +0 -19
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +0 -10
- data/spec/handlers/examples/method_handler_001.rb.txt +0 -128
- data/spec/handlers/examples/mixin_handler_001.rb.txt +0 -40
- data/spec/handlers/examples/module_handler_001.rb.txt +0 -29
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +0 -8
- data/spec/handlers/examples/process_handler_001.rb.txt +0 -11
- data/spec/handlers/examples/visibility_handler_001.rb.txt +0 -36
- data/spec/handlers/examples/yield_handler_001.rb.txt +0 -54
- data/spec/handlers/exception_handler_spec.rb +0 -49
- data/spec/handlers/extend_handler_spec.rb +0 -28
- data/spec/handlers/legacy_base_spec.rb +0 -128
- data/spec/handlers/method_condition_handler_spec.rb +0 -15
- data/spec/handlers/method_handler_spec.rb +0 -214
- data/spec/handlers/mixin_handler_spec.rb +0 -60
- data/spec/handlers/module_function_handler_spec.rb +0 -106
- data/spec/handlers/module_handler_spec.rb +0 -35
- data/spec/handlers/private_class_method_handler_spec.rb +0 -11
- data/spec/handlers/private_constant_handler_spec.rb +0 -25
- data/spec/handlers/processor_spec.rb +0 -35
- data/spec/handlers/public_class_method_handler_spec.rb +0 -11
- data/spec/handlers/ruby/base_spec.rb +0 -95
- data/spec/handlers/ruby/legacy/base_spec.rb +0 -84
- data/spec/handlers/spec_helper.rb +0 -33
- data/spec/handlers/visibility_handler_spec.rb +0 -44
- data/spec/handlers/yield_handler_spec.rb +0 -52
- data/spec/i18n/locale_spec.rb +0 -81
- data/spec/i18n/message_spec.rb +0 -52
- data/spec/i18n/messages_spec.rb +0 -67
- data/spec/i18n/pot_generator_spec.rb +0 -295
- data/spec/i18n/text_spec.rb +0 -184
- data/spec/logging_spec.rb +0 -44
- data/spec/options_spec.rb +0 -171
- data/spec/parser/base_spec.rb +0 -24
- data/spec/parser/c_parser_spec.rb +0 -236
- data/spec/parser/examples/array.c.txt +0 -6267
- data/spec/parser/examples/example1.rb.txt +0 -8
- data/spec/parser/examples/extrafile.c.txt +0 -8
- data/spec/parser/examples/file.c.txt +0 -28
- data/spec/parser/examples/multifile.c.txt +0 -22
- data/spec/parser/examples/namespace.cpp.txt +0 -68
- data/spec/parser/examples/override.c.txt +0 -424
- data/spec/parser/examples/parse_in_order_001.rb.txt +0 -2
- data/spec/parser/examples/parse_in_order_002.rb.txt +0 -2
- data/spec/parser/examples/tag_handler_001.rb.txt +0 -8
- data/spec/parser/ruby/ast_node_spec.rb +0 -33
- data/spec/parser/ruby/legacy/statement_list_spec.rb +0 -299
- data/spec/parser/ruby/legacy/token_list_spec.rb +0 -79
- data/spec/parser/ruby/ruby_parser_spec.rb +0 -508
- data/spec/parser/ruby/token_resolver_spec.rb +0 -165
- data/spec/parser/source_parser_spec.rb +0 -727
- data/spec/parser/tag_parsing_spec.rb +0 -17
- data/spec/rake/yardoc_task_spec.rb +0 -118
- data/spec/registry_spec.rb +0 -463
- data/spec/registry_store_spec.rb +0 -327
- data/spec/rubygems/doc_manager_spec.rb +0 -112
- data/spec/serializers/data/serialized_yardoc/checksums +0 -1
- data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/proxy_types +0 -2
- data/spec/serializers/file_system_serializer_spec.rb +0 -145
- data/spec/serializers/spec_helper.rb +0 -2
- data/spec/serializers/yardoc_serializer_spec.rb +0 -78
- data/spec/server/adapter_spec.rb +0 -39
- data/spec/server/commands/base_spec.rb +0 -91
- data/spec/server/commands/library_command_spec.rb +0 -39
- data/spec/server/doc_server_helper_spec.rb +0 -72
- data/spec/server/doc_server_serializer_spec.rb +0 -60
- data/spec/server/rack_adapter_spec.rb +0 -21
- data/spec/server/router_spec.rb +0 -123
- data/spec/server/spec_helper.rb +0 -22
- data/spec/server/static_caching_spec.rb +0 -47
- data/spec/server/webrick_servlet_spec.rb +0 -20
- data/spec/server_spec.rb +0 -19
- data/spec/spec_helper.rb +0 -212
- data/spec/tags/default_factory_spec.rb +0 -168
- data/spec/tags/default_tag_spec.rb +0 -11
- data/spec/tags/directives_spec.rb +0 -463
- data/spec/tags/library_spec.rb +0 -48
- data/spec/tags/overload_tag_spec.rb +0 -53
- data/spec/tags/ref_tag_list_spec.rb +0 -53
- data/spec/tags/types_explainer_spec.rb +0 -203
- data/spec/templates/class_spec.rb +0 -45
- data/spec/templates/constant_spec.rb +0 -41
- data/spec/templates/engine_spec.rb +0 -131
- data/spec/templates/examples/class001.html +0 -308
- data/spec/templates/examples/class001.txt +0 -36
- data/spec/templates/examples/class002.html +0 -39
- data/spec/templates/examples/constant001.txt +0 -25
- data/spec/templates/examples/constant002.txt +0 -7
- data/spec/templates/examples/constant003.txt +0 -11
- data/spec/templates/examples/method001.html +0 -137
- data/spec/templates/examples/method001.txt +0 -35
- data/spec/templates/examples/method002.html +0 -91
- data/spec/templates/examples/method002.txt +0 -20
- data/spec/templates/examples/method003.html +0 -165
- data/spec/templates/examples/method003.txt +0 -45
- data/spec/templates/examples/method004.html +0 -48
- data/spec/templates/examples/method004.txt +0 -10
- data/spec/templates/examples/method005.html +0 -105
- data/spec/templates/examples/method005.txt +0 -33
- data/spec/templates/examples/method006.html +0 -108
- data/spec/templates/examples/method006.txt +0 -20
- data/spec/templates/examples/module001.dot +0 -33
- data/spec/templates/examples/module001.html +0 -833
- data/spec/templates/examples/module001.txt +0 -33
- data/spec/templates/examples/module002.html +0 -341
- data/spec/templates/examples/module003.html +0 -202
- data/spec/templates/examples/module004.html +0 -394
- data/spec/templates/examples/module005.html +0 -82
- data/spec/templates/examples/tag001.txt +0 -82
- data/spec/templates/helpers/base_helper_spec.rb +0 -171
- data/spec/templates/helpers/html_helper_spec.rb +0 -687
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +0 -65
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +0 -84
- data/spec/templates/helpers/markup_helper_spec.rb +0 -136
- data/spec/templates/helpers/method_helper_spec.rb +0 -107
- data/spec/templates/helpers/module_helper_spec.rb +0 -35
- data/spec/templates/helpers/shared_signature_examples.rb +0 -126
- data/spec/templates/helpers/text_helper_spec.rb +0 -65
- data/spec/templates/markup_processor_integrations/asciidoctor_spec.rb +0 -60
- data/spec/templates/markup_processor_integrations/integration_spec_helper.rb +0 -46
- data/spec/templates/markup_processor_integrations/rdoc_markdown_spec.rb +0 -59
- data/spec/templates/markup_processor_integrations/rdoc_spec.rb +0 -39
- data/spec/templates/markup_processor_integrations/redcarpet_spec.rb +0 -59
- data/spec/templates/markup_processor_integrations/redcloth_spec.rb +0 -48
- data/spec/templates/method_spec.rb +0 -118
- data/spec/templates/module_spec.rb +0 -203
- data/spec/templates/onefile_spec.rb +0 -66
- data/spec/templates/section_spec.rb +0 -144
- data/spec/templates/spec_helper.rb +0 -76
- data/spec/templates/tag_spec.rb +0 -52
- data/spec/templates/template_spec.rb +0 -410
- data/spec/verifier_spec.rb +0 -106
@@ -1,393 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
-
|
4
|
-
RSpec.describe "YARD::Handlers::Ruby::DecoratorHandlerMethods" do
|
5
|
-
describe "#process_decorator" do
|
6
|
-
# Create a YARD decorator handler.
|
7
|
-
# @param name [Symbol] name of the mock decorator
|
8
|
-
def create_test_handler(name)
|
9
|
-
data[name] = {}
|
10
|
-
|
11
|
-
local_mock_handler_opts = mock_handler_opts
|
12
|
-
local_nodes = nodes
|
13
|
-
local_data = data[name]
|
14
|
-
|
15
|
-
Class.new YARD::Handlers::Ruby::Base do
|
16
|
-
include YARD::Handlers::Ruby::DecoratorHandlerMethods
|
17
|
-
|
18
|
-
handles method_call(:"#{name}_decorator")
|
19
|
-
namespace_only
|
20
|
-
|
21
|
-
process do
|
22
|
-
# process_decorator params written like this due to Ruby 1.8.
|
23
|
-
# A modern handler should splat local_nodes.
|
24
|
-
local_data[:return] =
|
25
|
-
process_decorator(*(local_nodes + [local_mock_handler_opts])) do |method, node, mname|
|
26
|
-
local_data[:method] = method
|
27
|
-
local_data[:node] = node
|
28
|
-
local_data[:name] = mname
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
# Generate method definition.
|
35
|
-
# @param symbols [Symbol] method names
|
36
|
-
# @return [String] method definition code
|
37
|
-
def make_defs(*symbols)
|
38
|
-
symbols.map do |s|
|
39
|
-
s = "self.#{s}" if mock_handler_opts[:scope] == :class
|
40
|
-
"def #{s}; end"
|
41
|
-
end.join("\n")
|
42
|
-
end
|
43
|
-
|
44
|
-
# Generate an AST for the given source code string.
|
45
|
-
def make_ast(code)
|
46
|
-
YARD::Parser::Ruby::RubyParser.new(code, nil).parse.ast
|
47
|
-
end
|
48
|
-
|
49
|
-
subject { data[:mock] }
|
50
|
-
|
51
|
-
let(:data) { Hash.new }
|
52
|
-
let(:nodes) { [] }
|
53
|
-
let(:mock_handler_opts) { {:scope => :instance} }
|
54
|
-
let(:class_name) { 'DecoratorTest' }
|
55
|
-
let(:docstring) { 'the foo method' }
|
56
|
-
let(:param_string) { 'def foo param1, param2; end' }
|
57
|
-
let(:method_defs) { [] }
|
58
|
-
let(:method_string) { "#{class_name}#foo" }
|
59
|
-
let(:code) do
|
60
|
-
<<-eof
|
61
|
-
class #{class_name}
|
62
|
-
#{make_defs(*method_defs)}
|
63
|
-
# #{docstring}
|
64
|
-
mock_decorator #{param_string}
|
65
|
-
end
|
66
|
-
eof
|
67
|
-
end
|
68
|
-
|
69
|
-
before do
|
70
|
-
Registry.clear
|
71
|
-
YARD::Handlers::Base.clear_subclasses
|
72
|
-
|
73
|
-
create_test_handler :mock
|
74
|
-
create_test_handler :first
|
75
|
-
create_test_handler :second
|
76
|
-
create_test_handler :third
|
77
|
-
|
78
|
-
StubbedSourceParser.parse_string code
|
79
|
-
end
|
80
|
-
|
81
|
-
it "returns an array of hashes containing the method proxy, node, and name" do
|
82
|
-
expect(subject[:return]).to be_an Array
|
83
|
-
expect(subject[:return].first[:name].to_s).to eq 'foo'
|
84
|
-
expect(subject[:return].first[:method].to_s).to eq method_string
|
85
|
-
expect(subject[:return].first[:node]).to be_a YARD::Parser::Ruby::AstNode
|
86
|
-
end
|
87
|
-
|
88
|
-
describe "method is a MethodObject if the method has been defined" do
|
89
|
-
let(:code) { "class DecoratorTest; mock_decorator def foo; end; end" }
|
90
|
-
|
91
|
-
specify do
|
92
|
-
expect(subject[:return].first[:method]).
|
93
|
-
to be_a YARD::CodeObjects::MethodObject
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
describe "method is a Proxy if the method has not been defined" do
|
98
|
-
let(:code) { "class DecoratorTest; mock_decorator :foo; end" }
|
99
|
-
|
100
|
-
specify do
|
101
|
-
expect(subject[:return].first[:method]).to be_a YARD::CodeObjects::Proxy
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
specify "block yields method proxy, node, name" do
|
106
|
-
expect(subject[:name]).to be_a Symbol
|
107
|
-
expect(subject[:name]).to eq :foo
|
108
|
-
|
109
|
-
expect(subject[:method]).to be_a YARD::CodeObjects::MethodObject
|
110
|
-
expect(subject[:method].to_s).to eq method_string
|
111
|
-
|
112
|
-
expect(subject[:node]).to be_a YARD::Parser::Ruby::AstNode
|
113
|
-
end
|
114
|
-
|
115
|
-
describe "capitalized method names" do
|
116
|
-
let(:method_defs) { [:Foo] }
|
117
|
-
let(:param_string) { 'def Foo param1, param2; end' }
|
118
|
-
|
119
|
-
specify do
|
120
|
-
expect(subject[:method].to_s).to eq "#{class_name}#Foo"
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
describe "nodes argument" do
|
125
|
-
subject { data[:mock][:return].map {|h| h[:method].to_s } }
|
126
|
-
|
127
|
-
describe "assumes all params refer to methods by default" do
|
128
|
-
let(:method_defs) { [:foo, :bar] }
|
129
|
-
let(:param_string) { method_defs.map(&:inspect).join(',') }
|
130
|
-
let(:nodes) { [] }
|
131
|
-
|
132
|
-
specify do
|
133
|
-
expect(subject).to eq ["#{class_name}#foo", "#{class_name}#bar"]
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
describe "can specify which params to capture as methods" do
|
138
|
-
let(:method_defs) { [:foo, :bar, :baz, :bat] }
|
139
|
-
let(:parameters) do
|
140
|
-
[:option_1, :baz, :bat, :option_2, :foo, :bar].map do |s|
|
141
|
-
make_ast s.inspect
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
describe "as a single param" do
|
146
|
-
let(:nodes) { parameters[4] }
|
147
|
-
|
148
|
-
specify do
|
149
|
-
expect(subject).to eq ["#{class_name}#foo"]
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
describe "as a list of params" do
|
154
|
-
let(:nodes) { [parameters[4], parameters[5]] }
|
155
|
-
|
156
|
-
specify do
|
157
|
-
expect(subject).to eq ["#{class_name}#foo", "#{class_name}#bar"]
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
describe "as a range" do
|
162
|
-
let(:nodes) { parameters[4..-1] }
|
163
|
-
|
164
|
-
specify do
|
165
|
-
expect(subject).to eq ["#{class_name}#foo", "#{class_name}#bar"]
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
describe "as multiple ranges" do
|
170
|
-
# Written like this due to Ruby 1.8. Can also splat the ranges as
|
171
|
-
# separate params:
|
172
|
-
# *parameters[1..2], *parameters[4..-1]
|
173
|
-
let(:nodes) { parameters[1..2] + parameters[4..-1] }
|
174
|
-
|
175
|
-
specify do
|
176
|
-
expect(subject).to eq [
|
177
|
-
"#{class_name}#baz",
|
178
|
-
"#{class_name}#bat",
|
179
|
-
"#{class_name}#foo",
|
180
|
-
"#{class_name}#bar"
|
181
|
-
]
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
describe "can select no nodes by passing nil" do
|
187
|
-
let(:nodes) { [nil] }
|
188
|
-
|
189
|
-
specify do
|
190
|
-
expect(subject).to eq []
|
191
|
-
end
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
describe "scope option" do
|
196
|
-
describe "defaults to :instance" do
|
197
|
-
let(:mock_handler_opts) { {} }
|
198
|
-
|
199
|
-
specify do
|
200
|
-
expect(subject[:return].first[:method].to_s).to eq method_string
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
describe "creates method proxies" do
|
205
|
-
shared_examples "decorator helper scope" do
|
206
|
-
let(:param_string) { decorator_params.map(&:inspect).join(',') }
|
207
|
-
|
208
|
-
describe "for symbols" do
|
209
|
-
let(:decorator_params) { [:foo, :bar] }
|
210
|
-
|
211
|
-
specify do
|
212
|
-
expect(subject.count).to eq decorator_params.count
|
213
|
-
|
214
|
-
subject.each_with_index do |_, i|
|
215
|
-
expect(subject[i]).to be_a YARD::CodeObjects::MethodObject
|
216
|
-
expect(subject[i].to_s).to eq \
|
217
|
-
"#{class_name}#{mock_handler_opts[:scope] == :class ? '.' : '#'}#{decorator_params[i]}"
|
218
|
-
end
|
219
|
-
end
|
220
|
-
end
|
221
|
-
|
222
|
-
describe "for string literals" do
|
223
|
-
let(:decorator_params) { ['foo', 'bar'] }
|
224
|
-
|
225
|
-
specify do
|
226
|
-
expect(subject.count).to eq decorator_params.count
|
227
|
-
|
228
|
-
subject.each_with_index do |_, i|
|
229
|
-
expect(subject[i]).to be_a YARD::CodeObjects::MethodObject
|
230
|
-
expect(subject[i].to_s).to eq \
|
231
|
-
"#{class_name}#{mock_handler_opts[:scope] == :class ? '.' : '#'}#{decorator_params[i]}"
|
232
|
-
end
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
describe "for methods" do
|
237
|
-
let(:param_string) { decorator_params.join(',') }
|
238
|
-
let(:decorator_params) do
|
239
|
-
["def #{'self.' if mock_handler_opts[:scope] == :class}foo f1, f2; end",
|
240
|
-
"def #{'self.' if mock_handler_opts[:scope] == :class}bar b1, b2; end"]
|
241
|
-
end
|
242
|
-
|
243
|
-
specify do
|
244
|
-
expect(subject.count).to eq decorator_params.count
|
245
|
-
|
246
|
-
subject.each_with_index do |_, i|
|
247
|
-
expect(subject[i]).to be_a YARD::CodeObjects::MethodObject
|
248
|
-
expect(subject[i].to_s).to eq \
|
249
|
-
class_name +
|
250
|
-
(mock_handler_opts[:scope] == :class ? '.' : '#') +
|
251
|
-
decorator_params[i].split(' ')[1][/\w+$/]
|
252
|
-
end
|
253
|
-
end
|
254
|
-
end
|
255
|
-
end # decorator helper scope shared examples
|
256
|
-
|
257
|
-
subject { data[:mock][:return].map {|h| h[:method] } }
|
258
|
-
|
259
|
-
let(:docstring) { 'the foo method' }
|
260
|
-
let(:method_defs) { [:foo, :bar] }
|
261
|
-
|
262
|
-
describe "for :instance" do
|
263
|
-
let(:mock_handler_opts) { {:scope => :instance} }
|
264
|
-
|
265
|
-
include_examples "decorator helper scope"
|
266
|
-
end
|
267
|
-
|
268
|
-
describe "for :class" do
|
269
|
-
let(:mock_handler_opts) { {:scope => :class} }
|
270
|
-
|
271
|
-
include_examples "decorator helper scope"
|
272
|
-
end
|
273
|
-
end
|
274
|
-
end
|
275
|
-
|
276
|
-
describe "docstring from decorator" do
|
277
|
-
subject { Registry.at method_string }
|
278
|
-
|
279
|
-
specify "attaches to method definitions as decorator parameters" do
|
280
|
-
expect(subject.docstring).to eq docstring
|
281
|
-
end
|
282
|
-
|
283
|
-
describe "does not attach" do
|
284
|
-
describe "to undefined methods" do
|
285
|
-
let(:code) do
|
286
|
-
<<-eof
|
287
|
-
class #{class_name}
|
288
|
-
# #{docstring}
|
289
|
-
mock_decorator :foo
|
290
|
-
end
|
291
|
-
eof
|
292
|
-
end
|
293
|
-
|
294
|
-
specify do
|
295
|
-
expect(subject).not_to respond_to :docstring
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
describe "to methods with existing docstring" do
|
300
|
-
let(:code) do
|
301
|
-
<<-eof
|
302
|
-
class #{class_name}
|
303
|
-
|
304
|
-
# original docstring
|
305
|
-
def foo; end
|
306
|
-
|
307
|
-
# #{docstring}
|
308
|
-
mock_decorator :foo
|
309
|
-
end
|
310
|
-
eof
|
311
|
-
end
|
312
|
-
|
313
|
-
specify do
|
314
|
-
expect(subject.docstring).to eq 'original docstring'
|
315
|
-
end
|
316
|
-
end
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
describe "chained decorators" do
|
321
|
-
subject { Registry.at method_string }
|
322
|
-
|
323
|
-
let(:param_string) { 'def foo param1, param2; end' }
|
324
|
-
let(:code) do
|
325
|
-
<<-eof
|
326
|
-
class #{class_name}
|
327
|
-
#{make_defs(*method_defs)}
|
328
|
-
# #{docstring}
|
329
|
-
first_decorator second_decorator third_decorator #{param_string}
|
330
|
-
end
|
331
|
-
eof
|
332
|
-
end
|
333
|
-
|
334
|
-
specify "register nested method defs" do
|
335
|
-
expect(subject).to be_a YARD::CodeObjects::MethodObject
|
336
|
-
end
|
337
|
-
|
338
|
-
describe "transfer docstring to decorated method defs" do
|
339
|
-
specify do
|
340
|
-
expect(subject.docstring).to eq docstring
|
341
|
-
end
|
342
|
-
|
343
|
-
describe "unless opt-out param is set" do
|
344
|
-
let(:mock_handler_opts) { {:transfer_docstring => false} }
|
345
|
-
|
346
|
-
specify do
|
347
|
-
expect(subject.docstring.empty?).to be true
|
348
|
-
end
|
349
|
-
end
|
350
|
-
end
|
351
|
-
|
352
|
-
describe "don't transfer docstring to referenced methods" do
|
353
|
-
let(:method_defs) { [:foo] }
|
354
|
-
let(:param_string) { ':foo' }
|
355
|
-
|
356
|
-
specify do
|
357
|
-
expect(subject.docstring.empty?).to be true
|
358
|
-
end
|
359
|
-
end
|
360
|
-
|
361
|
-
specify "don't transfer docstring to other decorators" do
|
362
|
-
expect(Registry.at("#{class_name}#second_decorator")).
|
363
|
-
not_to respond_to :docstring
|
364
|
-
|
365
|
-
expect(Registry.at("#{class_name}#third_decorator")).
|
366
|
-
not_to respond_to :docstring
|
367
|
-
end
|
368
|
-
|
369
|
-
describe "transfer source to decorated method defs" do
|
370
|
-
specify do
|
371
|
-
expect(subject.source).to eq code.lines.to_a[-2].strip
|
372
|
-
end
|
373
|
-
|
374
|
-
describe "unless opt-out param is set" do
|
375
|
-
let(:mock_handler_opts) { {:transfer_source => false} }
|
376
|
-
|
377
|
-
specify do
|
378
|
-
expect(subject.source).to eq param_string
|
379
|
-
end
|
380
|
-
end
|
381
|
-
end
|
382
|
-
|
383
|
-
describe "don't transfer source to referenced methods" do
|
384
|
-
let(:method_defs) { [:foo] }
|
385
|
-
let(:param_string) { ':foo' }
|
386
|
-
|
387
|
-
specify do
|
388
|
-
expect(subject.source).to eq make_defs(*method_defs)
|
389
|
-
end
|
390
|
-
end
|
391
|
-
end
|
392
|
-
end # process_decorator
|
393
|
-
end unless LEGACY_PARSER
|
@@ -1,226 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
-
require 'ostruct'
|
4
|
-
|
5
|
-
RSpec.describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}DSLHandler" do
|
6
|
-
before(:all) { parse_file :dsl_handler_001, __FILE__ }
|
7
|
-
|
8
|
-
it "creates a readable attribute when @!attribute r is found" do
|
9
|
-
obj = Registry.at('Foo#attr1')
|
10
|
-
expect(obj).not_to be nil
|
11
|
-
expect(obj).to be_reader
|
12
|
-
expect(obj.tag(:return).types).to eq ['Numeric']
|
13
|
-
expect(Registry.at('Foo#attr1=')).to be nil
|
14
|
-
end
|
15
|
-
|
16
|
-
it "creates a writable attribute when @!attribute w is found" do
|
17
|
-
obj = Registry.at('Foo#attr2=')
|
18
|
-
expect(obj).not_to be nil
|
19
|
-
expect(obj).to be_writer
|
20
|
-
expect(Registry.at('Foo#attr2')).to be nil
|
21
|
-
end
|
22
|
-
|
23
|
-
it "defaults to readwrite @!attribute" do
|
24
|
-
obj = Registry.at('Foo#attr3')
|
25
|
-
expect(obj).not_to be nil
|
26
|
-
expect(obj).to be_reader
|
27
|
-
obj = Registry.at('Foo#attr3=')
|
28
|
-
expect(obj).not_to be nil
|
29
|
-
expect(obj).to be_writer
|
30
|
-
end
|
31
|
-
|
32
|
-
it "allows @!attribute to define alternate method name" do
|
33
|
-
expect(Registry.at('Foo#attr4')).to be nil
|
34
|
-
expect(Registry.at('Foo#custom')).not_to be nil
|
35
|
-
end
|
36
|
-
|
37
|
-
it "defaults to creating an instance method for any DSL method with special tags" do
|
38
|
-
obj = Registry.at('Foo#implicit0')
|
39
|
-
expect(obj).not_to be nil
|
40
|
-
expect(obj.docstring).to eq "IMPLICIT METHOD!"
|
41
|
-
expect(obj.tag(:return).types).to eq ['String']
|
42
|
-
end
|
43
|
-
|
44
|
-
it "recognizes implicit docstring when it has scope tag" do
|
45
|
-
obj = Registry.at("Foo.implicit1")
|
46
|
-
expect(obj).not_to be nil
|
47
|
-
expect(obj.scope).to eq :class
|
48
|
-
end
|
49
|
-
|
50
|
-
it "recognizes implicit docstring when it has visibility tag" do
|
51
|
-
obj = Registry.at("Foo#implicit2")
|
52
|
-
expect(obj).not_to be nil
|
53
|
-
expect(obj.visibility).to eq :protected
|
54
|
-
end
|
55
|
-
|
56
|
-
it "does not recognize implicit docstring with any other normal tag" do
|
57
|
-
obj = Registry.at('Foo#implicit_invalid3')
|
58
|
-
expect(obj).to be nil
|
59
|
-
end
|
60
|
-
|
61
|
-
it "sets the method name when using @!method" do
|
62
|
-
obj = Registry.at('Foo.xyz')
|
63
|
-
expect(obj).not_to be nil
|
64
|
-
expect(obj.signature).to eq 'def xyz(a, b, c)'
|
65
|
-
expect(obj.parameters).to eq [['a', nil], ['b', nil], ['c', nil]]
|
66
|
-
expect(obj.source).to eq 'foo_bar'
|
67
|
-
expect(obj.docstring).to eq 'The foo method'
|
68
|
-
end
|
69
|
-
|
70
|
-
it "recognizes methods with no attached source" do
|
71
|
-
obj = Registry.at('Foo#no_src')
|
72
|
-
expect(obj).not_to be nil
|
73
|
-
expect(obj.signature).to eq 'def no_src'
|
74
|
-
expect(obj.source).to eq ''
|
75
|
-
end
|
76
|
-
|
77
|
-
it "allows setting of @!scope" do
|
78
|
-
expect(Registry.at('Foo.xyz').scope).to eq :class
|
79
|
-
end
|
80
|
-
|
81
|
-
it "creates module function if @!scope is module" do
|
82
|
-
mod_c = Registry.at('Foo.modfunc1')
|
83
|
-
mod_i = Registry.at('Foo#modfunc1')
|
84
|
-
expect(mod_c.scope).to eq :class
|
85
|
-
expect(mod_i.visibility).to eq :private
|
86
|
-
end
|
87
|
-
|
88
|
-
it "allows setting of @!visibility" do
|
89
|
-
expect(Registry.at('Foo.xyz').visibility).to eq :protected
|
90
|
-
end
|
91
|
-
|
92
|
-
it "ignores DSL methods without tags" do
|
93
|
-
expect(Registry.at('Foo#implicit_invalid')).to be nil
|
94
|
-
end
|
95
|
-
|
96
|
-
it "accepts a DSL method without tags if it has hash_flag (##)" do
|
97
|
-
expect(Registry.at('Foo#implicit_valid')).not_to be nil
|
98
|
-
expect(Registry.at('Foo#implicit_invalid2')).to be nil
|
99
|
-
end
|
100
|
-
|
101
|
-
it "allows creation of macros" do
|
102
|
-
macro = CodeObjects::MacroObject.find('property')
|
103
|
-
expect(macro).not_to be nil
|
104
|
-
expect(macro).not_to be_attached
|
105
|
-
expect(macro.method_object).to be nil
|
106
|
-
end
|
107
|
-
|
108
|
-
it "handles macros with no parameters to expand" do
|
109
|
-
expect(Registry.at('Foo#none')).not_to be nil
|
110
|
-
expect(Registry.at('Baz#none').signature).to eq 'def none(foo, bar)'
|
111
|
-
end
|
112
|
-
|
113
|
-
it "expands $N on method definitions" do
|
114
|
-
expect(Registry.at('Foo#regular_meth').docstring).to eq 'a b c'
|
115
|
-
end
|
116
|
-
|
117
|
-
it "applies new macro docstrings on new objects" do
|
118
|
-
obj = Registry.at('Foo#name')
|
119
|
-
expect(obj).not_to be nil
|
120
|
-
expect(obj.source).to eq 'property :name, String, :a, :b, :c'
|
121
|
-
expect(obj.signature).to eq 'def name(a, b, c)'
|
122
|
-
expect(obj.docstring).to eq 'A property that is awesome.'
|
123
|
-
expect(obj.tag(:param).name).to eq 'a'
|
124
|
-
expect(obj.tag(:param).text).to eq 'first parameter'
|
125
|
-
expect(obj.tag(:return).types).to eq ['String']
|
126
|
-
expect(obj.tag(:return).text).to eq 'the property name'
|
127
|
-
end
|
128
|
-
|
129
|
-
it "allows reuse of named macros" do
|
130
|
-
obj = Registry.at('Foo#age')
|
131
|
-
expect(obj).not_to be nil
|
132
|
-
expect(obj.source).to eq 'property :age, Fixnum, :value'
|
133
|
-
expect(obj.signature).to eq 'def age(value)'
|
134
|
-
expect(obj.docstring).to eq 'A property that is awesome.'
|
135
|
-
expect(obj.tag(:param).name).to eq 'value'
|
136
|
-
expect(obj.tag(:param).text).to eq 'first parameter'
|
137
|
-
expect(obj.tag(:return).types).to eq ['Fixnum']
|
138
|
-
expect(obj.tag(:return).text).to eq 'the property age'
|
139
|
-
end
|
140
|
-
|
141
|
-
it "knows about method information on DSL with macro expansion" do
|
142
|
-
expect(Registry.at('Foo#right_name')).not_to be nil
|
143
|
-
expect(Registry.at('Foo#right_name').source).to eq 'implicit_with_different_method_name :wrong, :right'
|
144
|
-
expect(Registry.at('Foo#wrong_name')).to be nil
|
145
|
-
end
|
146
|
-
|
147
|
-
it "uses attached macros" do
|
148
|
-
macro = CodeObjects::MacroObject.find('parser')
|
149
|
-
expect(macro.macro_data).to eq "@!method $1(opts = {})\n@return NOTHING!"
|
150
|
-
expect(macro).not_to be nil
|
151
|
-
expect(macro).to be_attached
|
152
|
-
expect(macro.method_object).to eq P('Foo.parser')
|
153
|
-
obj = Registry.at('Foo#c_parser')
|
154
|
-
expect(obj).not_to be nil
|
155
|
-
expect(obj.docstring).to eq ""
|
156
|
-
expect(obj.signature).to eq "def c_parser(opts = {})"
|
157
|
-
expect(obj.docstring.tag(:return).text).to eq "NOTHING!"
|
158
|
-
end
|
159
|
-
|
160
|
-
it "appends docstring on DSL method to attached macro" do
|
161
|
-
obj = Registry.at('Foo#d_parser')
|
162
|
-
expect(obj).not_to be nil
|
163
|
-
expect(obj.docstring).to eq "Another docstring"
|
164
|
-
expect(obj.signature).to eq "def d_parser(opts = {})"
|
165
|
-
expect(obj.docstring.tag(:return).text).to eq "NOTHING!"
|
166
|
-
end
|
167
|
-
|
168
|
-
it "only uses attached macros on methods defined in inherited hierarchy" do
|
169
|
-
expect(Registry.at('Bar#x_parser')).to be nil
|
170
|
-
expect(Registry.at('Baz#y_parser')).not_to be nil
|
171
|
-
end
|
172
|
-
|
173
|
-
it "looks through mixins for attached macros" do
|
174
|
-
meth = Registry.at('Baz#mixin_method')
|
175
|
-
expect(meth).not_to be nil
|
176
|
-
expect(meth.docstring).to eq 'DSL method mixin_method'
|
177
|
-
end
|
178
|
-
|
179
|
-
it "handles top-level DSL methods" do
|
180
|
-
obj = Registry.at('#my_other_method')
|
181
|
-
expect(obj).not_to be nil
|
182
|
-
expect(obj.docstring).to eq "Docstring for method"
|
183
|
-
end
|
184
|
-
|
185
|
-
it "handles Constant.foo syntax" do
|
186
|
-
obj = Registry.at('#beep')
|
187
|
-
expect(obj).not_to be nil
|
188
|
-
expect(obj.signature).to eq 'def beep(a, b, c)'
|
189
|
-
end
|
190
|
-
|
191
|
-
it "expands attached macros in first DSL method" do
|
192
|
-
expect(Registry.at('DSLMethods#foo').docstring).to eq "Returns String for foo"
|
193
|
-
expect(Registry.at('DSLMethods#bar').docstring).to eq "Returns Integer for bar"
|
194
|
-
end
|
195
|
-
|
196
|
-
it "does not detect implicit macros with invalid method names" do
|
197
|
-
undoc_error <<-eof
|
198
|
-
##
|
199
|
-
# IMPLICIT METHOD THAT SHOULD
|
200
|
-
# NOT BE DETECTED
|
201
|
-
dsl_method '/foo/bar'
|
202
|
-
eof
|
203
|
-
end
|
204
|
-
|
205
|
-
it "warns on unparseable DSL statements" do
|
206
|
-
undoc_error "private(*foo(bar))"
|
207
|
-
end if HAVE_RIPPER
|
208
|
-
|
209
|
-
# @note Currently unsupported behavior. Overriding a macro on an alias will
|
210
|
-
# not work until macro lookups can be done by caller_method directly.
|
211
|
-
# @todo optimize MacroObject lookup to work by caller name, not macro name.
|
212
|
-
it "cannot attach a macro on alias of attached macro" do
|
213
|
-
expect(Registry.at('AliasTest#main_foo1')).not_to be nil
|
214
|
-
expect(Registry.at('AliasTest#alt_foo1')).to be nil
|
215
|
-
end if HAVE_RIPPER
|
216
|
-
|
217
|
-
it "searches attached macro's aliases for caller method match" do
|
218
|
-
expect(Registry.at('AliasTest#main_foo2')).not_to be nil
|
219
|
-
expect(Registry.at('AliasTest#alt_foo2')).to be nil
|
220
|
-
end if HAVE_RIPPER
|
221
|
-
|
222
|
-
it "does not create method object if directive data detected in expanded macro" do
|
223
|
-
expect(Registry.at('DirectiveMethods#Bar')).to be nil
|
224
|
-
expect(Registry.at('DirectiveMethods').mixins).to include P(:Bar)
|
225
|
-
end
|
226
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module A
|
2
|
-
def a; end
|
3
|
-
alias_method :b, :a
|
4
|
-
alias_method :"cstrmeth", :"a"
|
5
|
-
|
6
|
-
# Handle keyword syntax too
|
7
|
-
alias :c :a
|
8
|
-
alias :"cstrkey" :a
|
9
|
-
alias d? a
|
10
|
-
alias [] a
|
11
|
-
alias []= a
|
12
|
-
alias -@ a
|
13
|
-
alias % a
|
14
|
-
alias * a
|
15
|
-
alias for a
|
16
|
-
alias ConstantName a
|
17
|
-
|
18
|
-
# Handle quoted symbols
|
19
|
-
alias :'foo' :'a'
|
20
|
-
end
|
21
|
-
|
22
|
-
class C
|
23
|
-
def x; end
|
24
|
-
end
|
25
|
-
|
26
|
-
class B < C
|
27
|
-
alias_method(:q, :x)
|
28
|
-
alias_method :r?, :x
|
29
|
-
alias_method :s, :to_s
|
30
|
-
alias_method :t, :inspect if 500 == 3 * CONSTANT
|
31
|
-
alias_method :<<, :a
|
32
|
-
alias_method :for, :a
|
33
|
-
alias do x
|
34
|
-
alias x2 do
|
35
|
-
end
|
36
|
-
|
37
|
-
class D
|
38
|
-
# Foo bar
|
39
|
-
def a; "FOO" end
|
40
|
-
|
41
|
-
# @return [String]
|
42
|
-
alias b a
|
43
|
-
|
44
|
-
# @return [Numeric]
|
45
|
-
def a; 0 end
|
46
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module A
|
2
|
-
attr_writer :x
|
3
|
-
end
|
4
|
-
|
5
|
-
class B
|
6
|
-
class << self
|
7
|
-
attr_accessor :z
|
8
|
-
end
|
9
|
-
|
10
|
-
attr :a, true
|
11
|
-
attr :a2, false
|
12
|
-
attr :a3
|
13
|
-
# Docstring
|
14
|
-
attr_reader :b, :c, :d
|
15
|
-
attr_writer :e
|
16
|
-
attr_accessor 'f'
|
17
|
-
|
18
|
-
attr_accessor :z
|
19
|
-
end
|
20
|
-
|
21
|
-
class C
|
22
|
-
def foo; end
|
23
|
-
attr_writer :foo
|
24
|
-
|
25
|
-
def bar=(value); end
|
26
|
-
attr_reader :bar
|
27
|
-
end
|
28
|
-
|
29
|
-
class D
|
30
|
-
protected
|
31
|
-
attr_reader :parser
|
32
|
-
end
|