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,19 +1,19 @@
1
- # frozen_string_literal: true
2
- module YARD
3
- module CodeObjects
4
- # Represents the root namespace object (the invisible Ruby module that
5
- # holds all top level modules, class and other objects).
6
- class RootObject < ModuleObject
7
- def path; @path ||= "" end
8
- def inspect; @inspect ||= "#<yardoc root>" end
9
- def root?; true end
10
- def title; 'Top Level Namespace' end
11
-
12
- def equal?(other)
13
- other == :root ? true : super(other)
14
- end
15
-
16
- def hash; :root.hash end
17
- end
18
- end
19
- end
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module CodeObjects
4
+ # Represents the root namespace object (the invisible Ruby module that
5
+ # holds all top level modules, class and other objects).
6
+ class RootObject < ModuleObject
7
+ def path; @path ||= "" end
8
+ def inspect; @inspect ||= "#<yardoc root>" end
9
+ def root?; true end
10
+ def title; 'Top Level Namespace' end
11
+
12
+ def equal?(other)
13
+ other == :root ? true : super(other)
14
+ end
15
+
16
+ def hash; :root.hash end
17
+ end
18
+ end
19
+ end
@@ -1,270 +1,270 @@
1
- # frozen_string_literal: true
2
- module YARD
3
- # This class maintains all system-wide configuration for YARD and handles
4
- # the loading of plugins. To access options call {options}, and to load
5
- # a plugin use {load_plugin}. All other public methods are used by YARD
6
- # during load time.
7
- #
8
- # == User Configuration Files
9
- #
10
- # Persistent user configuration files can be stored in the file
11
- # +~/.yard/config+, which is read when YARD first loads. The file should
12
- # be formatted as YAML, and should contain a map of keys and values.
13
- #
14
- # Although you can specify any key-value mapping in the configuration file,
15
- # YARD defines special keys specified in {DEFAULT_CONFIG_OPTIONS}.
16
- #
17
- # An example of a configuration file is listed below:
18
- #
19
- # !!!yaml
20
- # load_plugins: true # Auto-load plugins when YARD starts
21
- # ignored_plugins:
22
- # - yard-broken
23
- # - broken2 # yard- prefix not necessary
24
- # autoload_plugins:
25
- # - yard-rspec
26
- #
27
- # == Automatic Loading of Plugins
28
- #
29
- # YARD 0.6.2 will no longer automatically load all plugins by default. This
30
- # option can be reset by setting 'load_plugins' to true in the configuration
31
- # file. In addition, you can specify a set of specific plugins to load on
32
- # load through the 'autoload_plugins' list setting. This setting is
33
- # independent of the 'load_plugins' value and will always be processed.
34
- #
35
- # == Ignored Plugins File
36
- #
37
- # YARD 0.5 and below used a +~/.yard/ignored_plugins+ file to specify
38
- # plugins to be ignored at load time. Ignored plugins in 0.6.2 and above
39
- # should now be specified in the main configuration file, though YARD
40
- # will support the +ignored_plugins+ file until 0.7.x.
41
- #
42
- # == Safe Mode
43
- #
44
- # YARD supports running in safe-mode. By doing this, it will avoid executing
45
- # any user code such as require files or queries. Plugins will still be
46
- # loaded with safe mode on, because plugins are properly namespaced with
47
- # a 'yard-' prefix, must be installed as a gem, and therefore cannot be
48
- # touched by the user. To specify safe mode, use the +safe_mode+ key.
49
- #
50
- # == Plugin Specific Configuration
51
- #
52
- # Additional settings can be defined within the configuration file
53
- # specifically to provide configuration for a plugin. A plugin that utilizes
54
- # the YARD configuration is strongly encouraged to utilize namespacing of
55
- # their configuration content.
56
- #
57
- # !!!yaml
58
- # load_plugins: true # Auto-load plugins when YARD starts
59
- # ignored_plugins:
60
- # - yard-broken
61
- # - broken2 # yard- prefix not necessary
62
- # autoload_plugins:
63
- # - yard-rspec
64
- # # Plugin Specific Configuration
65
- # yard-sample-plugin:
66
- # show-results-inline: true
67
- #
68
- # As the configuration is available system wide, it can be
69
- # accessed within the plugin code.
70
- #
71
- #
72
- # if YARD::Config.options['yard-sample-plugin'] and
73
- # YARD::Config.options['yard-sample-plugin']['show-results-inline']
74
- # # ... perform the action that places the results inline ...
75
- # else
76
- # # ... do the default behavior of not showing the results inline ...
77
- # end
78
- #
79
- # When accessing the configuration, be aware that this file is user managed
80
- # so configuration keys and values may not be present. Make no assumptions and
81
- # instead ensure that you check for the existence of keys before proceeding to
82
- # retrieve values.
83
- #
84
- # @since 0.6.2
85
- # @see options
86
- class Config
87
- class << self
88
- # The system-wide configuration options for YARD
89
- # @return [SymbolHash] a map a key-value pair settings.
90
- # @see DEFAULT_CONFIG_OPTIONS
91
- attr_accessor :options
92
- end
93
-
94
- # The location where YARD stores user-specific settings
95
- CONFIG_DIR = File.expand_path('~/.yard')
96
-
97
- # The main configuration YAML file.
98
- CONFIG_FILE = File.join(CONFIG_DIR, 'config')
99
-
100
- # File listing all ignored plugins
101
- # @deprecated Set `ignored_plugins` in the {CONFIG_FILE} instead.
102
- IGNORED_PLUGINS = File.join(CONFIG_DIR, 'ignored_plugins')
103
-
104
- # Default configuration options
105
- DEFAULT_CONFIG_OPTIONS = {
106
- :load_plugins => false, # Whether to load plugins automatically with YARD
107
- :ignored_plugins => [], # A list of ignored plugins by name
108
- :autoload_plugins => [], # A list of plugins to be automatically loaded
109
- :safe_mode => false # Does not execute or eval any user-level code
110
- }
111
-
112
- # The prefix used for YARD plugins. Name your gem with this prefix
113
- # to allow it to be used as a plugin.
114
- YARD_PLUGIN_PREFIX = /^yard[-_]/
115
-
116
- # Loads settings from {CONFIG_FILE}. This method is called by YARD at
117
- # load time and should not be called by the user.
118
- # @return [void]
119
- def self.load
120
- self.options = SymbolHash.new(false)
121
- options.update(DEFAULT_CONFIG_OPTIONS)
122
- options.update(read_config_file)
123
- load_commandline_safemode
124
- add_ignored_plugins_file
125
- translate_plugin_names
126
- load_plugins
127
- rescue => e
128
- log.error "Invalid configuration file, using default options."
129
- log.backtrace(e)
130
- options.update(DEFAULT_CONFIG_OPTIONS)
131
- end
132
-
133
- # Saves settings to {CONFIG_FILE}.
134
- # @return [void]
135
- def self.save
136
- require 'yaml'
137
- Dir.mkdir(CONFIG_DIR) unless File.directory?(CONFIG_DIR)
138
- File.open(CONFIG_FILE, 'w') {|f| f.write(YAML.dump(options)) }
139
- end
140
-
141
- # Loads gems that match the name 'yard-*' (recommended) or 'yard_*' except
142
- # those listed in +~/.yard/ignored_plugins+. This is called immediately
143
- # after YARD is loaded to allow plugin support.
144
- #
145
- # @return [Boolean] true if all plugins loaded successfully, false otherwise.
146
- def self.load_plugins
147
- load_gem_plugins &&
148
- load_autoload_plugins &&
149
- load_commandline_plugins ? true : false
150
- end
151
-
152
- # Loads an individual plugin by name. It is not necessary to include the
153
- # +yard-+ plugin prefix here.
154
- #
155
- # @param [String] name the name of the plugin (with or without +yard-+ prefix)
156
- # @return [Boolean] whether the plugin was successfully loaded
157
- def self.load_plugin(name)
158
- name = translate_plugin_name(name)
159
- return false if options[:ignored_plugins].include?(name)
160
- return false if name =~ /^yard-doc-/
161
- log.debug "Loading plugin '#{name}'..."
162
- require name
163
- true
164
- rescue LoadError => e
165
- load_plugin_failed(name, e)
166
- end
167
-
168
- # Load gem plugins if :load_plugins is true
169
- def self.load_gem_plugins
170
- return true unless options[:load_plugins]
171
- require 'rubygems'
172
- result = true
173
- YARD::GemIndex.each do |gem|
174
- begin
175
- next true unless gem.name =~ YARD_PLUGIN_PREFIX
176
- load_plugin(gem.name)
177
- rescue Gem::LoadError => e
178
- tmp = load_plugin_failed(gem.name, e)
179
- result = tmp unless tmp
180
- end
181
- end
182
- result
183
- rescue LoadError
184
- log.debug "RubyGems is not present, skipping plugin loading"
185
- false
186
- end
187
-
188
- # Load plugins set in :autoload_plugins
189
- def self.load_autoload_plugins
190
- options[:autoload_plugins].each {|name| load_plugin(name) }
191
- end
192
-
193
- # Load plugins from {arguments}
194
- def self.load_commandline_plugins
195
- with_yardopts do
196
- arguments.each_with_index do |arg, i|
197
- next unless arg == '--plugin'
198
- load_plugin(arguments[i + 1])
199
- end
200
- end
201
- end
202
-
203
- # Check for command-line safe_mode switch in {arguments}
204
- def self.load_commandline_safemode
205
- with_yardopts do
206
- arguments.each_with_index do |arg, _i|
207
- options[:safe_mode] = true if arg == '--safe'
208
- end
209
- end
210
- end
211
-
212
- # Print a warning if the plugin failed to load
213
- # @return [false]
214
- def self.load_plugin_failed(name, exception)
215
- log.error "Error loading plugin '#{name}'"
216
- log.backtrace(exception) if $DEBUG
217
- false
218
- end
219
-
220
- # Legacy support for {IGNORED_PLUGINS}
221
- def self.add_ignored_plugins_file
222
- if File.file?(IGNORED_PLUGINS)
223
- options[:ignored_plugins] += File.read(IGNORED_PLUGINS).split(/\s+/)
224
- end
225
- end
226
-
227
- # Translates plugin names to add yard- prefix.
228
- def self.translate_plugin_names
229
- options[:ignored_plugins].map! {|name| translate_plugin_name(name) }
230
- options[:autoload_plugins].map! {|name| translate_plugin_name(name) }
231
- end
232
-
233
- # Loads the YAML configuration file into memory
234
- # @return [Hash] the contents of the YAML file from disk
235
- # @see CONFIG_FILE
236
- def self.read_config_file
237
- if File.file?(CONFIG_FILE)
238
- require 'yaml'
239
- YAML.load_file(CONFIG_FILE)
240
- else
241
- {}
242
- end
243
- end
244
-
245
- # Sanitizes and normalizes a plugin name to include the 'yard-' prefix.
246
- # @param [String] name the plugin name
247
- # @return [String] the sanitized and normalized plugin name.
248
- def self.translate_plugin_name(name)
249
- name = name.delete('/') # Security sanitization
250
- name = "yard-" + name unless name =~ YARD_PLUGIN_PREFIX
251
- name
252
- end
253
-
254
- # Temporarily loads .yardopts file into @yardopts
255
- def self.with_yardopts
256
- yfile = CLI::Yardoc::DEFAULT_YARDOPTS_FILE
257
- @yardopts = File.file?(yfile) ? File.read_binary(yfile).shell_split : []
258
- result = yield
259
- @yardopts = nil
260
- result
261
- end
262
-
263
- # @return [Array<String>] arguments from commandline and yardopts file
264
- def self.arguments
265
- ARGV + @yardopts
266
- end
267
- end
268
-
269
- Config.options = Config::DEFAULT_CONFIG_OPTIONS
270
- end
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ # This class maintains all system-wide configuration for YARD and handles
4
+ # the loading of plugins. To access options call {options}, and to load
5
+ # a plugin use {load_plugin}. All other public methods are used by YARD
6
+ # during load time.
7
+ #
8
+ # == User Configuration Files
9
+ #
10
+ # Persistent user configuration files can be stored in the file
11
+ # +~/.yard/config+, which is read when YARD first loads. The file should
12
+ # be formatted as YAML, and should contain a map of keys and values.
13
+ #
14
+ # Although you can specify any key-value mapping in the configuration file,
15
+ # YARD defines special keys specified in {DEFAULT_CONFIG_OPTIONS}.
16
+ #
17
+ # An example of a configuration file is listed below:
18
+ #
19
+ # !!!yaml
20
+ # load_plugins: true # Auto-load plugins when YARD starts
21
+ # ignored_plugins:
22
+ # - yard-broken
23
+ # - broken2 # yard- prefix not necessary
24
+ # autoload_plugins:
25
+ # - yard-rspec
26
+ #
27
+ # == Automatic Loading of Plugins
28
+ #
29
+ # YARD 0.6.2 will no longer automatically load all plugins by default. This
30
+ # option can be reset by setting 'load_plugins' to true in the configuration
31
+ # file. In addition, you can specify a set of specific plugins to load on
32
+ # load through the 'autoload_plugins' list setting. This setting is
33
+ # independent of the 'load_plugins' value and will always be processed.
34
+ #
35
+ # == Ignored Plugins File
36
+ #
37
+ # YARD 0.5 and below used a +~/.yard/ignored_plugins+ file to specify
38
+ # plugins to be ignored at load time. Ignored plugins in 0.6.2 and above
39
+ # should now be specified in the main configuration file, though YARD
40
+ # will support the +ignored_plugins+ file until 0.7.x.
41
+ #
42
+ # == Safe Mode
43
+ #
44
+ # YARD supports running in safe-mode. By doing this, it will avoid executing
45
+ # any user code such as require files or queries. Plugins will still be
46
+ # loaded with safe mode on, because plugins are properly namespaced with
47
+ # a 'yard-' prefix, must be installed as a gem, and therefore cannot be
48
+ # touched by the user. To specify safe mode, use the +safe_mode+ key.
49
+ #
50
+ # == Plugin Specific Configuration
51
+ #
52
+ # Additional settings can be defined within the configuration file
53
+ # specifically to provide configuration for a plugin. A plugin that utilizes
54
+ # the YARD configuration is strongly encouraged to utilize namespacing of
55
+ # their configuration content.
56
+ #
57
+ # !!!yaml
58
+ # load_plugins: true # Auto-load plugins when YARD starts
59
+ # ignored_plugins:
60
+ # - yard-broken
61
+ # - broken2 # yard- prefix not necessary
62
+ # autoload_plugins:
63
+ # - yard-rspec
64
+ # # Plugin Specific Configuration
65
+ # yard-sample-plugin:
66
+ # show-results-inline: true
67
+ #
68
+ # As the configuration is available system wide, it can be
69
+ # accessed within the plugin code.
70
+ #
71
+ #
72
+ # if YARD::Config.options['yard-sample-plugin'] and
73
+ # YARD::Config.options['yard-sample-plugin']['show-results-inline']
74
+ # # ... perform the action that places the results inline ...
75
+ # else
76
+ # # ... do the default behavior of not showing the results inline ...
77
+ # end
78
+ #
79
+ # When accessing the configuration, be aware that this file is user managed
80
+ # so configuration keys and values may not be present. Make no assumptions and
81
+ # instead ensure that you check for the existence of keys before proceeding to
82
+ # retrieve values.
83
+ #
84
+ # @since 0.6.2
85
+ # @see options
86
+ class Config
87
+ class << self
88
+ # The system-wide configuration options for YARD
89
+ # @return [SymbolHash] a map a key-value pair settings.
90
+ # @see DEFAULT_CONFIG_OPTIONS
91
+ attr_accessor :options
92
+ end
93
+
94
+ # The location where YARD stores user-specific settings
95
+ CONFIG_DIR = File.expand_path('~/.yard')
96
+
97
+ # The main configuration YAML file.
98
+ CONFIG_FILE = File.join(CONFIG_DIR, 'config')
99
+
100
+ # File listing all ignored plugins
101
+ # @deprecated Set `ignored_plugins` in the {CONFIG_FILE} instead.
102
+ IGNORED_PLUGINS = File.join(CONFIG_DIR, 'ignored_plugins')
103
+
104
+ # Default configuration options
105
+ DEFAULT_CONFIG_OPTIONS = {
106
+ :load_plugins => false, # Whether to load plugins automatically with YARD
107
+ :ignored_plugins => [], # A list of ignored plugins by name
108
+ :autoload_plugins => [], # A list of plugins to be automatically loaded
109
+ :safe_mode => false # Does not execute or eval any user-level code
110
+ }
111
+
112
+ # The prefix used for YARD plugins. Name your gem with this prefix
113
+ # to allow it to be used as a plugin.
114
+ YARD_PLUGIN_PREFIX = /^yard[-_]/
115
+
116
+ # Loads settings from {CONFIG_FILE}. This method is called by YARD at
117
+ # load time and should not be called by the user.
118
+ # @return [void]
119
+ def self.load
120
+ self.options = SymbolHash.new(false)
121
+ options.update(DEFAULT_CONFIG_OPTIONS)
122
+ options.update(read_config_file)
123
+ load_commandline_safemode
124
+ add_ignored_plugins_file
125
+ translate_plugin_names
126
+ load_plugins
127
+ rescue => e
128
+ log.error "Invalid configuration file, using default options."
129
+ log.backtrace(e)
130
+ options.update(DEFAULT_CONFIG_OPTIONS)
131
+ end
132
+
133
+ # Saves settings to {CONFIG_FILE}.
134
+ # @return [void]
135
+ def self.save
136
+ require 'yaml'
137
+ Dir.mkdir(CONFIG_DIR) unless File.directory?(CONFIG_DIR)
138
+ File.open(CONFIG_FILE, 'w') {|f| f.write(YAML.dump(options)) }
139
+ end
140
+
141
+ # Loads gems that match the name 'yard-*' (recommended) or 'yard_*' except
142
+ # those listed in +~/.yard/ignored_plugins+. This is called immediately
143
+ # after YARD is loaded to allow plugin support.
144
+ #
145
+ # @return [Boolean] true if all plugins loaded successfully, false otherwise.
146
+ def self.load_plugins
147
+ load_gem_plugins &&
148
+ load_autoload_plugins &&
149
+ load_commandline_plugins ? true : false
150
+ end
151
+
152
+ # Loads an individual plugin by name. It is not necessary to include the
153
+ # +yard-+ plugin prefix here.
154
+ #
155
+ # @param [String] name the name of the plugin (with or without +yard-+ prefix)
156
+ # @return [Boolean] whether the plugin was successfully loaded
157
+ def self.load_plugin(name)
158
+ name = translate_plugin_name(name)
159
+ return false if options[:ignored_plugins].include?(name)
160
+ return false if name =~ /^yard-doc-/
161
+ log.debug "Loading plugin '#{name}'..."
162
+ require name
163
+ true
164
+ rescue LoadError => e
165
+ load_plugin_failed(name, e)
166
+ end
167
+
168
+ # Load gem plugins if :load_plugins is true
169
+ def self.load_gem_plugins
170
+ return true unless options[:load_plugins]
171
+ require 'rubygems'
172
+ result = true
173
+ YARD::GemIndex.each do |gem|
174
+ begin
175
+ next true unless gem.name =~ YARD_PLUGIN_PREFIX
176
+ load_plugin(gem.name)
177
+ rescue Gem::LoadError => e
178
+ tmp = load_plugin_failed(gem.name, e)
179
+ result = tmp unless tmp
180
+ end
181
+ end
182
+ result
183
+ rescue LoadError
184
+ log.debug "RubyGems is not present, skipping plugin loading"
185
+ false
186
+ end
187
+
188
+ # Load plugins set in :autoload_plugins
189
+ def self.load_autoload_plugins
190
+ options[:autoload_plugins].each {|name| load_plugin(name) }
191
+ end
192
+
193
+ # Load plugins from {arguments}
194
+ def self.load_commandline_plugins
195
+ with_yardopts do
196
+ arguments.each_with_index do |arg, i|
197
+ next unless arg == '--plugin'
198
+ load_plugin(arguments[i + 1])
199
+ end
200
+ end
201
+ end
202
+
203
+ # Check for command-line safe_mode switch in {arguments}
204
+ def self.load_commandline_safemode
205
+ with_yardopts do
206
+ arguments.each_with_index do |arg, _i|
207
+ options[:safe_mode] = true if arg == '--safe'
208
+ end
209
+ end
210
+ end
211
+
212
+ # Print a warning if the plugin failed to load
213
+ # @return [false]
214
+ def self.load_plugin_failed(name, exception)
215
+ log.error "Error loading plugin '#{name}'"
216
+ log.backtrace(exception) if $DEBUG
217
+ false
218
+ end
219
+
220
+ # Legacy support for {IGNORED_PLUGINS}
221
+ def self.add_ignored_plugins_file
222
+ if File.file?(IGNORED_PLUGINS)
223
+ options[:ignored_plugins] += File.read(IGNORED_PLUGINS).split(/\s+/)
224
+ end
225
+ end
226
+
227
+ # Translates plugin names to add yard- prefix.
228
+ def self.translate_plugin_names
229
+ options[:ignored_plugins].map! {|name| translate_plugin_name(name) }
230
+ options[:autoload_plugins].map! {|name| translate_plugin_name(name) }
231
+ end
232
+
233
+ # Loads the YAML configuration file into memory
234
+ # @return [Hash] the contents of the YAML file from disk
235
+ # @see CONFIG_FILE
236
+ def self.read_config_file
237
+ if File.file?(CONFIG_FILE)
238
+ require 'yaml'
239
+ YAML.load_file(CONFIG_FILE)
240
+ else
241
+ {}
242
+ end
243
+ end
244
+
245
+ # Sanitizes and normalizes a plugin name to include the 'yard-' prefix.
246
+ # @param [String] name the plugin name
247
+ # @return [String] the sanitized and normalized plugin name.
248
+ def self.translate_plugin_name(name)
249
+ name = name.delete('/') # Security sanitization
250
+ name = "yard-" + name unless name =~ YARD_PLUGIN_PREFIX
251
+ name
252
+ end
253
+
254
+ # Temporarily loads .yardopts file into @yardopts
255
+ def self.with_yardopts
256
+ yfile = CLI::Yardoc::DEFAULT_YARDOPTS_FILE
257
+ @yardopts = File.file?(yfile) ? File.read_binary(yfile).shell_split : []
258
+ result = yield
259
+ @yardopts = nil
260
+ result
261
+ end
262
+
263
+ # @return [Array<String>] arguments from commandline and yardopts file
264
+ def self.arguments
265
+ ARGV + @yardopts
266
+ end
267
+ end
268
+
269
+ Config.options = Config::DEFAULT_CONFIG_OPTIONS
270
+ end