yard 0.7.5 → 0.8.0

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 (339) hide show
  1. data/.yardopts +10 -2
  2. data/ChangeLog +1263 -38
  3. data/LEGAL +5 -5
  4. data/LICENSE +1 -1
  5. data/README.md +91 -82
  6. data/Rakefile +6 -6
  7. data/benchmarks/builtins_vs_eval.rb +1 -1
  8. data/benchmarks/erb_vs_erubis.rb +4 -4
  9. data/benchmarks/generation.rb +5 -5
  10. data/benchmarks/parsing.rb +2 -2
  11. data/benchmarks/registry_store_types.rb +48 -0
  12. data/bin/yard +9 -1
  13. data/bin/yardoc +9 -1
  14. data/bin/yri +10 -2
  15. data/docs/CodeObjects.md +10 -10
  16. data/docs/GettingStarted.md +85 -83
  17. data/docs/Handlers.md +21 -21
  18. data/docs/Overview.md +7 -7
  19. data/docs/Parser.md +30 -30
  20. data/docs/Tags.md +250 -554
  21. data/docs/TagsArch.md +123 -0
  22. data/docs/Templates.md +58 -80
  23. data/docs/WhatsNew.md +378 -133
  24. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  25. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  26. data/docs/templates/default/layout/html/setup.rb +8 -0
  27. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  28. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  29. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  30. data/docs/templates/plugin.rb +65 -0
  31. data/lib/yard.rb +1 -10
  32. data/lib/yard/autoload.rb +75 -27
  33. data/lib/yard/cli/command.rb +5 -2
  34. data/lib/yard/cli/command_parser.rb +3 -2
  35. data/lib/yard/cli/diff.rb +1 -1
  36. data/lib/yard/cli/i18n.rb +69 -0
  37. data/lib/yard/cli/list.rb +1 -1
  38. data/lib/yard/cli/server.rb +30 -7
  39. data/lib/yard/cli/stats.rb +5 -6
  40. data/lib/yard/cli/yardoc.rb +95 -45
  41. data/lib/yard/cli/yri.rb +24 -3
  42. data/lib/yard/code_objects/base.rb +35 -4
  43. data/lib/yard/code_objects/extra_file_object.rb +1 -1
  44. data/lib/yard/code_objects/macro_object.rb +56 -99
  45. data/lib/yard/code_objects/method_object.rb +44 -6
  46. data/lib/yard/config.rb +18 -8
  47. data/lib/yard/core_ext/symbol_hash.rb +1 -1
  48. data/lib/yard/docstring.rb +45 -85
  49. data/lib/yard/docstring_parser.rb +269 -0
  50. data/lib/yard/handlers/base.rb +129 -118
  51. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  52. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  53. data/lib/yard/handlers/c/base.rb +110 -0
  54. data/lib/yard/handlers/c/class_handler.rb +26 -0
  55. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  56. data/lib/yard/handlers/c/handler_methods.rb +165 -0
  57. data/lib/yard/handlers/c/init_handler.rb +16 -0
  58. data/lib/yard/handlers/c/method_handler.rb +35 -0
  59. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  60. data/lib/yard/handlers/c/module_handler.rb +16 -0
  61. data/lib/yard/handlers/c/override_comment_handler.rb +22 -0
  62. data/lib/yard/handlers/c/path_handler.rb +10 -0
  63. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  64. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  65. data/lib/yard/handlers/processor.rb +41 -30
  66. data/lib/yard/handlers/ruby/alias_handler.rb +0 -2
  67. data/lib/yard/handlers/ruby/attribute_handler.rb +16 -17
  68. data/lib/yard/handlers/ruby/base.rb +10 -6
  69. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  70. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  71. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +71 -0
  72. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +0 -3
  73. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +16 -17
  74. data/lib/yard/handlers/ruby/legacy/base.rb +28 -6
  75. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  76. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  77. data/lib/yard/handlers/ruby/legacy/method_handler.rb +0 -2
  78. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +1 -1
  79. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  80. data/lib/yard/handlers/ruby/method_handler.rb +10 -15
  81. data/lib/yard/handlers/ruby/mixin_handler.rb +1 -1
  82. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  83. data/lib/yard/handlers/ruby/struct_handler_methods.rb +3 -2
  84. data/lib/yard/i18n/pot_generator.rb +281 -0
  85. data/lib/yard/i18n/text.rb +72 -0
  86. data/lib/yard/logging.rb +3 -7
  87. data/lib/yard/options.rb +216 -0
  88. data/lib/yard/parser/c/c_parser.rb +225 -0
  89. data/lib/yard/parser/c/comment_parser.rb +131 -0
  90. data/lib/yard/parser/c/statement.rb +63 -0
  91. data/lib/yard/parser/ruby/ast_node.rb +91 -1
  92. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +1 -0
  93. data/lib/yard/parser/ruby/legacy/statement.rb +7 -2
  94. data/lib/yard/parser/ruby/legacy/statement_list.rb +13 -22
  95. data/lib/yard/parser/ruby/ruby_parser.rb +87 -26
  96. data/lib/yard/parser/source_parser.rb +89 -88
  97. data/lib/yard/rake/yardoc_task.rb +1 -1
  98. data/lib/yard/registry.rb +21 -10
  99. data/lib/yard/registry_store.rb +48 -0
  100. data/lib/yard/serializers/file_system_serializer.rb +18 -20
  101. data/lib/yard/serializers/yardoc_serializer.rb +1 -0
  102. data/lib/yard/server/adapter.rb +2 -2
  103. data/lib/yard/server/commands/base.rb +1 -1
  104. data/lib/yard/server/commands/display_object_command.rb +13 -6
  105. data/lib/yard/server/commands/frames_command.rb +4 -21
  106. data/lib/yard/server/commands/library_command.rb +57 -11
  107. data/lib/yard/server/commands/list_command.rb +10 -34
  108. data/lib/yard/server/commands/search_command.rb +8 -2
  109. data/lib/yard/server/doc_server_helper.rb +34 -0
  110. data/lib/yard/server/rack_adapter.rb +5 -1
  111. data/lib/yard/server/router.rb +4 -10
  112. data/lib/yard/server/static_caching.rb +2 -2
  113. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +2 -2
  114. data/lib/yard/server/templates/default/fulldoc/html/js/live.js +0 -15
  115. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +3 -3
  116. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  117. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +1 -1
  118. data/lib/yard/server/templates/doc_server/search/html/setup.rb +1 -1
  119. data/lib/yard/tags/default_factory.rb +31 -4
  120. data/lib/yard/tags/directives.rb +593 -0
  121. data/lib/yard/tags/library.rb +437 -35
  122. data/lib/yard/templates/engine.rb +17 -12
  123. data/lib/yard/templates/helpers/base_helper.rb +8 -2
  124. data/lib/yard/templates/helpers/html_helper.rb +57 -14
  125. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +1 -1
  126. data/lib/yard/templates/helpers/markup_helper.rb +9 -9
  127. data/lib/yard/templates/helpers/text_helper.rb +2 -2
  128. data/lib/yard/templates/template.rb +42 -13
  129. data/lib/yard/templates/template_options.rb +81 -0
  130. data/spec/cli/command_parser_spec.rb +4 -4
  131. data/spec/cli/command_spec.rb +3 -3
  132. data/spec/cli/config_spec.rb +13 -13
  133. data/spec/cli/diff_spec.rb +13 -10
  134. data/spec/cli/gems_spec.rb +12 -12
  135. data/spec/cli/help_spec.rb +2 -2
  136. data/spec/cli/i18n_spec.rb +111 -0
  137. data/spec/cli/server_spec.rb +66 -18
  138. data/spec/cli/stats_spec.rb +15 -15
  139. data/spec/cli/yardoc_spec.rb +124 -97
  140. data/spec/cli/yri_spec.rb +14 -12
  141. data/spec/code_objects/base_spec.rb +104 -46
  142. data/spec/code_objects/class_object_spec.rb +33 -33
  143. data/spec/code_objects/code_object_list_spec.rb +5 -5
  144. data/spec/code_objects/constants_spec.rb +4 -3
  145. data/spec/code_objects/extra_file_object_spec.rb +19 -19
  146. data/spec/code_objects/macro_object_spec.rb +31 -37
  147. data/spec/code_objects/method_object_spec.rb +46 -23
  148. data/spec/code_objects/module_object_spec.rb +16 -16
  149. data/spec/code_objects/namespace_object_spec.rb +6 -6
  150. data/spec/code_objects/proxy_spec.rb +19 -19
  151. data/spec/config_spec.rb +33 -24
  152. data/spec/core_ext/array_spec.rb +1 -1
  153. data/spec/core_ext/file_spec.rb +8 -8
  154. data/spec/core_ext/hash_spec.rb +1 -1
  155. data/spec/core_ext/insertion_spec.rb +3 -3
  156. data/spec/core_ext/module_spec.rb +1 -1
  157. data/spec/core_ext/string_spec.rb +6 -6
  158. data/spec/core_ext/symbol_hash_spec.rb +11 -11
  159. data/spec/docstring_parser_spec.rb +207 -0
  160. data/spec/docstring_spec.rb +33 -146
  161. data/spec/handlers/alias_handler_spec.rb +14 -14
  162. data/spec/handlers/attribute_handler_spec.rb +20 -20
  163. data/spec/handlers/base_spec.rb +16 -16
  164. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  165. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  166. data/spec/handlers/c/class_handler_spec.rb +64 -0
  167. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  168. data/spec/handlers/c/init_handler_spec.rb +36 -0
  169. data/spec/handlers/c/method_handler_spec.rb +228 -0
  170. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  171. data/spec/handlers/c/module_handler_spec.rb +38 -0
  172. data/spec/handlers/c/override_comment_handler_spec.rb +43 -0
  173. data/spec/handlers/c/path_handler_spec.rb +35 -0
  174. data/spec/handlers/c/spec_helper.rb +11 -0
  175. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  176. data/spec/handlers/class_condition_handler_spec.rb +10 -10
  177. data/spec/handlers/class_handler_spec.rb +38 -38
  178. data/spec/handlers/class_variable_handler_spec.rb +1 -1
  179. data/spec/handlers/constant_handler_spec.rb +7 -7
  180. data/spec/handlers/{macro_handler_spec.rb → dsl_handler_spec.rb} +72 -53
  181. data/spec/handlers/examples/alias_handler_001.rb.txt +5 -5
  182. data/spec/handlers/examples/class_condition_handler_001.rb.txt +9 -9
  183. data/spec/handlers/examples/class_handler_001.rb.txt +1 -1
  184. data/spec/handlers/examples/dsl_handler_001.rb.txt +110 -0
  185. data/spec/handlers/examples/exception_handler_001.rb.txt +14 -14
  186. data/spec/handlers/examples/method_condition_handler_001.rb.txt +2 -2
  187. data/spec/handlers/examples/method_handler_001.rb.txt +16 -16
  188. data/spec/handlers/examples/mixin_handler_001.rb.txt +8 -4
  189. data/spec/handlers/examples/private_constant_handler_001.rb.txt +1 -1
  190. data/spec/handlers/examples/visibility_handler_001.rb.txt +3 -3
  191. data/spec/handlers/examples/yield_handler_001.rb.txt +13 -14
  192. data/spec/handlers/exception_handler_spec.rb +9 -9
  193. data/spec/handlers/extend_handler_spec.rb +2 -2
  194. data/spec/handlers/legacy_base_spec.rb +34 -34
  195. data/spec/handlers/method_condition_handler_spec.rb +2 -2
  196. data/spec/handlers/method_handler_spec.rb +33 -33
  197. data/spec/handlers/mixin_handler_spec.rb +13 -9
  198. data/spec/handlers/module_function_handler_spec.rb +82 -0
  199. data/spec/handlers/module_handler_spec.rb +6 -6
  200. data/spec/handlers/private_constant_handler_spec.rb +3 -3
  201. data/spec/handlers/processor_spec.rb +5 -5
  202. data/spec/handlers/ruby/base_spec.rb +10 -6
  203. data/spec/handlers/ruby/legacy/base_spec.rb +11 -7
  204. data/spec/handlers/spec_helper.rb +2 -3
  205. data/spec/handlers/visibility_handler_spec.rb +6 -6
  206. data/spec/handlers/yield_handler_spec.rb +8 -8
  207. data/spec/i18n/pot_generator_spec.rb +244 -0
  208. data/spec/i18n/text_spec.rb +69 -0
  209. data/spec/options_spec.rb +160 -0
  210. data/spec/parser/base_spec.rb +3 -3
  211. data/spec/parser/c_parser_spec.rb +31 -257
  212. data/spec/parser/examples/array.c.txt +187 -187
  213. data/spec/parser/examples/extrafile.c.txt +1 -1
  214. data/spec/parser/examples/override.c.txt +1 -1
  215. data/spec/parser/ruby/ast_node_spec.rb +1 -1
  216. data/spec/parser/ruby/legacy/statement_list_spec.rb +24 -24
  217. data/spec/parser/ruby/legacy/token_list_spec.rb +7 -7
  218. data/spec/parser/ruby/ruby_parser_spec.rb +56 -34
  219. data/spec/parser/source_parser_spec.rb +125 -65
  220. data/spec/parser/tag_parsing_spec.rb +4 -4
  221. data/spec/rake/yardoc_task_spec.rb +10 -8
  222. data/spec/registry_spec.rb +65 -36
  223. data/spec/registry_store_spec.rb +90 -40
  224. data/spec/serializers/file_system_serializer_spec.rb +12 -12
  225. data/spec/serializers/yardoc_serializer_spec.rb +2 -2
  226. data/spec/server/adapter_spec.rb +3 -3
  227. data/spec/server/commands/base_spec.rb +8 -8
  228. data/spec/server/commands/library_command_spec.rb +3 -3
  229. data/spec/server/commands/static_file_command_spec.rb +7 -7
  230. data/spec/server/doc_server_helper_spec.rb +1 -1
  231. data/spec/server/doc_server_serializer_spec.rb +6 -6
  232. data/spec/server/rack_adapter_spec.rb +3 -3
  233. data/spec/server/router_spec.rb +19 -19
  234. data/spec/server/static_caching_spec.rb +4 -4
  235. data/spec/spec_helper.rb +7 -7
  236. data/spec/tags/default_factory_spec.rb +24 -16
  237. data/spec/tags/directives_spec.rb +422 -0
  238. data/spec/tags/library_spec.rb +15 -4
  239. data/spec/tags/overload_tag_spec.rb +6 -6
  240. data/spec/tags/ref_tag_list_spec.rb +8 -8
  241. data/spec/templates/class_spec.rb +7 -7
  242. data/spec/templates/constant_spec.rb +7 -7
  243. data/spec/templates/engine_spec.rb +28 -36
  244. data/spec/templates/examples/class001.html +108 -108
  245. data/spec/templates/examples/class002.html +17 -17
  246. data/spec/templates/examples/constant001.txt +1 -1
  247. data/spec/templates/examples/method001.html +45 -45
  248. data/spec/templates/examples/method002.html +25 -25
  249. data/spec/templates/examples/method003.html +60 -60
  250. data/spec/templates/examples/method004.html +7 -7
  251. data/spec/templates/examples/method005.html +28 -28
  252. data/spec/templates/examples/module001.html +321 -321
  253. data/spec/templates/examples/module001.txt +1 -1
  254. data/spec/templates/examples/module002.html +130 -130
  255. data/spec/templates/examples/module003.html +74 -74
  256. data/spec/templates/examples/module004.html +388 -0
  257. data/spec/templates/helpers/base_helper_spec.rb +32 -32
  258. data/spec/templates/helpers/html_helper_spec.rb +87 -68
  259. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +9 -9
  260. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +16 -16
  261. data/spec/templates/helpers/markup_helper_spec.rb +31 -28
  262. data/spec/templates/helpers/method_helper_spec.rb +7 -7
  263. data/spec/templates/helpers/shared_signature_examples.rb +9 -7
  264. data/spec/templates/helpers/text_helper_spec.rb +3 -3
  265. data/spec/templates/method_spec.rb +13 -13
  266. data/spec/templates/module_spec.rb +70 -24
  267. data/spec/templates/onefile_spec.rb +32 -15
  268. data/spec/templates/section_spec.rb +23 -23
  269. data/spec/templates/spec_helper.rb +31 -1
  270. data/spec/templates/tag_spec.rb +5 -5
  271. data/spec/templates/template_spec.rb +54 -46
  272. data/spec/verifier_spec.rb +5 -5
  273. data/templates/default/class/setup.rb +2 -2
  274. data/templates/default/docstring/html/abstract.erb +1 -1
  275. data/templates/default/docstring/html/note.erb +1 -1
  276. data/templates/default/docstring/html/private.erb +1 -1
  277. data/templates/default/docstring/html/todo.erb +1 -1
  278. data/templates/default/docstring/setup.rb +2 -2
  279. data/templates/default/fulldoc/html/css/full_list.css +4 -2
  280. data/templates/default/fulldoc/html/css/style.css +50 -44
  281. data/templates/default/fulldoc/html/frames.erb +21 -6
  282. data/templates/default/fulldoc/html/full_list.erb +5 -3
  283. data/templates/default/fulldoc/html/{full_list_files.erb → full_list_file.erb} +0 -0
  284. data/templates/default/fulldoc/html/js/app.js +29 -26
  285. data/templates/default/fulldoc/html/js/full_list.js +9 -9
  286. data/templates/default/fulldoc/html/js/jquery.js +4 -16
  287. data/templates/default/fulldoc/html/setup.rb +42 -38
  288. data/templates/default/layout/dot/header.erb +1 -1
  289. data/templates/default/layout/html/breadcrumb.erb +6 -6
  290. data/templates/default/layout/html/files.erb +1 -1
  291. data/templates/default/layout/html/footer.erb +1 -1
  292. data/templates/default/layout/html/headers.erb +3 -6
  293. data/templates/default/layout/html/index.erb +1 -1
  294. data/templates/default/layout/html/layout.erb +3 -7
  295. data/templates/default/layout/html/objects.erb +1 -1
  296. data/templates/default/layout/html/script_setup.erb +5 -0
  297. data/templates/default/layout/html/search.erb +4 -1
  298. data/templates/default/layout/html/setup.rb +8 -8
  299. data/templates/default/method_details/html/method_signature.erb +10 -3
  300. data/templates/default/method_details/setup.rb +1 -0
  301. data/templates/default/module/dot/info.erb +1 -1
  302. data/templates/default/module/dot/setup.rb +2 -2
  303. data/templates/default/module/html/attribute_details.erb +1 -1
  304. data/templates/default/module/html/children.erb +1 -1
  305. data/templates/default/module/html/defines.erb +1 -1
  306. data/templates/default/module/html/inherited_methods.erb +5 -4
  307. data/templates/default/module/html/item_summary.erb +15 -5
  308. data/templates/default/module/html/method_details_list.erb +2 -2
  309. data/templates/default/module/setup.rb +25 -12
  310. data/templates/default/module/text/setup.rb +1 -1
  311. data/templates/default/onefile/html/layout.erb +1 -1
  312. data/templates/default/onefile/html/setup.rb +2 -2
  313. data/templates/default/tags/html/example.erb +4 -2
  314. data/templates/default/tags/html/option.erb +1 -1
  315. data/templates/default/tags/html/overload.erb +1 -1
  316. data/templates/default/tags/html/see.erb +1 -1
  317. data/templates/default/tags/html/tag.erb +1 -1
  318. data/templates/default/tags/setup.rb +4 -3
  319. data/templates/guide/fulldoc/html/css/style.css +8 -8
  320. data/templates/guide/fulldoc/html/js/app.js +6 -6
  321. data/templates/guide/fulldoc/html/setup.rb +12 -12
  322. data/templates/guide/layout/html/layout.erb +11 -11
  323. data/templates/guide/layout/html/setup.rb +9 -9
  324. data/templates/guide/method/html/header.erb +2 -2
  325. data/templates/guide/method/html/setup.rb +1 -1
  326. metadata +68 -18
  327. data/bin/yard-graph +0 -4
  328. data/bin/yard-server +0 -4
  329. data/docs/Glossary.md +0 -12
  330. data/lib/yard/handlers/ruby/legacy/macro_handler.rb +0 -39
  331. data/lib/yard/handlers/ruby/macro_handler.rb +0 -40
  332. data/lib/yard/handlers/ruby/macro_handler_methods.rb +0 -131
  333. data/lib/yard/parser/c_parser.rb +0 -497
  334. data/lib/yard/server/templates/default/layout/html/headers.erb +0 -16
  335. data/lib/yard/server/templates/doc_server/frames/html/frames.erb +0 -13
  336. data/lib/yard/server/templates/doc_server/frames/html/setup.rb +0 -3
  337. data/lib/yard/server/templates/doc_server/full_list/html/full_list.erb +0 -34
  338. data/lib/yard/server/templates/doc_server/full_list/html/setup.rb +0 -20
  339. data/spec/handlers/examples/macro_handler_001.rb.txt +0 -83
@@ -11,6 +11,7 @@ module YARD
11
11
 
12
12
  def parse
13
13
  @parse ||= StatementList.new(@source)
14
+ self
14
15
  end
15
16
 
16
17
  def tokenize
@@ -2,7 +2,12 @@ module YARD
2
2
  module Parser::Ruby::Legacy
3
3
  class Statement
4
4
  attr_reader :tokens, :comments, :block
5
- attr_accessor :comments_range, :group
5
+ attr_accessor :comments_range
6
+
7
+ # @deprecated Groups are now defined by directives
8
+ # @see Tags::GroupDirective
9
+ attr_accessor :group
10
+
6
11
  attr_accessor :comments_hash_flag
7
12
 
8
13
  def initialize(tokens, block = nil, comments = nil)
@@ -31,7 +36,7 @@ module YARD
31
36
  end
32
37
 
33
38
  def show
34
- "\t #{line}: #{first_line}"
39
+ "\t#{line}: #{first_line}"
35
40
  end
36
41
 
37
42
  # @return [Fixnum] the first line of Ruby source
@@ -14,7 +14,6 @@ module YARD
14
14
  #
15
15
  # @param [TokenList, String] content the tokens to create the list from
16
16
  def initialize(content)
17
- @group = nil
18
17
  @shebang_line = nil
19
18
  @encoding_line = nil
20
19
  if content.is_a? TokenList
@@ -69,12 +68,15 @@ module YARD
69
68
  sanitize_block
70
69
  @statement.pop if [TkNL, TkSPACE, TkSEMICOLON].include?(@statement.last.class)
71
70
  stmt = Statement.new(@statement, @block, @comments)
72
- stmt.group = @group
73
71
  if @comments && @comments_line
74
72
  stmt.comments_range = (@comments_line..(@comments_line + @comments.size - 1))
75
73
  stmt.comments_hash_flag = @comments_hash_flag
76
74
  end
77
75
  stmt
76
+ elsif @comments
77
+ @statement << TkCOMMENT.new(@comments_line, 0)
78
+ @statement.first.set_text("# " + @comments.join("\n# "))
79
+ Statement.new(@statement, nil, @comments)
78
80
  else
79
81
  nil
80
82
  end
@@ -111,23 +113,6 @@ module YARD
111
113
  end
112
114
  end
113
115
 
114
- def preprocess_token(tk)
115
- if tk.is_a?(TkCOMMENT)
116
- case tk.text
117
- when /\A# @group\s+(.+)\s*\Z/
118
- @group = $1
119
- true
120
- when /\A# @endgroup\s*\Z/
121
- @group = nil
122
- true
123
- else
124
- false
125
- end
126
- else
127
- false
128
- end
129
- end
130
-
131
116
  # Processes a single token
132
117
  #
133
118
  # @param [RubyToken::Token] tk the token to process
@@ -135,7 +120,6 @@ module YARD
135
120
  # p tk.class, tk.text, @state, @level, @current_block, "<br/>"
136
121
  case @state
137
122
  when :first_statement
138
- return if preprocess_token(tk)
139
123
  return if process_initial_comment(tk)
140
124
  return if @statement.empty? && [TkSPACE, TkNL, TkCOMMENT].include?(tk.class)
141
125
  @comments_last_line = nil
@@ -235,10 +219,17 @@ module YARD
235
219
  return
236
220
  end
237
221
  end
222
+
238
223
  return if !@statement.empty? && @comments
239
224
  return if @first_line && tk.line_no > @first_line
240
225
 
241
- @comments = nil if @comments_last_line && @comments_last_line < tk.line_no - 1
226
+ if @comments_last_line && @comments_last_line < tk.line_no - 1
227
+ if @comments && @statement.empty?
228
+ @tokens.unshift(tk)
229
+ return @done = true
230
+ end
231
+ @comments = nil
232
+ end
242
233
  @comments_line = tk.line_no unless @comments
243
234
 
244
235
  # Remove the "#" and up to 1 space before the text
@@ -356,7 +347,7 @@ module YARD
356
347
  # @return [Boolean] whether or not the current statement's parentheses and blocks
357
348
  # are balanced after +tk+
358
349
  def balances?(tk)
359
- unless [TkALIAS, TkDEF].include?(@last_ns_tk.class) || @before_last_ns_tk.class == TkALIAS
350
+ unless [TkALIAS, TkDEF].include?(@last_ns_tk.class) || @before_last_ns_tk.class == TkALIAS
360
351
  if [TkLPAREN, TkLBRACK, TkLBRACE, TkDO, TkBEGIN].include?(tk.class)
361
352
  @level += 1
362
353
  elsif OPEN_BLOCK_TOKENS.include?(tk.class)
@@ -4,9 +4,9 @@ module YARD
4
4
  module Parser
5
5
  module Ruby
6
6
  # Ruby 1.9 parser
7
- # @attr_reader encoding_line
8
- # @attr_reader shebang_line
9
- # @attr_reader enumerator
7
+ # @!attribute [r] encoding_line
8
+ # @!attribute [r] shebang_line
9
+ # @!attribute [r] enumerator
10
10
  class RubyParser < Parser::Base
11
11
  def initialize(source, filename)
12
12
  @parser = RipperParser.new(source, filename)
@@ -33,6 +33,7 @@ module YARD
33
33
  @source = source
34
34
  @tokens = []
35
35
  @comments = {}
36
+ @comments_range = {}
36
37
  @comments_flags = {}
37
38
  @heredoc_tokens = nil
38
39
  @heredoc_state = nil
@@ -40,9 +41,9 @@ module YARD
40
41
  @ns_charno = 0
41
42
  @list = []
42
43
  @charno = 0
43
- @groups = []
44
44
  @shebang_line = nil
45
45
  @encoding_line = nil
46
+ @file_encoding = nil
46
47
  end
47
48
 
48
49
  def parse
@@ -58,6 +59,15 @@ module YARD
58
59
  ast.children
59
60
  end
60
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
+
61
71
  private
62
72
 
63
73
  MAPPINGS = {
@@ -234,6 +244,11 @@ module YARD
234
244
  @tokens[-1] = [:symbol, ":" + data]
235
245
  elsif @heredoc_state == :started
236
246
  @heredoc_tokens << [token, data]
247
+
248
+ # fix ripper encoding of heredoc bug
249
+ # (see http://bugs.ruby-lang.org/issues/6200)
250
+ data.force_encoding(file_encoding) if file_encoding
251
+
237
252
  @heredoc_state = :ended if token == :heredoc_end
238
253
  elsif (token == :nl || token == :comment) && @heredoc_state == :ended
239
254
  @heredoc_tokens.unshift([token, data])
@@ -244,7 +259,7 @@ module YARD
244
259
  @tokens << [token, data]
245
260
  if token == :heredoc_beg
246
261
  @heredoc_state = :started
247
- @heredoc_tokens = []
262
+ @heredoc_tokens = []
248
263
  end
249
264
  end
250
265
  end
@@ -274,6 +289,9 @@ module YARD
274
289
  undef on_embdoc
275
290
  undef on_embdoc_end
276
291
  undef on_parse_error
292
+ undef on_bodystmt
293
+ undef on_top_const_ref
294
+ undef on_const_path_ref
277
295
 
278
296
  def on_program(*args)
279
297
  args.first
@@ -299,7 +317,7 @@ module YARD
299
317
  def on_assoclist_from_args(*args)
300
318
  args.first
301
319
  end
302
-
320
+
303
321
  def on_unary(op, val)
304
322
  map = @map[op.to_s[0,1]]
305
323
  lstart, sstart = *(map ? map.pop : [lineno, @ns_charno - 1])
@@ -340,7 +358,7 @@ module YARD
340
358
  end
341
359
  node
342
360
  end
343
-
361
+
344
362
  def on_lbracket(tok)
345
363
  (@map[:lbracket] ||= []) << [lineno, charno]
346
364
  visit_ns_token(:lbracket, tok, false)
@@ -378,7 +396,7 @@ module YARD
378
396
  end
379
397
  eof
380
398
  end
381
-
399
+
382
400
  def on_qwords_new(*args)
383
401
  node = LiteralNode.new(:qwords_literal, args)
384
402
  if @map[:qwords_beg]
@@ -388,7 +406,7 @@ module YARD
388
406
  end
389
407
  node
390
408
  end
391
-
409
+
392
410
  def on_qwords_add(list, item)
393
411
  last = @source[@ns_charno,1] == "\n" ? @ns_charno - 1 : @ns_charno
394
412
  list.source_range = (list.source_range.first..last)
@@ -467,32 +485,30 @@ module YARD
467
485
  end
468
486
  end
469
487
 
488
+ ch = charno
470
489
  visit_ns_token(:comment, comment)
471
490
  if not_comment
472
491
  @last_ns_token = nil
473
492
  return
474
493
  end
475
- case comment
476
- when /\A#+ @group\s+(.+)\s*\Z/
477
- @groups.unshift [lineno, $1]
478
- return
479
- when /\A#+ @endgroup\s*\Z/
480
- @groups.unshift [lineno, nil]
481
- return
482
- end
483
494
 
495
+ source_range = ch..(charno-1)
484
496
  comment = comment.gsub(/^(\#+)\s{0,1}/, '').chomp
485
497
  append_comment = @comments[lineno - 1]
498
+
486
499
  hash_flag = $1 == '##' ? true : false
487
500
 
488
501
  if append_comment && @comments_last_column == column
489
502
  @comments.delete(lineno - 1)
490
503
  @comments_flags[lineno] = @comments_flags[lineno - 1]
491
504
  @comments_flags.delete(lineno - 1)
505
+ range = @comments_range.delete(lineno - 1)
506
+ source_range = range.first..source_range.last
492
507
  comment = append_comment + "\n" + comment
493
508
  end
494
509
 
495
510
  @comments[lineno] = comment
511
+ @comments_range[lineno] = source_range
496
512
  @comments_flags[lineno] = hash_flag if !append_comment
497
513
  @comments_last_column = column
498
514
  end
@@ -523,22 +539,67 @@ module YARD
523
539
  (node.line - 2).upto(node.line) do |line|
524
540
  comment = @comments[line]
525
541
  if comment && !comment.empty?
526
- node.docstring_hash_flag = @comments_flags[line]
527
- node.docstring = comment
528
- node.docstring_range = ((line - comment.count("\n"))..line)
529
- @comments.delete(line)
530
- @comments_flags.delete(line)
542
+ add_comment(line, node)
531
543
  break
532
544
  end
533
545
  end
534
- if node.type == :def || node.type == :defs || node.call?
535
- @groups.each do |group|
536
- if group.first < node.line
537
- break node.group = group.last
546
+
547
+ @comments.keys.each do |line|
548
+ if node.line > line
549
+ add_comment(line, nil, node)
550
+ end
551
+ end
552
+ end
553
+
554
+ # insert any lone unadded comments before node
555
+ root.traverse do |node|
556
+ next if node.type == :list || node.parent.type != :list
557
+ @comments.keys.each do |line|
558
+ if node.line_range.include?(line)
559
+ pick = nil
560
+ node.traverse do |subnode|
561
+ next unless subnode.type == :list
562
+ pick ||= subnode
563
+ next unless subnode.line_range.include?(line)
564
+ pick = subnode
538
565
  end
566
+ add_comment(line, nil, pick, true) if pick
539
567
  end
540
568
  end
569
+ end if @comments.size > 0
570
+
571
+ # insert all remaining comments
572
+ @comments.each do |line, comment|
573
+ add_comment(line, nil, root, true)
574
+ end
575
+
576
+ @comments = {}
577
+ end
578
+
579
+ def add_comment(line, node = nil, before_node = nil, into = false)
580
+ comment = @comments[line]
581
+ source_range = @comments_range[line]
582
+ line_range = ((line - comment.count("\n"))..line)
583
+ if node.nil?
584
+ node = CommentNode.new(:comment, [comment], :line => line_range, :char => source_range)
585
+ if into
586
+ before_node.push(node)
587
+ before_node.unfreeze
588
+ node.parent = before_node
589
+ elsif before_node
590
+ parent_node = before_node.parent
591
+ idx = parent_node.index(before_node)
592
+ parent_node.insert(idx, node)
593
+ parent_node.unfreeze
594
+ node.parent = parent_node
595
+ end
541
596
  end
597
+ node.docstring = comment
598
+ node.docstring_hash_flag = @comments_flags[line]
599
+ node.docstring_range = line_range
600
+ @comments.delete(line)
601
+ @comments_range.delete(line)
602
+ @comments_flags.delete(line)
542
603
  end
543
604
 
544
605
  def freeze_tree(node = nil)
@@ -1,8 +1,6 @@
1
1
  require 'stringio'
2
2
  require 'ostruct'
3
3
 
4
- begin require 'continuation'; rescue LoadError; end
5
-
6
4
  module YARD
7
5
  module Parser
8
6
  # Raised when an object is recognized but cannot be documented. This
@@ -13,19 +11,38 @@ module YARD
13
11
  # Raised when the parser sees a Ruby syntax error
14
12
  class ParserSyntaxError < UndocumentableError; end
15
13
 
16
- # A LoadOrderError occurs when a handler needs to modify a
17
- # {CodeObjects::NamespaceObject} (usually by adding a child to it)
18
- # that has not yet been resolved.
14
+ # Responsible for parsing a list of files in order. The
15
+ # {#parse} method of this class can be called from the
16
+ # {SourceParser#globals} globals state list to re-enter
17
+ # parsing for the remainder of files in the list recursively.
19
18
  #
20
- # @see Handers::Base#ensure_loaded!
21
- class LoadOrderError < Exception
22
- # @return [Continuation] the context representing the
23
- # point at which the load order error occurred.
24
- attr_accessor :context
25
-
26
- # @param [Continuation] context see {#context}
27
- def initialize(context)
28
- @context = context
19
+ # @see Processor#parse_remaining_files
20
+ class OrderedParser
21
+ # @return [Array<String>] the list of remaining files to parse
22
+ attr_accessor :files
23
+
24
+ # Creates a new OrderedParser with the global state and a list
25
+ # of files to parse.
26
+ #
27
+ # @note OrderedParser sets itself as the +ordered_parser+ key on
28
+ # global_state for later use in {Handlers::Processor}.
29
+ # @param [OpenStruct] global_state a structure containing all global
30
+ # state during parsing
31
+ # @param [Array<String>] files the list of files to parse
32
+ def initialize(global_state, files)
33
+ @global_state = global_state
34
+ @files = files.dup
35
+ @global_state.ordered_parser = self
36
+ end
37
+
38
+ # Parses the remainder of the {#files} list.
39
+ #
40
+ # @see Processor#parse_remaining_files
41
+ def parse
42
+ while file = files.shift
43
+ log.debug("Processing #{file}...")
44
+ SourceParser.new(SourceParser.parser_type, @global_state).parse(file)
45
+ end
29
46
  end
30
47
  end
31
48
 
@@ -44,7 +61,7 @@ module YARD
44
61
  class SourceParser
45
62
  SHEBANG_LINE = /\A\s*#!\S+/
46
63
  ENCODING_LINE = /\A(?:\s*#*!.*\r?\n)?\s*(?:#+|\/\*+|\/\/+).*coding\s*[:=]{1,2}\s*([a-z\d_\-]+)/i
47
-
64
+
48
65
  # Byte order marks for various encodings
49
66
  # @since 0.7.0
50
67
  ENCODING_BYTE_ORDER_MARKS = {
@@ -163,20 +180,20 @@ module YARD
163
180
  def validated_parser_type(type)
164
181
  !defined?(::Ripper) && type == :ruby ? :ruby18 : type
165
182
  end
166
-
183
+
167
184
  # @group Parser Callbacks
168
-
169
- # Registers a callback to be called before a list of files is parsed
170
- # via {parse}. The block passed to this method will be called on
185
+
186
+ # Registers a callback to be called before a list of files is parsed
187
+ # via {parse}. The block passed to this method will be called on
171
188
  # subsequent parse calls.
172
- #
189
+ #
173
190
  # @example Installing a simple callback
174
191
  # SourceParser.before_parse_list do |files, globals|
175
192
  # puts "Starting to parse..."
176
193
  # end
177
194
  # YARD.parse('lib/**/*.rb')
178
195
  # # prints "Starting to parse..."
179
- #
196
+ #
180
197
  # @example Setting global state
181
198
  # SourceParser.before_parse_list do |files, globals|
182
199
  # globals.method_count = 0
@@ -190,16 +207,16 @@ module YARD
190
207
  # end
191
208
  # YARD.parse
192
209
  # # Prints: "Found 37 methods"
193
- #
210
+ #
194
211
  # @example Using a global callback to cancel parsing
195
212
  # SourceParser.before_parse_list do |files, globals|
196
213
  # return false if files.include?('foo.rb')
197
214
  # end
198
- #
215
+ #
199
216
  # YARD.parse(['foo.rb', 'bar.rb']) # callback cancels this method
200
217
  # YARD.parse('bar.rb') # parses normally
201
- #
202
- # @yield [files, globals] the yielded block is called once before
218
+ #
219
+ # @yield [files, globals] the yielded block is called once before
203
220
  # parsing all files
204
221
  # @yieldparam [Array<String>] files the list of files that will be parsed.
205
222
  # @yieldparam [OpenStruct] globals a global structure to store arbitrary
@@ -213,18 +230,18 @@ module YARD
213
230
  def before_parse_list(&block)
214
231
  before_parse_list_callbacks << block
215
232
  end
216
-
217
- # Registers a callback to be called after a list of files is parsed
218
- # via {parse}. The block passed to this method will be called on
233
+
234
+ # Registers a callback to be called after a list of files is parsed
235
+ # via {parse}. The block passed to this method will be called on
219
236
  # subsequent parse calls.
220
- #
237
+ #
221
238
  # @example Printing results after parsing occurs
222
239
  # SourceParser.after_parse_list do
223
240
  # puts "Finished parsing!"
224
241
  # end
225
242
  # YARD.parse
226
243
  # # Prints "Finished parsing!" after parsing files
227
- # @yield [files, globals] the yielded block is called once before
244
+ # @yield [files, globals] the yielded block is called once before
228
245
  # parsing all files
229
246
  # @yieldparam [Array<String>] files the list of files that will be parsed.
230
247
  # @yieldparam [OpenStruct] globals a global structure to store arbitrary
@@ -237,14 +254,14 @@ module YARD
237
254
  def after_parse_list(&block)
238
255
  after_parse_list_callbacks << block
239
256
  end
240
-
241
- # Registers a callback to be called before an individual file is parsed.
242
- # The block passed to this method will be called on subsequent parse
257
+
258
+ # Registers a callback to be called before an individual file is parsed.
259
+ # The block passed to this method will be called on subsequent parse
243
260
  # calls.
244
- #
261
+ #
245
262
  # To register a callback that is called before the entire list of files
246
263
  # is processed, see {before_parse_list}.
247
- #
264
+ #
248
265
  # @example Installing a simple callback
249
266
  # SourceParser.before_parse_file do |parser|
250
267
  # puts "I'm parsing #{parser.file}"
@@ -254,18 +271,18 @@ module YARD
254
271
  # "I'm parsing lib/foo.rb"
255
272
  # "I'm parsing lib/foo_bar.rb"
256
273
  # "I'm parsing lib/last_file.rb"
257
- #
274
+ #
258
275
  # @example Cancel parsing of any test_*.rb files
259
276
  # SourceParser.before_parse_file do |parser|
260
277
  # return false if parser.file =~ /^test_.+\.rb$/
261
278
  # end
262
- #
279
+ #
263
280
  # @yield [parser] the yielded block is called once before each
264
281
  # file that is parsed. This might happen many times for a single
265
282
  # codebase.
266
283
  # @yieldparam [SourceParser] parser the parser object that will {#parse}
267
284
  # the file.
268
- # @yieldreturn [Boolean] if the block returns +false+, parsing for
285
+ # @yieldreturn [Boolean] if the block returns +false+, parsing for
269
286
  # the file is cancelled.
270
287
  # @return [Proc] the yielded block
271
288
  # @see after_parse_file
@@ -274,14 +291,14 @@ module YARD
274
291
  def before_parse_file(&block)
275
292
  before_parse_file_callbacks << block
276
293
  end
277
-
278
- # Registers a callback to be called after an individual file is parsed.
279
- # The block passed to this method will be called on subsequent parse
294
+
295
+ # Registers a callback to be called after an individual file is parsed.
296
+ # The block passed to this method will be called on subsequent parse
280
297
  # calls.
281
- #
298
+ #
282
299
  # To register a callback that is called after the entire list of files
283
300
  # is processed, see {after_parse_list}.
284
- #
301
+ #
285
302
  # @example Printing the length of each file after it is parsed
286
303
  # SourceParser.after_parse_file do |parser|
287
304
  # puts "#{parser.file} is #{parser.contents.size} characters"
@@ -290,8 +307,8 @@ module YARD
290
307
  # # prints:
291
308
  # "lib/foo.rb is 1240 characters"
292
309
  # "lib/foo_bar.rb is 248 characters"
293
- #
294
- # @yield [parser] the yielded block is called once after each file
310
+ #
311
+ # @yield [parser] the yielded block is called once after each file
295
312
  # that is parsed. This might happen many times for a single codebase.
296
313
  # @yieldparam [SourceParser] parser the parser object that parsed
297
314
  # the file.
@@ -303,104 +320,88 @@ module YARD
303
320
  def after_parse_file(&block)
304
321
  after_parse_file_callbacks << block
305
322
  end
306
-
323
+
307
324
  # @return [Array<Proc>] the list of callbacks to be called before
308
325
  # parsing a list of files. Should only be used for testing.
309
326
  # @since 0.7.0
310
327
  def before_parse_list_callbacks
311
328
  @before_parse_list_callbacks ||= []
312
329
  end
313
-
330
+
314
331
  # @return [Array<Proc>] the list of callbacks to be called after
315
332
  # parsing a list of files. Should only be used for testing.
316
333
  # @since 0.7.0
317
334
  def after_parse_list_callbacks
318
335
  @after_parse_list_callbacks ||= []
319
336
  end
320
-
337
+
321
338
  # @return [Array<Proc>] the list of callbacks to be called before
322
339
  # parsing a file. Should only be used for testing.
323
340
  # @since 0.7.0
324
341
  def before_parse_file_callbacks
325
342
  @before_parse_file_callbacks ||= []
326
343
  end
327
-
344
+
328
345
  # @return [Array<Proc>] the list of callbacks to be called after
329
346
  # parsing a file. Should only be used for testing.
330
347
  # @since 0.7.0
331
348
  def after_parse_file_callbacks
332
349
  @after_parse_file_callbacks ||= []
333
350
  end
334
-
351
+
335
352
  # @endgroup
336
353
 
337
354
  private
338
355
 
339
- # Parses a list of files in a queue. If a {LoadOrderError} is caught,
340
- # the file is moved to the back of the queue with a Continuation object
341
- # that can continue processing the file.
356
+ # Parses a list of files in a queue.
342
357
  #
343
358
  # @param [Array<String>] files a list of files to queue for parsing
344
359
  # @return [void]
345
360
  def parse_in_order(*files)
346
361
  global_state = OpenStruct.new
347
362
  files = files.sort_by {|x| x.length if x }
348
- files_copy = files.dup
349
-
363
+
350
364
  before_parse_list_callbacks.each do |cb|
351
- return if cb.call(files_copy, global_state) == false
365
+ return if cb.call(files, global_state) == false
352
366
  end
353
-
354
- while file = files.shift
355
- begin
356
- if file.is_a?(Array) && file.last.is_a?(Continuation)
357
- log.debug("Re-processing #{file.first}")
358
- file.last.call
359
- elsif file.is_a?(String)
360
- log.debug("Processing #{file}...")
361
- new(parser_type, true, global_state).parse(file)
362
- end
363
- rescue LoadOrderError => e
364
- # Out of order file. Push the context to the end and we'll call it
365
- files.push([file, e.context])
366
- end
367
- end
368
-
367
+
368
+ OrderedParser.new(global_state, files).parse
369
+
369
370
  after_parse_list_callbacks.each do |cb|
370
- cb.call(files_copy, global_state)
371
+ cb.call(files, global_state)
371
372
  end
372
373
  end
373
374
  end
374
375
 
375
376
  register_parser_type :ruby, Ruby::RubyParser
376
377
  register_parser_type :ruby18, Ruby::Legacy::RubyParser
377
- register_parser_type :c, CParser, ['c', 'cc', 'cxx', 'cpp']
378
+ register_parser_type :c, C::CParser, ['c', 'cc', 'cxx', 'cpp']
378
379
 
379
380
  self.parser_type = :ruby
380
381
 
381
382
  # @return [String] the filename being parsed by the parser.
382
- attr_reader :file
383
+ attr_accessor :file
383
384
 
384
385
  # @return [Symbol] the parser type associated with the parser instance.
385
386
  # This should be set by the {#initialize constructor}.
386
387
  attr_reader :parser_type
387
-
388
+
388
389
  # @return [OpenStruct] an open struct containing arbitrary global state
389
390
  # shared between files and handlers.
390
391
  # @since 0.7.0
391
392
  attr_reader :globals
392
-
393
+
393
394
  # @return [String] the contents of the file to be parsed
394
395
  # @since 0.7.0
395
396
  attr_reader :contents
396
397
 
397
- # Creates a new parser object for code parsing with a specific parser type.
398
+ # @overload initialize(parser_type = SourceParser.parser_type, globals = nil)
399
+ # Creates a new parser object for code parsing with a specific parser type.
398
400
  #
399
- # @param [Symbol] parser_type the parser type to use
400
- # @param [Boolean] load_order_errors whether or not to raise the {LoadOrderError}
401
- # @param [OpenStruct] globals global state to be re-used across separate source files
402
- def initialize(parser_type = SourceParser.parser_type, load_order_errors = false, globals = nil)
403
- @load_order_errors = load_order_errors
401
+ # @param [Symbol] parser_type the parser type to use
402
+ # @param [OpenStruct] globals global state to be re-used across separate source files
403
+ def initialize(parser_type = SourceParser.parser_type, globals1 = nil, globals2 = nil)
404
+ globals = [true, false].include?(globals1) ? globals2 : globals1
404
405
  @file = '(stdin)'
405
406
  @globals = globals || OpenStruct.new
406
407
  self.parser_type = parser_type
@@ -430,18 +431,18 @@ module YARD
430
431
 
431
432
  @contents = content
432
433
  @parser = parser_class.new(content, file)
433
-
434
+
434
435
  self.class.before_parse_file_callbacks.each do |cb|
435
436
  return @parser if cb.call(self) == false
436
437
  end
437
-
438
+
438
439
  @parser.parse
439
440
  post_process
440
-
441
+
441
442
  self.class.after_parse_file_callbacks.each do |cb|
442
443
  cb.call(self)
443
444
  end
444
-
445
+
445
446
  @parser
446
447
  rescue ArgumentError, NotImplementedError => e
447
448
  log.warn("Cannot parse `#{file}': #{e.message}")
@@ -488,7 +489,7 @@ module YARD
488
489
  def post_process
489
490
  return unless @parser.respond_to? :enumerator
490
491
  return unless enumerator = @parser.enumerator
491
- post = Handlers::Processor.new(@file, @load_order_errors, @parser_type, @globals)
492
+ post = Handlers::Processor.new(self)
492
493
  post.process(enumerator)
493
494
  end
494
495