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,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
@@ -1,133 +0,0 @@
1
- # frozen_string_literal: true
2
- RSpec.shared_examples "class method visibility decorator" do
3
- # Use let(:visibility) to specify the name of the x_class_method
4
- # visibility decorator to test.
5
-
6
- describe do
7
- before do
8
- StubbedSourceParser.parse_string <<-CODE
9
- class A
10
- def self.b; end
11
- def self.c; end
12
- def self.d; end
13
- def self.e; end
14
-
15
- #{visibility}_class_method(:c, :d)
16
- #{visibility}_class_method("e")
17
- end
18
- CODE
19
- end
20
-
21
- it "handles private_class_method statement" do
22
- expect(Registry.at('A.c').visibility).to eq visibility
23
- expect(Registry.at('A.d').visibility).to eq visibility
24
- expect(Registry.at('A.e').visibility).to eq visibility
25
- end
26
-
27
- # Issue #760
28
- # https://github.com/lsegal/yard/issues/760
29
- it "handles singleton classes" do
30
- # Note: It's important to def a method within the singleton class or
31
- # the bug may not trigger.
32
- code = <<-CODE
33
- class SingletonClass
34
- private_class_method :new
35
- def self.foo
36
- "foo"
37
- end
38
- end
39
- CODE
40
-
41
- StubbedSourceParser.parse_string(code) # Should be successful.
42
- end unless LEGACY_PARSER
43
- end
44
-
45
- describe "handles reopened class" do
46
- before do
47
- StubbedSourceParser.parse_string <<-CODE
48
- class SingletonClass
49
-
50
- #{'private' unless visibility.to_sym == :private}
51
-
52
- # != visibility
53
- def self.foo
54
- 'foo'
55
- end
56
-
57
- # == visibility
58
- def self.bar
59
- end
60
-
61
- # == visibility from reopening class.
62
- def self.baz
63
- end
64
-
65
- #{visibility}_class_method :new, :bar
66
-
67
- end
68
- CODE
69
-
70
- StubbedSourceParser.parse_string <<-CODE
71
- # Reopening singleton class.
72
- class SingletonClass
73
- #{visibility}_class_method :baz
74
-
75
- #{'private' unless visibility.to_sym == :private}
76
- # != visibility from reopened class. (Verifies class was reopened.)
77
- def self.bat
78
- end
79
-
80
- end
81
- CODE
82
- end
83
-
84
- specify do
85
- expect(Registry.at('SingletonClass.foo').visibility).not_to eq visibility
86
- expect(Registry.at('SingletonClass.bar').visibility).to eq visibility
87
- expect(Registry.at('SingletonClass.baz').visibility).to eq visibility
88
- expect(Registry.at('SingletonClass.bat').visibility).not_to eq visibility
89
- end
90
- end unless LEGACY_PARSER # reopened class
91
-
92
- describe "as method definition decorator" do
93
- subject { Registry.at('SingletonClass.foo') }
94
-
95
- # Valid as of Ruby 2.1.0:
96
- # private_class_method def self.foo; end
97
-
98
- let(:code) do
99
- <<-CODE
100
- class SingletonClass
101
- # Valid Ruby 2.1.0 syntax.
102
- #{method_def}
103
- 'it works'
104
- end
105
- end
106
- CODE
107
- end
108
-
109
- let(:method_def) { "#{visibility}_class_method def self.foo param1, param2" }
110
-
111
- before { StubbedSourceParser.parse_string code }
112
-
113
- it "handles self.foo" do
114
- expect(subject.visibility).to eq visibility
115
- end
116
-
117
- it "handles parameters correctly" do
118
- expect(subject.parameters.map(&:first)).to eq ['param1', 'param2']
119
- end
120
-
121
- it "attaches documentation to method definition" do
122
- expect(subject.docstring).to eq "Valid Ruby 2.1.0 syntax."
123
- end
124
-
125
- describe "handles SingletonClass.foo" do
126
- let(:method_def) { "#{visibility}_class_method def SingletonClass.foo" }
127
-
128
- specify do
129
- expect(subject.visibility).to eq visibility
130
- end
131
- end
132
- end unless LEGACY_PARSER
133
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + '/spec_helper'
3
-
4
- RSpec.describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ClassVariableHandler" do
5
- before(:all) { parse_file :class_variable_handler_001, __FILE__ }
6
-
7
- it "does not parse class variables inside methods" do
8
- obj = Registry.at("A::B::@@somevar")
9
- expect(obj.source).to eq "@@somevar = \"hello\""
10
- expect(obj.value).to eq '"hello"'
11
- end
12
- end
@@ -1,112 +0,0 @@
1
- # frozen_string_literal: true
2
- require File.dirname(__FILE__) + '/spec_helper'
3
-
4
- RSpec.describe "YARD::Handlers::Ruby::#{LEGACY_PARSER ? "Legacy::" : ""}ConstantHandler" do
5
- before(:all) { parse_file :constant_handler_001, __FILE__ }
6
-
7
- it "does not parse constants inside methods" do
8
- expect(Registry.at("A::B::SOMECONSTANT").source).to eq "SOMECONSTANT= \"hello\""
9
- end
10
-
11
- it "only parses valid constants" do
12
- expect(Registry.at("A::B::notaconstant")).to be nil
13
- end
14
-
15
- it "maintains newlines" do
16
- expect(Registry.at("A::B::MYCONSTANT").value.delete("\r")).to eq "A +\nB +\nC +\nD"
17
- end
18
-
19
- it "turns Const = Struct.new(:sym) into class Const with attr :sym" do
20
- obj = Registry.at("MyClass")
21
- expect(obj).to be_kind_of(CodeObjects::ClassObject)
22
- attrs = obj.attributes[:instance]
23
- [:a, :b, :c].each do |key|
24
- expect(attrs).to have_key(key)
25
- expect(attrs[key][:read]).not_to be nil
26
- expect(attrs[key][:write]).not_to be nil
27
- end
28
- end
29
-
30
- it 'documents block for Struct.new if present' do
31
- obj = Registry.at("MyStructWithConstant")
32
- expect(obj).to be_kind_of(CodeObjects::ClassObject)
33
- expect(obj.constants[0].docstring).to eq 'A constant.'
34
- expect(obj.constants[0].name).to eq :CONSTANT
35
- expect(obj.constants[0].value).to eq "42"
36
- expect(obj.constants[1].docstring).to eq 'Special constant (empty symbol)'
37
- expect(obj.constants[1].name).to eq :EMPTY
38
- expect(obj.constants[1].value).to eq ":''"
39
- end
40
-
41
- it "turns Const = Struct.new('Name', :sym) into class Const with attr :sym" do
42
- obj = Registry.at("NotMyClass")
43
- expect(obj).to be_kind_of(CodeObjects::ClassObject)
44
- attrs = obj.attributes[:instance]
45
- [:b, :c].each do |key|
46
- expect(attrs).to have_key(key)
47
- expect(attrs[key][:read]).not_to be nil
48
- expect(attrs[key][:write]).not_to be nil
49
- end
50
-
51
- expect(Registry.at("NotMyClass2")).to be nil
52
- end
53
-
54
- it "turns Const = Struct.new into empty struct" do
55
- obj = Registry.at("MyEmptyStruct")
56
- expect(obj).not_to be nil
57
- expect(obj.attributes[:instance]).to be_empty
58
- end
59
-
60
- it "maintains docstrings on structs defined via constants" do
61
- obj = Registry.at("DocstringStruct")
62
- expect(obj).not_to be nil
63
- expect(obj.docstring).to eq "A crazy struct."
64
- expect(obj.attributes[:instance]).not_to be_empty
65
- a1 = Registry.at("DocstringStruct#bar")
66
- a2 = Registry.at("DocstringStruct#baz")
67
- expect(a1.docstring).to eq "An attr"
68
- expect(a1.tag(:return).types).to eq ["String"]
69
- expect(a2.docstring).to eq "Another attr"
70
- expect(a2.tag(:return).types).to eq ["Number"]
71
- a3 = Registry.at("DocstringStruct#new_syntax")
72
- expect(a3.docstring).to eq "Attribute defined with the new syntax"
73
- expect(a3.tag(:return).types).to eq ["Symbol"]
74
- end
75
-
76
- it "raises undocumentable error in 1.9 parser for Struct.new assignment to non-const" do
77
- undoc_error "nonconst = Struct.new"
78
- end unless LEGACY_PARSER
79
-
80
- %w(module class).each do |type|
81
- it "does not allow #{type} to be redefined as constant" do
82
- undoc_error <<-eof
83
- #{type} Foo; end
84
- Foo = "value"
85
- eof
86
- end
87
- end unless LEGACY_PARSER
88
-
89
- it "allows constant to have same name as constant in parent namespace" do
90
- YARD.parse_string <<-eof
91
- module A
92
- class C; end
93
- module B; C = 1 end
94
- end
95
- eof
96
- expect(log.io.string).to eq ""
97
- expect(Registry.at('A::B::C').type).to eq :constant
98
- end
99
-
100
- it "detects compound constant names" do
101
- YARD.parse_string <<-eof
102
- module A
103
- class AA; end
104
- AA::B = true
105
- end
106
- A::AA::C = true
107
- eof
108
-
109
- expect(Registry.at('A::AA::B').type).to eq :constant
110
- expect(Registry.at('A::AA::C').type).to eq :constant
111
- end if HAVE_RIPPER
112
- end