yard 0.9.16 → 0.9.17

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