yard 0.9.18 → 0.9.19

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 (567) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +26 -26
  3. data/CHANGELOG.md +742 -728
  4. data/LEGAL +66 -66
  5. data/LICENSE +22 -22
  6. data/README.md +328 -328
  7. data/Rakefile +42 -53
  8. data/benchmarks/builtins_vs_eval.rb +24 -24
  9. data/benchmarks/concat_vs_join.rb +13 -13
  10. data/benchmarks/erb_vs_erubis.rb +54 -54
  11. data/benchmarks/format_args.rb +47 -47
  12. data/benchmarks/generation.rb +38 -38
  13. data/benchmarks/marshal_vs_dbm.rb +64 -64
  14. data/benchmarks/parsing.rb +46 -46
  15. data/benchmarks/pathname_vs_string.rb +50 -50
  16. data/benchmarks/rdoc_vs_yardoc.rb +11 -11
  17. data/benchmarks/registry_store_types.rb +49 -49
  18. data/benchmarks/ri_vs_yri.rb +19 -19
  19. data/benchmarks/ripper_parser.rb +13 -13
  20. data/benchmarks/splat_vs_flatten.rb +13 -13
  21. data/benchmarks/template_erb.rb +23 -23
  22. data/benchmarks/template_format.rb +7 -7
  23. data/benchmarks/template_profile.rb +18 -18
  24. data/benchmarks/yri_cache.rb +20 -20
  25. data/bin/yard +13 -13
  26. data/bin/yardoc +13 -13
  27. data/bin/yri +13 -13
  28. data/docs/CodeObjects.md +115 -115
  29. data/docs/GettingStarted.md +679 -679
  30. data/docs/Handlers.md +152 -152
  31. data/docs/Overview.md +61 -61
  32. data/docs/Parser.md +191 -191
  33. data/docs/Tags.md +283 -283
  34. data/docs/TagsArch.md +123 -123
  35. data/docs/Templates.md +496 -496
  36. data/docs/WhatsNew.md +1245 -1245
  37. data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
  38. data/docs/templates/default/fulldoc/html/setup.rb +6 -6
  39. data/docs/templates/default/layout/html/setup.rb +9 -9
  40. data/docs/templates/default/layout/html/tag_list.erb +11 -11
  41. data/docs/templates/default/yard_tags/html/list.erb +18 -18
  42. data/docs/templates/default/yard_tags/html/setup.rb +26 -26
  43. data/docs/templates/plugin.rb +70 -70
  44. data/lib/rubygems_plugin.rb +9 -9
  45. data/lib/yard.rb +69 -69
  46. data/lib/yard/autoload.rb +308 -303
  47. data/lib/yard/cli/command.rb +85 -85
  48. data/lib/yard/cli/command_parser.rb +93 -93
  49. data/lib/yard/cli/config.rb +198 -198
  50. data/lib/yard/cli/diff.rb +270 -270
  51. data/lib/yard/cli/display.rb +69 -69
  52. data/lib/yard/cli/gems.rb +84 -84
  53. data/lib/yard/cli/graph.rb +125 -125
  54. data/lib/yard/cli/help.rb +20 -20
  55. data/lib/yard/cli/i18n.rb +70 -70
  56. data/lib/yard/cli/list.rb +23 -23
  57. data/lib/yard/cli/markup_types.rb +32 -32
  58. data/lib/yard/cli/server.rb +257 -257
  59. data/lib/yard/cli/stats.rb +231 -231
  60. data/lib/yard/cli/yardoc.rb +789 -788
  61. data/lib/yard/cli/yardopts_command.rb +110 -110
  62. data/lib/yard/cli/yri.rb +215 -215
  63. data/lib/yard/code_objects/base.rb +615 -615
  64. data/lib/yard/code_objects/class_object.rb +146 -146
  65. data/lib/yard/code_objects/class_variable_object.rb +11 -11
  66. data/lib/yard/code_objects/constant_object.rb +16 -16
  67. data/lib/yard/code_objects/extended_method_object.rb +24 -24
  68. data/lib/yard/code_objects/extra_file_object.rb +134 -131
  69. data/lib/yard/code_objects/macro_object.rb +172 -172
  70. data/lib/yard/code_objects/method_object.rb +196 -196
  71. data/lib/yard/code_objects/module_object.rb +21 -21
  72. data/lib/yard/code_objects/namespace_mapper.rb +114 -114
  73. data/lib/yard/code_objects/namespace_object.rb +200 -200
  74. data/lib/yard/code_objects/proxy.rb +240 -240
  75. data/lib/yard/code_objects/root_object.rb +19 -19
  76. data/lib/yard/config.rb +270 -270
  77. data/lib/yard/core_ext/array.rb +16 -16
  78. data/lib/yard/core_ext/file.rb +69 -69
  79. data/lib/yard/core_ext/hash.rb +16 -16
  80. data/lib/yard/core_ext/insertion.rb +63 -63
  81. data/lib/yard/core_ext/module.rb +11 -20
  82. data/lib/yard/core_ext/string.rb +68 -68
  83. data/lib/yard/core_ext/symbol_hash.rb +75 -75
  84. data/lib/yard/docstring.rb +386 -386
  85. data/lib/yard/docstring_parser.rb +345 -345
  86. data/lib/yard/gem_index.rb +29 -29
  87. data/lib/yard/globals.rb +22 -22
  88. data/lib/yard/handlers/base.rb +595 -595
  89. data/lib/yard/handlers/c/alias_handler.rb +16 -16
  90. data/lib/yard/handlers/c/attribute_handler.rb +13 -13
  91. data/lib/yard/handlers/c/base.rb +129 -129
  92. data/lib/yard/handlers/c/class_handler.rb +27 -27
  93. data/lib/yard/handlers/c/constant_handler.rb +13 -13
  94. data/lib/yard/handlers/c/handler_methods.rb +212 -211
  95. data/lib/yard/handlers/c/init_handler.rb +20 -20
  96. data/lib/yard/handlers/c/method_handler.rb +45 -45
  97. data/lib/yard/handlers/c/mixin_handler.rb +21 -21
  98. data/lib/yard/handlers/c/module_handler.rb +17 -17
  99. data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
  100. data/lib/yard/handlers/c/path_handler.rb +11 -11
  101. data/lib/yard/handlers/c/struct_handler.rb +13 -13
  102. data/lib/yard/handlers/c/symbol_handler.rb +8 -8
  103. data/lib/yard/handlers/common/method_handler.rb +19 -0
  104. data/lib/yard/handlers/processor.rb +200 -200
  105. data/lib/yard/handlers/ruby/alias_handler.rb +44 -44
  106. data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
  107. data/lib/yard/handlers/ruby/base.rb +165 -165
  108. data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
  109. data/lib/yard/handlers/ruby/class_handler.rb +119 -119
  110. data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
  111. data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
  112. data/lib/yard/handlers/ruby/constant_handler.rb +59 -59
  113. data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
  114. data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
  115. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -96
  116. data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
  117. data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
  118. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
  119. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
  120. data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
  121. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
  122. data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
  123. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
  124. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
  125. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
  126. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
  127. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
  128. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
  129. data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
  130. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
  131. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
  132. data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
  133. data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
  134. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
  135. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
  136. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
  137. data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
  138. data/lib/yard/handlers/ruby/method_handler.rb +114 -118
  139. data/lib/yard/handlers/ruby/mixin_handler.rb +37 -37
  140. data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
  141. data/lib/yard/handlers/ruby/module_handler.rb +12 -12
  142. data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
  144. data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
  145. data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
  146. data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
  147. data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
  148. data/lib/yard/i18n/locale.rb +67 -67
  149. data/lib/yard/i18n/message.rb +57 -57
  150. data/lib/yard/i18n/messages.rb +56 -56
  151. data/lib/yard/i18n/po_parser.rb +61 -61
  152. data/lib/yard/i18n/pot_generator.rb +290 -290
  153. data/lib/yard/i18n/text.rb +173 -173
  154. data/lib/yard/logging.rb +205 -205
  155. data/lib/yard/options.rb +217 -217
  156. data/lib/yard/parser/base.rb +57 -57
  157. data/lib/yard/parser/c/c_parser.rb +235 -235
  158. data/lib/yard/parser/c/comment_parser.rb +134 -134
  159. data/lib/yard/parser/c/statement.rb +64 -64
  160. data/lib/yard/parser/ruby/ast_node.rb +540 -540
  161. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1354 -1354
  162. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
  163. data/lib/yard/parser/ruby/legacy/statement.rb +66 -66
  164. data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
  165. data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
  166. data/lib/yard/parser/ruby/ruby_parser.rb +687 -687
  167. data/lib/yard/parser/ruby/token_resolver.rb +156 -156
  168. data/lib/yard/parser/source_parser.rb +526 -526
  169. data/lib/yard/rake/yardoc_task.rb +81 -81
  170. data/lib/yard/registry.rb +439 -439
  171. data/lib/yard/registry_resolver.rb +189 -189
  172. data/lib/yard/registry_store.rb +337 -337
  173. data/lib/yard/rubygems/backports.rb +10 -10
  174. data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
  175. data/lib/yard/rubygems/backports/MIT.txt +20 -20
  176. data/lib/yard/rubygems/backports/gem.rb +10 -10
  177. data/lib/yard/rubygems/backports/source_index.rb +365 -365
  178. data/lib/yard/rubygems/doc_manager.rb +90 -90
  179. data/lib/yard/rubygems/hook.rb +197 -197
  180. data/lib/yard/rubygems/specification.rb +50 -50
  181. data/lib/yard/serializers/base.rb +83 -83
  182. data/lib/yard/serializers/file_system_serializer.rb +123 -123
  183. data/lib/yard/serializers/process_serializer.rb +24 -24
  184. data/lib/yard/serializers/stdout_serializer.rb +34 -34
  185. data/lib/yard/serializers/yardoc_serializer.rb +152 -152
  186. data/lib/yard/server.rb +13 -13
  187. data/lib/yard/server/adapter.rb +100 -100
  188. data/lib/yard/server/commands/base.rb +209 -209
  189. data/lib/yard/server/commands/display_file_command.rb +29 -29
  190. data/lib/yard/server/commands/display_object_command.rb +65 -65
  191. data/lib/yard/server/commands/frames_command.rb +16 -16
  192. data/lib/yard/server/commands/library_command.rb +187 -187
  193. data/lib/yard/server/commands/library_index_command.rb +28 -28
  194. data/lib/yard/server/commands/list_command.rb +25 -25
  195. data/lib/yard/server/commands/root_request_command.rb +15 -15
  196. data/lib/yard/server/commands/search_command.rb +79 -79
  197. data/lib/yard/server/commands/static_file_command.rb +23 -23
  198. data/lib/yard/server/commands/static_file_helpers.rb +62 -62
  199. data/lib/yard/server/doc_server_helper.rb +91 -91
  200. data/lib/yard/server/doc_server_serializer.rb +39 -39
  201. data/lib/yard/server/library_version.rb +277 -277
  202. data/lib/yard/server/rack_adapter.rb +89 -89
  203. data/lib/yard/server/router.rb +187 -187
  204. data/lib/yard/server/static_caching.rb +46 -46
  205. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
  206. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
  207. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
  208. data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
  209. data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
  210. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
  211. data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
  212. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
  213. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
  214. data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
  215. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
  216. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
  217. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
  218. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
  219. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
  220. data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
  221. data/lib/yard/server/webrick_adapter.rb +45 -45
  222. data/lib/yard/tags/default_factory.rb +191 -191
  223. data/lib/yard/tags/default_tag.rb +13 -13
  224. data/lib/yard/tags/directives.rb +616 -616
  225. data/lib/yard/tags/library.rb +633 -633
  226. data/lib/yard/tags/option_tag.rb +13 -13
  227. data/lib/yard/tags/overload_tag.rb +71 -71
  228. data/lib/yard/tags/ref_tag.rb +8 -8
  229. data/lib/yard/tags/ref_tag_list.rb +28 -28
  230. data/lib/yard/tags/tag.rb +71 -71
  231. data/lib/yard/tags/tag_format_error.rb +7 -7
  232. data/lib/yard/tags/types_explainer.rb +162 -162
  233. data/lib/yard/templates/engine.rb +186 -186
  234. data/lib/yard/templates/erb_cache.rb +23 -23
  235. data/lib/yard/templates/helpers/base_helper.rb +215 -215
  236. data/lib/yard/templates/helpers/filter_helper.rb +27 -27
  237. data/lib/yard/templates/helpers/html_helper.rb +646 -646
  238. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
  239. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
  240. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
  241. data/lib/yard/templates/helpers/markup_helper.rb +172 -172
  242. data/lib/yard/templates/helpers/method_helper.rb +75 -75
  243. data/lib/yard/templates/helpers/module_helper.rb +21 -21
  244. data/lib/yard/templates/helpers/text_helper.rb +112 -112
  245. data/lib/yard/templates/helpers/uml_helper.rb +47 -47
  246. data/lib/yard/templates/section.rb +105 -105
  247. data/lib/yard/templates/template.rb +418 -418
  248. data/lib/yard/templates/template_options.rb +92 -92
  249. data/lib/yard/verifier.rb +151 -151
  250. data/lib/yard/version.rb +6 -6
  251. data/spec/cli/command_parser_spec.rb +43 -43
  252. data/spec/cli/command_spec.rb +36 -36
  253. data/spec/cli/config_spec.rb +148 -148
  254. data/spec/cli/diff_spec.rb +254 -254
  255. data/spec/cli/display_spec.rb +30 -30
  256. data/spec/cli/gems_spec.rb +81 -81
  257. data/spec/cli/graph_spec.rb +18 -18
  258. data/spec/cli/help_spec.rb +22 -22
  259. data/spec/cli/i18n_spec.rb +107 -107
  260. data/spec/cli/list_spec.rb +8 -8
  261. data/spec/cli/markup_types_spec.rb +22 -22
  262. data/spec/cli/server_spec.rb +324 -324
  263. data/spec/cli/stats_spec.rb +96 -96
  264. data/spec/cli/yard_on_yard_spec.rb +38 -38
  265. data/spec/cli/yardoc_spec.rb +896 -862
  266. data/spec/cli/yri_spec.rb +101 -101
  267. data/spec/code_objects/base_spec.rb +470 -470
  268. data/spec/code_objects/class_object_spec.rb +226 -226
  269. data/spec/code_objects/code_object_list_spec.rb +36 -36
  270. data/spec/code_objects/constants_spec.rb +116 -116
  271. data/spec/code_objects/extra_file_object_spec.rb +160 -160
  272. data/spec/code_objects/macro_object_spec.rb +150 -150
  273. data/spec/code_objects/method_object_spec.rb +184 -184
  274. data/spec/code_objects/module_object_spec.rb +142 -142
  275. data/spec/code_objects/namespace_object_spec.rb +171 -171
  276. data/spec/code_objects/proxy_spec.rb +141 -141
  277. data/spec/code_objects/spec_helper.rb +3 -3
  278. data/spec/config_spec.rb +171 -171
  279. data/spec/core_ext/array_spec.rb +13 -13
  280. data/spec/core_ext/file_spec.rb +72 -72
  281. data/spec/core_ext/hash_spec.rb +14 -14
  282. data/spec/core_ext/insertion_spec.rb +37 -37
  283. data/spec/core_ext/module_spec.rb +9 -15
  284. data/spec/core_ext/string_spec.rb +42 -42
  285. data/spec/core_ext/symbol_hash_spec.rb +89 -89
  286. data/spec/docstring_parser_spec.rb +280 -280
  287. data/spec/docstring_spec.rb +373 -373
  288. data/spec/examples.txt +1883 -1875
  289. data/spec/handlers/alias_handler_spec.rb +82 -82
  290. data/spec/handlers/attribute_handler_spec.rb +96 -96
  291. data/spec/handlers/base_spec.rb +216 -216
  292. data/spec/handlers/c/alias_handler_spec.rb +34 -34
  293. data/spec/handlers/c/attribute_handler_spec.rb +41 -41
  294. data/spec/handlers/c/class_handler_spec.rb +78 -78
  295. data/spec/handlers/c/constant_handler_spec.rb +71 -71
  296. data/spec/handlers/c/init_handler_spec.rb +48 -48
  297. data/spec/handlers/c/method_handler_spec.rb +327 -325
  298. data/spec/handlers/c/mixin_handler_spec.rb +44 -44
  299. data/spec/handlers/c/module_handler_spec.rb +71 -71
  300. data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
  301. data/spec/handlers/c/path_handler_spec.rb +36 -36
  302. data/spec/handlers/c/spec_helper.rb +23 -23
  303. data/spec/handlers/c/struct_handler_spec.rb +16 -16
  304. data/spec/handlers/class_condition_handler_spec.rb +87 -87
  305. data/spec/handlers/class_handler_spec.rb +247 -247
  306. data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
  307. data/spec/handlers/class_variable_handler_spec.rb +12 -12
  308. data/spec/handlers/constant_handler_spec.rb +112 -112
  309. data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
  310. data/spec/handlers/dsl_handler_spec.rb +219 -219
  311. data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
  312. data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
  313. data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
  314. data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
  315. data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
  316. data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
  317. data/spec/handlers/examples/dsl_handler_001.rb.txt +154 -154
  318. data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
  319. data/spec/handlers/examples/extend_handler_001.rb.txt +15 -15
  320. data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
  321. data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
  322. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -37
  323. data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
  324. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
  325. data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
  326. data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
  327. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
  328. data/spec/handlers/exception_handler_spec.rb +49 -49
  329. data/spec/handlers/extend_handler_spec.rb +24 -24
  330. data/spec/handlers/legacy_base_spec.rb +128 -128
  331. data/spec/handlers/method_condition_handler_spec.rb +15 -15
  332. data/spec/handlers/method_handler_spec.rb +190 -190
  333. data/spec/handlers/mixin_handler_spec.rb +56 -56
  334. data/spec/handlers/module_function_handler_spec.rb +106 -106
  335. data/spec/handlers/module_handler_spec.rb +35 -35
  336. data/spec/handlers/private_class_method_handler_spec.rb +11 -11
  337. data/spec/handlers/private_constant_handler_spec.rb +25 -25
  338. data/spec/handlers/processor_spec.rb +35 -35
  339. data/spec/handlers/public_class_method_handler_spec.rb +11 -11
  340. data/spec/handlers/ruby/base_spec.rb +95 -95
  341. data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
  342. data/spec/handlers/spec_helper.rb +33 -33
  343. data/spec/handlers/visibility_handler_spec.rb +44 -44
  344. data/spec/handlers/yield_handler_spec.rb +52 -52
  345. data/spec/i18n/locale_spec.rb +81 -81
  346. data/spec/i18n/message_spec.rb +52 -52
  347. data/spec/i18n/messages_spec.rb +67 -67
  348. data/spec/i18n/pot_generator_spec.rb +295 -295
  349. data/spec/i18n/text_spec.rb +184 -184
  350. data/spec/logging_spec.rb +44 -44
  351. data/spec/options_spec.rb +171 -171
  352. data/spec/parser/base_spec.rb +24 -24
  353. data/spec/parser/c_parser_spec.rb +236 -236
  354. data/spec/parser/examples/array.c.txt +6267 -6267
  355. data/spec/parser/examples/example1.rb.txt +7 -7
  356. data/spec/parser/examples/extrafile.c.txt +8 -8
  357. data/spec/parser/examples/file.c.txt +28 -28
  358. data/spec/parser/examples/multifile.c.txt +22 -22
  359. data/spec/parser/examples/namespace.cpp.txt +68 -68
  360. data/spec/parser/examples/override.c.txt +424 -424
  361. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
  362. data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
  363. data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
  364. data/spec/parser/ruby/ast_node_spec.rb +33 -33
  365. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
  366. data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
  367. data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
  368. data/spec/parser/ruby/token_resolver_spec.rb +165 -165
  369. data/spec/parser/source_parser_spec.rb +727 -727
  370. data/spec/parser/tag_parsing_spec.rb +17 -17
  371. data/spec/rake/yardoc_task_spec.rb +118 -118
  372. data/spec/registry_spec.rb +463 -463
  373. data/spec/registry_store_spec.rb +316 -316
  374. data/spec/rubygems/doc_manager_spec.rb +112 -112
  375. data/spec/serializers/data/serialized_yardoc/checksums +1 -1
  376. data/spec/serializers/file_system_serializer_spec.rb +145 -145
  377. data/spec/serializers/spec_helper.rb +2 -2
  378. data/spec/serializers/yardoc_serializer_spec.rb +78 -78
  379. data/spec/server/adapter_spec.rb +39 -39
  380. data/spec/server/commands/base_spec.rb +91 -91
  381. data/spec/server/commands/library_command_spec.rb +39 -39
  382. data/spec/server/doc_server_helper_spec.rb +72 -72
  383. data/spec/server/doc_server_serializer_spec.rb +60 -60
  384. data/spec/server/rack_adapter_spec.rb +21 -21
  385. data/spec/server/router_spec.rb +123 -123
  386. data/spec/server/spec_helper.rb +22 -22
  387. data/spec/server/static_caching_spec.rb +47 -47
  388. data/spec/server/webrick_servlet_spec.rb +20 -20
  389. data/spec/server_spec.rb +19 -19
  390. data/spec/spec_helper.rb +212 -212
  391. data/spec/tags/default_factory_spec.rb +168 -168
  392. data/spec/tags/default_tag_spec.rb +11 -11
  393. data/spec/tags/directives_spec.rb +463 -463
  394. data/spec/tags/library_spec.rb +48 -48
  395. data/spec/tags/overload_tag_spec.rb +53 -53
  396. data/spec/tags/ref_tag_list_spec.rb +53 -53
  397. data/spec/tags/types_explainer_spec.rb +203 -203
  398. data/spec/templates/class_spec.rb +45 -45
  399. data/spec/templates/constant_spec.rb +41 -41
  400. data/spec/templates/engine_spec.rb +131 -131
  401. data/spec/templates/examples/class001.html +308 -308
  402. data/spec/templates/examples/class001.txt +36 -36
  403. data/spec/templates/examples/class002.html +39 -39
  404. data/spec/templates/examples/constant001.txt +24 -24
  405. data/spec/templates/examples/constant002.txt +6 -6
  406. data/spec/templates/examples/constant003.txt +10 -10
  407. data/spec/templates/examples/method001.html +137 -137
  408. data/spec/templates/examples/method001.txt +35 -35
  409. data/spec/templates/examples/method002.html +91 -91
  410. data/spec/templates/examples/method002.txt +20 -20
  411. data/spec/templates/examples/method003.html +165 -165
  412. data/spec/templates/examples/method003.txt +45 -45
  413. data/spec/templates/examples/method004.html +48 -48
  414. data/spec/templates/examples/method004.txt +10 -10
  415. data/spec/templates/examples/method005.html +105 -105
  416. data/spec/templates/examples/method005.txt +33 -33
  417. data/spec/templates/examples/method006.html +107 -107
  418. data/spec/templates/examples/method006.txt +20 -20
  419. data/spec/templates/examples/module001.dot +33 -33
  420. data/spec/templates/examples/module001.html +833 -833
  421. data/spec/templates/examples/module001.txt +33 -33
  422. data/spec/templates/examples/module002.html +341 -341
  423. data/spec/templates/examples/module003.html +202 -202
  424. data/spec/templates/examples/module004.html +394 -394
  425. data/spec/templates/examples/module005.html +81 -81
  426. data/spec/templates/examples/tag001.txt +82 -82
  427. data/spec/templates/helpers/base_helper_spec.rb +171 -171
  428. data/spec/templates/helpers/html_helper_spec.rb +687 -668
  429. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
  430. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
  431. data/spec/templates/helpers/markup_helper_spec.rb +136 -136
  432. data/spec/templates/helpers/method_helper_spec.rb +107 -107
  433. data/spec/templates/helpers/module_helper_spec.rb +35 -35
  434. data/spec/templates/helpers/shared_signature_examples.rb +126 -126
  435. data/spec/templates/helpers/text_helper_spec.rb +65 -65
  436. data/spec/templates/method_spec.rb +118 -118
  437. data/spec/templates/module_spec.rb +203 -203
  438. data/spec/templates/onefile_spec.rb +66 -66
  439. data/spec/templates/section_spec.rb +144 -144
  440. data/spec/templates/spec_helper.rb +76 -76
  441. data/spec/templates/tag_spec.rb +52 -52
  442. data/spec/templates/template_spec.rb +410 -410
  443. data/spec/verifier_spec.rb +106 -106
  444. data/templates/default/class/dot/setup.rb +7 -7
  445. data/templates/default/class/dot/superklass.erb +2 -2
  446. data/templates/default/class/html/constructor_details.erb +8 -8
  447. data/templates/default/class/html/setup.rb +2 -2
  448. data/templates/default/class/html/subclasses.erb +4 -4
  449. data/templates/default/class/setup.rb +36 -36
  450. data/templates/default/class/text/setup.rb +12 -12
  451. data/templates/default/class/text/subclasses.erb +5 -5
  452. data/templates/default/constant/text/header.erb +11 -11
  453. data/templates/default/constant/text/setup.rb +4 -4
  454. data/templates/default/docstring/html/abstract.erb +4 -4
  455. data/templates/default/docstring/html/deprecated.erb +1 -1
  456. data/templates/default/docstring/html/index.erb +5 -5
  457. data/templates/default/docstring/html/note.erb +6 -6
  458. data/templates/default/docstring/html/private.erb +4 -4
  459. data/templates/default/docstring/html/text.erb +1 -1
  460. data/templates/default/docstring/html/todo.erb +6 -6
  461. data/templates/default/docstring/setup.rb +52 -52
  462. data/templates/default/docstring/text/abstract.erb +2 -2
  463. data/templates/default/docstring/text/deprecated.erb +2 -2
  464. data/templates/default/docstring/text/index.erb +2 -2
  465. data/templates/default/docstring/text/note.erb +3 -3
  466. data/templates/default/docstring/text/private.erb +2 -2
  467. data/templates/default/docstring/text/text.erb +1 -1
  468. data/templates/default/docstring/text/todo.erb +3 -3
  469. data/templates/default/fulldoc/html/css/full_list.css +58 -58
  470. data/templates/default/fulldoc/html/css/style.css +496 -496
  471. data/templates/default/fulldoc/html/frames.erb +17 -17
  472. data/templates/default/fulldoc/html/full_list.erb +37 -37
  473. data/templates/default/fulldoc/html/full_list_class.erb +2 -2
  474. data/templates/default/fulldoc/html/full_list_file.erb +7 -7
  475. data/templates/default/fulldoc/html/full_list_method.erb +10 -10
  476. data/templates/default/fulldoc/html/js/app.js +303 -292
  477. data/templates/default/fulldoc/html/js/full_list.js +216 -216
  478. data/templates/default/fulldoc/html/js/jquery.js +3 -3
  479. data/templates/default/fulldoc/html/setup.rb +241 -241
  480. data/templates/default/layout/dot/header.erb +5 -5
  481. data/templates/default/layout/dot/setup.rb +15 -15
  482. data/templates/default/layout/html/breadcrumb.erb +11 -11
  483. data/templates/default/layout/html/files.erb +11 -11
  484. data/templates/default/layout/html/footer.erb +5 -5
  485. data/templates/default/layout/html/headers.erb +15 -15
  486. data/templates/default/layout/html/index.erb +2 -2
  487. data/templates/default/layout/html/layout.erb +23 -23
  488. data/templates/default/layout/html/listing.erb +4 -4
  489. data/templates/default/layout/html/objects.erb +32 -32
  490. data/templates/default/layout/html/script_setup.erb +4 -4
  491. data/templates/default/layout/html/search.erb +12 -12
  492. data/templates/default/layout/html/setup.rb +89 -89
  493. data/templates/default/method/html/header.erb +16 -16
  494. data/templates/default/method/setup.rb +4 -4
  495. data/templates/default/method_details/html/header.erb +2 -2
  496. data/templates/default/method_details/html/method_signature.erb +24 -24
  497. data/templates/default/method_details/html/source.erb +9 -9
  498. data/templates/default/method_details/setup.rb +11 -11
  499. data/templates/default/method_details/text/header.erb +10 -10
  500. data/templates/default/method_details/text/method_signature.erb +12 -12
  501. data/templates/default/method_details/text/setup.rb +11 -11
  502. data/templates/default/module/dot/child.erb +1 -1
  503. data/templates/default/module/dot/dependencies.erb +2 -2
  504. data/templates/default/module/dot/header.erb +6 -6
  505. data/templates/default/module/dot/info.erb +13 -13
  506. data/templates/default/module/dot/setup.rb +15 -15
  507. data/templates/default/module/html/attribute_details.erb +10 -10
  508. data/templates/default/module/html/attribute_summary.erb +8 -8
  509. data/templates/default/module/html/box_info.erb +43 -43
  510. data/templates/default/module/html/children.erb +8 -8
  511. data/templates/default/module/html/constant_summary.erb +17 -17
  512. data/templates/default/module/html/defines.erb +2 -2
  513. data/templates/default/module/html/header.erb +5 -5
  514. data/templates/default/module/html/inherited_attributes.erb +14 -14
  515. data/templates/default/module/html/inherited_constants.erb +8 -8
  516. data/templates/default/module/html/inherited_methods.erb +18 -18
  517. data/templates/default/module/html/item_summary.erb +40 -40
  518. data/templates/default/module/html/method_details_list.erb +9 -9
  519. data/templates/default/module/html/method_summary.erb +13 -13
  520. data/templates/default/module/html/methodmissing.erb +12 -12
  521. data/templates/default/module/setup.rb +167 -167
  522. data/templates/default/module/text/children.erb +9 -9
  523. data/templates/default/module/text/class_meths_list.erb +7 -7
  524. data/templates/default/module/text/extends.erb +7 -7
  525. data/templates/default/module/text/header.erb +7 -7
  526. data/templates/default/module/text/includes.erb +7 -7
  527. data/templates/default/module/text/instance_meths_list.erb +7 -7
  528. data/templates/default/module/text/setup.rb +13 -13
  529. data/templates/default/onefile/html/files.erb +4 -4
  530. data/templates/default/onefile/html/headers.erb +6 -6
  531. data/templates/default/onefile/html/layout.erb +17 -17
  532. data/templates/default/onefile/html/readme.erb +2 -2
  533. data/templates/default/onefile/html/setup.rb +62 -62
  534. data/templates/default/root/dot/child.erb +2 -2
  535. data/templates/default/root/dot/setup.rb +6 -6
  536. data/templates/default/root/html/setup.rb +2 -2
  537. data/templates/default/tags/html/example.erb +10 -10
  538. data/templates/default/tags/html/index.erb +2 -2
  539. data/templates/default/tags/html/option.erb +24 -24
  540. data/templates/default/tags/html/overload.erb +13 -13
  541. data/templates/default/tags/html/see.erb +7 -7
  542. data/templates/default/tags/html/tag.erb +20 -20
  543. data/templates/default/tags/setup.rb +57 -57
  544. data/templates/default/tags/text/example.erb +12 -12
  545. data/templates/default/tags/text/index.erb +1 -1
  546. data/templates/default/tags/text/option.erb +20 -20
  547. data/templates/default/tags/text/overload.erb +19 -19
  548. data/templates/default/tags/text/see.erb +11 -11
  549. data/templates/default/tags/text/tag.erb +13 -13
  550. data/templates/guide/class/html/setup.rb +2 -2
  551. data/templates/guide/docstring/html/setup.rb +2 -2
  552. data/templates/guide/fulldoc/html/css/style.css +108 -108
  553. data/templates/guide/fulldoc/html/js/app.js +33 -33
  554. data/templates/guide/fulldoc/html/setup.rb +74 -74
  555. data/templates/guide/layout/html/layout.erb +81 -81
  556. data/templates/guide/layout/html/setup.rb +25 -25
  557. data/templates/guide/method/html/header.erb +17 -17
  558. data/templates/guide/method/html/setup.rb +22 -22
  559. data/templates/guide/module/html/header.erb +6 -6
  560. data/templates/guide/module/html/method_list.erb +4 -4
  561. data/templates/guide/module/html/setup.rb +27 -27
  562. data/templates/guide/onefile/html/files.erb +4 -4
  563. data/templates/guide/onefile/html/setup.rb +6 -6
  564. data/templates/guide/onefile/html/toc.erb +3 -3
  565. data/templates/guide/tags/html/setup.rb +9 -9
  566. data/yard.gemspec +43 -43
  567. metadata +4 -3
@@ -1,82 +1,82 @@
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
+ # 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 +1,96 @@
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
+ # 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 +1,216 @@
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
+ # 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