yard 0.9.5 → 0.9.6

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 (575) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +0 -0
  3. data/CHANGELOG.md +20 -0
  4. data/LEGAL +0 -0
  5. data/LICENSE +0 -0
  6. data/README.md +70 -35
  7. data/Rakefile +10 -39
  8. data/benchmarks/builtins_vs_eval.rb +9 -8
  9. data/benchmarks/concat_vs_join.rb +1 -0
  10. data/benchmarks/erb_vs_erubis.rb +3 -2
  11. data/benchmarks/format_args.rb +1 -0
  12. data/benchmarks/generation.rb +2 -1
  13. data/benchmarks/marshal_vs_dbm.rb +2 -1
  14. data/benchmarks/parsing.rb +1 -1
  15. data/benchmarks/pathname_vs_string.rb +1 -0
  16. data/benchmarks/rdoc_vs_yardoc.rb +2 -1
  17. data/benchmarks/registry_store_types.rb +1 -0
  18. data/benchmarks/ri_vs_yri.rb +1 -0
  19. data/benchmarks/ripper_parser.rb +2 -1
  20. data/benchmarks/splat_vs_flatten.rb +4 -3
  21. data/benchmarks/template_erb.rb +2 -1
  22. data/benchmarks/template_format.rb +1 -0
  23. data/benchmarks/template_profile.rb +4 -3
  24. data/benchmarks/yri_cache.rb +2 -1
  25. data/bin/yard +2 -1
  26. data/bin/yardoc +2 -1
  27. data/bin/yri +2 -1
  28. data/docs/CodeObjects.md +0 -0
  29. data/docs/GettingStarted.md +0 -0
  30. data/docs/Handlers.md +0 -0
  31. data/docs/Overview.md +0 -0
  32. data/docs/Parser.md +0 -0
  33. data/docs/Tags.md +0 -0
  34. data/docs/TagsArch.md +0 -0
  35. data/docs/Templates.md +0 -0
  36. data/docs/WhatsNew.md +0 -0
  37. data/docs/images/code-objects-class-diagram.png +0 -0
  38. data/docs/images/tags-class-diagram.png +0 -0
  39. data/docs/templates/default/fulldoc/html/full_list_tag.erb +0 -0
  40. data/docs/templates/default/fulldoc/html/setup.rb +1 -1
  41. data/docs/templates/default/layout/html/setup.rb +1 -0
  42. data/docs/templates/default/layout/html/tag_list.erb +0 -0
  43. data/docs/templates/default/yard_tags/html/list.erb +0 -0
  44. data/docs/templates/default/yard_tags/html/setup.rb +18 -19
  45. data/docs/templates/plugin.rb +18 -13
  46. data/lib/rubygems_plugin.rb +1 -0
  47. data/lib/yard.rb +5 -6
  48. data/lib/yard/autoload.rb +4 -0
  49. data/lib/yard/cli/command.rb +3 -2
  50. data/lib/yard/cli/command_parser.rb +4 -3
  51. data/lib/yard/cli/config.rb +5 -4
  52. data/lib/yard/cli/diff.rb +39 -39
  53. data/lib/yard/cli/display.rb +2 -1
  54. data/lib/yard/cli/gems.rb +6 -5
  55. data/lib/yard/cli/graph.rb +4 -5
  56. data/lib/yard/cli/help.rb +4 -2
  57. data/lib/yard/cli/i18n.rb +2 -1
  58. data/lib/yard/cli/list.rb +2 -1
  59. data/lib/yard/cli/markup_types.rb +4 -5
  60. data/lib/yard/cli/server.rb +27 -24
  61. data/lib/yard/cli/stats.rb +20 -16
  62. data/lib/yard/cli/yardoc.rb +22 -19
  63. data/lib/yard/cli/yardopts_command.rb +3 -2
  64. data/lib/yard/cli/yri.rb +26 -25
  65. data/lib/yard/code_objects/base.rb +41 -37
  66. data/lib/yard/code_objects/class_object.rb +3 -2
  67. data/lib/yard/code_objects/class_variable_object.rb +2 -1
  68. data/lib/yard/code_objects/constant_object.rb +2 -1
  69. data/lib/yard/code_objects/extended_method_object.rb +2 -1
  70. data/lib/yard/code_objects/extra_file_object.rb +1 -0
  71. data/lib/yard/code_objects/macro_object.rb +10 -10
  72. data/lib/yard/code_objects/method_object.rb +15 -13
  73. data/lib/yard/code_objects/module_object.rb +1 -0
  74. data/lib/yard/code_objects/namespace_mapper.rb +1 -0
  75. data/lib/yard/code_objects/namespace_object.rb +2 -5
  76. data/lib/yard/code_objects/proxy.rb +35 -53
  77. data/lib/yard/code_objects/root_object.rb +3 -1
  78. data/lib/yard/config.rb +8 -9
  79. data/lib/yard/core_ext/array.rb +1 -0
  80. data/lib/yard/core_ext/file.rb +4 -3
  81. data/lib/yard/core_ext/hash.rb +3 -2
  82. data/lib/yard/core_ext/insertion.rb +7 -4
  83. data/lib/yard/core_ext/module.rb +2 -1
  84. data/lib/yard/core_ext/string.rb +5 -4
  85. data/lib/yard/core_ext/symbol_hash.rb +8 -6
  86. data/lib/yard/docstring.rb +26 -15
  87. data/lib/yard/docstring_parser.rb +61 -61
  88. data/lib/yard/gem_index.rb +17 -0
  89. data/lib/yard/globals.rb +6 -2
  90. data/lib/yard/handlers/base.rb +22 -23
  91. data/lib/yard/handlers/c/alias_handler.rb +3 -2
  92. data/lib/yard/handlers/c/attribute_handler.rb +2 -2
  93. data/lib/yard/handlers/c/base.rb +13 -13
  94. data/lib/yard/handlers/c/class_handler.rb +1 -0
  95. data/lib/yard/handlers/c/constant_handler.rb +3 -2
  96. data/lib/yard/handlers/c/handler_methods.rb +24 -25
  97. data/lib/yard/handlers/c/init_handler.rb +4 -2
  98. data/lib/yard/handlers/c/method_handler.rb +7 -6
  99. data/lib/yard/handlers/c/mixin_handler.rb +3 -1
  100. data/lib/yard/handlers/c/module_handler.rb +1 -0
  101. data/lib/yard/handlers/c/override_comment_handler.rb +2 -1
  102. data/lib/yard/handlers/c/path_handler.rb +1 -0
  103. data/lib/yard/handlers/c/struct_handler.rb +1 -0
  104. data/lib/yard/handlers/c/symbol_handler.rb +2 -1
  105. data/lib/yard/handlers/processor.rb +14 -15
  106. data/lib/yard/handlers/ruby/alias_handler.rb +4 -2
  107. data/lib/yard/handlers/ruby/attribute_handler.rb +11 -6
  108. data/lib/yard/handlers/ruby/base.rb +5 -4
  109. data/lib/yard/handlers/ruby/class_condition_handler.rb +4 -3
  110. data/lib/yard/handlers/ruby/class_handler.rb +7 -9
  111. data/lib/yard/handlers/ruby/class_variable_handler.rb +2 -1
  112. data/lib/yard/handlers/ruby/comment_handler.rb +1 -0
  113. data/lib/yard/handlers/ruby/constant_handler.rb +9 -5
  114. data/lib/yard/handlers/ruby/decorator_handler_methods.rb +15 -28
  115. data/lib/yard/handlers/ruby/dsl_handler.rb +1 -0
  116. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +7 -6
  117. data/lib/yard/handlers/ruby/exception_handler.rb +1 -0
  118. data/lib/yard/handlers/ruby/extend_handler.rb +1 -0
  119. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +6 -4
  120. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +12 -7
  121. data/lib/yard/handlers/ruby/legacy/base.rb +21 -26
  122. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +7 -7
  123. data/lib/yard/handlers/ruby/legacy/class_handler.rb +7 -5
  124. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +2 -1
  125. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +1 -0
  126. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +2 -1
  127. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +1 -0
  128. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +2 -1
  129. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +2 -1
  130. data/lib/yard/handlers/ruby/legacy/method_handler.rb +11 -6
  131. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +5 -5
  132. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +2 -1
  133. data/lib/yard/handlers/ruby/legacy/module_handler.rb +2 -1
  134. data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +2 -1
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +2 -1
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +3 -2
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +1 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +2 -1
  139. data/lib/yard/handlers/ruby/method_handler.rb +9 -11
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +2 -1
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +2 -1
  142. data/lib/yard/handlers/ruby/module_handler.rb +2 -1
  143. data/lib/yard/handlers/ruby/private_class_method_handler.rb +1 -0
  144. data/lib/yard/handlers/ruby/private_constant_handler.rb +2 -2
  145. data/lib/yard/handlers/ruby/public_class_method_handler.rb +1 -0
  146. data/lib/yard/handlers/ruby/struct_handler_methods.rb +5 -4
  147. data/lib/yard/handlers/ruby/visibility_handler.rb +1 -0
  148. data/lib/yard/handlers/ruby/yield_handler.rb +1 -0
  149. data/lib/yard/i18n/locale.rb +1 -0
  150. data/lib/yard/i18n/message.rb +5 -4
  151. data/lib/yard/i18n/messages.rb +2 -1
  152. data/lib/yard/i18n/po_parser.rb +5 -4
  153. data/lib/yard/i18n/pot_generator.rb +8 -8
  154. data/lib/yard/i18n/text.rb +9 -9
  155. data/lib/yard/logging.rb +9 -6
  156. data/lib/yard/options.rb +8 -7
  157. data/lib/yard/parser/base.rb +3 -2
  158. data/lib/yard/parser/c/c_parser.rb +22 -21
  159. data/lib/yard/parser/c/comment_parser.rb +9 -6
  160. data/lib/yard/parser/c/statement.rb +1 -0
  161. data/lib/yard/parser/ruby/ast_node.rb +20 -18
  162. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +99 -122
  163. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +3 -2
  164. data/lib/yard/parser/ruby/legacy/statement.rb +4 -3
  165. data/lib/yard/parser/ruby/legacy/statement_list.rb +52 -42
  166. data/lib/yard/parser/ruby/legacy/token_list.rb +16 -13
  167. data/lib/yard/parser/ruby/ruby_parser.rb +87 -63
  168. data/lib/yard/parser/ruby/token_resolver.rb +156 -0
  169. data/lib/yard/parser/source_parser.rb +28 -20
  170. data/lib/yard/rake/yardoc_task.rb +3 -3
  171. data/lib/yard/registry.rb +14 -16
  172. data/lib/yard/registry_resolver.rb +36 -20
  173. data/lib/yard/registry_store.rb +19 -15
  174. data/lib/yard/rubygems/backports.rb +2 -0
  175. data/lib/yard/rubygems/backports/LICENSE.txt +0 -0
  176. data/lib/yard/rubygems/backports/MIT.txt +0 -0
  177. data/lib/yard/rubygems/backports/gem.rb +1 -0
  178. data/lib/yard/rubygems/backports/source_index.rb +25 -30
  179. data/lib/yard/rubygems/doc_manager.rb +10 -8
  180. data/lib/yard/rubygems/hook.rb +11 -18
  181. data/lib/yard/rubygems/specification.rb +1 -0
  182. data/lib/yard/serializers/base.rb +5 -2
  183. data/lib/yard/serializers/file_system_serializer.rb +7 -6
  184. data/lib/yard/serializers/process_serializer.rb +2 -2
  185. data/lib/yard/serializers/stdout_serializer.rb +8 -6
  186. data/lib/yard/serializers/yardoc_serializer.rb +31 -26
  187. data/lib/yard/server.rb +2 -1
  188. data/lib/yard/server/adapter.rb +1 -1
  189. data/lib/yard/server/commands/base.rb +15 -2
  190. data/lib/yard/server/commands/display_file_command.rb +2 -2
  191. data/lib/yard/server/commands/display_object_command.rb +6 -3
  192. data/lib/yard/server/commands/frames_command.rb +1 -0
  193. data/lib/yard/server/commands/library_command.rb +50 -14
  194. data/lib/yard/server/commands/library_index_command.rb +5 -4
  195. data/lib/yard/server/commands/list_command.rb +1 -0
  196. data/lib/yard/server/commands/root_request_command.rb +1 -0
  197. data/lib/yard/server/commands/search_command.rb +17 -16
  198. data/lib/yard/server/commands/static_file_command.rb +2 -1
  199. data/lib/yard/server/commands/static_file_helpers.rb +23 -14
  200. data/lib/yard/server/doc_server_helper.rb +15 -1
  201. data/lib/yard/server/doc_server_serializer.rb +3 -5
  202. data/lib/yard/server/library_version.rb +44 -22
  203. data/lib/yard/server/rack_adapter.rb +2 -1
  204. data/lib/yard/server/router.rb +15 -14
  205. data/lib/yard/server/static_caching.rb +1 -0
  206. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +0 -0
  207. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  208. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +0 -0
  209. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +0 -0
  210. data/lib/yard/server/templates/default/layout/html/script_setup.erb +0 -0
  211. data/lib/yard/server/templates/default/layout/html/setup.rb +2 -1
  212. data/lib/yard/server/templates/default/method_details/html/permalink.erb +0 -0
  213. data/lib/yard/server/templates/default/method_details/html/setup.rb +1 -0
  214. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +2 -2
  215. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +0 -0
  216. data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +1 -1
  217. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +2 -1
  218. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +0 -0
  219. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +4 -4
  220. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +2 -1
  221. data/lib/yard/server/templates/doc_server/search/html/search.erb +0 -0
  222. data/lib/yard/server/templates/doc_server/search/html/setup.rb +2 -1
  223. data/lib/yard/server/webrick_adapter.rb +4 -2
  224. data/lib/yard/tags/default_factory.rb +19 -13
  225. data/lib/yard/tags/default_tag.rb +2 -1
  226. data/lib/yard/tags/directives.rb +17 -19
  227. data/lib/yard/tags/library.rb +9 -6
  228. data/lib/yard/tags/option_tag.rb +1 -0
  229. data/lib/yard/tags/overload_tag.rb +6 -4
  230. data/lib/yard/tags/ref_tag.rb +1 -0
  231. data/lib/yard/tags/ref_tag_list.rb +2 -1
  232. data/lib/yard/tags/tag.rb +16 -2
  233. data/lib/yard/tags/tag_format_error.rb +3 -2
  234. data/lib/yard/tags/types_explainer.rb +160 -0
  235. data/lib/yard/templates/engine.rb +3 -2
  236. data/lib/yard/templates/erb_cache.rb +3 -2
  237. data/lib/yard/templates/helpers/base_helper.rb +9 -6
  238. data/lib/yard/templates/helpers/filter_helper.rb +1 -0
  239. data/lib/yard/templates/helpers/html_helper.rb +65 -37
  240. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +25 -7
  241. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +2 -1
  242. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +10 -7
  243. data/lib/yard/templates/helpers/markup_helper.rb +12 -13
  244. data/lib/yard/templates/helpers/method_helper.rb +8 -7
  245. data/lib/yard/templates/helpers/module_helper.rb +1 -0
  246. data/lib/yard/templates/helpers/text_helper.rb +16 -11
  247. data/lib/yard/templates/helpers/uml_helper.rb +2 -1
  248. data/lib/yard/templates/section.rb +3 -4
  249. data/lib/yard/templates/template.rb +18 -11
  250. data/lib/yard/templates/template_options.rb +1 -0
  251. data/lib/yard/verifier.rb +2 -0
  252. data/lib/yard/version.rb +2 -1
  253. data/spec/cli/command_parser_spec.rb +7 -7
  254. data/spec/cli/command_spec.rb +2 -2
  255. data/spec/cli/config_spec.rb +3 -4
  256. data/spec/cli/diff_spec.rb +7 -9
  257. data/spec/cli/display_spec.rb +2 -2
  258. data/spec/cli/gems_spec.rb +11 -11
  259. data/spec/cli/graph_spec.rb +4 -3
  260. data/spec/cli/help_spec.rb +3 -3
  261. data/spec/cli/i18n_spec.rb +3 -3
  262. data/spec/cli/list_spec.rb +2 -2
  263. data/spec/cli/markup_types_spec.rb +2 -2
  264. data/spec/cli/server_spec.rb +21 -18
  265. data/spec/cli/stats_spec.rb +23 -22
  266. data/spec/cli/yardoc_spec.rb +49 -47
  267. data/spec/cli/yri_spec.rb +6 -6
  268. data/spec/code_objects/base_spec.rb +6 -4
  269. data/spec/code_objects/class_object_spec.rb +10 -9
  270. data/spec/code_objects/code_object_list_spec.rb +3 -2
  271. data/spec/code_objects/constants_spec.rb +17 -6
  272. data/spec/code_objects/extra_file_object_spec.rb +6 -5
  273. data/spec/code_objects/macro_object_spec.rb +5 -3
  274. data/spec/code_objects/method_object_spec.rb +6 -5
  275. data/spec/code_objects/module_object_spec.rb +3 -2
  276. data/spec/code_objects/namespace_object_spec.rb +10 -9
  277. data/spec/code_objects/proxy_spec.rb +9 -8
  278. data/spec/code_objects/spec_helper.rb +2 -2
  279. data/spec/config_spec.rb +9 -14
  280. data/spec/core_ext/array_spec.rb +2 -3
  281. data/spec/core_ext/file_spec.rb +3 -3
  282. data/spec/core_ext/hash_spec.rb +5 -5
  283. data/spec/core_ext/insertion_spec.rb +2 -2
  284. data/spec/core_ext/module_spec.rb +3 -3
  285. data/spec/core_ext/string_spec.rb +5 -5
  286. data/spec/core_ext/symbol_hash_spec.rb +8 -8
  287. data/spec/docstring_parser_spec.rb +6 -7
  288. data/spec/docstring_spec.rb +30 -3
  289. data/spec/examples.txt +1848 -0
  290. data/spec/handlers/alias_handler_spec.rb +2 -1
  291. data/spec/handlers/attribute_handler_spec.rb +7 -5
  292. data/spec/handlers/base_spec.rb +9 -8
  293. data/spec/handlers/c/alias_handler_spec.rb +2 -1
  294. data/spec/handlers/c/attribute_handler_spec.rb +2 -1
  295. data/spec/handlers/c/class_handler_spec.rb +2 -1
  296. data/spec/handlers/c/constant_handler_spec.rb +5 -4
  297. data/spec/handlers/c/init_handler_spec.rb +2 -1
  298. data/spec/handlers/c/method_handler_spec.rb +2 -1
  299. data/spec/handlers/c/mixin_handler_spec.rb +2 -1
  300. data/spec/handlers/c/module_handler_spec.rb +2 -1
  301. data/spec/handlers/c/override_comment_handler_spec.rb +2 -1
  302. data/spec/handlers/c/path_handler_spec.rb +2 -1
  303. data/spec/handlers/c/spec_helper.rb +1 -1
  304. data/spec/handlers/c/struct_handler_spec.rb +3 -2
  305. data/spec/handlers/class_condition_handler_spec.rb +3 -2
  306. data/spec/handlers/class_handler_spec.rb +3 -2
  307. data/spec/handlers/class_method_handler_shared_examples.rb +9 -8
  308. data/spec/handlers/class_variable_handler_spec.rb +3 -2
  309. data/spec/handlers/constant_handler_spec.rb +28 -3
  310. data/spec/handlers/decorator_handler_methods_spec.rb +47 -59
  311. data/spec/handlers/dsl_handler_spec.rb +3 -2
  312. data/spec/handlers/examples/alias_handler_001.rb.txt +0 -0
  313. data/spec/handlers/examples/attribute_handler_001.rb.txt +0 -0
  314. data/spec/handlers/examples/class_condition_handler_001.rb.txt +0 -0
  315. data/spec/handlers/examples/class_handler_001.rb.txt +0 -0
  316. data/spec/handlers/examples/class_variable_handler_001.rb.txt +0 -0
  317. data/spec/handlers/examples/constant_handler_001.rb.txt +0 -0
  318. data/spec/handlers/examples/dsl_handler_001.rb.txt +0 -0
  319. data/spec/handlers/examples/exception_handler_001.rb.txt +0 -0
  320. data/spec/handlers/examples/extend_handler_001.rb.txt +0 -0
  321. data/spec/handlers/examples/method_condition_handler_001.rb.txt +0 -0
  322. data/spec/handlers/examples/method_handler_001.rb.txt +2 -0
  323. data/spec/handlers/examples/mixin_handler_001.rb.txt +0 -0
  324. data/spec/handlers/examples/module_handler_001.rb.txt +0 -0
  325. data/spec/handlers/examples/private_constant_handler_001.rb.txt +0 -0
  326. data/spec/handlers/examples/process_handler_001.rb.txt +0 -0
  327. data/spec/handlers/examples/visibility_handler_001.rb.txt +0 -0
  328. data/spec/handlers/examples/yield_handler_001.rb.txt +0 -0
  329. data/spec/handlers/exception_handler_spec.rb +3 -2
  330. data/spec/handlers/extend_handler_spec.rb +2 -1
  331. data/spec/handlers/legacy_base_spec.rb +5 -5
  332. data/spec/handlers/method_condition_handler_spec.rb +3 -2
  333. data/spec/handlers/method_handler_spec.rb +7 -1
  334. data/spec/handlers/mixin_handler_spec.rb +3 -2
  335. data/spec/handlers/module_function_handler_spec.rb +2 -1
  336. data/spec/handlers/module_handler_spec.rb +3 -2
  337. data/spec/handlers/private_class_method_handler_spec.rb +2 -1
  338. data/spec/handlers/private_constant_handler_spec.rb +2 -1
  339. data/spec/handlers/processor_spec.rb +2 -1
  340. data/spec/handlers/public_class_method_handler_spec.rb +2 -1
  341. data/spec/handlers/ruby/base_spec.rb +6 -5
  342. data/spec/handlers/ruby/legacy/base_spec.rb +4 -4
  343. data/spec/handlers/spec_helper.rb +3 -3
  344. data/spec/handlers/visibility_handler_spec.rb +3 -2
  345. data/spec/handlers/yield_handler_spec.rb +3 -2
  346. data/spec/i18n/locale_spec.rb +3 -3
  347. data/spec/i18n/message_spec.rb +2 -2
  348. data/spec/i18n/messages_spec.rb +3 -3
  349. data/spec/i18n/pot_generator_spec.rb +34 -34
  350. data/spec/i18n/text_spec.rb +16 -12
  351. data/spec/logging_spec.rb +2 -2
  352. data/spec/options_spec.rb +9 -9
  353. data/spec/parser/base_spec.rb +2 -2
  354. data/spec/parser/c_parser_spec.rb +5 -4
  355. data/spec/parser/examples/array.c.txt +0 -0
  356. data/spec/parser/examples/example1.rb.txt +0 -0
  357. data/spec/parser/examples/extrafile.c.txt +0 -0
  358. data/spec/parser/examples/multifile.c.txt +0 -0
  359. data/spec/parser/examples/override.c.txt +0 -0
  360. data/spec/parser/examples/parse_in_order_001.rb.txt +0 -0
  361. data/spec/parser/examples/parse_in_order_002.rb.txt +0 -0
  362. data/spec/parser/examples/tag_handler_001.rb.txt +0 -0
  363. data/spec/parser/ruby/ast_node_spec.rb +7 -7
  364. data/spec/parser/ruby/legacy/statement_list_spec.rb +7 -7
  365. data/spec/parser/ruby/legacy/token_list_spec.rb +4 -4
  366. data/spec/parser/ruby/ruby_parser_spec.rb +42 -20
  367. data/spec/parser/ruby/token_resolver_spec.rb +165 -0
  368. data/spec/parser/source_parser_spec.rb +18 -18
  369. data/spec/parser/tag_parsing_spec.rb +2 -2
  370. data/spec/rake/yardoc_task_spec.rb +4 -4
  371. data/spec/registry_spec.rb +62 -56
  372. data/spec/registry_store_spec.rb +7 -7
  373. data/spec/rubygems/doc_manager_spec.rb +2 -2
  374. data/spec/serializers/data/serialized_yardoc/checksums +0 -0
  375. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  376. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  377. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  378. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  379. data/spec/serializers/data/serialized_yardoc/proxy_types +0 -0
  380. data/spec/serializers/file_system_serializer_spec.rb +8 -7
  381. data/spec/serializers/spec_helper.rb +2 -2
  382. data/spec/serializers/yardoc_serializer_spec.rb +5 -4
  383. data/spec/server/adapter_spec.rb +3 -2
  384. data/spec/server/commands/base_spec.rb +15 -11
  385. data/spec/server/commands/library_command_spec.rb +2 -2
  386. data/spec/server/doc_server_helper_spec.rb +4 -3
  387. data/spec/server/doc_server_serializer_spec.rb +3 -2
  388. data/spec/server/rack_adapter_spec.rb +3 -2
  389. data/spec/server/router_spec.rb +3 -2
  390. data/spec/server/spec_helper.rb +2 -2
  391. data/spec/server/static_caching_spec.rb +4 -3
  392. data/spec/server/webrick_servlet_spec.rb +5 -4
  393. data/spec/server_spec.rb +3 -3
  394. data/spec/spec_helper.rb +94 -21
  395. data/spec/tags/default_factory_spec.rb +10 -4
  396. data/spec/tags/default_tag_spec.rb +3 -3
  397. data/spec/tags/directives_spec.rb +12 -12
  398. data/spec/tags/library_spec.rb +16 -2
  399. data/spec/tags/overload_tag_spec.rb +4 -4
  400. data/spec/tags/ref_tag_list_spec.rb +3 -3
  401. data/spec/tags/types_explainer_spec.rb +200 -0
  402. data/spec/templates/class_spec.rb +2 -1
  403. data/spec/templates/constant_spec.rb +3 -2
  404. data/spec/templates/engine_spec.rb +4 -3
  405. data/spec/templates/examples/class001.html +0 -0
  406. data/spec/templates/examples/class001.txt +0 -0
  407. data/spec/templates/examples/class002.html +0 -0
  408. data/spec/templates/examples/constant001.txt +0 -0
  409. data/spec/templates/examples/constant002.txt +0 -0
  410. data/spec/templates/examples/constant003.txt +0 -0
  411. data/spec/templates/examples/method001.html +0 -0
  412. data/spec/templates/examples/method001.txt +0 -0
  413. data/spec/templates/examples/method002.html +0 -0
  414. data/spec/templates/examples/method002.txt +0 -0
  415. data/spec/templates/examples/method003.html +0 -0
  416. data/spec/templates/examples/method003.txt +0 -0
  417. data/spec/templates/examples/method004.html +0 -0
  418. data/spec/templates/examples/method004.txt +0 -0
  419. data/spec/templates/examples/method005.html +0 -0
  420. data/spec/templates/examples/method005.txt +0 -0
  421. data/spec/templates/examples/method006.html +108 -0
  422. data/spec/templates/examples/method006.txt +20 -0
  423. data/spec/templates/examples/module001.dot +0 -0
  424. data/spec/templates/examples/module001.html +0 -0
  425. data/spec/templates/examples/module001.txt +0 -0
  426. data/spec/templates/examples/module002.html +0 -0
  427. data/spec/templates/examples/module003.html +0 -0
  428. data/spec/templates/examples/module004.html +0 -0
  429. data/spec/templates/examples/tag001.txt +0 -0
  430. data/spec/templates/helpers/base_helper_spec.rb +5 -5
  431. data/spec/templates/helpers/html_helper_spec.rb +64 -60
  432. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +17 -6
  433. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +11 -13
  434. data/spec/templates/helpers/markup_helper_spec.rb +2 -2
  435. data/spec/templates/helpers/method_helper_spec.rb +3 -3
  436. data/spec/templates/helpers/module_helper_spec.rb +2 -2
  437. data/spec/templates/helpers/shared_signature_examples.rb +2 -1
  438. data/spec/templates/helpers/text_helper_spec.rb +7 -6
  439. data/spec/templates/method_spec.rb +18 -2
  440. data/spec/templates/module_spec.rb +4 -3
  441. data/spec/templates/onefile_spec.rb +8 -6
  442. data/spec/templates/section_spec.rb +3 -2
  443. data/spec/templates/spec_helper.rb +5 -2
  444. data/spec/templates/tag_spec.rb +3 -2
  445. data/spec/templates/template_spec.rb +15 -14
  446. data/spec/verifier_spec.rb +3 -3
  447. data/templates/default/class/dot/setup.rb +2 -1
  448. data/templates/default/class/dot/superklass.erb +0 -0
  449. data/templates/default/class/html/constructor_details.erb +0 -0
  450. data/templates/default/class/html/setup.rb +2 -1
  451. data/templates/default/class/html/subclasses.erb +0 -0
  452. data/templates/default/class/setup.rb +6 -6
  453. data/templates/default/class/text/setup.rb +2 -1
  454. data/templates/default/class/text/subclasses.erb +0 -0
  455. data/templates/default/constant/text/header.erb +0 -0
  456. data/templates/default/constant/text/setup.rb +1 -0
  457. data/templates/default/docstring/html/abstract.erb +0 -0
  458. data/templates/default/docstring/html/deprecated.erb +0 -0
  459. data/templates/default/docstring/html/index.erb +0 -0
  460. data/templates/default/docstring/html/note.erb +0 -0
  461. data/templates/default/docstring/html/private.erb +0 -0
  462. data/templates/default/docstring/html/returns_void.erb +0 -0
  463. data/templates/default/docstring/html/text.erb +0 -0
  464. data/templates/default/docstring/html/todo.erb +0 -0
  465. data/templates/default/docstring/setup.rb +4 -3
  466. data/templates/default/docstring/text/abstract.erb +0 -0
  467. data/templates/default/docstring/text/deprecated.erb +0 -0
  468. data/templates/default/docstring/text/index.erb +0 -0
  469. data/templates/default/docstring/text/note.erb +0 -0
  470. data/templates/default/docstring/text/private.erb +0 -0
  471. data/templates/default/docstring/text/returns_void.erb +0 -0
  472. data/templates/default/docstring/text/text.erb +0 -0
  473. data/templates/default/docstring/text/todo.erb +0 -0
  474. data/templates/default/fulldoc/html/css/common.css +0 -0
  475. data/templates/default/fulldoc/html/css/full_list.css +0 -0
  476. data/templates/default/fulldoc/html/css/style.css +31 -20
  477. data/templates/default/fulldoc/html/frames.erb +0 -0
  478. data/templates/default/fulldoc/html/full_list.erb +2 -2
  479. data/templates/default/fulldoc/html/full_list_class.erb +0 -0
  480. data/templates/default/fulldoc/html/full_list_file.erb +0 -0
  481. data/templates/default/fulldoc/html/full_list_method.erb +0 -0
  482. data/templates/default/fulldoc/html/js/app.js +3 -3
  483. data/templates/default/fulldoc/html/js/full_list.js +0 -0
  484. data/templates/default/fulldoc/html/js/jquery.js +0 -0
  485. data/templates/default/fulldoc/html/setup.rb +22 -23
  486. data/templates/default/layout/dot/header.erb +0 -0
  487. data/templates/default/layout/dot/setup.rb +1 -0
  488. data/templates/default/layout/html/breadcrumb.erb +0 -0
  489. data/templates/default/layout/html/files.erb +0 -0
  490. data/templates/default/layout/html/footer.erb +0 -0
  491. data/templates/default/layout/html/headers.erb +2 -2
  492. data/templates/default/layout/html/index.erb +0 -0
  493. data/templates/default/layout/html/layout.erb +1 -3
  494. data/templates/default/layout/html/listing.erb +0 -0
  495. data/templates/default/layout/html/objects.erb +0 -0
  496. data/templates/default/layout/html/script_setup.erb +0 -0
  497. data/templates/default/layout/html/search.erb +0 -0
  498. data/templates/default/layout/html/setup.rb +21 -19
  499. data/templates/default/method/html/header.erb +0 -0
  500. data/templates/default/method/setup.rb +2 -1
  501. data/templates/default/method/text/header.erb +0 -0
  502. data/templates/default/method_details/html/header.erb +0 -0
  503. data/templates/default/method_details/html/method_signature.erb +0 -0
  504. data/templates/default/method_details/html/source.erb +0 -0
  505. data/templates/default/method_details/setup.rb +1 -0
  506. data/templates/default/method_details/text/header.erb +0 -0
  507. data/templates/default/method_details/text/method_signature.erb +0 -0
  508. data/templates/default/method_details/text/setup.rb +3 -2
  509. data/templates/default/module/dot/child.erb +0 -0
  510. data/templates/default/module/dot/dependencies.erb +0 -0
  511. data/templates/default/module/dot/header.erb +0 -0
  512. data/templates/default/module/dot/info.erb +0 -0
  513. data/templates/default/module/dot/setup.rb +2 -1
  514. data/templates/default/module/html/attribute_details.erb +0 -0
  515. data/templates/default/module/html/attribute_summary.erb +0 -0
  516. data/templates/default/module/html/box_info.erb +0 -0
  517. data/templates/default/module/html/children.erb +0 -0
  518. data/templates/default/module/html/constant_summary.erb +0 -0
  519. data/templates/default/module/html/defines.erb +0 -0
  520. data/templates/default/module/html/header.erb +0 -0
  521. data/templates/default/module/html/inherited_attributes.erb +0 -0
  522. data/templates/default/module/html/inherited_constants.erb +0 -0
  523. data/templates/default/module/html/inherited_methods.erb +0 -0
  524. data/templates/default/module/html/item_summary.erb +0 -0
  525. data/templates/default/module/html/method_details_list.erb +0 -0
  526. data/templates/default/module/html/method_summary.erb +0 -0
  527. data/templates/default/module/html/methodmissing.erb +0 -0
  528. data/templates/default/module/html/pre_docstring.erb +0 -0
  529. data/templates/default/module/setup.rb +24 -26
  530. data/templates/default/module/text/children.erb +0 -0
  531. data/templates/default/module/text/class_meths_list.erb +0 -0
  532. data/templates/default/module/text/extends.erb +0 -0
  533. data/templates/default/module/text/header.erb +0 -0
  534. data/templates/default/module/text/includes.erb +0 -0
  535. data/templates/default/module/text/instance_meths_list.erb +0 -0
  536. data/templates/default/module/text/setup.rb +2 -1
  537. data/templates/default/onefile/html/files.erb +0 -0
  538. data/templates/default/onefile/html/headers.erb +0 -0
  539. data/templates/default/onefile/html/layout.erb +3 -3
  540. data/templates/default/onefile/html/readme.erb +0 -0
  541. data/templates/default/onefile/html/setup.rb +9 -8
  542. data/templates/default/root/dot/child.erb +0 -0
  543. data/templates/default/root/dot/setup.rb +3 -2
  544. data/templates/default/root/html/setup.rb +2 -1
  545. data/templates/default/tags/html/example.erb +0 -0
  546. data/templates/default/tags/html/index.erb +0 -0
  547. data/templates/default/tags/html/option.erb +1 -1
  548. data/templates/default/tags/html/overload.erb +0 -0
  549. data/templates/default/tags/html/see.erb +0 -0
  550. data/templates/default/tags/html/tag.erb +1 -1
  551. data/templates/default/tags/setup.rb +7 -5
  552. data/templates/default/tags/text/example.erb +0 -0
  553. data/templates/default/tags/text/index.erb +0 -0
  554. data/templates/default/tags/text/option.erb +1 -1
  555. data/templates/default/tags/text/overload.erb +0 -0
  556. data/templates/default/tags/text/see.erb +0 -0
  557. data/templates/default/tags/text/tag.erb +2 -2
  558. data/templates/guide/class/html/setup.rb +1 -0
  559. data/templates/guide/docstring/html/setup.rb +1 -0
  560. data/templates/guide/fulldoc/html/css/style.css +0 -0
  561. data/templates/guide/fulldoc/html/js/app.js +0 -0
  562. data/templates/guide/fulldoc/html/setup.rb +7 -6
  563. data/templates/guide/layout/html/layout.erb +0 -0
  564. data/templates/guide/layout/html/setup.rb +2 -5
  565. data/templates/guide/method/html/header.erb +0 -0
  566. data/templates/guide/method/html/setup.rb +5 -4
  567. data/templates/guide/module/html/header.erb +0 -0
  568. data/templates/guide/module/html/method_list.erb +0 -0
  569. data/templates/guide/module/html/setup.rb +2 -1
  570. data/templates/guide/onefile/html/files.erb +0 -0
  571. data/templates/guide/onefile/html/setup.rb +1 -0
  572. data/templates/guide/onefile/html/toc.erb +0 -0
  573. data/templates/guide/tags/html/setup.rb +1 -0
  574. data/yard.gemspec +2 -1
  575. metadata +10 -2
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  module Parser
3
4
  module Ruby
@@ -5,7 +6,7 @@ module YARD
5
6
  # Legacy Ruby parser
6
7
  # @since 0.5.6
7
8
  class RubyParser < Parser::Base
8
- def initialize(source, filename)
9
+ def initialize(source, _filename)
9
10
  @source = source
10
11
  end
11
12
 
@@ -28,4 +29,4 @@ module YARD
28
29
  end
29
30
  end
30
31
  end
31
- end
32
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  module Parser::Ruby::Legacy
3
4
  class Statement
@@ -56,10 +57,10 @@ module YARD
56
57
  last_tk = nil
57
58
  tokens.reject do |tk|
58
59
  tk.is_a?(RubyToken::TkNL) ||
59
- (last_tk.is_a?(RubyToken::TkSPACE) &&
60
- last_tk.class == tk.class) && last_tk = tk
60
+ (last_tk.is_a?(RubyToken::TkSPACE) &&
61
+ last_tk.class == tk.class) && last_tk = tk
61
62
  end
62
63
  end
63
64
  end
64
65
  end
65
- end
66
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  module Parser::Ruby::Legacy
3
4
  class StatementList < Array
@@ -16,10 +17,11 @@ module YARD
16
17
  def initialize(content)
17
18
  @shebang_line = nil
18
19
  @encoding_line = nil
20
+ @comments_last_line = nil
19
21
  if content.is_a? TokenList
20
22
  @tokens = content.dup
21
23
  elsif content.is_a? String
22
- @tokens = TokenList.new(content.gsub("\r", ""))
24
+ @tokens = TokenList.new(content.delete("\r"))
23
25
  else
24
26
  raise ArgumentError, "Invalid content for StatementList: #{content.inspect}:#{content.class}"
25
27
  end
@@ -30,7 +32,11 @@ module YARD
30
32
  private
31
33
 
32
34
  def parse_statements
33
- while stmt = next_statement do self << stmt end
35
+ loop do
36
+ stmt = next_statement
37
+ break if stmt.nil?
38
+ self << stmt
39
+ end
34
40
  end
35
41
 
36
42
  # Returns the next statement in the token stream
@@ -45,11 +51,18 @@ module YARD
45
51
  @current_block = nil
46
52
  @comments_line = nil
47
53
  @comments_hash_flag = nil
48
- @statement, @block, @comments = TokenList.new, nil, nil
49
- @last_tk, @last_ns_tk, @before_last_tk, @before_last_ns_tk = nil, nil, nil, nil
54
+ @statement = TokenList.new
55
+ @block = nil
56
+ @comments = nil
57
+ @last_tk = nil
58
+ @last_ns_tk = nil
59
+ @before_last_tk = nil
60
+ @before_last_ns_tk = nil
50
61
  @first_line = nil
51
62
 
52
- while !@done && tk = @tokens.shift
63
+ until @done
64
+ tk = @tokens.shift
65
+ break if tk.nil?
53
66
  process_token(tk)
54
67
 
55
68
  @before_last_tk = @last_tk
@@ -77,8 +90,6 @@ module YARD
77
90
  @statement << TkCOMMENT.new(@comments_line, 0)
78
91
  @statement.first.set_text("# " + @comments.join("\n# "))
79
92
  Statement.new(@statement, nil, @comments)
80
- else
81
- nil
82
93
  end
83
94
  end
84
95
 
@@ -86,14 +97,14 @@ module YARD
86
97
  extra = []
87
98
  (@statement.size - 1).downto(0) do |index|
88
99
  token = @statement[index]
89
- if TkStatementEnd === token
90
- while [TkNL, TkSPACE, TkSEMICOLON].include?(@statement[index - 1].class)
91
- extra.unshift(@statement.delete_at(index - 1))
92
- index -= 1
93
- end
94
- @statement.insert(index + 1, *extra)
95
- return
100
+ next unless TkStatementEnd === token
101
+
102
+ while [TkNL, TkSPACE, TkSEMICOLON].include?(@statement[index - 1].class)
103
+ extra.unshift(@statement.delete_at(index - 1))
104
+ index -= 1
96
105
  end
106
+ @statement.insert(index + 1, *extra)
107
+ break
97
108
  end
98
109
  end
99
110
 
@@ -108,7 +119,7 @@ module YARD
108
119
  @statement.each_with_index do |token, index|
109
120
  if TkBlockContents === token
110
121
  @statement[index, 1] = [token, *extra]
111
- return
122
+ break
112
123
  end
113
124
  end
114
125
  end
@@ -214,7 +225,7 @@ module YARD
214
225
  end
215
226
  when Parser::SourceParser::ENCODING_LINE
216
227
  if (@last_ns_tk.class == TkCOMMENT && @last_ns_tk.text == @shebang_line) ||
217
- !@last_ns_tk
228
+ !@last_ns_tk
218
229
  @encoding_line = tk.text
219
230
  return
220
231
  end
@@ -236,13 +247,13 @@ module YARD
236
247
  # Since, of course, the convention is to have "# text"
237
248
  # and not "#text", which I deem ugly (you heard it here first)
238
249
  @comments ||= []
239
- if tk.text =~ /\A=begin/
250
+ if tk.text.start_with?('=begin')
240
251
  lines = tk.text.count("\n")
241
252
  @comments += tk.text.gsub(/\A=begin.*\r?\n|\r?\n=end.*\r?\n?\Z/, '').split(/\r?\n/)
242
253
  @comments_last_line = tk.line_no + lines
243
254
  else
244
255
  @comments << tk.text.gsub(/^(#+)\s{0,1}/, '')
245
- @comments_hash_flag = $1 == '##' if @comments_hash_flag == nil
256
+ @comments_hash_flag = $1 == '##' if @comments_hash_flag.nil?
246
257
  @comments_last_line = tk.line_no
247
258
  end
248
259
  @comments.pop if @comments.size == 1 && @comments.first =~ /^\s*$/
@@ -256,17 +267,17 @@ module YARD
256
267
  # @param [RubyToken::Token] tk the token to process
257
268
  def process_simple_block_opener(tk)
258
269
  return unless [TkLBRACE, TkDO, TkBEGIN, TkELSE].include?(tk.class) &&
259
- # Make sure hashes are parsed as hashes, not as blocks
260
- (@last_ns_tk.nil? || @last_ns_tk.lex_state != EXPR_BEG)
270
+ # Make sure hashes are parsed as hashes, not as blocks
271
+ (@last_ns_tk.nil? || @last_ns_tk.lex_state != EXPR_BEG)
261
272
 
262
273
  @level += 1
263
274
  @state = :block
264
275
  @block_num += 1
265
- unless @block
276
+ if @block.nil?
266
277
  @block = TokenList.new
267
278
  tokens = [tk, TkStatementEnd.new(tk.line_no, tk.char_no)]
268
279
  tokens = tokens.reverse if TkBEGIN === tk.class
269
- @statement.push(*tokens)
280
+ @statement.concat(tokens)
270
281
  else
271
282
  @statement << tk
272
283
  end
@@ -297,36 +308,35 @@ module YARD
297
308
 
298
309
  return unless
299
310
  # We might be coming after a statement-ending token...
300
- ((@last_tk && [TkSEMICOLON, TkNL, TkEND_OF_SCRIPT].include?(tk.class)) ||
301
- # Or we might be at the beginning of an argument list
302
- (@current_block == TkDEF && tk.class == TkRPAREN))
311
+ (@last_tk && [TkSEMICOLON, TkNL, TkEND_OF_SCRIPT].include?(tk.class)) ||
312
+ # Or we might be at the beginning of an argument list
313
+ (@current_block == TkDEF && tk.class == TkRPAREN)
303
314
 
304
315
  # Continue line ending on . or ::
305
316
  return if @last_tk && [EXPR_DOT].include?(@last_tk.lex_state)
306
317
 
307
318
  # Continue a possible existing new statement unless we just finished an expression...
308
319
  return unless (@last_tk && [EXPR_END, EXPR_ARG].include?(@last_tk.lex_state)) ||
309
- # Or we've opened a block and are ready to move into the body
310
- (@current_block && [TkNL, TkSEMICOLON].include?(tk.class) &&
311
- # Handle the case where the block statement's expression is on the next line
312
- #
313
- # while
314
- # foo
315
- # end
316
- @last_ns_tk.class != @current_block &&
317
- # And the case where part of the expression is on the next line
318
- #
319
- # while foo ||
320
- # bar
321
- # end
322
- @last_tk.lex_state != EXPR_BEG)
320
+ # Or we've opened a block and are ready to move into the body
321
+ (@current_block && [TkNL, TkSEMICOLON].include?(tk.class) &&
322
+ # Handle the case where the block statement's expression is on the next line
323
+ #
324
+ # while
325
+ # foo
326
+ # end
327
+ @last_ns_tk.class != @current_block &&
328
+ # And the case where part of the expression is on the next line
329
+ #
330
+ # while foo ||
331
+ # bar
332
+ # end
333
+ @last_tk.lex_state != EXPR_BEG)
323
334
 
324
335
  # Continue with the statement if we've hit a comma in a def
325
336
  return if @current_block == TkDEF && peek_no_space.class == TkCOMMA
326
337
 
327
-
328
338
  if [TkEND_OF_SCRIPT, TkNL, TkSEMICOLON].include?(tk.class) && @state == :block_statement &&
329
- [TkRBRACE, TkEND].include?(@last_ns_tk.class) && @level == 0
339
+ [TkRBRACE, TkEND].include?(@last_ns_tk.class) && @level == 0
330
340
  @current_block = nil
331
341
  end
332
342
 
@@ -377,7 +387,7 @@ module YARD
377
387
  # @return [RubyToken::Token] the next non-space token
378
388
  def peek_no_space
379
389
  return @tokens.first unless @tokens.first.class == TkSPACE
380
- return @tokens[1]
390
+ @tokens[1]
381
391
  end
382
392
  end
383
393
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module YARD
2
3
  module Parser::Ruby::Legacy
3
4
  class TokenList < Array
@@ -10,12 +11,7 @@ module YARD
10
11
  def to_s(full_statement = false, show_block = true)
11
12
  inject([]) do |acc, token|
12
13
  break acc if !full_statement && TkStatementEnd === token
13
- if !show_block && TkBlockContents === token
14
- acc << ""
15
- else
16
- acc << token.text
17
- end
18
- acc
14
+ acc << (!show_block && TkBlockContents === token ? "" : token.text)
19
15
  end.join
20
16
  end
21
17
 
@@ -36,7 +32,7 @@ module YARD
36
32
  end
37
33
  self
38
34
  end
39
- alias_method :<<, :push
35
+ alias << push
40
36
 
41
37
  def squeeze(type = TkSPACE)
42
38
  last = nil
@@ -47,7 +43,9 @@ module YARD
47
43
 
48
44
  def parse_content(content)
49
45
  lex = RubyLex.new(content)
50
- while tk = lex.token do
46
+ loop do
47
+ tk = lex.token
48
+ break if tk.nil?
51
49
  self << convert_token(lex, tk)
52
50
  end
53
51
  end
@@ -58,14 +56,19 @@ module YARD
58
56
  sym = TkLABEL.new(tk.line_no, tk.char_no, nil)
59
57
  sym.lex_state = lex.lex_state
60
58
  sym.set_text(tk.text + next_tk.text)
61
- elsif TkSYMBEG === tk && next_tk = lex.token
62
- sym = TkSYMBOL.new(tk.line_no, tk.char_no, nil)
63
- sym.lex_state = lex.lex_state
64
- sym.set_text(tk.text + next_tk.text)
59
+ elsif TkSYMBEG === tk
60
+ next_tk = lex.token
61
+ if next_tk
62
+ sym = TkSYMBOL.new(tk.line_no, tk.char_no, nil)
63
+ sym.lex_state = lex.lex_state
64
+ sym.set_text(tk.text + next_tk.text)
65
+ else
66
+ tk
67
+ end
65
68
  else
66
69
  tk
67
70
  end
68
71
  end
69
72
  end
70
73
  end
71
- end
74
+ end
@@ -1,4 +1,5 @@
1
- begin require 'ripper'; rescue LoadError; end
1
+ # frozen_string_literal: true
2
+ begin require 'ripper'; rescue LoadError; nil end
2
3
 
3
4
  module YARD
4
5
  module Parser
@@ -48,6 +49,7 @@ module YARD
48
49
  @frozen_string_line = nil
49
50
  @file_encoding = nil
50
51
  @newline = true
52
+ @percent_ary = nil
51
53
  end
52
54
 
53
55
  def parse
@@ -67,9 +69,8 @@ module YARD
67
69
  return nil unless defined?(::Encoding)
68
70
  return @file_encoding if @file_encoding
69
71
  return Encoding.default_internal unless @encoding_line
70
- if match = @encoding_line.match(SourceParser::ENCODING_LINE)
71
- @file_encoding = match.captures.last
72
- end
72
+ match = @encoding_line.match(SourceParser::ENCODING_LINE)
73
+ @file_encoding = match.captures.last if match
73
74
  end
74
75
 
75
76
  private
@@ -101,6 +102,9 @@ module YARD
101
102
  :next => "next",
102
103
  :paren => :lparen,
103
104
  :qwords_literal => :qwords_beg,
105
+ :words_literal => :words_beg,
106
+ :qsymbols_literal => :qsymbols_beg,
107
+ :symbols_literal => :symbols_beg,
104
108
  :redo => "redo",
105
109
  :regexp_literal => :regexp_beg,
106
110
  :rescue => "rescue",
@@ -131,7 +135,7 @@ module YARD
131
135
 
132
136
  MAPPINGS.each do |k, v|
133
137
  if Array === v
134
- v.each {|_v| (REV_MAPPINGS[_v] ||= []) << k }
138
+ v.each {|vv| (REV_MAPPINGS[vv] ||= []) << k }
135
139
  else
136
140
  (REV_MAPPINGS[v] ||= []) << k
137
141
  end
@@ -140,7 +144,7 @@ module YARD
140
144
  PARSER_EVENT_TABLE.each do |event, arity|
141
145
  node_class = AstNode.node_class_for(event)
142
146
 
143
- if /_new\z/ =~ event.to_s and arity == 0
147
+ if /_new\z/ =~ event.to_s && arity == 0
144
148
  module_eval(<<-eof, __FILE__, __LINE__ + 1)
145
149
  def on_#{event}(*args)
146
150
  #{node_class}.new(:list, args, :listchar => charno...charno, :listline => lineno..lineno)
@@ -154,7 +158,7 @@ module YARD
154
158
  list
155
159
  end
156
160
  eof
157
- elsif MAPPINGS.has_key?(event)
161
+ elsif MAPPINGS.key?(event)
158
162
  module_eval(<<-eof, __FILE__, __LINE__ + 1)
159
163
  begin; undef on_#{event}; rescue NameError; end
160
164
  def on_#{event}(*args)
@@ -181,8 +185,8 @@ module YARD
181
185
  eof
182
186
  end
183
187
 
184
- REV_MAPPINGS.select {|k,v| k.is_a?(Symbol) }.each do |pair|
185
- event, value = *pair
188
+ REV_MAPPINGS.select {|k, _v| k.is_a?(Symbol) }.each do |pair|
189
+ event = pair.first
186
190
  ast_token = AST_TOKENS.include?(event)
187
191
  module_eval(<<-eof, __FILE__, __LINE__ + 1)
188
192
  begin; undef on_#{event}; rescue NameError; end
@@ -218,6 +222,8 @@ module YARD
218
222
  eof
219
223
  end
220
224
 
225
+ undef on_sp
226
+
221
227
  def on_sp(tok)
222
228
  add_token(:sp, tok)
223
229
  @charno += tok.length
@@ -229,8 +235,9 @@ module YARD
229
235
  node.source_range = Range.new(sstart, @ns_charno - 1)
230
236
  node.line_range = Range.new(lstart, lineno)
231
237
  if node.respond_to?(:block)
232
- sr, lr = node.block.source_range, node.block.line_range
233
- node.block.source_range = Range.new(sr.first, @tokens.last[2][1]-1)
238
+ sr = node.block.source_range
239
+ lr = node.block.line_range
240
+ node.block.source_range = Range.new(sr.first, @tokens.last[2][1] - 1)
234
241
  node.block.line_range = Range.new(lr.first, @tokens.last[2][0])
235
242
  end
236
243
  node
@@ -252,12 +259,26 @@ module YARD
252
259
  @ns_charno = charno
253
260
  @newline = [:semicolon, :comment, :kw, :op, :lparen, :lbrace].include?(token)
254
261
  if ast_token
255
- AstNode.new(token, [data], :line => lineno..lineno, :char => ch..charno-1, :token => true)
262
+ AstNode.new(token, [data], :line => lineno..lineno, :char => ch..charno - 1, :token => true)
256
263
  end
257
264
  end
258
265
 
259
266
  def add_token(token, data)
260
- if @tokens.last && @tokens.last[0] == :symbeg
267
+ if @percent_ary
268
+ if token == :words_sep && data !~ /\s\z/
269
+ rng = @percent_ary.source_range
270
+ rng = Range.new(rng.first, rng.last + data.length)
271
+ @percent_ary.source_range = rng
272
+ @tokens << [token, data, [lineno, charno]]
273
+ @percent_ary = nil
274
+ elsif token == :tstring_end && data =~ /\A\s/
275
+ rng = @percent_ary.source_range
276
+ rng = Range.new(rng.first, rng.last + data.length)
277
+ @percent_ary.source_range = rng
278
+ @tokens << [token, data, [lineno, charno]]
279
+ @percent_ary = nil
280
+ end
281
+ elsif @tokens.last && @tokens.last[0] == :symbeg
261
282
  @tokens[-1] = [:symbol, ":" + data, @tokens.last[2]]
262
283
  elsif @heredoc_state == :started
263
284
  @heredoc_tokens << [token, data, [lineno, charno]]
@@ -291,8 +312,6 @@ module YARD
291
312
  undef on_aref_field
292
313
  undef on_lbracket
293
314
  undef on_rbracket
294
- undef on_qwords_new
295
- undef on_qwords_add
296
315
  undef on_string_literal
297
316
  undef on_lambda
298
317
  undef on_unary
@@ -336,7 +355,7 @@ module YARD
336
355
  end
337
356
 
338
357
  def on_unary(op, val)
339
- map = @map[op.to_s[0,1]]
358
+ map = @map[op.to_s[0, 1]]
340
359
  lstart, sstart = *(map ? map.pop : [lineno, @ns_charno - 1])
341
360
  node = AstNode.node_class_for(:unary).new(:unary, [op, val])
342
361
  node.source_range = Range.new(sstart, @ns_charno - 1)
@@ -414,22 +433,29 @@ module YARD
414
433
  eof
415
434
  end
416
435
 
417
- def on_qwords_new(*args)
418
- node = LiteralNode.new(:qwords_literal, args)
419
- if @map[:qwords_beg]
420
- lstart, sstart = *@map[:qwords_beg].pop
421
- node.source_range = Range.new(sstart, @ns_charno-1)
422
- node.line_range = Range.new(lstart, lineno)
423
- end
424
- node
425
- end
436
+ %w(symbols qsymbols words qwords).each do |kw|
437
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
438
+ begin; undef on_#{kw}_new; rescue NameError; end
439
+ def on_#{kw}_new(*args)
440
+ node = LiteralNode.new(:#{kw}_literal, args)
441
+ @percent_ary = node
442
+ if @map[:#{kw}_beg]
443
+ lstart, sstart = *@map[:#{kw}_beg].pop
444
+ node.source_range = Range.new(sstart, @ns_charno-1)
445
+ node.line_range = Range.new(lstart, lineno)
446
+ end
447
+ node
448
+ end
426
449
 
427
- def on_qwords_add(list, item)
428
- last = @source[@ns_charno,1] == "\n" ? @ns_charno - 1 : @ns_charno
429
- list.source_range = (list.source_range.first..last)
430
- list.line_range = (list.line_range.first..lineno)
431
- list.push(item)
432
- list
450
+ begin; undef on_#{kw}_add; rescue NameError; end
451
+ def on_#{kw}_add(list, item)
452
+ last = @source[@ns_charno,1] == "\n" ? @ns_charno - 1 : @ns_charno
453
+ list.source_range = (list.source_range.first..last)
454
+ list.line_range = (list.line_range.first..lineno)
455
+ list.push(item)
456
+ list
457
+ end
458
+ eof
433
459
  end
434
460
 
435
461
  def on_string_literal(*args)
@@ -469,11 +495,8 @@ module YARD
469
495
  if arg.first.class == Array
470
496
  arg.map! do |sub_arg|
471
497
  next sub_arg unless sub_arg.class == Array
472
- if sub_arg[0].type == :label
473
- type = :named_arg
474
- else
475
- type = :unnamed_optional_arg
476
- end
498
+ type = sub_arg[0].type == :label ?
499
+ :named_arg : :unnamed_optional_arg
477
500
  AstNode.new(type, sub_arg, :listline => lineno..lineno, :listchar => charno..charno)
478
501
  end
479
502
  end
@@ -489,12 +512,12 @@ module YARD
489
512
  ch = charno
490
513
  @charno += data.length
491
514
  @ns_charno = charno
492
- AstNode.new(:label, [data[0...-1]], :line => lineno..lineno, :char => ch..charno-1, :token => true)
515
+ AstNode.new(:label, [data[0...-1]], :line => lineno..lineno, :char => ch..charno - 1, :token => true)
493
516
  end
494
517
 
495
518
  def on_comment(comment)
496
519
  not_comment = false
497
- if @last_ns_token.nil? || @last_ns_token.size == 0
520
+ if @last_ns_token.nil? || @last_ns_token.empty?
498
521
  if comment =~ SourceParser::SHEBANG_LINE && !@encoding_line
499
522
  @shebang_line = comment
500
523
  not_comment = true
@@ -514,14 +537,14 @@ module YARD
514
537
  return
515
538
  end
516
539
 
517
- source_range = ch..(charno-1)
540
+ source_range = ch..(charno - 1)
518
541
  comment = comment.gsub(/^(\#+)\s{0,1}/, '').chomp
519
542
  append_comment = @comments[lineno - 1]
520
543
 
521
544
  hash_flag = $1 == '##' ? true : false
522
545
 
523
546
  if append_comment && @comments_last_column &&
524
- @comments_last_column == column && comment_starts_line?(ch)
547
+ @comments_last_column == column && comment_starts_line?(ch)
525
548
  @comments.delete(lineno - 1)
526
549
  @comments_flags[lineno] = @comments_flags[lineno - 1]
527
550
  @comments_flags.delete(lineno - 1)
@@ -532,14 +555,14 @@ module YARD
532
555
 
533
556
  @comments[lineno] = comment
534
557
  @comments_range[lineno] = source_range
535
- @comments_flags[lineno] = hash_flag if !append_comment
558
+ @comments_flags[lineno] = hash_flag unless append_comment
536
559
  @comments_last_column = column
537
560
  end
538
561
 
539
562
  def on_embdoc_beg(text)
540
563
  visit_ns_token(:embdoc_beg, text)
541
- @embdoc_start = charno-text.length
542
- @embdoc = ""
564
+ @embdoc_start = charno - text.length
565
+ @embdoc = String.new("")
543
566
  end
544
567
 
545
568
  def on_embdoc(text)
@@ -559,9 +582,10 @@ module YARD
559
582
  def on_parse_error(msg)
560
583
  raise ParserSyntaxError, "syntax error in `#{file}`:(#{lineno},#{column}): #{msg}"
561
584
  end
585
+ alias compile_error on_parse_error
562
586
 
563
587
  def comment_starts_line?(charno)
564
- (charno-1).downto(0) do |i|
588
+ (charno - 1).downto(0) do |i|
565
589
  ch = @source[i]
566
590
  break if ch == "\n"
567
591
  return false if ch != " " && ch != "\t"
@@ -579,7 +603,7 @@ module YARD
579
603
  end
580
604
 
581
605
  # check upwards from line before node; check node's line at the end
582
- ((node.line-1).downto(node.line-2).to_a + [node.line]).each do |line|
606
+ ((node.line - 1).downto(node.line - 2).to_a + [node.line]).each do |line|
583
607
  comment = @comments[line]
584
608
  if comment && !comment.empty?
585
609
  add_comment(line, node)
@@ -588,9 +612,7 @@ module YARD
588
612
  end
589
613
 
590
614
  @comments.keys.each do |line|
591
- if node.line > line
592
- add_comment(line, nil, node)
593
- end
615
+ add_comment(line, nil, node) if node.line > line
594
616
  end
595
617
  end
596
618
 
@@ -598,21 +620,20 @@ module YARD
598
620
  root.traverse do |node|
599
621
  next if node.type == :list || node.parent.type != :list
600
622
  @comments.keys.each do |line|
601
- if node.line_range.include?(line)
602
- pick = nil
603
- node.traverse do |subnode|
604
- next unless subnode.type == :list
605
- pick ||= subnode
606
- next unless subnode.line_range.include?(line)
607
- pick = subnode
608
- end
609
- add_comment(line, nil, pick, true) if pick
623
+ next unless node.line_range.include?(line)
624
+ pick = nil
625
+ node.traverse do |subnode|
626
+ next unless subnode.type == :list
627
+ pick ||= subnode
628
+ next unless subnode.line_range.include?(line)
629
+ pick = subnode
610
630
  end
631
+ add_comment(line, nil, pick, true) if pick
611
632
  end
612
- end if @comments.size > 0
633
+ end unless @comments.empty?
613
634
 
614
635
  # insert all remaining comments
615
- @comments.each do |line, comment|
636
+ @comments.each do |line, _comment|
616
637
  add_comment(line, nil, root, true)
617
638
  end
618
639
 
@@ -646,10 +667,13 @@ module YARD
646
667
  end
647
668
 
648
669
  def freeze_tree(node = nil)
649
- node ||= root
650
- node.children.each do |child|
651
- child.parent = node
652
- freeze_tree(child)
670
+ nodes = [node || root]
671
+ until nodes.empty?
672
+ p_node = nodes.shift
673
+ p_node.children.each do |child|
674
+ child.parent = p_node
675
+ nodes << child
676
+ end
653
677
  end
654
678
  end
655
679
  end if defined?(::Ripper)