deg-yard 0.8.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. data/.travis.yml +39 -0
  2. data/.yardopts +25 -0
  3. data/.yardopts_guide +19 -0
  4. data/.yardopts_i18n +22 -0
  5. data/Gemfile +35 -0
  6. data/LEGAL +66 -0
  7. data/LICENSE +22 -0
  8. data/README.md +609 -0
  9. data/Rakefile +66 -0
  10. data/benchmarks/builtins_vs_eval.rb +23 -0
  11. data/benchmarks/concat_vs_join.rb +12 -0
  12. data/benchmarks/erb_vs_erubis.rb +53 -0
  13. data/benchmarks/format_args.rb +46 -0
  14. data/benchmarks/generation.rb +37 -0
  15. data/benchmarks/marshal_vs_dbm.rb +63 -0
  16. data/benchmarks/parsing.rb +46 -0
  17. data/benchmarks/pathname_vs_string.rb +50 -0
  18. data/benchmarks/rdoc_vs_yardoc.rb +10 -0
  19. data/benchmarks/registry_store_types.rb +48 -0
  20. data/benchmarks/ri_vs_yri.rb +18 -0
  21. data/benchmarks/ripper_parser.rb +12 -0
  22. data/benchmarks/splat_vs_flatten.rb +12 -0
  23. data/benchmarks/template_erb.rb +22 -0
  24. data/benchmarks/template_format.rb +6 -0
  25. data/benchmarks/template_profile.rb +17 -0
  26. data/benchmarks/yri_cache.rb +19 -0
  27. data/bin/yard +12 -0
  28. data/bin/yardoc +12 -0
  29. data/bin/yri +12 -0
  30. data/docs/CodeObjects.md +115 -0
  31. data/docs/GettingStarted.md +592 -0
  32. data/docs/Handlers.md +152 -0
  33. data/docs/Overview.md +61 -0
  34. data/docs/Parser.md +191 -0
  35. data/docs/Tags.md +282 -0
  36. data/docs/TagsArch.md +123 -0
  37. data/docs/Templates.md +496 -0
  38. data/docs/WhatsNew.md +1244 -0
  39. data/docs/images/code-objects-class-diagram.png +0 -0
  40. data/docs/images/handlers-class-diagram.png +0 -0
  41. data/docs/images/overview-class-diagram.png +0 -0
  42. data/docs/images/parser-class-diagram.png +0 -0
  43. data/docs/images/tags-class-diagram.png +0 -0
  44. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  45. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  46. data/docs/templates/default/layout/html/setup.rb +8 -0
  47. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  48. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  49. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  50. data/docs/templates/plugin.rb +65 -0
  51. data/lib/rubygems_plugin.rb +4 -0
  52. data/lib/yard/autoload.rb +290 -0
  53. data/lib/yard/cli/command.rb +84 -0
  54. data/lib/yard/cli/command_parser.rb +92 -0
  55. data/lib/yard/cli/config.rb +136 -0
  56. data/lib/yard/cli/diff.rb +270 -0
  57. data/lib/yard/cli/display.rb +68 -0
  58. data/lib/yard/cli/gems.rb +83 -0
  59. data/lib/yard/cli/graph.rb +126 -0
  60. data/lib/yard/cli/help.rb +18 -0
  61. data/lib/yard/cli/i18n.rb +69 -0
  62. data/lib/yard/cli/list.rb +22 -0
  63. data/lib/yard/cli/markup_types.rb +33 -0
  64. data/lib/yard/cli/server.rb +253 -0
  65. data/lib/yard/cli/stats.rb +213 -0
  66. data/lib/yard/cli/yardoc.rb +752 -0
  67. data/lib/yard/cli/yardopts_command.rb +109 -0
  68. data/lib/yard/cli/yri.rb +214 -0
  69. data/lib/yard/code_objects/base.rb +585 -0
  70. data/lib/yard/code_objects/class_object.rb +143 -0
  71. data/lib/yard/code_objects/class_variable_object.rb +8 -0
  72. data/lib/yard/code_objects/constant_object.rb +13 -0
  73. data/lib/yard/code_objects/extended_method_object.rb +23 -0
  74. data/lib/yard/code_objects/extra_file_object.rb +128 -0
  75. data/lib/yard/code_objects/macro_object.rb +172 -0
  76. data/lib/yard/code_objects/method_object.rb +191 -0
  77. data/lib/yard/code_objects/module_object.rb +18 -0
  78. data/lib/yard/code_objects/namespace_object.rb +200 -0
  79. data/lib/yard/code_objects/proxy.rb +258 -0
  80. data/lib/yard/code_objects/root_object.rb +17 -0
  81. data/lib/yard/config.rb +269 -0
  82. data/lib/yard/core_ext/array.rb +15 -0
  83. data/lib/yard/core_ext/file.rb +65 -0
  84. data/lib/yard/core_ext/hash.rb +15 -0
  85. data/lib/yard/core_ext/insertion.rb +60 -0
  86. data/lib/yard/core_ext/module.rb +19 -0
  87. data/lib/yard/core_ext/string.rb +67 -0
  88. data/lib/yard/core_ext/symbol_hash.rb +73 -0
  89. data/lib/yard/docstring.rb +362 -0
  90. data/lib/yard/docstring_parser.rb +321 -0
  91. data/lib/yard/globals.rb +18 -0
  92. data/lib/yard/handlers/base.rb +597 -0
  93. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  94. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  95. data/lib/yard/handlers/c/base.rb +110 -0
  96. data/lib/yard/handlers/c/class_handler.rb +26 -0
  97. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  98. data/lib/yard/handlers/c/handler_methods.rb +166 -0
  99. data/lib/yard/handlers/c/init_handler.rb +18 -0
  100. data/lib/yard/handlers/c/method_handler.rb +35 -0
  101. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  102. data/lib/yard/handlers/c/module_handler.rb +16 -0
  103. data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
  104. data/lib/yard/handlers/c/path_handler.rb +10 -0
  105. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  106. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  107. data/lib/yard/handlers/processor.rb +201 -0
  108. data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
  109. data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
  110. data/lib/yard/handlers/ruby/base.rb +164 -0
  111. data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
  112. data/lib/yard/handlers/ruby/class_handler.rb +121 -0
  113. data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  114. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  115. data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  116. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  117. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
  118. data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  119. data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  120. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
  121. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
  122. data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
  123. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  124. data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
  125. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  126. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  127. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  128. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  129. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  130. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  131. data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
  132. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  133. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  134. data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  139. data/lib/yard/handlers/ruby/method_handler.rb +92 -0
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  142. data/lib/yard/handlers/ruby/module_handler.rb +11 -0
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  146. data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  147. data/lib/yard/i18n/locale.rb +74 -0
  148. data/lib/yard/i18n/message.rb +56 -0
  149. data/lib/yard/i18n/messages.rb +55 -0
  150. data/lib/yard/i18n/pot_generator.rb +280 -0
  151. data/lib/yard/i18n/text.rb +173 -0
  152. data/lib/yard/logging.rb +190 -0
  153. data/lib/yard/options.rb +216 -0
  154. data/lib/yard/parser/base.rb +56 -0
  155. data/lib/yard/parser/c/c_parser.rb +231 -0
  156. data/lib/yard/parser/c/comment_parser.rb +131 -0
  157. data/lib/yard/parser/c/statement.rb +63 -0
  158. data/lib/yard/parser/ruby/ast_node.rb +496 -0
  159. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
  160. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
  161. data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
  162. data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
  163. data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
  164. data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
  165. data/lib/yard/parser/source_parser.rb +517 -0
  166. data/lib/yard/rake/yardoc_task.rb +74 -0
  167. data/lib/yard/registry.rb +438 -0
  168. data/lib/yard/registry_store.rb +319 -0
  169. data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/lib/yard/rubygems/backports/gem.rb +9 -0
  172. data/lib/yard/rubygems/backports/source_index.rb +370 -0
  173. data/lib/yard/rubygems/backports.rb +8 -0
  174. data/lib/yard/rubygems/doc_manager.rb +88 -0
  175. data/lib/yard/rubygems/specification.rb +41 -0
  176. data/lib/yard/serializers/base.rb +80 -0
  177. data/lib/yard/serializers/file_system_serializer.rb +90 -0
  178. data/lib/yard/serializers/process_serializer.rb +24 -0
  179. data/lib/yard/serializers/stdout_serializer.rb +32 -0
  180. data/lib/yard/serializers/yardoc_serializer.rb +124 -0
  181. data/lib/yard/server/adapter.rb +100 -0
  182. data/lib/yard/server/commands/base.rb +192 -0
  183. data/lib/yard/server/commands/display_file_command.rb +24 -0
  184. data/lib/yard/server/commands/display_object_command.rb +58 -0
  185. data/lib/yard/server/commands/frames_command.rb +15 -0
  186. data/lib/yard/server/commands/library_command.rb +148 -0
  187. data/lib/yard/server/commands/library_index_command.rb +24 -0
  188. data/lib/yard/server/commands/list_command.rb +24 -0
  189. data/lib/yard/server/commands/search_command.rb +78 -0
  190. data/lib/yard/server/commands/static_file_command.rb +57 -0
  191. data/lib/yard/server/doc_server_helper.rb +76 -0
  192. data/lib/yard/server/doc_server_serializer.rb +33 -0
  193. data/lib/yard/server/library_version.rb +227 -0
  194. data/lib/yard/server/rack_adapter.rb +88 -0
  195. data/lib/yard/server/router.rb +176 -0
  196. data/lib/yard/server/static_caching.rb +45 -0
  197. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  198. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  199. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  200. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  201. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  202. data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  203. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
  204. data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
  205. data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  206. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  207. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  208. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  209. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  210. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  211. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  212. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  213. data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  214. data/lib/yard/server/webrick_adapter.rb +43 -0
  215. data/lib/yard/server.rb +11 -0
  216. data/lib/yard/tags/default_factory.rb +176 -0
  217. data/lib/yard/tags/default_tag.rb +12 -0
  218. data/lib/yard/tags/directives.rb +599 -0
  219. data/lib/yard/tags/library.rb +630 -0
  220. data/lib/yard/tags/option_tag.rb +12 -0
  221. data/lib/yard/tags/overload_tag.rb +66 -0
  222. data/lib/yard/tags/ref_tag.rb +7 -0
  223. data/lib/yard/tags/ref_tag_list.rb +27 -0
  224. data/lib/yard/tags/tag.rb +57 -0
  225. data/lib/yard/tags/tag_format_error.rb +6 -0
  226. data/lib/yard/templates/engine.rb +185 -0
  227. data/lib/yard/templates/erb_cache.rb +22 -0
  228. data/lib/yard/templates/helpers/base_helper.rb +212 -0
  229. data/lib/yard/templates/helpers/filter_helper.rb +26 -0
  230. data/lib/yard/templates/helpers/html_helper.rb +599 -0
  231. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  232. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
  233. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
  234. data/lib/yard/templates/helpers/markup_helper.rb +169 -0
  235. data/lib/yard/templates/helpers/method_helper.rb +74 -0
  236. data/lib/yard/templates/helpers/module_helper.rb +19 -0
  237. data/lib/yard/templates/helpers/text_helper.rb +95 -0
  238. data/lib/yard/templates/helpers/uml_helper.rb +46 -0
  239. data/lib/yard/templates/section.rb +106 -0
  240. data/lib/yard/templates/template.rb +407 -0
  241. data/lib/yard/templates/template_options.rb +88 -0
  242. data/lib/yard/verifier.rb +148 -0
  243. data/lib/yard/version.rb +3 -0
  244. data/lib/yard.rb +71 -0
  245. data/po/ja.po +31118 -0
  246. data/spec/cli/command_parser_spec.rb +43 -0
  247. data/spec/cli/command_spec.rb +36 -0
  248. data/spec/cli/config_spec.rb +92 -0
  249. data/spec/cli/diff_spec.rb +260 -0
  250. data/spec/cli/display_spec.rb +30 -0
  251. data/spec/cli/gems_spec.rb +81 -0
  252. data/spec/cli/graph_spec.rb +17 -0
  253. data/spec/cli/help_spec.rb +22 -0
  254. data/spec/cli/i18n_spec.rb +111 -0
  255. data/spec/cli/list_spec.rb +8 -0
  256. data/spec/cli/markup_types_spec.rb +22 -0
  257. data/spec/cli/server_spec.rb +327 -0
  258. data/spec/cli/stats_spec.rb +90 -0
  259. data/spec/cli/yardoc_spec.rb +804 -0
  260. data/spec/cli/yri_spec.rb +99 -0
  261. data/spec/code_objects/base_spec.rb +438 -0
  262. data/spec/code_objects/class_object_spec.rb +225 -0
  263. data/spec/code_objects/code_object_list_spec.rb +33 -0
  264. data/spec/code_objects/constants_spec.rb +82 -0
  265. data/spec/code_objects/extra_file_object_spec.rb +147 -0
  266. data/spec/code_objects/macro_object_spec.rb +148 -0
  267. data/spec/code_objects/method_object_spec.rb +175 -0
  268. data/spec/code_objects/module_object_spec.rb +141 -0
  269. data/spec/code_objects/namespace_object_spec.rb +170 -0
  270. data/spec/code_objects/proxy_spec.rb +140 -0
  271. data/spec/code_objects/spec_helper.rb +3 -0
  272. data/spec/config_spec.rb +176 -0
  273. data/spec/core_ext/array_spec.rb +14 -0
  274. data/spec/core_ext/file_spec.rb +68 -0
  275. data/spec/core_ext/hash_spec.rb +14 -0
  276. data/spec/core_ext/insertion_spec.rb +37 -0
  277. data/spec/core_ext/module_spec.rb +15 -0
  278. data/spec/core_ext/string_spec.rb +42 -0
  279. data/spec/core_ext/symbol_hash_spec.rb +86 -0
  280. data/spec/docstring_parser_spec.rb +228 -0
  281. data/spec/docstring_spec.rb +335 -0
  282. data/spec/handlers/alias_handler_spec.rb +80 -0
  283. data/spec/handlers/attribute_handler_spec.rb +94 -0
  284. data/spec/handlers/base_spec.rb +206 -0
  285. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  286. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  287. data/spec/handlers/c/class_handler_spec.rb +63 -0
  288. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  289. data/spec/handlers/c/init_handler_spec.rb +47 -0
  290. data/spec/handlers/c/method_handler_spec.rb +229 -0
  291. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  292. data/spec/handlers/c/module_handler_spec.rb +38 -0
  293. data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
  294. data/spec/handlers/c/path_handler_spec.rb +35 -0
  295. data/spec/handlers/c/spec_helper.rb +13 -0
  296. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  297. data/spec/handlers/class_condition_handler_spec.rb +67 -0
  298. data/spec/handlers/class_handler_spec.rb +246 -0
  299. data/spec/handlers/class_variable_handler_spec.rb +11 -0
  300. data/spec/handlers/constant_handler_spec.rb +64 -0
  301. data/spec/handlers/dsl_handler_spec.rb +197 -0
  302. data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  303. data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  304. data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
  305. data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  306. data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  307. data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  308. data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
  309. data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  310. data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  311. data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  312. data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
  313. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
  314. data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  315. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  316. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  317. data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
  318. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
  319. data/spec/handlers/exception_handler_spec.rb +48 -0
  320. data/spec/handlers/extend_handler_spec.rb +23 -0
  321. data/spec/handlers/legacy_base_spec.rb +128 -0
  322. data/spec/handlers/method_condition_handler_spec.rb +14 -0
  323. data/spec/handlers/method_handler_spec.rb +184 -0
  324. data/spec/handlers/mixin_handler_spec.rb +55 -0
  325. data/spec/handlers/module_function_handler_spec.rb +105 -0
  326. data/spec/handlers/module_handler_spec.rb +34 -0
  327. data/spec/handlers/private_constant_handler_spec.rb +24 -0
  328. data/spec/handlers/processor_spec.rb +34 -0
  329. data/spec/handlers/ruby/base_spec.rb +94 -0
  330. data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
  331. data/spec/handlers/spec_helper.rb +33 -0
  332. data/spec/handlers/visibility_handler_spec.rb +39 -0
  333. data/spec/handlers/yield_handler_spec.rb +51 -0
  334. data/spec/i18n/locale_spec.rb +68 -0
  335. data/spec/i18n/message_spec.rb +52 -0
  336. data/spec/i18n/messages_spec.rb +67 -0
  337. data/spec/i18n/pot_generator_spec.rb +262 -0
  338. data/spec/i18n/text_spec.rb +180 -0
  339. data/spec/logging_spec.rb +35 -0
  340. data/spec/options_spec.rb +171 -0
  341. data/spec/parser/base_spec.rb +24 -0
  342. data/spec/parser/c_parser_spec.rb +171 -0
  343. data/spec/parser/examples/array.c.txt +3887 -0
  344. data/spec/parser/examples/example1.rb.txt +8 -0
  345. data/spec/parser/examples/extrafile.c.txt +8 -0
  346. data/spec/parser/examples/multifile.c.txt +22 -0
  347. data/spec/parser/examples/override.c.txt +424 -0
  348. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  349. data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  350. data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  351. data/spec/parser/ruby/ast_node_spec.rb +33 -0
  352. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  353. data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
  354. data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
  355. data/spec/parser/source_parser_spec.rb +717 -0
  356. data/spec/parser/tag_parsing_spec.rb +18 -0
  357. data/spec/rake/yardoc_task_spec.rb +101 -0
  358. data/spec/registry_spec.rb +393 -0
  359. data/spec/registry_store_spec.rb +315 -0
  360. data/spec/rubygems/doc_manager_spec.rb +112 -0
  361. data/spec/serializers/data/serialized_yardoc/checksums +1 -0
  362. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  363. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  364. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  365. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  366. data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  367. data/spec/serializers/file_system_serializer_spec.rb +124 -0
  368. data/spec/serializers/spec_helper.rb +2 -0
  369. data/spec/serializers/yardoc_serializer_spec.rb +46 -0
  370. data/spec/server/adapter_spec.rb +38 -0
  371. data/spec/server/commands/base_spec.rb +87 -0
  372. data/spec/server/commands/library_command_spec.rb +39 -0
  373. data/spec/server/commands/static_file_command_spec.rb +84 -0
  374. data/spec/server/doc_server_helper_spec.rb +53 -0
  375. data/spec/server/doc_server_serializer_spec.rb +45 -0
  376. data/spec/server/rack_adapter_spec.rb +20 -0
  377. data/spec/server/router_spec.rb +122 -0
  378. data/spec/server/spec_helper.rb +17 -0
  379. data/spec/server/static_caching_spec.rb +39 -0
  380. data/spec/server/webrick_servlet_spec.rb +20 -0
  381. data/spec/server_spec.rb +10 -0
  382. data/spec/spec_helper.rb +128 -0
  383. data/spec/tags/default_factory_spec.rb +152 -0
  384. data/spec/tags/default_tag_spec.rb +11 -0
  385. data/spec/tags/directives_spec.rb +453 -0
  386. data/spec/tags/library_spec.rb +34 -0
  387. data/spec/tags/overload_tag_spec.rb +53 -0
  388. data/spec/tags/ref_tag_list_spec.rb +53 -0
  389. data/spec/templates/class_spec.rb +44 -0
  390. data/spec/templates/constant_spec.rb +40 -0
  391. data/spec/templates/engine_spec.rb +121 -0
  392. data/spec/templates/examples/class001.html +280 -0
  393. data/spec/templates/examples/class001.txt +36 -0
  394. data/spec/templates/examples/class002.html +35 -0
  395. data/spec/templates/examples/constant001.txt +25 -0
  396. data/spec/templates/examples/constant002.txt +7 -0
  397. data/spec/templates/examples/constant003.txt +11 -0
  398. data/spec/templates/examples/method001.html +130 -0
  399. data/spec/templates/examples/method001.txt +35 -0
  400. data/spec/templates/examples/method002.html +86 -0
  401. data/spec/templates/examples/method002.txt +20 -0
  402. data/spec/templates/examples/method003.html +159 -0
  403. data/spec/templates/examples/method003.txt +45 -0
  404. data/spec/templates/examples/method004.html +44 -0
  405. data/spec/templates/examples/method004.txt +10 -0
  406. data/spec/templates/examples/method005.html +99 -0
  407. data/spec/templates/examples/method005.txt +33 -0
  408. data/spec/templates/examples/module001.dot +33 -0
  409. data/spec/templates/examples/module001.html +825 -0
  410. data/spec/templates/examples/module001.txt +33 -0
  411. data/spec/templates/examples/module002.html +318 -0
  412. data/spec/templates/examples/module003.html +185 -0
  413. data/spec/templates/examples/module004.html +387 -0
  414. data/spec/templates/examples/tag001.txt +82 -0
  415. data/spec/templates/helpers/base_helper_spec.rb +175 -0
  416. data/spec/templates/helpers/html_helper_spec.rb +612 -0
  417. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  418. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
  419. data/spec/templates/helpers/markup_helper_spec.rb +135 -0
  420. data/spec/templates/helpers/method_helper_spec.rb +82 -0
  421. data/spec/templates/helpers/shared_signature_examples.rb +123 -0
  422. data/spec/templates/helpers/text_helper_spec.rb +44 -0
  423. data/spec/templates/method_spec.rb +102 -0
  424. data/spec/templates/module_spec.rb +181 -0
  425. data/spec/templates/onefile_spec.rb +64 -0
  426. data/spec/templates/section_spec.rb +146 -0
  427. data/spec/templates/spec_helper.rb +73 -0
  428. data/spec/templates/tag_spec.rb +51 -0
  429. data/spec/templates/template_spec.rb +409 -0
  430. data/spec/verifier_spec.rb +106 -0
  431. data/templates/default/class/dot/setup.rb +6 -0
  432. data/templates/default/class/dot/superklass.erb +3 -0
  433. data/templates/default/class/html/constructor_details.erb +8 -0
  434. data/templates/default/class/html/setup.rb +1 -0
  435. data/templates/default/class/html/subclasses.erb +4 -0
  436. data/templates/default/class/setup.rb +36 -0
  437. data/templates/default/class/text/setup.rb +11 -0
  438. data/templates/default/class/text/subclasses.erb +5 -0
  439. data/templates/default/constant/text/header.erb +11 -0
  440. data/templates/default/constant/text/setup.rb +3 -0
  441. data/templates/default/docstring/html/abstract.erb +4 -0
  442. data/templates/default/docstring/html/deprecated.erb +1 -0
  443. data/templates/default/docstring/html/index.erb +5 -0
  444. data/templates/default/docstring/html/note.erb +6 -0
  445. data/templates/default/docstring/html/private.erb +4 -0
  446. data/templates/default/docstring/html/returns_void.erb +1 -0
  447. data/templates/default/docstring/html/text.erb +1 -0
  448. data/templates/default/docstring/html/todo.erb +6 -0
  449. data/templates/default/docstring/setup.rb +51 -0
  450. data/templates/default/docstring/text/abstract.erb +2 -0
  451. data/templates/default/docstring/text/deprecated.erb +2 -0
  452. data/templates/default/docstring/text/index.erb +2 -0
  453. data/templates/default/docstring/text/note.erb +4 -0
  454. data/templates/default/docstring/text/private.erb +2 -0
  455. data/templates/default/docstring/text/returns_void.erb +1 -0
  456. data/templates/default/docstring/text/text.erb +1 -0
  457. data/templates/default/docstring/text/todo.erb +4 -0
  458. data/templates/default/fulldoc/html/css/common.css +1 -0
  459. data/templates/default/fulldoc/html/css/full_list.css +57 -0
  460. data/templates/default/fulldoc/html/css/style.css +338 -0
  461. data/templates/default/fulldoc/html/frames.erb +28 -0
  462. data/templates/default/fulldoc/html/full_list.erb +40 -0
  463. data/templates/default/fulldoc/html/full_list_class.erb +2 -0
  464. data/templates/default/fulldoc/html/full_list_file.erb +5 -0
  465. data/templates/default/fulldoc/html/full_list_method.erb +8 -0
  466. data/templates/default/fulldoc/html/js/app.js +214 -0
  467. data/templates/default/fulldoc/html/js/full_list.js +178 -0
  468. data/templates/default/fulldoc/html/js/jquery.js +4 -0
  469. data/templates/default/fulldoc/html/setup.rb +199 -0
  470. data/templates/default/layout/dot/header.erb +6 -0
  471. data/templates/default/layout/dot/setup.rb +14 -0
  472. data/templates/default/layout/html/breadcrumb.erb +13 -0
  473. data/templates/default/layout/html/files.erb +11 -0
  474. data/templates/default/layout/html/footer.erb +5 -0
  475. data/templates/default/layout/html/headers.erb +14 -0
  476. data/templates/default/layout/html/index.erb +2 -0
  477. data/templates/default/layout/html/layout.erb +20 -0
  478. data/templates/default/layout/html/listing.erb +4 -0
  479. data/templates/default/layout/html/objects.erb +32 -0
  480. data/templates/default/layout/html/script_setup.erb +5 -0
  481. data/templates/default/layout/html/search.erb +8 -0
  482. data/templates/default/layout/html/setup.rb +71 -0
  483. data/templates/default/method/html/header.erb +16 -0
  484. data/templates/default/method/setup.rb +3 -0
  485. data/templates/default/method/text/header.erb +1 -0
  486. data/templates/default/method_details/html/header.erb +3 -0
  487. data/templates/default/method_details/html/method_signature.erb +25 -0
  488. data/templates/default/method_details/html/source.erb +10 -0
  489. data/templates/default/method_details/setup.rb +10 -0
  490. data/templates/default/method_details/text/header.erb +10 -0
  491. data/templates/default/method_details/text/method_signature.erb +12 -0
  492. data/templates/default/method_details/text/setup.rb +10 -0
  493. data/templates/default/module/dot/child.erb +1 -0
  494. data/templates/default/module/dot/dependencies.erb +3 -0
  495. data/templates/default/module/dot/header.erb +6 -0
  496. data/templates/default/module/dot/info.erb +14 -0
  497. data/templates/default/module/dot/setup.rb +14 -0
  498. data/templates/default/module/html/attribute_details.erb +10 -0
  499. data/templates/default/module/html/attribute_summary.erb +8 -0
  500. data/templates/default/module/html/box_info.erb +37 -0
  501. data/templates/default/module/html/children.erb +8 -0
  502. data/templates/default/module/html/constant_summary.erb +13 -0
  503. data/templates/default/module/html/defines.erb +3 -0
  504. data/templates/default/module/html/header.erb +5 -0
  505. data/templates/default/module/html/inherited_attributes.erb +14 -0
  506. data/templates/default/module/html/inherited_constants.erb +8 -0
  507. data/templates/default/module/html/inherited_methods.erb +19 -0
  508. data/templates/default/module/html/item_summary.erb +40 -0
  509. data/templates/default/module/html/method_details_list.erb +9 -0
  510. data/templates/default/module/html/method_summary.erb +14 -0
  511. data/templates/default/module/html/methodmissing.erb +12 -0
  512. data/templates/default/module/html/pre_docstring.erb +1 -0
  513. data/templates/default/module/setup.rb +164 -0
  514. data/templates/default/module/text/children.erb +10 -0
  515. data/templates/default/module/text/class_meths_list.erb +8 -0
  516. data/templates/default/module/text/extends.erb +8 -0
  517. data/templates/default/module/text/header.erb +7 -0
  518. data/templates/default/module/text/includes.erb +8 -0
  519. data/templates/default/module/text/instance_meths_list.erb +8 -0
  520. data/templates/default/module/text/setup.rb +12 -0
  521. data/templates/default/onefile/html/files.erb +5 -0
  522. data/templates/default/onefile/html/headers.erb +6 -0
  523. data/templates/default/onefile/html/layout.erb +17 -0
  524. data/templates/default/onefile/html/readme.erb +3 -0
  525. data/templates/default/onefile/html/setup.rb +61 -0
  526. data/templates/default/root/dot/child.erb +3 -0
  527. data/templates/default/root/dot/setup.rb +5 -0
  528. data/templates/default/root/html/setup.rb +1 -0
  529. data/templates/default/tags/html/example.erb +11 -0
  530. data/templates/default/tags/html/index.erb +3 -0
  531. data/templates/default/tags/html/option.erb +24 -0
  532. data/templates/default/tags/html/overload.erb +14 -0
  533. data/templates/default/tags/html/see.erb +8 -0
  534. data/templates/default/tags/html/tag.erb +20 -0
  535. data/templates/default/tags/setup.rb +55 -0
  536. data/templates/default/tags/text/example.erb +12 -0
  537. data/templates/default/tags/text/index.erb +1 -0
  538. data/templates/default/tags/text/option.erb +20 -0
  539. data/templates/default/tags/text/overload.erb +19 -0
  540. data/templates/default/tags/text/see.erb +11 -0
  541. data/templates/default/tags/text/tag.erb +13 -0
  542. data/templates/guide/class/html/setup.rb +1 -0
  543. data/templates/guide/docstring/html/setup.rb +1 -0
  544. data/templates/guide/fulldoc/html/css/style.css +108 -0
  545. data/templates/guide/fulldoc/html/js/app.js +33 -0
  546. data/templates/guide/fulldoc/html/setup.rb +73 -0
  547. data/templates/guide/layout/html/layout.erb +81 -0
  548. data/templates/guide/layout/html/setup.rb +28 -0
  549. data/templates/guide/method/html/header.erb +18 -0
  550. data/templates/guide/method/html/setup.rb +21 -0
  551. data/templates/guide/module/html/header.erb +7 -0
  552. data/templates/guide/module/html/method_list.erb +5 -0
  553. data/templates/guide/module/html/setup.rb +26 -0
  554. data/templates/guide/onefile/html/files.erb +4 -0
  555. data/templates/guide/onefile/html/setup.rb +5 -0
  556. data/templates/guide/onefile/html/toc.erb +3 -0
  557. data/templates/guide/tags/html/setup.rb +8 -0
  558. metadata +689 -0
@@ -0,0 +1,625 @@
1
+ begin require 'ripper'; rescue LoadError; end
2
+
3
+ module YARD
4
+ module Parser
5
+ module Ruby
6
+ # Ruby 1.9 parser
7
+ # @!attribute [r] encoding_line
8
+ # @!attribute [r] shebang_line
9
+ # @!attribute [r] enumerator
10
+ class RubyParser < Parser::Base
11
+ def initialize(source, filename)
12
+ @parser = RipperParser.new(source, filename)
13
+ end
14
+
15
+ def parse; @parser.parse end
16
+ def tokenize; @parser.tokens end
17
+ def enumerator; @parser.enumerator end
18
+ def shebang_line; @parser.shebang_line end
19
+ def encoding_line; @parser.encoding_line end
20
+ end
21
+
22
+ # Internal parser class
23
+ # @since 0.5.6
24
+ class RipperParser < Ripper
25
+ attr_reader :ast, :charno, :comments, :file, :tokens
26
+ attr_reader :shebang_line, :encoding_line
27
+ alias root ast
28
+
29
+ def initialize(source, filename, *args)
30
+ super
31
+ @last_ns_token = nil
32
+ @file = filename
33
+ @source = source
34
+ @tokens = []
35
+ @comments = {}
36
+ @comments_range = {}
37
+ @comments_flags = {}
38
+ @heredoc_tokens = nil
39
+ @heredoc_state = nil
40
+ @map = {}
41
+ @ns_charno = 0
42
+ @list = []
43
+ @charno = 0
44
+ @shebang_line = nil
45
+ @encoding_line = nil
46
+ @file_encoding = nil
47
+ end
48
+
49
+ def parse
50
+ @ast = super
51
+ @ast.full_source = @source
52
+ @ast.file = @file
53
+ freeze_tree
54
+ insert_comments
55
+ self
56
+ end
57
+
58
+ def enumerator
59
+ ast.children
60
+ end
61
+
62
+ def file_encoding
63
+ return nil unless defined?(::Encoding)
64
+ return @file_encoding if @file_encoding
65
+ return Encoding.default_internal unless @encoding_line
66
+ if match = @encoding_line.match(SourceParser::ENCODING_LINE)
67
+ @file_encoding = match.captures.last
68
+ end
69
+ end
70
+
71
+ private
72
+
73
+ MAPPINGS = {
74
+ :BEGIN => "BEGIN",
75
+ :END => "END",
76
+ :alias => "alias",
77
+ :array => :lbracket,
78
+ :arg_paren => :lparen,
79
+ :begin => "begin",
80
+ :blockarg => "&",
81
+ :brace_block => :lbrace,
82
+ :break => "break",
83
+ :case => "case",
84
+ :class => "class",
85
+ :def => "def",
86
+ :defined => "defined?",
87
+ :defs => "def",
88
+ :do_block => "do",
89
+ :else => "else",
90
+ :elsif => "elsif",
91
+ :ensure => "ensure",
92
+ :for => "for",
93
+ :hash => :lbrace,
94
+ :if => "if",
95
+ :lambda => [:tlambda, "lambda"],
96
+ :module => "module",
97
+ :next => "next",
98
+ :paren => :lparen,
99
+ :qwords_literal => :qwords_beg,
100
+ :redo => "redo",
101
+ :regexp_literal => :regexp_beg,
102
+ :rescue => "rescue",
103
+ :rest_param => "*",
104
+ :retry => "retry",
105
+ :return => "return",
106
+ :return0 => "return",
107
+ :sclass => "class",
108
+ :string_embexpr => :embexpr_beg,
109
+ :string_literal => [:tstring_beg, :heredoc_beg],
110
+ :super => "super",
111
+ :symbol => :symbeg,
112
+ :top_const_ref => "::",
113
+ :undef => "undef",
114
+ :unless => "unless",
115
+ :until => "until",
116
+ :when => "when",
117
+ :while => "while",
118
+ :xstring_literal => :backtick,
119
+ :yield => "yield",
120
+ :yield0 => "yield",
121
+ :zsuper => "super"
122
+ }
123
+ REV_MAPPINGS = {}
124
+
125
+ AST_TOKENS = [:CHAR, :backref, :const, :cvar, :gvar, :heredoc_end, :ident,
126
+ :int, :float, :ivar, :label, :period, :regexp_end, :tstring_content, :backtick]
127
+
128
+ MAPPINGS.each do |k, v|
129
+ if Array === v
130
+ v.each {|_v| (REV_MAPPINGS[_v] ||= []) << k }
131
+ else
132
+ (REV_MAPPINGS[v] ||= []) << k
133
+ end
134
+ end
135
+
136
+ PARSER_EVENT_TABLE.each do |event, arity|
137
+ node_class = AstNode.node_class_for(event)
138
+
139
+ if /_new\z/ =~ event.to_s and arity == 0
140
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
141
+ def on_#{event}(*args)
142
+ #{node_class}.new(:list, args, :listchar => charno...charno, :listline => lineno..lineno)
143
+ end
144
+ eof
145
+ elsif /_add(_.+)?\z/ =~ event.to_s
146
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
147
+ begin; undef on_#{event}; rescue NameError; end
148
+ def on_#{event}(list, item)
149
+ list.push(item)
150
+ list
151
+ end
152
+ eof
153
+ elsif MAPPINGS.has_key?(event)
154
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
155
+ begin; undef on_#{event}; rescue NameError; end
156
+ def on_#{event}(*args)
157
+ visit_event #{node_class}.new(:#{event}, args)
158
+ end
159
+ eof
160
+ else
161
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
162
+ begin; undef on_#{event}; rescue NameError; end
163
+ def on_#{event}(*args)
164
+ #{node_class}.new(:#{event}, args, :listline => lineno..lineno, :listchar => charno...charno)
165
+ end
166
+ eof
167
+ end
168
+ end
169
+
170
+ SCANNER_EVENTS.each do |event|
171
+ ast_token = AST_TOKENS.include?(event)
172
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
173
+ begin; undef on_#{event}; rescue NameError; end
174
+ def on_#{event}(tok)
175
+ visit_ns_token(:#{event}, tok, #{ast_token.inspect})
176
+ end
177
+ eof
178
+ end
179
+
180
+ REV_MAPPINGS.select {|k,v| k.is_a?(Symbol) }.each do |pair|
181
+ event, value = *pair
182
+ ast_token = AST_TOKENS.include?(event)
183
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
184
+ begin; undef on_#{event}; rescue NameError; end
185
+ def on_#{event}(tok)
186
+ (@map[:#{event}] ||= []) << [lineno, charno]
187
+ visit_ns_token(:#{event}, tok, #{ast_token.inspect})
188
+ end
189
+ eof
190
+ end
191
+
192
+ [:kw, :op].each do |event|
193
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
194
+ begin; undef on_#{event}; rescue NameError; end
195
+ def on_#{event}(tok)
196
+ unless @last_ns_token == [:kw, "def"] ||
197
+ (@tokens.last && @tokens.last[0] == :symbeg)
198
+ (@map[tok] ||= []) << [lineno, charno]
199
+ end
200
+ visit_ns_token(:#{event}, tok, true)
201
+ end
202
+ eof
203
+ end
204
+
205
+ [:sp, :nl, :ignored_nl].each do |event|
206
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
207
+ begin; undef on_#{event}; rescue NameError; end
208
+ def on_#{event}(tok)
209
+ add_token(:#{event}, tok)
210
+ @charno += tok.length
211
+ end
212
+ eof
213
+ end
214
+
215
+ def visit_event(node)
216
+ map = @map[MAPPINGS[node.type]]
217
+ lstart, sstart = *(map ? map.pop : [lineno, @ns_charno - 1])
218
+ node.source_range = Range.new(sstart, @ns_charno - 1)
219
+ node.line_range = Range.new(lstart, lineno)
220
+ if node.respond_to?(:block)
221
+ sr, lr = node.block.source_range, node.block.line_range
222
+ node.block.source_range = Range.new(sr.first, @tokens.last[2][1])
223
+ node.block.line_range = Range.new(lr.first, @tokens.last[2][0])
224
+ end
225
+ node
226
+ end
227
+
228
+ def visit_event_arr(node)
229
+ mapping = MAPPINGS[node.type].find {|k| @map[k] && !@map[k].empty? }
230
+ lstart, sstart = *@map[mapping].pop
231
+ node.source_range = Range.new(sstart, @ns_charno - 1)
232
+ node.line_range = Range.new(lstart, lineno)
233
+ node
234
+ end
235
+
236
+ def visit_ns_token(token, data, ast_token = false)
237
+ add_token(token, data)
238
+ ch = charno
239
+ @last_ns_token = [token, data]
240
+ @charno += data.length
241
+ @ns_charno = charno
242
+ if ast_token
243
+ AstNode.new(token, [data], :line => lineno..lineno, :char => ch..charno-1, :token => true)
244
+ end
245
+ end
246
+
247
+ def add_token(token, data)
248
+ if @tokens.last && @tokens.last[0] == :symbeg
249
+ @tokens[-1] = [:symbol, ":" + data, @tokens.last[2]]
250
+ elsif @heredoc_state == :started
251
+ @heredoc_tokens << [token, data, [lineno, charno]]
252
+
253
+ # fix ripper encoding of heredoc bug
254
+ # (see http://bugs.ruby-lang.org/issues/6200)
255
+ data.force_encoding(file_encoding) if file_encoding
256
+
257
+ @heredoc_state = :ended if token == :heredoc_end
258
+ elsif (token == :nl || token == :comment) && @heredoc_state == :ended
259
+ @heredoc_tokens.unshift([token, data, [lineno, charno]])
260
+ @tokens += @heredoc_tokens
261
+ @heredoc_tokens = nil
262
+ @heredoc_state = nil
263
+ else
264
+ @tokens << [token, data, [lineno, charno]]
265
+ if token == :heredoc_beg
266
+ @heredoc_state = :started
267
+ @heredoc_tokens = []
268
+ end
269
+ end
270
+ end
271
+
272
+ undef on_program
273
+ undef on_assoc_new
274
+ undef on_array
275
+ undef on_hash
276
+ undef on_bare_assoc_hash
277
+ undef on_assoclist_from_args
278
+ undef on_aref
279
+ undef on_aref_field
280
+ undef on_lbracket
281
+ undef on_rbracket
282
+ undef on_qwords_new
283
+ undef on_qwords_add
284
+ undef on_string_literal
285
+ undef on_lambda
286
+ undef on_unary
287
+ undef on_string_content
288
+ undef on_rescue
289
+ undef on_void_stmt
290
+ undef on_params
291
+ undef on_label
292
+ undef on_comment
293
+ undef on_embdoc_beg
294
+ undef on_embdoc
295
+ undef on_embdoc_end
296
+ undef on_parse_error
297
+ undef on_bodystmt
298
+ undef on_top_const_ref
299
+ undef on_const_path_ref
300
+
301
+ def on_program(*args)
302
+ args.first
303
+ end
304
+
305
+ def on_body_stmt(*args)
306
+ args.compact.size == 1 ? args.first : AstNode.new(:list, args)
307
+ end
308
+ alias on_bodystmt on_body_stmt
309
+
310
+ def on_assoc_new(*args)
311
+ AstNode.new(:assoc, args)
312
+ end
313
+
314
+ def on_hash(*args)
315
+ visit_event AstNode.new(:hash, args.first || [])
316
+ end
317
+
318
+ def on_bare_assoc_hash(*args)
319
+ AstNode.new(:list, args.first)
320
+ end
321
+
322
+ def on_assoclist_from_args(*args)
323
+ args.first
324
+ end
325
+
326
+ def on_unary(op, val)
327
+ map = @map[op.to_s[0,1]]
328
+ lstart, sstart = *(map ? map.pop : [lineno, @ns_charno - 1])
329
+ node = AstNode.node_class_for(:unary).new(:unary, [op, val])
330
+ node.source_range = Range.new(sstart, @ns_charno - 1)
331
+ node.line_range = Range.new(lstart, lineno)
332
+ node
333
+ end
334
+
335
+ def on_aref(*args)
336
+ @map[:lbracket].pop
337
+ ll, lc = *@map[:aref].pop
338
+ sr = args.first.source_range.first..lc
339
+ lr = args.first.line_range.first..ll
340
+ AstNode.new(:aref, args, :char => sr, :line => lr)
341
+ end
342
+
343
+ def on_aref_field(*args)
344
+ @map[:lbracket].pop
345
+ AstNode.new(:aref_field, args,
346
+ :listline => lineno..lineno, :listchar => charno...charno)
347
+ end
348
+
349
+ def on_array(other)
350
+ node = AstNode.node_class_for(:array).new(:array, [other])
351
+ map = @map[MAPPINGS[node.type]]
352
+ if map && !map.empty?
353
+ lstart, sstart = *map.pop
354
+ node.source_range = Range.new(sstart, @ns_charno - 1)
355
+ node.line_range = Range.new(lstart, lineno)
356
+ else
357
+ sstart = other.source_range.begin
358
+ lstart = other.line_range.begin
359
+ node.source_range = Range.new(sstart, @ns_charno - 1)
360
+ node.line_range = Range.new(lstart, lineno)
361
+ node.source_range = other.source_range
362
+ node.line_range = other.line_range
363
+ end
364
+ node
365
+ end
366
+
367
+ def on_lbracket(tok)
368
+ (@map[:lbracket] ||= []) << [lineno, charno]
369
+ visit_ns_token(:lbracket, tok, false)
370
+ end
371
+
372
+ def on_rbracket(tok)
373
+ (@map[:aref] ||= []) << [lineno, charno]
374
+ visit_ns_token(:rbracket, tok, false)
375
+ end
376
+
377
+ def on_top_const_ref(*args)
378
+ type = :top_const_ref
379
+ node = AstNode.node_class_for(type).new(type, args)
380
+ mapping = @map[MAPPINGS[type]]
381
+ extra_op = mapping.last[1] + 2 == charno ? mapping.pop : nil
382
+ lstart, sstart = *mapping.pop
383
+ node.source_range = Range.new(sstart, args.last.source_range.last)
384
+ node.line_range = Range.new(lstart, args.last.line_range.last)
385
+ mapping.push(extra_op) if extra_op
386
+ node
387
+ end
388
+
389
+ def on_const_path_ref(*args)
390
+ ReferenceNode.new(:const_path_ref, args, :listline => lineno..lineno, :listchar => charno..charno)
391
+ end
392
+
393
+ [:if_mod, :unless_mod, :while_mod].each do |kw|
394
+ node_class = AstNode.node_class_for(kw)
395
+ module_eval(<<-eof, __FILE__, __LINE__ + 1)
396
+ begin; undef on_#{kw}; rescue NameError; end
397
+ def on_#{kw}(*args)
398
+ sr = args.last.source_range.first..args.first.source_range.last
399
+ lr = args.last.line_range.first..args.first.line_range.last
400
+ #{node_class}.new(:#{kw}, args, :line => lr, :char => sr)
401
+ end
402
+ eof
403
+ end
404
+
405
+ def on_qwords_new(*args)
406
+ node = LiteralNode.new(:qwords_literal, args)
407
+ if @map[:qwords_beg]
408
+ lstart, sstart = *@map[:qwords_beg].pop
409
+ node.source_range = Range.new(sstart, @ns_charno-1)
410
+ node.line_range = Range.new(lstart, lineno)
411
+ end
412
+ node
413
+ end
414
+
415
+ def on_qwords_add(list, item)
416
+ last = @source[@ns_charno,1] == "\n" ? @ns_charno - 1 : @ns_charno
417
+ list.source_range = (list.source_range.first..last)
418
+ list.line_range = (list.line_range.first..lineno)
419
+ list.push(item)
420
+ list
421
+ end
422
+
423
+ def on_string_literal(*args)
424
+ node = visit_event_arr(LiteralNode.new(:string_literal, args))
425
+ if args.size == 1
426
+ r = args[0].source_range
427
+ if node.source_range != Range.new(r.first - 1, r.last + 1)
428
+ klass = AstNode.node_class_for(node[0].type)
429
+ r = Range.new(node.source_range.first + 1, node.source_range.last - 1)
430
+ node[0] = klass.new(node[0].type, [@source[r]], :line => node.line_range, :char => r)
431
+ end
432
+ end
433
+ node
434
+ end
435
+
436
+ def on_lambda(*args)
437
+ visit_event_arr AstNode.new(:lambda, args)
438
+ end
439
+
440
+ def on_string_content(*args)
441
+ AstNode.new(:string_content, args, :listline => lineno..lineno, :listchar => charno..charno)
442
+ end
443
+
444
+ def on_rescue(exc, *args)
445
+ exc = AstNode.new(:list, exc) if exc
446
+ visit_event AstNode.new(:rescue, [exc, *args])
447
+ end
448
+
449
+ def on_void_stmt
450
+ AstNode.new(:void_stmt, [], :line => lineno..lineno, :char => charno...charno)
451
+ end
452
+
453
+ def on_params(*args)
454
+ args.map! do |arg|
455
+ if arg.class == Array
456
+ if arg.first.class == Array
457
+ arg.map! do |sub_arg|
458
+ if sub_arg.class == Array
459
+ AstNode.new(:default_arg, sub_arg, :listline => lineno..lineno, :listchar => charno..charno)
460
+ else
461
+ sub_arg
462
+ end
463
+ end
464
+ end
465
+ AstNode.new(:list, arg, :listline => lineno..lineno, :listchar => charno..charno)
466
+ else
467
+ arg
468
+ end
469
+ end
470
+ ParameterNode.new(:params, args, :listline => lineno..lineno, :listchar => charno..charno)
471
+ end
472
+
473
+ def on_label(data)
474
+ add_token(:label, data)
475
+ ch = charno
476
+ @charno += data.length
477
+ @ns_charno = charno
478
+ AstNode.new(:label, [data[0...-1]], :line => lineno..lineno, :char => ch..charno-1, :token => true)
479
+ end
480
+
481
+ def on_comment(comment)
482
+ not_comment = false
483
+ if @last_ns_token.nil? || @last_ns_token.size == 0
484
+ if comment =~ SourceParser::SHEBANG_LINE && !@encoding_line
485
+ @shebang_line = comment
486
+ not_comment = true
487
+ elsif comment =~ SourceParser::ENCODING_LINE
488
+ @encoding_line = comment
489
+ not_comment = true
490
+ end
491
+ end
492
+
493
+ ch = charno
494
+ visit_ns_token(:comment, comment)
495
+ if not_comment
496
+ @last_ns_token = nil
497
+ return
498
+ end
499
+
500
+ source_range = ch..(charno-1)
501
+ comment = comment.gsub(/^(\#+)\s{0,1}/, '').chomp
502
+ append_comment = @comments[lineno - 1]
503
+
504
+ hash_flag = $1 == '##' ? true : false
505
+
506
+ if append_comment && @comments_last_column && @comments_last_column == column
507
+ @comments.delete(lineno - 1)
508
+ @comments_flags[lineno] = @comments_flags[lineno - 1]
509
+ @comments_flags.delete(lineno - 1)
510
+ range = @comments_range.delete(lineno - 1)
511
+ source_range = range.first..source_range.last
512
+ comment = append_comment + "\n" + comment
513
+ end
514
+
515
+ @comments[lineno] = comment
516
+ @comments_range[lineno] = source_range
517
+ @comments_flags[lineno] = hash_flag if !append_comment
518
+ @comments_last_column = column
519
+ end
520
+
521
+ def on_embdoc_beg(text)
522
+ visit_ns_token(:embdoc_beg, text)
523
+ @embdoc_start = charno-text.length
524
+ @embdoc = ""
525
+ end
526
+
527
+ def on_embdoc(text)
528
+ visit_ns_token(:embdoc, text)
529
+ @embdoc << text
530
+ end
531
+
532
+ def on_embdoc_end(text)
533
+ visit_ns_token(:embdoc_end, text)
534
+ @comments_last_column = nil
535
+ @comments[lineno] = @embdoc
536
+ @comments_range[lineno] = @embdoc_start...charno
537
+ @embdoc_start = nil
538
+ @embdoc = nil
539
+ end
540
+
541
+ def on_parse_error(msg)
542
+ raise ParserSyntaxError, "syntax error in `#{file}`:(#{lineno},#{column}): #{msg}"
543
+ end
544
+
545
+ def insert_comments
546
+ root.traverse do |node|
547
+ next if node.type == :comment || node.type == :list || node.parent.type != :list
548
+ # check upwards from line before node; check node's line at the end
549
+ ((node.line-1).downto(node.line-2).to_a + [node.line]).each do |line|
550
+ comment = @comments[line]
551
+ if comment && !comment.empty?
552
+ add_comment(line, node)
553
+ break
554
+ end
555
+ end
556
+
557
+ @comments.keys.each do |line|
558
+ if node.line > line
559
+ add_comment(line, nil, node)
560
+ end
561
+ end
562
+ end
563
+
564
+ # insert any lone unadded comments before node
565
+ root.traverse do |node|
566
+ next if node.type == :list || node.parent.type != :list
567
+ @comments.keys.each do |line|
568
+ if node.line_range.include?(line)
569
+ pick = nil
570
+ node.traverse do |subnode|
571
+ next unless subnode.type == :list
572
+ pick ||= subnode
573
+ next unless subnode.line_range.include?(line)
574
+ pick = subnode
575
+ end
576
+ add_comment(line, nil, pick, true) if pick
577
+ end
578
+ end
579
+ end if @comments.size > 0
580
+
581
+ # insert all remaining comments
582
+ @comments.each do |line, comment|
583
+ add_comment(line, nil, root, true)
584
+ end
585
+
586
+ @comments = {}
587
+ end
588
+
589
+ def add_comment(line, node = nil, before_node = nil, into = false)
590
+ comment = @comments[line]
591
+ source_range = @comments_range[line]
592
+ line_range = ((line - comment.count("\n"))..line)
593
+ if node.nil?
594
+ node = CommentNode.new(:comment, [comment], :line => line_range, :char => source_range)
595
+ if into
596
+ before_node.push(node)
597
+ before_node.unfreeze
598
+ node.parent = before_node
599
+ elsif before_node
600
+ parent_node = before_node.parent
601
+ idx = parent_node.index(before_node)
602
+ parent_node.insert(idx, node)
603
+ parent_node.unfreeze
604
+ node.parent = parent_node
605
+ end
606
+ end
607
+ node.docstring = comment
608
+ node.docstring_hash_flag = @comments_flags[line]
609
+ node.docstring_range = line_range
610
+ @comments.delete(line)
611
+ @comments_range.delete(line)
612
+ @comments_flags.delete(line)
613
+ end
614
+
615
+ def freeze_tree(node = nil)
616
+ node ||= root
617
+ node.children.each do |child|
618
+ child.parent = node
619
+ freeze_tree(child)
620
+ end
621
+ end
622
+ end if defined?(::Ripper)
623
+ end
624
+ end
625
+ end