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.

Files changed (257) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +0 -0
  3. data/.gitattributes +4 -0
  4. data/.github/FUNDING.yml +3 -0
  5. data/.github/ISSUE_TEMPLATE.md +6 -6
  6. data/.github/PULL_REQUEST_TEMPLATE.md +5 -5
  7. data/.github/workflows/ci.yml +30 -0
  8. data/.github/workflows/gem.yml +19 -0
  9. data/.gitignore +0 -0
  10. data/.rspec +0 -0
  11. data/.rubocop.yml +37 -24
  12. data/.yardopts +0 -0
  13. data/.yardopts_guide +0 -0
  14. data/.yardopts_i18n +0 -0
  15. data/CHANGELOG.md +50 -4
  16. data/CONTRIBUTING.md +2 -2
  17. data/Gemfile +5 -3
  18. data/README.md +97 -102
  19. data/Rakefile +2 -3
  20. data/lib/yard/cli/diff.rb +4 -1
  21. data/lib/yard/cli/server.rb +22 -13
  22. data/lib/yard/cli/stats.rb +2 -0
  23. data/lib/yard/cli/yardoc.rb +2 -1
  24. data/lib/yard/code_objects/method_object.rb +1 -1
  25. data/lib/yard/code_objects/namespace_mapper.rb +30 -3
  26. data/lib/yard/code_objects/proxy.rb +2 -1
  27. data/lib/yard/globals.rb +1 -1
  28. data/lib/yard/handlers/c/base.rb +35 -0
  29. data/lib/yard/handlers/ruby/method_handler.rb +1 -1
  30. data/lib/yard/handlers/ruby/mixin_handler.rb +7 -2
  31. data/lib/yard/handlers/ruby/module_function_handler.rb +15 -3
  32. data/lib/yard/parser/ruby/ast_node.rb +2 -2
  33. data/lib/yard/parser/ruby/ruby_parser.rb +7 -5
  34. data/lib/yard/parser/ruby/token_resolver.rb +3 -1
  35. data/lib/yard/parser/source_parser.rb +1 -1
  36. data/lib/yard/registry_resolver.rb +10 -24
  37. data/lib/yard/registry_store.rb +1 -1
  38. data/lib/yard/serializers/yardoc_serializer.rb +1 -1
  39. data/lib/yard/server/commands/base.rb +2 -2
  40. data/lib/yard/server/commands/library_command.rb +1 -1
  41. data/lib/yard/tags/directives.rb +10 -1
  42. data/lib/yard/templates/helpers/html_helper.rb +15 -5
  43. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +5 -4
  44. data/lib/yard/templates/helpers/markup_helper.rb +2 -1
  45. data/lib/yard/templates/section.rb +1 -3
  46. data/lib/yard/version.rb +1 -1
  47. data/lib/yard.rb +3 -0
  48. data/samus.json +15 -46
  49. data/tasks/prepare_tag.rake +45 -0
  50. data/tasks/update_error_map.rake +53 -0
  51. data/templates/default/fulldoc/html/css/style.css +1 -0
  52. data/yard.gemspec +3 -2
  53. metadata +23 -207
  54. data/.travis.yml +0 -52
  55. data/spec/cli/command_parser_spec.rb +0 -43
  56. data/spec/cli/command_spec.rb +0 -36
  57. data/spec/cli/config_spec.rb +0 -148
  58. data/spec/cli/diff_spec.rb +0 -254
  59. data/spec/cli/display_spec.rb +0 -30
  60. data/spec/cli/gems_spec.rb +0 -81
  61. data/spec/cli/graph_spec.rb +0 -18
  62. data/spec/cli/help_spec.rb +0 -22
  63. data/spec/cli/i18n_spec.rb +0 -107
  64. data/spec/cli/list_spec.rb +0 -8
  65. data/spec/cli/markup_types_spec.rb +0 -22
  66. data/spec/cli/server_spec.rb +0 -324
  67. data/spec/cli/stats_spec.rb +0 -96
  68. data/spec/cli/yard_on_yard_spec.rb +0 -38
  69. data/spec/cli/yardoc_spec.rb +0 -896
  70. data/spec/cli/yri_spec.rb +0 -101
  71. data/spec/code_objects/base_spec.rb +0 -485
  72. data/spec/code_objects/class_object_spec.rb +0 -226
  73. data/spec/code_objects/code_object_list_spec.rb +0 -36
  74. data/spec/code_objects/constants_spec.rb +0 -116
  75. data/spec/code_objects/extra_file_object_spec.rb +0 -161
  76. data/spec/code_objects/macro_object_spec.rb +0 -150
  77. data/spec/code_objects/method_object_spec.rb +0 -184
  78. data/spec/code_objects/module_object_spec.rb +0 -142
  79. data/spec/code_objects/namespace_object_spec.rb +0 -171
  80. data/spec/code_objects/proxy_spec.rb +0 -147
  81. data/spec/code_objects/spec_helper.rb +0 -3
  82. data/spec/config_spec.rb +0 -171
  83. data/spec/core_ext/array_spec.rb +0 -13
  84. data/spec/core_ext/file_spec.rb +0 -72
  85. data/spec/core_ext/hash_spec.rb +0 -14
  86. data/spec/core_ext/insertion_spec.rb +0 -37
  87. data/spec/core_ext/module_spec.rb +0 -9
  88. data/spec/core_ext/string_spec.rb +0 -42
  89. data/spec/core_ext/symbol_hash_spec.rb +0 -89
  90. data/spec/docstring_parser_spec.rb +0 -280
  91. data/spec/docstring_spec.rb +0 -373
  92. data/spec/handlers/alias_handler_spec.rb +0 -82
  93. data/spec/handlers/attribute_handler_spec.rb +0 -96
  94. data/spec/handlers/base_spec.rb +0 -216
  95. data/spec/handlers/c/alias_handler_spec.rb +0 -34
  96. data/spec/handlers/c/attribute_handler_spec.rb +0 -41
  97. data/spec/handlers/c/class_handler_spec.rb +0 -78
  98. data/spec/handlers/c/constant_handler_spec.rb +0 -71
  99. data/spec/handlers/c/init_handler_spec.rb +0 -48
  100. data/spec/handlers/c/method_handler_spec.rb +0 -327
  101. data/spec/handlers/c/mixin_handler_spec.rb +0 -44
  102. data/spec/handlers/c/module_handler_spec.rb +0 -71
  103. data/spec/handlers/c/override_comment_handler_spec.rb +0 -47
  104. data/spec/handlers/c/path_handler_spec.rb +0 -36
  105. data/spec/handlers/c/spec_helper.rb +0 -23
  106. data/spec/handlers/c/struct_handler_spec.rb +0 -16
  107. data/spec/handlers/class_condition_handler_spec.rb +0 -87
  108. data/spec/handlers/class_handler_spec.rb +0 -247
  109. data/spec/handlers/class_method_handler_shared_examples.rb +0 -133
  110. data/spec/handlers/class_variable_handler_spec.rb +0 -12
  111. data/spec/handlers/constant_handler_spec.rb +0 -112
  112. data/spec/handlers/decorator_handler_methods_spec.rb +0 -393
  113. data/spec/handlers/dsl_handler_spec.rb +0 -226
  114. data/spec/handlers/examples/alias_handler_001.rb.txt +0 -46
  115. data/spec/handlers/examples/attribute_handler_001.rb.txt +0 -32
  116. data/spec/handlers/examples/class_condition_handler_001.rb.txt +0 -69
  117. data/spec/handlers/examples/class_handler_001.rb.txt +0 -120
  118. data/spec/handlers/examples/class_variable_handler_001.rb.txt +0 -10
  119. data/spec/handlers/examples/constant_handler_001.rb.txt +0 -35
  120. data/spec/handlers/examples/dsl_handler_001.rb.txt +0 -156
  121. data/spec/handlers/examples/exception_handler_001.rb.txt +0 -59
  122. data/spec/handlers/examples/extend_handler_001.rb.txt +0 -19
  123. data/spec/handlers/examples/method_condition_handler_001.rb.txt +0 -10
  124. data/spec/handlers/examples/method_handler_001.rb.txt +0 -128
  125. data/spec/handlers/examples/mixin_handler_001.rb.txt +0 -40
  126. data/spec/handlers/examples/module_handler_001.rb.txt +0 -29
  127. data/spec/handlers/examples/private_constant_handler_001.rb.txt +0 -8
  128. data/spec/handlers/examples/process_handler_001.rb.txt +0 -11
  129. data/spec/handlers/examples/visibility_handler_001.rb.txt +0 -36
  130. data/spec/handlers/examples/yield_handler_001.rb.txt +0 -54
  131. data/spec/handlers/exception_handler_spec.rb +0 -49
  132. data/spec/handlers/extend_handler_spec.rb +0 -28
  133. data/spec/handlers/legacy_base_spec.rb +0 -128
  134. data/spec/handlers/method_condition_handler_spec.rb +0 -15
  135. data/spec/handlers/method_handler_spec.rb +0 -214
  136. data/spec/handlers/mixin_handler_spec.rb +0 -60
  137. data/spec/handlers/module_function_handler_spec.rb +0 -106
  138. data/spec/handlers/module_handler_spec.rb +0 -35
  139. data/spec/handlers/private_class_method_handler_spec.rb +0 -11
  140. data/spec/handlers/private_constant_handler_spec.rb +0 -25
  141. data/spec/handlers/processor_spec.rb +0 -35
  142. data/spec/handlers/public_class_method_handler_spec.rb +0 -11
  143. data/spec/handlers/ruby/base_spec.rb +0 -95
  144. data/spec/handlers/ruby/legacy/base_spec.rb +0 -84
  145. data/spec/handlers/spec_helper.rb +0 -33
  146. data/spec/handlers/visibility_handler_spec.rb +0 -44
  147. data/spec/handlers/yield_handler_spec.rb +0 -52
  148. data/spec/i18n/locale_spec.rb +0 -81
  149. data/spec/i18n/message_spec.rb +0 -52
  150. data/spec/i18n/messages_spec.rb +0 -67
  151. data/spec/i18n/pot_generator_spec.rb +0 -295
  152. data/spec/i18n/text_spec.rb +0 -184
  153. data/spec/logging_spec.rb +0 -44
  154. data/spec/options_spec.rb +0 -171
  155. data/spec/parser/base_spec.rb +0 -24
  156. data/spec/parser/c_parser_spec.rb +0 -236
  157. data/spec/parser/examples/array.c.txt +0 -6267
  158. data/spec/parser/examples/example1.rb.txt +0 -8
  159. data/spec/parser/examples/extrafile.c.txt +0 -8
  160. data/spec/parser/examples/file.c.txt +0 -28
  161. data/spec/parser/examples/multifile.c.txt +0 -22
  162. data/spec/parser/examples/namespace.cpp.txt +0 -68
  163. data/spec/parser/examples/override.c.txt +0 -424
  164. data/spec/parser/examples/parse_in_order_001.rb.txt +0 -2
  165. data/spec/parser/examples/parse_in_order_002.rb.txt +0 -2
  166. data/spec/parser/examples/tag_handler_001.rb.txt +0 -8
  167. data/spec/parser/ruby/ast_node_spec.rb +0 -33
  168. data/spec/parser/ruby/legacy/statement_list_spec.rb +0 -299
  169. data/spec/parser/ruby/legacy/token_list_spec.rb +0 -79
  170. data/spec/parser/ruby/ruby_parser_spec.rb +0 -508
  171. data/spec/parser/ruby/token_resolver_spec.rb +0 -165
  172. data/spec/parser/source_parser_spec.rb +0 -727
  173. data/spec/parser/tag_parsing_spec.rb +0 -17
  174. data/spec/rake/yardoc_task_spec.rb +0 -118
  175. data/spec/registry_spec.rb +0 -463
  176. data/spec/registry_store_spec.rb +0 -327
  177. data/spec/rubygems/doc_manager_spec.rb +0 -112
  178. data/spec/serializers/data/serialized_yardoc/checksums +0 -1
  179. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  180. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  181. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  182. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  183. data/spec/serializers/data/serialized_yardoc/proxy_types +0 -2
  184. data/spec/serializers/file_system_serializer_spec.rb +0 -145
  185. data/spec/serializers/spec_helper.rb +0 -2
  186. data/spec/serializers/yardoc_serializer_spec.rb +0 -78
  187. data/spec/server/adapter_spec.rb +0 -39
  188. data/spec/server/commands/base_spec.rb +0 -91
  189. data/spec/server/commands/library_command_spec.rb +0 -39
  190. data/spec/server/doc_server_helper_spec.rb +0 -72
  191. data/spec/server/doc_server_serializer_spec.rb +0 -60
  192. data/spec/server/rack_adapter_spec.rb +0 -21
  193. data/spec/server/router_spec.rb +0 -123
  194. data/spec/server/spec_helper.rb +0 -22
  195. data/spec/server/static_caching_spec.rb +0 -47
  196. data/spec/server/webrick_servlet_spec.rb +0 -20
  197. data/spec/server_spec.rb +0 -19
  198. data/spec/spec_helper.rb +0 -212
  199. data/spec/tags/default_factory_spec.rb +0 -168
  200. data/spec/tags/default_tag_spec.rb +0 -11
  201. data/spec/tags/directives_spec.rb +0 -463
  202. data/spec/tags/library_spec.rb +0 -48
  203. data/spec/tags/overload_tag_spec.rb +0 -53
  204. data/spec/tags/ref_tag_list_spec.rb +0 -53
  205. data/spec/tags/types_explainer_spec.rb +0 -203
  206. data/spec/templates/class_spec.rb +0 -45
  207. data/spec/templates/constant_spec.rb +0 -41
  208. data/spec/templates/engine_spec.rb +0 -131
  209. data/spec/templates/examples/class001.html +0 -308
  210. data/spec/templates/examples/class001.txt +0 -36
  211. data/spec/templates/examples/class002.html +0 -39
  212. data/spec/templates/examples/constant001.txt +0 -25
  213. data/spec/templates/examples/constant002.txt +0 -7
  214. data/spec/templates/examples/constant003.txt +0 -11
  215. data/spec/templates/examples/method001.html +0 -137
  216. data/spec/templates/examples/method001.txt +0 -35
  217. data/spec/templates/examples/method002.html +0 -91
  218. data/spec/templates/examples/method002.txt +0 -20
  219. data/spec/templates/examples/method003.html +0 -165
  220. data/spec/templates/examples/method003.txt +0 -45
  221. data/spec/templates/examples/method004.html +0 -48
  222. data/spec/templates/examples/method004.txt +0 -10
  223. data/spec/templates/examples/method005.html +0 -105
  224. data/spec/templates/examples/method005.txt +0 -33
  225. data/spec/templates/examples/method006.html +0 -108
  226. data/spec/templates/examples/method006.txt +0 -20
  227. data/spec/templates/examples/module001.dot +0 -33
  228. data/spec/templates/examples/module001.html +0 -833
  229. data/spec/templates/examples/module001.txt +0 -33
  230. data/spec/templates/examples/module002.html +0 -341
  231. data/spec/templates/examples/module003.html +0 -202
  232. data/spec/templates/examples/module004.html +0 -394
  233. data/spec/templates/examples/module005.html +0 -82
  234. data/spec/templates/examples/tag001.txt +0 -82
  235. data/spec/templates/helpers/base_helper_spec.rb +0 -171
  236. data/spec/templates/helpers/html_helper_spec.rb +0 -687
  237. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +0 -65
  238. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +0 -84
  239. data/spec/templates/helpers/markup_helper_spec.rb +0 -136
  240. data/spec/templates/helpers/method_helper_spec.rb +0 -107
  241. data/spec/templates/helpers/module_helper_spec.rb +0 -35
  242. data/spec/templates/helpers/shared_signature_examples.rb +0 -126
  243. data/spec/templates/helpers/text_helper_spec.rb +0 -65
  244. data/spec/templates/markup_processor_integrations/asciidoctor_spec.rb +0 -60
  245. data/spec/templates/markup_processor_integrations/integration_spec_helper.rb +0 -46
  246. data/spec/templates/markup_processor_integrations/rdoc_markdown_spec.rb +0 -59
  247. data/spec/templates/markup_processor_integrations/rdoc_spec.rb +0 -39
  248. data/spec/templates/markup_processor_integrations/redcarpet_spec.rb +0 -59
  249. data/spec/templates/markup_processor_integrations/redcloth_spec.rb +0 -48
  250. data/spec/templates/method_spec.rb +0 -118
  251. data/spec/templates/module_spec.rb +0 -203
  252. data/spec/templates/onefile_spec.rb +0 -66
  253. data/spec/templates/section_spec.rb +0 -144
  254. data/spec/templates/spec_helper.rb +0 -76
  255. data/spec/templates/tag_spec.rb +0 -52
  256. data/spec/templates/template_spec.rb +0 -410
  257. data/spec/verifier_spec.rb +0 -106
@@ -1,82 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + '/spec_helper'
3
-
4
- RSpec.describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}AliasHandler" do
5
- before(:all) { parse_file :alias_handler_001, __FILE__ }
6
-
7
- it "throws alias into namespace object list" do
8
- expect(P(:A).aliases[P("A#b")]).to eq :a
9
- end
10
-
11
- ['c', 'd?', '[]', '[]=', '-@', '%', '*', 'cstrkey', 'cstrmeth'].each do |a|
12
- it "handles the Ruby 'alias' keyword syntax for method ##{a}" do
13
- expect(P('A#' + a)).to be_instance_of(CodeObjects::MethodObject)
14
- expect(P('A#' + a).is_alias?).to be true
15
- end
16
- end
17
-
18
- it "handles keywords as the alias name" do
19
- expect(P('A#for')).to be_instance_of(CodeObjects::MethodObject)
20
- end
21
-
22
- it "allows ConstantNames to be specified as aliases" do
23
- expect(P('A#ConstantName')).to be_instance_of(CodeObjects::MethodObject)
24
- end
25
-
26
- it "creates a new method object for the alias" do
27
- expect(P("A#b")).to be_instance_of(CodeObjects::MethodObject)
28
- end
29
-
30
- it "pulls the method into the current class if it's from another one" do
31
- expect(P(:B).aliases[P("B#q")]).to eq :x
32
- expect(P(:B).aliases[P("B#r?")]).to eq :x
33
- end
34
-
35
- it "gracefully fails to pull a method in if the original method cannot be found" do
36
- expect(P(:B).aliases[P("B#s")]).to eq :to_s
37
- end
38
-
39
- it "allows complex Ruby expressions after the alias parameters" do
40
- expect(P(:B).aliases[P("B#t")]).to eq :inspect
41
- end
42
-
43
- it "shows up in #is_alias? for method" do
44
- expect(P("B#t").is_alias?).to be true
45
- expect(P('B#r?').is_alias?).to be true
46
- end
47
-
48
- it "allows operators and keywords to be specified as symbols" do
49
- expect(P('B#<<')).to be_instance_of(CodeObjects::MethodObject)
50
- expect(P('B#for')).to be_instance_of(CodeObjects::MethodObject)
51
- end
52
-
53
- it "handles keywords in alias names" do
54
- expect(P('B#do').is_alias?).to be true
55
- expect(P('B#x2').is_alias?).to be true
56
- expect(P(:B).aliases[P('B#do')]).to eq :x
57
- expect(P(:B).aliases[P('B#x2')]).to eq :do
58
- end
59
-
60
- it "handles quoted symbols" do
61
- foo = Registry.at('A#foo')
62
- expect(foo).not_to be nil
63
- expect(foo.is_alias?).to be true
64
- expect(Registry.at('A').aliases[foo]).to eq :a
65
- end
66
-
67
- it "prepends aliases object's docstring to comments" do
68
- expect(Registry.at('D#a').tag(:return).types).to eq ['Numeric']
69
- expect(Registry.at('D#b').tag(:return).types).to eq ['String']
70
- expect(Registry.at('D#b').docstring).to eq "Foo bar"
71
- end
72
-
73
- it "raises an UndocumentableError if only one parameter is passed" do
74
- undoc_error "alias_method :q"
75
- end
76
-
77
- it "raises an UndocumentableError if the parameter is not a Symbol or String" do
78
- undoc_error "alias_method CONST, Something"
79
- undoc_error "alias_method variable, ClassName"
80
- undoc_error "alias_method variable, other_variable"
81
- end
82
- end
@@ -1,96 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + '/spec_helper'
3
-
4
- RSpec.describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}AttributeHandler" do
5
- before(:all) { parse_file :attribute_handler_001, __FILE__ }
6
-
7
- def read_write(namespace, name, read, write, scope = :instance)
8
- rname = namespace.to_s + "#" + name.to_s
9
- wname = namespace.to_s + "#" + name.to_s + "="
10
- if read
11
- expect(Registry.at(rname)).to be_instance_of(CodeObjects::MethodObject)
12
- else
13
- expect(Registry.at(rname)).to eq nil
14
- end
15
-
16
- if write
17
- expect(Registry.at(wname)).to be_kind_of(CodeObjects::MethodObject)
18
- else
19
- expect(Registry.at(wname)).to eq nil
20
- end
21
-
22
- attrs = Registry.at(namespace).attributes[scope][name]
23
- expect(attrs[:read]).to eq(read ? Registry.at(rname) : nil)
24
- expect(attrs[:write]).to eq(write ? Registry.at(wname) : nil)
25
- end
26
-
27
- it "parses attributes inside modules too" do
28
- expect(Registry.at("A#x=")).not_to eq nil
29
- end
30
-
31
- it "parses 'attr'" do
32
- read_write(:B, :a, true, true)
33
- read_write(:B, :a2, true, false)
34
- read_write(:B, "a3", true, false)
35
- end
36
-
37
- it "parses 'attr_reader'" do
38
- read_write(:B, :b, true, false)
39
- end
40
-
41
- it "parses 'attr_writer'" do
42
- read_write(:B, :e, false, true)
43
- end
44
-
45
- it "parses 'attr_accessor'" do
46
- read_write(:B, :f, true, true)
47
- end
48
-
49
- it "parses a list of attributes" do
50
- read_write(:B, :b, true, false)
51
- read_write(:B, :c, true, false)
52
- read_write(:B, :d, true, false)
53
- end
54
-
55
- it "has a default docstring if one is not supplied" do
56
- expect(Registry.at("B#f=").docstring).not_to be_empty
57
- end
58
-
59
- it "sets the correct docstring if one is supplied" do
60
- expect(Registry.at("B#b").docstring).to eq "Docstring"
61
- expect(Registry.at("B#c").docstring).to eq "Docstring"
62
- expect(Registry.at("B#d").docstring).to eq "Docstring"
63
- end
64
-
65
- it "is able to differentiate between class and instance attributes" do
66
- expect(P('B').class_attributes[:z][:read].scope).to eq :class
67
- expect(P('B').instance_attributes[:z][:read].scope).to eq :instance
68
- end
69
-
70
- it "responds true in method's #is_attribute?" do
71
- expect(P('B#a').is_attribute?).to be true
72
- expect(P('B#a=').is_attribute?).to be true
73
- end
74
-
75
- it "does not return true for #is_explicit? in created methods" do
76
- Registry.at(:B).meths.each do |meth|
77
- expect(meth.is_explicit?).to be false
78
- end
79
- end
80
-
81
- it "handles attr call with no arguments" do
82
- expect { StubbedSourceParser.parse_string "attr" }.not_to raise_error
83
- end
84
-
85
- it "adds existing reader method as part of attr_writer combo" do
86
- expect(Registry.at('C#foo=').attr_info[:read]).to eq Registry.at('C#foo')
87
- end
88
-
89
- it "adds existing writer method as part of attr_reader combo" do
90
- expect(Registry.at('C#foo').attr_info[:write]).to eq Registry.at('C#foo=')
91
- end
92
-
93
- it "maintains visibility for attr_reader" do
94
- expect(Registry.at('D#parser').visibility).to eq :protected
95
- end
96
- end
@@ -1,216 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + '/spec_helper'
3
- require 'ostruct'
4
-
5
- include Parser
6
-
7
- RSpec.describe YARD::Handlers::Base do
8
- describe "#handles and inheritance" do
9
- before do
10
- allow(Handlers::Base).to receive(:inherited)
11
- end
12
-
13
- it "keeps track of subclasses" do
14
- expect(Handlers::Base).to receive(:inherited).once
15
- class TestHandler < Handlers::Base; end
16
- end
17
-
18
- it "raises NotImplementedError if process is called on a class with no #process" do
19
- class TestNotImplementedHandler < Handlers::Base
20
- end
21
-
22
- expect { TestNotImplementedHandler.new(0, 0).process }.to raise_error(NotImplementedError)
23
- end
24
-
25
- it "allows multiple handles arguments" do
26
- expect(Handlers::Base).to receive(:inherited).once
27
- class TestHandler1 < Handlers::Base
28
- handles :a, :b, :c
29
- end
30
- expect(TestHandler1.handlers).to eq [:a, :b, :c]
31
- end
32
-
33
- it "allows multiple handles calls" do
34
- expect(Handlers::Base).to receive(:inherited).once
35
- class TestHandler2 < Handlers::Base
36
- handles :a
37
- handles :b
38
- handles :c
39
- end
40
- expect(TestHandler2.handlers).to eq [:a, :b, :c]
41
- end
42
- end
43
-
44
- describe "#abort! (and HandlerAborted)" do
45
- it "allows HandlerAborted to be raised" do
46
- class AbortHandler1 < Handlers::Ruby::Base
47
- process { abort! }
48
- end
49
- expect { AbortHandler1.new(nil, nil).process }.to raise_error(HandlerAborted)
50
- end
51
- end
52
-
53
- describe "transitive tags" do
54
- it "adds transitive tags to children" do
55
- Registry.clear
56
- YARD.parse_string <<-eof
57
- # @since 1.0
58
- # @author Foo
59
- class A
60
- def foo; end
61
- # @since 1.1
62
- def bar; end
63
- end
64
- eof
65
- expect(Registry.at('A').tag(:since).text).to eq "1.0"
66
- expect(Registry.at('A#foo').tag(:since).text).to eq "1.0"
67
- expect(Registry.at('A#bar').tag(:since).text).to eq "1.1"
68
- expect(Registry.at('A#bar').tag(:author)).to be nil
69
- end
70
- end
71
-
72
- describe "sharing global state" do
73
- it "allows globals to share global state among handlers" do
74
- class GlobalStateHandler1 < Handlers::Ruby::Base
75
- class << self; attr_accessor :state end
76
- handles :class
77
- process { self.class.state = globals.foo; globals.foo = :bar }
78
- end
79
-
80
- class GlobalStateHandler2 < Handlers::Ruby::Base
81
- class << self; attr_accessor :state end
82
- handles :def
83
- process { self.class.state = globals.foo }
84
- end
85
-
86
- 2.times do
87
- YARD.parse_string 'class Foo; end; def foo; end'
88
- expect(GlobalStateHandler1.state).to eq nil
89
- expect(GlobalStateHandler2.state).to eq :bar
90
- end
91
- end
92
- end if HAVE_RIPPER
93
-
94
- describe "#push_state" do
95
- def process(klass)
96
- state = OpenStruct.new(:namespace => "ROOT", :scope => :instance, :owner => "ROOT")
97
- klass.new(state, nil).process
98
- end
99
-
100
- it "pushes and return all old state info after block" do
101
- class PushStateHandler1 < Handlers::Base
102
- include RSpec::Matchers
103
- RSpec::Expectations::Syntax.enable_expect(self)
104
-
105
- def process
106
- push_state(:namespace => "FOO", :scope => :class, :owner => "BAR") do
107
- expect(namespace).to eq "FOO"
108
- expect(scope).to eq :class
109
- expect(owner).to eq "BAR"
110
- end
111
- expect(namespace).to eq "ROOT"
112
- expect(owner).to eq "ROOT"
113
- expect(scope).to eq :instance
114
- end
115
- end
116
- process PushStateHandler1
117
- end
118
-
119
- it "allows owner to be pushed individually" do
120
- class PushStateHandler2 < Handlers::Base
121
- include RSpec::Matchers
122
- RSpec::Expectations::Syntax.enable_expect(self)
123
-
124
- def process
125
- push_state(:owner => "BAR") do
126
- expect(namespace).to eq "ROOT"
127
- expect(scope).to eq :instance
128
- expect(owner).to eq "BAR"
129
- end
130
- expect(owner).to eq "ROOT"
131
- end
132
- end
133
- process PushStateHandler2
134
- end
135
-
136
- it "allows scope to be pushed individually" do
137
- class PushStateHandler3 < Handlers::Base
138
- include RSpec::Matchers
139
- RSpec::Expectations::Syntax.enable_expect(self)
140
-
141
- def process
142
- push_state(:scope => :foo) do
143
- expect(namespace).to eq "ROOT"
144
- expect(scope).to eq :foo
145
- expect(owner).to eq "ROOT"
146
- end
147
- expect(scope).to eq :instance
148
- end
149
- end
150
- process PushStateHandler3
151
- end
152
- end
153
-
154
- describe ".in_file" do
155
- def parse(filename, parser_type, src = "class A; end")
156
- parser = Parser::SourceParser.new(parser_type)
157
- parser.instance_variable_set("@file", filename)
158
- parser.parse(StringIO.new(src))
159
- end
160
-
161
- def create_handler(stmts, parser_type)
162
- $handler_counter ||= 0
163
- sklass = parser_type == :ruby ? "Base" : "Legacy::Base"
164
- instance_eval(<<-eof, __FILE__, __LINE__ + 1)
165
- class ::InFileHandler#{$handler_counter += 1} < Handlers::Ruby::#{sklass}
166
- handles(/^class/)
167
- #{stmts}
168
- def process; MethodObject.new(:root, :FOO) end
169
- end
170
- eof
171
- end
172
-
173
- def test_handler(file, stmts, creates = true, parser_type = :ruby)
174
- Registry.clear
175
- expect(Registry.at('#FOO')).to be nil
176
- create_handler(stmts, parser_type)
177
- parse(file, parser_type)
178
- expect(Registry.at('#FOO')).send(creates ? :not_to : :to, be_nil)
179
- Handlers::Base.subclasses.delete_if {|k, _v| k.to_s =~ /^InFileHandler/ }
180
- end
181
-
182
- [:ruby, :ruby18].each do |parser_type|
183
- next if parser_type == :ruby && LEGACY_PARSER
184
- describe "Parser type = #{parser_type.inspect}" do
185
- it "allows handler to be specific to a file" do
186
- test_handler 'file_a.rb', 'in_file "file_a.rb"', true, parser_type
187
- end
188
-
189
- it "ignores handler if filename does not match" do
190
- test_handler 'file_b.rb', 'in_file "file_a.rb"', false, parser_type
191
- end
192
-
193
- it "only tests filename part when given a String" do
194
- test_handler '/path/to/file_a.rb', 'in_file "/to/file_a.rb"', false, parser_type
195
- end
196
-
197
- it "tests exact match for entire String" do
198
- test_handler 'file_a.rb', 'in_file "file"', false, parser_type
199
- end
200
-
201
- it "allows a Regexp as argument and test against full path" do
202
- test_handler 'file_a.rbx', 'in_file(/\.rbx$/)', true, parser_type
203
- test_handler '/path/to/file_a.rbx', 'in_file(/\/to\/file_/)', true, parser_type
204
- test_handler '/path/to/file_a.rbx', 'in_file(/^\/path/)', true, parser_type
205
- end
206
-
207
- it "allows multiple in_file declarations" do
208
- stmts = 'in_file "x"; in_file(/y/); in_file "foo.rb"'
209
- test_handler 'foo.rb', stmts, true, parser_type
210
- test_handler 'xyzzy.rb', stmts, true, parser_type
211
- test_handler 'x', stmts, true, parser_type
212
- end
213
- end
214
- end
215
- end
216
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + "/spec_helper"
3
-
4
- RSpec.describe YARD::Handlers::C::AliasHandler do
5
- it "allows defining of aliases (rb_define_alias)" do
6
- parse <<-eof
7
- /* FOO */
8
- VALUE foo(VALUE x) { int value = x; }
9
- void Init_Foo() {
10
- rb_cFoo = rb_define_class("Foo", rb_cObject);
11
- rb_define_method(rb_cFoo, "foo", foo, 1);
12
- rb_define_alias(rb_cFoo, "bar", "foo");
13
- }
14
- eof
15
-
16
- expect(Registry.at('Foo#bar')).to be_is_alias
17
- expect(Registry.at('Foo#bar').docstring).to eq 'FOO'
18
- end
19
-
20
- it "allows defining of aliases (rb_define_alias) of attributes" do
21
- parse <<-eof
22
- /* FOO */
23
- VALUE foo(VALUE x) { int value = x; }
24
- void Init_Foo() {
25
- rb_cFoo = rb_define_class("Foo", rb_cObject);
26
- rb_define_attr(rb_cFoo, "foo", 1, 0);
27
- rb_define_alias(rb_cFoo, "foo?", "foo");
28
- }
29
- eof
30
-
31
- expect(Registry.at('Foo#foo')).to be_reader
32
- expect(Registry.at('Foo#foo?')).to be_is_alias
33
- end
34
- end
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + "/spec_helper"
3
-
4
- RSpec.describe YARD::Handlers::C::AttributeHandler do
5
- def run(read, write, commented = nil)
6
- parse <<-eof
7
- /* FOO */
8
- VALUE foo(VALUE x) { int value = x; }
9
- void Init_Foo() {
10
- rb_cFoo = rb_define_class("Foo", rb_cObject);
11
- #{commented ? '/*' : ''}
12
- rb_define_attr(rb_cFoo, "foo", #{read}, #{write});
13
- #{commented ? '*/' : ''}
14
- }
15
- eof
16
- end
17
-
18
- it "handles readonly attribute (rb_define_attr)" do
19
- run(1, 0)
20
- expect(Registry.at('Foo#foo')).to be_reader
21
- expect(Registry.at('Foo#foo=')).to be nil
22
- end
23
-
24
- it "handles writeonly attribute (rb_define_attr)" do
25
- run(0, 1)
26
- expect(Registry.at('Foo#foo')).to be nil
27
- expect(Registry.at('Foo#foo=')).to be_writer
28
- end
29
-
30
- it "handles readwrite attribute (rb_define_attr)" do
31
- run(1, 1)
32
- expect(Registry.at('Foo#foo')).to be_reader
33
- expect(Registry.at('Foo#foo=')).to be_writer
34
- end
35
-
36
- it "handles commented writeonly attribute (/* rb_define_attr */)" do
37
- run(1, 1, true)
38
- expect(Registry.at('Foo#foo')).to be_reader
39
- expect(Registry.at('Foo#foo=')).to be_writer
40
- end
41
- end
@@ -1,78 +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 classes" do
6
- parse_init 'cFoo = rb_define_class("Foo", rb_cObject);'
7
- expect(Registry.at('Foo').type).to eq :class
8
- end
9
-
10
- it "registers classes under namespaces" do
11
- parse_init <<-EOF
12
- cBar = rb_define_class("Bar", rb_cObject);
13
- cFoo = rb_define_class_under( cBar, "Foo", rb_cBaz );
14
- EOF
15
- expect(Registry.at('Bar::Foo').type).to eq :class
16
- expect(Registry.at('Bar::Foo').superclass.path).to eq 'Baz'
17
- end
18
-
19
- it "remembers symbol defined with class" do
20
- parse_init(<<-eof)
21
- cXYZ = rb_define_class("Foo", rb_cObject);
22
- rb_define_method(cXYZ, "bar", bar, 0);
23
- eof
24
- expect(Registry.at('Foo').type).to eq :class
25
- expect(Registry.at('Foo#bar')).not_to be nil
26
- end
27
-
28
- it "looks up superclass symbol name" do
29
- parse_init(<<-eof)
30
- cXYZ = rb_define_class("Foo", rb_cObject);
31
- cBar = rb_define_class("Bar", cXYZ);
32
- eof
33
- expect(Registry.at('Bar').superclass).to eq Registry.at('Foo')
34
- end
35
-
36
- it "uses superclass symbol name as proxy if not found" do
37
- parse_init(<<-eof)
38
- // cXYZ = rb_define_class("Foo", rb_cObject);
39
- cBar = rb_define_class("Bar", cXYZ);
40
- eof
41
- expect(Registry.at('Bar').superclass).to eq P('XYZ')
42
- end
43
-
44
- it "does not associate declaration comments as class docstring" do
45
- parse_init(<<-eof)
46
- /* Docstring! */
47
- cFoo = rb_define_class("Foo", cObject);
48
- eof
49
- expect(Registry.at('Foo').docstring).to be_blank
50
- end
51
-
52
- it "associates a file with the declaration" do
53
- parse_init(<<-eof)
54
- cFoo = rb_define_class("Foo", cObject);
55
- eof
56
- expect(Registry.at('Foo').file).to eq '(stdin)'
57
- expect(Registry.at('Foo').line).to eq 2
58
- end
59
-
60
- it "properly handles Proxy superclasses" do
61
- parse_init <<-eof
62
- mFoo = rb_define_module("Foo");
63
- cBar = rb_define_class_under(mFoo, "Bar", rb_cBar);
64
- eof
65
- expect(Registry.at('Foo::Bar').type).to eq :class
66
- expect(Registry.at('Foo::Bar').superclass).to eq P('Bar')
67
- expect(Registry.at('Foo::Bar').superclass.type).to eq :class
68
- end
69
-
70
- it "resolves namespace variable names across multiple files" do
71
- parse_multi_file_init(
72
- 'cBar = rb_define_class_under(cFoo, "Bar", rb_cObject);',
73
- 'cFoo = rb_define_class("Foo", rb_cObject);'
74
- )
75
-
76
- expect(Registry.at('Foo::Bar').type).to eq :class
77
- end
78
- end
@@ -1,71 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + "/spec_helper"
3
-
4
- RSpec.describe YARD::Handlers::C::ConstantHandler do
5
- it "registers constants" do
6
- parse_init <<-eof
7
- mFoo = rb_define_module("Foo");
8
- rb_define_const(mFoo, "FOO", ID2SYM(100));
9
- rb_define_global_const("BAR", ID2SYM(100));
10
- eof
11
- expect(Registry.at('Foo::FOO').type).to eq :constant
12
- expect(Registry.at('BAR').type).to eq :constant
13
- end
14
-
15
- it "looks for override comments" do
16
- parse <<-eof
17
- /* Document-const: FOO
18
- * Document-const: Foo::BAR
19
- * Foo bar!
20
- */
21
-
22
- void Init_Foo() {
23
- mFoo = rb_define_module("Foo");
24
- rb_define_const(mFoo, "FOO", ID2SYM(100));
25
- rb_define_const(mFoo, "BAR", ID2SYM(101));
26
- }
27
- eof
28
- foo = Registry.at('Foo::FOO')
29
- expect(foo.type).to eq :constant
30
- expect(foo.docstring).to eq 'Foo bar!'
31
- expect(foo.value).to eq 'ID2SYM(100)'
32
- expect(foo.file).to eq '(stdin)'
33
- expect(foo.line).to eq 8
34
- bar = Registry.at('Foo::BAR')
35
- expect(bar.type).to eq :constant
36
- expect(bar.docstring).to eq 'Foo bar!'
37
- expect(bar.file).to eq '(stdin)'
38
- expect(bar.line).to eq 9
39
- expect(bar.value).to eq 'ID2SYM(101)'
40
- end
41
-
42
- it "uses comment attached to declaration as fallback" do
43
- parse_init <<-eof
44
- mFoo = rb_define_module("Foo");
45
- rb_define_const(mFoo, "FOO", ID2SYM(100)); // foobar!
46
- eof
47
- foo = Registry.at('Foo::FOO')
48
- expect(foo.value).to eq 'ID2SYM(100)'
49
- expect(foo.docstring).to eq 'foobar!'
50
- end
51
-
52
- it "allows the form VALUE: DOCSTRING to document value" do
53
- parse_init <<-eof
54
- mFoo = rb_define_module("Foo");
55
- rb_define_const(mFoo, "FOO", ID2SYM(100)); // 100: foobar!
56
- eof
57
- foo = Registry.at('Foo::FOO')
58
- expect(foo.value).to eq '100'
59
- expect(foo.docstring).to eq 'foobar!'
60
- end
61
-
62
- it "allows escaping of backslashes in VALUE: DOCSTRING syntax" do
63
- parse_init <<-eof
64
- mFoo = rb_define_module("Foo");
65
- rb_define_const(mFoo, "FOO", ID2SYM(100)); // 100\\:x\\:y: foobar:x!
66
- eof
67
- foo = Registry.at('Foo::FOO')
68
- expect(foo.value).to eq '100:x:y'
69
- expect(foo.docstring).to eq 'foobar:x!'
70
- end
71
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + "/spec_helper"
3
-
4
- RSpec.describe YARD::Handlers::C::InitHandler do
5
- it "adds documentation in Init_ClassName() to ClassName" do
6
- parse(<<-eof)
7
- // Bar!
8
- void Init_A() {
9
- rb_cA = rb_define_class("A", rb_cObject);
10
- }
11
- eof
12
- expect(Registry.at('A').docstring).to eq 'Bar!'
13
- end
14
-
15
- it "does not add documentation if ClassName is not created in Init" do
16
- parse(<<-eof)
17
- // Bar!
18
- void Init_A() {
19
- }
20
- eof
21
- expect(Registry.at('A')).to be nil
22
- end
23
-
24
- it "does not overwrite override comment" do
25
- parse(<<-eof)
26
- /* Document-class: A
27
- * Foo!
28
- */
29
-
30
- // Bar!
31
- static SWIGEXPORT void Init_A() {
32
- rb_cA = rb_define_class("A", rb_cObject);
33
- }
34
- eof
35
- expect(Registry.at('A').docstring).to eq 'Foo!'
36
- end
37
-
38
- it "checks non-Init methods for declarations too" do
39
- parse(<<-eof)
40
- void foo(int x, int y, char *name) {
41
- rb_cB = rb_define_class("B", rb_cObject);
42
- rb_define_method(rb_cB, "foo", foo_impl, 0);
43
- }
44
- eof
45
- expect(Registry.at('B')).to be_a(CodeObjects::ClassObject)
46
- expect(Registry.at('B#foo')).to be_a(CodeObjects::MethodObject)
47
- end
48
- end