yard 0.9.24 → 0.9.25
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/.rubocop.yml +37 -24
- data/CHANGELOG.md +18 -3
- data/README.md +96 -101
- data/Rakefile +2 -0
- data/lib/yard/cli/diff.rb +4 -1
- data/lib/yard/cli/server.rb +22 -13
- data/lib/yard/code_objects/proxy.rb +2 -1
- data/lib/yard/globals.rb +1 -1
- data/lib/yard/handlers/c/base.rb +164 -129
- data/lib/yard/parser/ruby/ruby_parser.rb +6 -4
- data/lib/yard/registry_store.rb +1 -1
- data/lib/yard/templates/helpers/html_helper.rb +10 -3
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +5 -4
- data/lib/yard/version.rb +1 -1
- data/tasks/update_error_map.rake +53 -0
- data/yard.gemspec +1 -1
- metadata +3 -207
- 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_mapper_spec.rb +0 -32
- 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 -520
- 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_resolver_spec.rb +0 -15
- 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.dat +0 -0
- 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/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 -90
- 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 -666
- 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 -50
- data/spec/templates/markup_processor_integrations/rdoc_markdown_spec.rb +0 -48
- data/spec/templates/markup_processor_integrations/rdoc_spec.rb +0 -39
- data/spec/templates/markup_processor_integrations/redcarpet_spec.rb +0 -64
- data/spec/templates/markup_processor_integrations/redcloth_spec.rb +0 -64
- 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,71 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
3
|
-
|
4
|
-
RSpec.describe YARD::Handlers::C::ClassHandler do
|
5
|
-
it "registers modules" do
|
6
|
-
parse_init 'mFoo = rb_define_module("Foo");'
|
7
|
-
expect(Registry.at('Foo').type).to eq :module
|
8
|
-
end
|
9
|
-
|
10
|
-
it "registers classes under namespaces" do
|
11
|
-
parse_init <<-EOF
|
12
|
-
mBar = rb_define_module("Bar");
|
13
|
-
mFoo = rb_define_module_under(mBar, "Foo");
|
14
|
-
EOF
|
15
|
-
expect(Registry.at('Bar::Foo').type).to eq :module
|
16
|
-
end
|
17
|
-
|
18
|
-
it "remembers symbol defined with class" do
|
19
|
-
parse_init(<<-eof)
|
20
|
-
cXYZ = rb_define_module("Foo");
|
21
|
-
rb_define_method(cXYZ, "bar", bar, 0);
|
22
|
-
eof
|
23
|
-
expect(Registry.at('Foo').type).to eq :module
|
24
|
-
expect(Registry.at('Foo#bar')).not_to be nil
|
25
|
-
end
|
26
|
-
|
27
|
-
it "does not associate declaration comments as module docstring" do
|
28
|
-
parse_init(<<-eof)
|
29
|
-
/* Docstring! */
|
30
|
-
mFoo = rb_define_module("Foo");
|
31
|
-
eof
|
32
|
-
expect(Registry.at('Foo').docstring).to be_blank
|
33
|
-
end
|
34
|
-
|
35
|
-
it "associates a file with the declaration" do
|
36
|
-
parse_init(<<-eof)
|
37
|
-
mFoo = rb_define_module("Foo");
|
38
|
-
eof
|
39
|
-
expect(Registry.at('Foo').file).to eq '(stdin)'
|
40
|
-
expect(Registry.at('Foo').line).to eq 2
|
41
|
-
end
|
42
|
-
|
43
|
-
it "resolves namespace variable names across multiple files" do
|
44
|
-
parse_multi_file_init(
|
45
|
-
'mBar = rb_define_module_under(mFoo, "Bar");',
|
46
|
-
'mFoo = rb_define_module("Foo");'
|
47
|
-
)
|
48
|
-
|
49
|
-
expect(Registry.at('Foo::Bar').type).to eq :module
|
50
|
-
end
|
51
|
-
|
52
|
-
it "raises undoc error if a class is defined under a namespace that cannot be resolved" do
|
53
|
-
with_parser(:c) do
|
54
|
-
undoc_error <<-eof
|
55
|
-
void Init_Foo() {
|
56
|
-
mFoo = rb_define_class_under(invalid, "Foo", rb_cObject);
|
57
|
-
}
|
58
|
-
eof
|
59
|
-
end
|
60
|
-
end unless ENV['LEGACY']
|
61
|
-
|
62
|
-
it "raises undoc error if a module is defined under a namespace that cannot be resolved" do
|
63
|
-
with_parser(:c) do
|
64
|
-
undoc_error <<-eof
|
65
|
-
void Init_Foo() {
|
66
|
-
mFoo = rb_define_module_under(invalid, "Foo");
|
67
|
-
}
|
68
|
-
eof
|
69
|
-
end
|
70
|
-
end unless ENV['LEGACY']
|
71
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
3
|
-
|
4
|
-
RSpec.describe YARD::Handlers::C::OverrideCommentHandler do
|
5
|
-
[:class, :module].each do |type|
|
6
|
-
it "handles Document-#{type}" do
|
7
|
-
parse(<<-eof)
|
8
|
-
void something;
|
9
|
-
/* Document-#{type}: A
|
10
|
-
* Foo bar baz
|
11
|
-
*/
|
12
|
-
void
|
13
|
-
eof
|
14
|
-
expect(Registry.at('A').type).to eq type
|
15
|
-
expect(Registry.at('A').docstring).to eq 'Foo bar baz'
|
16
|
-
expect(Registry.at('A').file).to eq '(stdin)'
|
17
|
-
expect(Registry.at('A').line).to eq 2
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
it "handles multiple class/module combinations" do
|
22
|
-
parse(<<-eof)
|
23
|
-
/* Document-class: A
|
24
|
-
* Document-class: B
|
25
|
-
* Document-module: C
|
26
|
-
* Foo bar baz
|
27
|
-
*/
|
28
|
-
eof
|
29
|
-
expect(Registry.at('A').docstring).to eq 'Foo bar baz'
|
30
|
-
expect(Registry.at('B').docstring).to eq 'Foo bar baz'
|
31
|
-
expect(Registry.at('C').docstring).to eq 'Foo bar baz'
|
32
|
-
expect(Registry.at('C').type).to eq :module
|
33
|
-
end
|
34
|
-
|
35
|
-
it "handles Document-class with inheritance" do
|
36
|
-
parse(<<-eof)
|
37
|
-
/* Document-class: A < B
|
38
|
-
* Foo bar baz
|
39
|
-
*/
|
40
|
-
void
|
41
|
-
eof
|
42
|
-
obj = Registry.at('A')
|
43
|
-
expect(obj.type).to eq :class
|
44
|
-
expect(obj.docstring).to eq 'Foo bar baz'
|
45
|
-
expect(obj.superclass).to eq P('B')
|
46
|
-
end
|
47
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + "/spec_helper"
|
3
|
-
|
4
|
-
RSpec.describe YARD::Handlers::C::PathHandler do
|
5
|
-
it "tracks variable names defined under namespaces" do
|
6
|
-
parse_init <<-eof
|
7
|
-
mFoo = rb_define_module("Foo");
|
8
|
-
cBar = rb_define_class_under(mFoo, "Bar", rb_cObject);
|
9
|
-
rb_define_method(cBar, "foo", foo, 1);
|
10
|
-
eof
|
11
|
-
expect(Registry.at('Foo::Bar')).not_to be nil
|
12
|
-
expect(Registry.at('Foo::Bar#foo')).not_to be nil
|
13
|
-
end
|
14
|
-
|
15
|
-
it "tracks variable names defined under namespaces" do
|
16
|
-
parse_init <<-eof
|
17
|
-
mFoo = rb_define_module("Foo");
|
18
|
-
cBar = rb_define_class_under(mFoo, "Bar", rb_cObject);
|
19
|
-
mBaz = rb_define_module_under(cBar, "Baz");
|
20
|
-
rb_define_method(mBaz, "foo", foo, 1);
|
21
|
-
eof
|
22
|
-
expect(Registry.at('Foo::Bar::Baz')).not_to be nil
|
23
|
-
expect(Registry.at('Foo::Bar::Baz#foo')).not_to be nil
|
24
|
-
end
|
25
|
-
|
26
|
-
it "handles rb_path2class() calls" do
|
27
|
-
parse_init <<-eof
|
28
|
-
somePath = rb_path2class("Foo::Bar::Baz")
|
29
|
-
mFoo = rb_define_module("Foo");
|
30
|
-
cBar = rb_define_class_under(mFoo, "Bar", rb_cObject);
|
31
|
-
mBaz = rb_define_module_under(cBar, "Baz");
|
32
|
-
rb_define_method(somePath, "foo", foo, 1);
|
33
|
-
eof
|
34
|
-
expect(Registry.at('Foo::Bar::Baz#foo')).not_to be nil
|
35
|
-
end
|
36
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
def parse(src, file = '(stdin)')
|
4
|
-
YARD::Registry.clear
|
5
|
-
parser = YARD::Parser::SourceParser.new(:c)
|
6
|
-
parser.file = file
|
7
|
-
parser.parse(StringIO.new(src))
|
8
|
-
end
|
9
|
-
|
10
|
-
def parse_init(src)
|
11
|
-
YARD::Registry.clear
|
12
|
-
YARD.parse_string("void Init_Foo() {\n#{src}\n}", :c)
|
13
|
-
end
|
14
|
-
|
15
|
-
def parse_multi_file_init(*srcs)
|
16
|
-
YARD::Registry.clear
|
17
|
-
srcs = srcs.map {|src| StringIO.new("void Init_Foo() {\n#{src}\n}") }
|
18
|
-
orig_type = YARD::Parser::SourceParser.parser_type
|
19
|
-
YARD::Parser::SourceParser.parser_type = :c
|
20
|
-
YARD::Parser::OrderedParser.new(OpenStruct.new, srcs).parse
|
21
|
-
ensure
|
22
|
-
YARD::Parser::SourceParser.parser_type = orig_type
|
23
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
-
|
4
|
-
RSpec.describe YARD::Handlers::C::StructHandler do
|
5
|
-
after { Registry.clear }
|
6
|
-
|
7
|
-
it "handles Struct class definitions" do
|
8
|
-
parse_init <<-eof
|
9
|
-
rb_cRange = rb_struct_define_without_accessor(
|
10
|
-
"Range", rb_cFoo, range_alloc,
|
11
|
-
"begin", "end", "excl", NULL);
|
12
|
-
eof
|
13
|
-
expect(Registry.at('Range').type).to eq :class
|
14
|
-
expect(Registry.at('Range').superclass).to eq P(:Foo)
|
15
|
-
end
|
16
|
-
end
|
@@ -1,87 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.dirname(__FILE__) + '/spec_helper'
|
3
|
-
|
4
|
-
RSpec.describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassConditionHandler" do
|
5
|
-
before(:all) { parse_file :class_condition_handler_001, __FILE__ }
|
6
|
-
|
7
|
-
def verify_method(*names)
|
8
|
-
names.each {|name| expect(Registry.at("A##{name}")).not_to be nil }
|
9
|
-
names.each {|name| expect(Registry.at("A##{name}not")).to be nil }
|
10
|
-
end
|
11
|
-
|
12
|
-
def no_undoc_error(code)
|
13
|
-
expect { StubbedSourceParser.parse_string(code) }.not_to raise_error
|
14
|
-
end
|
15
|
-
|
16
|
-
it "parses all unless blocks for complex conditions" do
|
17
|
-
verify_method :g
|
18
|
-
end
|
19
|
-
|
20
|
-
it "does not parse conditionals inside methods" do
|
21
|
-
verify_method :h
|
22
|
-
end
|
23
|
-
|
24
|
-
it "only parses then block if condition is literal value `true`" do
|
25
|
-
verify_method :p
|
26
|
-
end
|
27
|
-
|
28
|
-
it "only parses then block if condition is literal integer != 0" do
|
29
|
-
verify_method :o
|
30
|
-
end
|
31
|
-
|
32
|
-
it "inverts block to parse for literal condition if it's an unless block" do
|
33
|
-
verify_method :e
|
34
|
-
end
|
35
|
-
|
36
|
-
it "handles conditions such as 'defined? VALUE'" do
|
37
|
-
verify_method :j, :k
|
38
|
-
end
|
39
|
-
|
40
|
-
it "parses all if/elsif blocks for complex conditions" do
|
41
|
-
verify_method :a, :b, :c, :d
|
42
|
-
end
|
43
|
-
|
44
|
-
it "parses else block if condition is literal value `false`" do
|
45
|
-
verify_method :q
|
46
|
-
end
|
47
|
-
|
48
|
-
it "only parses else block if condition is literal integer == 0" do
|
49
|
-
verify_method :n
|
50
|
-
end
|
51
|
-
|
52
|
-
it "maintains visibility and scope state inside condition" do
|
53
|
-
expect(Registry.at('A#m').visibility).to eq :private
|
54
|
-
expect(Registry.at('A#mnot').visibility).to eq :private
|
55
|
-
end
|
56
|
-
|
57
|
-
it "does not fail on complex conditions" do
|
58
|
-
expect(log).not_to receive(:warn)
|
59
|
-
expect(log).not_to receive(:error)
|
60
|
-
no_undoc_error "if defined?(A) && defined?(B); puts 'hi' end"
|
61
|
-
no_undoc_error(<<-eof)
|
62
|
-
(<<-TEST) unless defined?(ABCD_MODEL_TEST)
|
63
|
-
'String'
|
64
|
-
TEST
|
65
|
-
eof
|
66
|
-
no_undoc_error "if caller.none? { |l| l =~ %r{lib/rails/generators\\.rb:(\\d+):in `lookup!'$} }; end"
|
67
|
-
end
|
68
|
-
|
69
|
-
it "only parses identifiers or namespaces from defined? expressions" do
|
70
|
-
module A
|
71
|
-
@@value = nil
|
72
|
-
def self.b(value) @@value = value end
|
73
|
-
def self.value; @@value end
|
74
|
-
end
|
75
|
-
|
76
|
-
YARD.parse_string <<-eof
|
77
|
-
if defined? A.b(42).to_i
|
78
|
-
class Foo; end
|
79
|
-
else
|
80
|
-
class Bar; end
|
81
|
-
end
|
82
|
-
eof
|
83
|
-
expect(A.value).to be_nil
|
84
|
-
expect(YARD::Registry.at('Foo')).not_to be_nil
|
85
|
-
expect(YARD::Registry.at('Bar')).not_to be_nil
|
86
|
-
end
|
87
|
-
end
|
@@ -1,247 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
3
|
-
|
4
|
-
RSpec.describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassHandler" do
|
5
|
-
before(:all) { parse_file :class_handler_001, __FILE__ }
|
6
|
-
|
7
|
-
it "parses a class block with docstring" do
|
8
|
-
expect(P("A").docstring).to eq "Docstring"
|
9
|
-
end
|
10
|
-
|
11
|
-
it "handles complex class names" do
|
12
|
-
expect(P("A::B::C")).not_to eq nil
|
13
|
-
end
|
14
|
-
|
15
|
-
it "handles the subclassing syntax" do
|
16
|
-
expect(P("A::B::C").superclass).to eq P(:String)
|
17
|
-
expect(P("A::X").superclass).to eq Registry.at("A::B::C")
|
18
|
-
end
|
19
|
-
|
20
|
-
it "interprets class << self as a class level block" do
|
21
|
-
expect(P("A.classmethod1")).not_to eq nil
|
22
|
-
end
|
23
|
-
|
24
|
-
it "interprets class << ClassName as a class level block in ClassName's namespace" do
|
25
|
-
expect(P("A::B::C.Hello")).to be_instance_of(CodeObjects::MethodObject)
|
26
|
-
end
|
27
|
-
|
28
|
-
it "makes visibility public when parsing a block" do
|
29
|
-
expect(P("A::B::C#method1").visibility).to eq :public
|
30
|
-
end
|
31
|
-
|
32
|
-
it "sets superclass type to :class if it is a Proxy" do
|
33
|
-
expect(P("A::B::C").superclass.type).to eq :class
|
34
|
-
end
|
35
|
-
|
36
|
-
it "looks for a superclass before creating the class if it shares the same name" do
|
37
|
-
expect(P('B::A').superclass).to eq P('A')
|
38
|
-
end
|
39
|
-
|
40
|
-
it "handles class definitions in the form ::ClassName" do
|
41
|
-
expect(Registry.at("MyRootClass")).not_to be nil
|
42
|
-
end
|
43
|
-
|
44
|
-
it "handles superclass as a constant-style method (camping style < R /path/)" do
|
45
|
-
expect(P('Test1').superclass).to eq P(:R)
|
46
|
-
expect(P('Test2').superclass).to eq P(:R)
|
47
|
-
expect(P('Test6').superclass).to eq P(:NotDelegateClass)
|
48
|
-
end
|
49
|
-
|
50
|
-
it "handles superclass with OStruct.new or Struct.new syntax (superclass should be OStruct/Struct)" do
|
51
|
-
expect(P('Test3').superclass).to eq P(:Struct)
|
52
|
-
expect(P('Test4').superclass).to eq P(:OStruct)
|
53
|
-
end
|
54
|
-
|
55
|
-
it "handles DelegateClass(CLASSNAME) superclass syntax" do
|
56
|
-
expect(P('Test5').superclass).to eq P(:Array)
|
57
|
-
end
|
58
|
-
|
59
|
-
it "handles a superclass of the same name in the form ::ClassName" do
|
60
|
-
expect(P('Q::Logger').superclass).to eq P(:Logger)
|
61
|
-
expect(P('Q::Foo').superclass).not_to eq P('Q::Logger')
|
62
|
-
end
|
63
|
-
|
64
|
-
["CallMethod('test')", "VSD^#}}", 'not.aclass', 'self'].each do |klass|
|
65
|
-
it "raises an UndocumentableError for invalid class '#{klass}'" do
|
66
|
-
with_parser(:ruby18) { undoc_error "class #{klass}; end" }
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
['@@INVALID', 'hi', '$MYCLASS', 'AnotherClass.new'].each do |klass|
|
71
|
-
it "raises an UndocumentableError for invalid superclass '#{klass}' but it should create the class." do
|
72
|
-
expect(YARD::CodeObjects::ClassObject).to receive(:new).with(Registry.root, 'A')
|
73
|
-
with_parser(:ruby18) { undoc_error "class A < #{klass}; end" }
|
74
|
-
expect(Registry.at('A').superclass).to eq P(:Object)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
['not.aclass', 'self', 'AnotherClass.new'].each do |klass|
|
79
|
-
it "raises an UndocumentableError if the constant class reference 'class << SomeConstant' does not point to a valid class name" do
|
80
|
-
with_parser(:ruby18) do
|
81
|
-
undoc_error <<-eof
|
82
|
-
CONST = #{klass}
|
83
|
-
class << CONST; end
|
84
|
-
eof
|
85
|
-
end
|
86
|
-
expect(Registry.at(klass)).to be nil
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
it "documents 'class << SomeConstant' by using SomeConstant's value as a reference to the real class name" do
|
91
|
-
expect(Registry.at('String.classmethod')).not_to be nil
|
92
|
-
end
|
93
|
-
|
94
|
-
it "allows class << SomeRubyClass to create the class if it does not exist" do
|
95
|
-
expect(Registry.at('Symbol.toString')).not_to be nil
|
96
|
-
end
|
97
|
-
|
98
|
-
it "documents 'class Exception' without running into superclass issues" do
|
99
|
-
Parser::SourceParser.parse_string <<-eof
|
100
|
-
class Exception
|
101
|
-
end
|
102
|
-
eof
|
103
|
-
expect(Registry.at(:Exception)).not_to be nil
|
104
|
-
end
|
105
|
-
|
106
|
-
it "documents 'class RT < XX::RT' with proper superclass even if XX::RT is a proxy" do
|
107
|
-
expect(Registry.at(:RT)).not_to be nil
|
108
|
-
expect(Registry.at(:RT).superclass).to eq P('XX::RT')
|
109
|
-
end
|
110
|
-
|
111
|
-
it "does not overwrite docstring with an empty one" do
|
112
|
-
expect(Registry.at(:Zebra).docstring).to eq "Docstring 2"
|
113
|
-
end
|
114
|
-
|
115
|
-
it "turns 'class Const < Struct.new(:sym)' into class Const with attr :sym" do
|
116
|
-
obj = Registry.at("Point")
|
117
|
-
expect(obj).to be_kind_of(CodeObjects::ClassObject)
|
118
|
-
attrs = obj.attributes[:instance]
|
119
|
-
[:x, :y, :z].each do |key|
|
120
|
-
expect(attrs).to have_key(key)
|
121
|
-
expect(attrs[key][:read]).not_to be nil
|
122
|
-
expect(attrs[key][:write]).not_to be nil
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
it "turns 'class Const < Struct.new('Name', :sym)' into class Const with attr :sym" do
|
127
|
-
obj = Registry.at("AnotherPoint")
|
128
|
-
expect(obj).to be_kind_of(CodeObjects::ClassObject)
|
129
|
-
attrs = obj.attributes[:instance]
|
130
|
-
[:a, :b, :c].each do |key|
|
131
|
-
expect(attrs).to have_key(key)
|
132
|
-
expect(attrs[key][:read]).not_to be nil
|
133
|
-
expect(attrs[key][:write]).not_to be nil
|
134
|
-
end
|
135
|
-
|
136
|
-
expect(Registry.at("XPoint")).to be nil
|
137
|
-
end
|
138
|
-
|
139
|
-
it "creates a Struct::Name class when class Const < Struct.new('Name', :sym) is found" do
|
140
|
-
obj = Registry.at("Struct::XPoint")
|
141
|
-
expect(obj).not_to be nil
|
142
|
-
end
|
143
|
-
|
144
|
-
it "attaches attribtues to the generated Struct::Name class when Struct.new('Name') is used" do
|
145
|
-
obj = Registry.at("Struct::XPoint")
|
146
|
-
attrs = obj.attributes[:instance]
|
147
|
-
[:a, :b, :c].each do |key|
|
148
|
-
expect(attrs).to have_key(key)
|
149
|
-
expect(attrs[key][:read]).not_to be nil
|
150
|
-
expect(attrs[key][:write]).not_to be nil
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
it "uses @attr to set attribute descriptions on Struct subclasses" do
|
155
|
-
obj = Registry.at("DoccedStruct#input")
|
156
|
-
expect(obj.docstring).to eq "the input stream"
|
157
|
-
end
|
158
|
-
|
159
|
-
it "uses @attr to set attribute types on Struct subclasses" do
|
160
|
-
obj = Registry.at("DoccedStruct#someproc")
|
161
|
-
expect(obj).not_to be nil
|
162
|
-
expect(obj.tag(:return)).not_to be nil
|
163
|
-
expect(obj.tag(:return).types).to eq ["Proc", "#call"]
|
164
|
-
end
|
165
|
-
|
166
|
-
it "defaults types unspecified by @attr to Object on Struct subclasses" do
|
167
|
-
obj = Registry.at("DoccedStruct#mode")
|
168
|
-
expect(obj).not_to be nil
|
169
|
-
expect(obj.tag(:return)).not_to be nil
|
170
|
-
expect(obj.tag(:return).types).to eq ["Object"]
|
171
|
-
end
|
172
|
-
|
173
|
-
it "creates parameters for writers of Struct subclass's attributes" do
|
174
|
-
obj = Registry.at("DoccedStruct#input=")
|
175
|
-
expect(obj.tags(:param).size).to eq 1
|
176
|
-
expect(obj.tag(:param).types).to eq ["IO"]
|
177
|
-
end
|
178
|
-
|
179
|
-
["SemiDoccedStruct", "NotAStruct"].each do |struct|
|
180
|
-
describe("Attributes on a " + (struct == "NotAStruct" ? "class" : "struct")) do
|
181
|
-
it "defines both readers and writers when @attr is used on Structs" do
|
182
|
-
obj = Registry.at(struct)
|
183
|
-
attrs = obj.attributes[:instance]
|
184
|
-
expect(attrs[:first][:read]).not_to be nil
|
185
|
-
expect(attrs[:first][:write]).not_to be nil
|
186
|
-
end
|
187
|
-
|
188
|
-
it "defines only a reader when only @attr_reader is used on Structs" do
|
189
|
-
obj = Registry.at(struct)
|
190
|
-
attrs = obj.attributes[:instance]
|
191
|
-
expect(attrs[:second][:read]).not_to be nil
|
192
|
-
expect(attrs[:second][:write]).to be nil
|
193
|
-
end
|
194
|
-
|
195
|
-
it "defines only a writer when only @attr_writer is used on Structs" do
|
196
|
-
obj = Registry.at(struct)
|
197
|
-
attrs = obj.attributes[:instance]
|
198
|
-
expect(attrs[:third][:read]).to be nil
|
199
|
-
expect(attrs[:third][:write]).not_to be nil
|
200
|
-
end
|
201
|
-
|
202
|
-
it "defines a reader with correct return types when @attr_reader is used on Structs" do
|
203
|
-
obj = Registry.at("#{struct}#second")
|
204
|
-
expect(obj.tag(:return).types).to eq ["Fixnum"]
|
205
|
-
end
|
206
|
-
|
207
|
-
it "defines a writer with correct parameter types when @attr_writer is used on Structs" do
|
208
|
-
obj = Registry.at("#{struct}#third=")
|
209
|
-
expect(obj.tag(:param).types).to eq ["Array"]
|
210
|
-
end
|
211
|
-
|
212
|
-
it "defines a reader and a writer when both @attr_reader and @attr_writer are used" do
|
213
|
-
obj = Registry.at(struct)
|
214
|
-
attrs = obj.attributes[:instance]
|
215
|
-
expect(attrs[:fourth][:read]).not_to be nil
|
216
|
-
expect(attrs[:fourth][:write]).not_to be nil
|
217
|
-
end
|
218
|
-
|
219
|
-
it "uses @attr_reader for the getter when both @attr_reader and @attr_writer are given" do
|
220
|
-
obj = Registry.at("#{struct}#fourth")
|
221
|
-
expect(obj.tag(:return).types).to eq ["#read"]
|
222
|
-
end
|
223
|
-
|
224
|
-
it "uses @attr_writer for the setter when both @attr_reader and @attr_writer are given" do
|
225
|
-
obj = Registry.at("#{struct}#fourth=")
|
226
|
-
expect(obj.tag(:param).types).to eq ["IO"]
|
227
|
-
end
|
228
|
-
|
229
|
-
it "extracts text from @attr_reader" do
|
230
|
-
expect(Registry.at("#{struct}#fourth").docstring).to eq "returns a proc that reads"
|
231
|
-
end
|
232
|
-
|
233
|
-
it "extracts text from @attr_writer" do
|
234
|
-
expect(Registry.at("#{struct}#fourth=").docstring).to eq "sets the proc that writes stuff"
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
it "inherits from a regular struct" do
|
240
|
-
expect(Registry.at('RegularStruct').superclass).to eq P(:Struct)
|
241
|
-
expect(Registry.at('RegularStruct2').superclass).to eq P(:Struct)
|
242
|
-
end
|
243
|
-
|
244
|
-
it "handles inheritance from 'self'" do
|
245
|
-
expect(Registry.at('Outer1::Inner1').superclass).to eq Registry.at('Outer1')
|
246
|
-
end
|
247
|
-
end
|