yard 0.9.18 → 0.9.19

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of yard might be problematic. Click here for more details.

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