ruby-lint 0.0.3 → 0.0.4

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 (347) hide show
  1. data.tar.gz.asc +14 -14
  2. data/.gitignore +1 -2
  3. data/.rubocop.yml +59 -0
  4. data/.travis.yml +3 -7
  5. data/.yardopts +2 -2
  6. data/Gemfile +4 -0
  7. data/MANIFEST +103 -67
  8. data/README.md +13 -31
  9. data/Rakefile +1 -6
  10. data/checksum/ruby-lint-0.0.3.gem.sha512 +1 -0
  11. data/debug/memory_usage.rb +14 -0
  12. data/debug/profile.rb +18 -0
  13. data/doc/architecture.md +14 -18
  14. data/doc/changelog.md +29 -0
  15. data/doc/code_analysis.md +12 -12
  16. data/doc/configuration.md +21 -50
  17. data/doc/graphviz/flow.dot +1 -1
  18. data/doc/images/flow.png +0 -0
  19. data/lib/ruby-lint.rb +33 -19
  20. data/lib/ruby-lint/analysis/argument_amount.rb +84 -0
  21. data/lib/ruby-lint/analysis/base.rb +132 -0
  22. data/lib/ruby-lint/analysis/confusing_variables.rb +26 -0
  23. data/lib/ruby-lint/analysis/pedantics.rb +36 -0
  24. data/lib/ruby-lint/analysis/shadowing_variables.rb +47 -0
  25. data/lib/ruby-lint/analysis/undefined_methods.rb +91 -0
  26. data/lib/ruby-lint/analysis/undefined_variables.rb +46 -0
  27. data/lib/ruby-lint/analysis/unused_variables.rb +49 -0
  28. data/lib/ruby-lint/ast/builder.rb +17 -0
  29. data/lib/ruby-lint/ast/node.rb +39 -0
  30. data/lib/ruby-lint/cli.rb +0 -19
  31. data/lib/ruby-lint/cli/analyze.rb +54 -28
  32. data/lib/ruby-lint/cli/ast.rb +21 -6
  33. data/lib/ruby-lint/cli/base.rb +0 -23
  34. data/lib/ruby-lint/configuration.rb +112 -42
  35. data/lib/ruby-lint/constant_loader.rb +10 -28
  36. data/lib/ruby-lint/default_names.rb +19 -0
  37. data/lib/ruby-lint/definition/constant_proxy.rb +56 -0
  38. data/lib/ruby-lint/definition/ruby_method.rb +21 -143
  39. data/lib/ruby-lint/definition/ruby_object.rb +142 -246
  40. data/lib/ruby-lint/definition_builder/base.rb +43 -0
  41. data/lib/ruby-lint/definition_builder/primitive.rb +39 -0
  42. data/lib/ruby-lint/definition_builder/ruby_array.rb +77 -0
  43. data/lib/ruby-lint/definition_builder/ruby_block.rb +34 -0
  44. data/lib/ruby-lint/definition_builder/ruby_class.rb +24 -0
  45. data/lib/ruby-lint/definition_builder/ruby_hash.rb +37 -0
  46. data/lib/ruby-lint/definition_builder/ruby_method.rb +84 -0
  47. data/lib/ruby-lint/definition_builder/ruby_module.rb +68 -0
  48. data/lib/ruby-lint/definition_generator.rb +41 -15
  49. data/lib/ruby-lint/definitions/core/arg0.rb +1 -1
  50. data/lib/ruby-lint/definitions/core/argf.rb +1 -1
  51. data/lib/ruby-lint/definitions/core/argument_error.rb +2 -2
  52. data/lib/ruby-lint/definitions/core/argv.rb +1 -1
  53. data/lib/ruby-lint/definitions/core/array.rb +6 -6
  54. data/lib/ruby-lint/definitions/core/autoload.rb +2 -2
  55. data/lib/ruby-lint/definitions/core/basic_object.rb +3 -3
  56. data/lib/ruby-lint/definitions/core/bignum.rb +2 -2
  57. data/lib/ruby-lint/definitions/core/binding.rb +2 -2
  58. data/lib/ruby-lint/definitions/core/class.rb +2 -2
  59. data/lib/ruby-lint/definitions/core/comparable.rb +1 -1
  60. data/lib/ruby-lint/definitions/core/complex.rb +4 -4
  61. data/lib/ruby-lint/definitions/core/condition_variable.rb +2 -2
  62. data/lib/ruby-lint/definitions/core/continuation.rb +2 -2
  63. data/lib/ruby-lint/definitions/core/data.rb +2 -2
  64. data/lib/ruby-lint/definitions/core/date.rb +34 -34
  65. data/lib/ruby-lint/definitions/core/date_time.rb +26 -26
  66. data/lib/ruby-lint/definitions/core/default_record_separator.rb +1 -1
  67. data/lib/ruby-lint/definitions/core/digest.rb +14 -14
  68. data/lib/ruby-lint/definitions/core/dir.rb +34 -34
  69. data/lib/ruby-lint/definitions/core/encoding.rb +237 -237
  70. data/lib/ruby-lint/definitions/core/encoding_error.rb +2 -2
  71. data/lib/ruby-lint/definitions/core/enumerable.rb +15 -15
  72. data/lib/ruby-lint/definitions/core/enumerator.rb +2 -2
  73. data/lib/ruby-lint/definitions/core/env.rb +1 -1
  74. data/lib/ruby-lint/definitions/core/eoferror.rb +2 -2
  75. data/lib/ruby-lint/definitions/core/erb.rb +22 -22
  76. data/lib/ruby-lint/definitions/core/errno.rb +525 -525
  77. data/lib/ruby-lint/definitions/core/etc.rb +6 -6
  78. data/lib/ruby-lint/definitions/core/exception.rb +2 -2
  79. data/lib/ruby-lint/definitions/core/false.rb +1 -1
  80. data/lib/ruby-lint/definitions/core/false_class.rb +2 -2
  81. data/lib/ruby-lint/definitions/core/fatal_error.rb +2 -2
  82. data/lib/ruby-lint/definitions/core/fiber.rb +2 -2
  83. data/lib/ruby-lint/definitions/core/fiber_error.rb +2 -2
  84. data/lib/ruby-lint/definitions/core/file.rb +68 -68
  85. data/lib/ruby-lint/definitions/core/file_list.rb +2 -2
  86. data/lib/ruby-lint/definitions/core/file_test.rb +1 -1
  87. data/lib/ruby-lint/definitions/core/file_utils.rb +16 -16
  88. data/lib/ruby-lint/definitions/core/fixnum.rb +4 -4
  89. data/lib/ruby-lint/definitions/core/float.rb +16 -16
  90. data/lib/ruby-lint/definitions/core/float_domain_error.rb +2 -2
  91. data/lib/ruby-lint/definitions/core/gc.rb +2 -2
  92. data/lib/ruby-lint/definitions/core/gem.rb +119 -119
  93. data/lib/ruby-lint/definitions/core/hash.rb +14 -14
  94. data/lib/ruby-lint/definitions/core/immediate_value.rb +1 -1
  95. data/lib/ruby-lint/definitions/core/index_error.rb +2 -2
  96. data/lib/ruby-lint/definitions/core/integer.rb +2 -2
  97. data/lib/ruby-lint/definitions/core/interrupt.rb +2 -2
  98. data/lib/ruby-lint/definitions/core/io.rb +38 -38
  99. data/lib/ruby-lint/definitions/core/ioerror.rb +2 -2
  100. data/lib/ruby-lint/definitions/core/kernel.rb +3 -3
  101. data/lib/ruby-lint/definitions/core/key_error.rb +2 -2
  102. data/lib/ruby-lint/definitions/core/load_error.rb +6 -6
  103. data/lib/ruby-lint/definitions/core/local_jump_error.rb +2 -2
  104. data/lib/ruby-lint/definitions/core/main.rb +1 -1
  105. data/lib/ruby-lint/definitions/core/marshal.rb +35 -35
  106. data/lib/ruby-lint/definitions/core/match_data.rb +2 -2
  107. data/lib/ruby-lint/definitions/core/math.rb +7 -7
  108. data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +2 -2
  109. data/lib/ruby-lint/definitions/core/method.rb +2 -2
  110. data/lib/ruby-lint/definitions/core/module.rb +1 -1
  111. data/lib/ruby-lint/definitions/core/monitor.rb +4 -4
  112. data/lib/ruby-lint/definitions/core/monitor_mixin.rb +5 -5
  113. data/lib/ruby-lint/definitions/core/mutex.rb +2 -2
  114. data/lib/ruby-lint/definitions/core/name_error.rb +2 -2
  115. data/lib/ruby-lint/definitions/core/nil.rb +1 -1
  116. data/lib/ruby-lint/definitions/core/nil_class.rb +2 -2
  117. data/lib/ruby-lint/definitions/core/no_memory_error.rb +2 -2
  118. data/lib/ruby-lint/definitions/core/no_method_error.rb +2 -2
  119. data/lib/ruby-lint/definitions/core/not_implemented_error.rb +2 -2
  120. data/lib/ruby-lint/definitions/core/numeric.rb +2 -2
  121. data/lib/ruby-lint/definitions/core/object.rb +2 -2
  122. data/lib/ruby-lint/definitions/core/object_space.rb +1 -1
  123. data/lib/ruby-lint/definitions/core/open_struct.rb +3 -3
  124. data/lib/ruby-lint/definitions/core/option_parser.rb +83 -83
  125. data/lib/ruby-lint/definitions/core/precision.rb +1 -1
  126. data/lib/ruby-lint/definitions/core/primitive_failure.rb +2 -2
  127. data/lib/ruby-lint/definitions/core/proc.rb +2 -2
  128. data/lib/ruby-lint/definitions/core/process.rb +29 -29
  129. data/lib/ruby-lint/definitions/core/psych.rb +149 -149
  130. data/lib/ruby-lint/definitions/core/queue.rb +2 -2
  131. data/lib/ruby-lint/definitions/core/rake.rb +117 -117
  132. data/lib/ruby-lint/definitions/core/rake_file_utils.rb +1 -1
  133. data/lib/ruby-lint/definitions/core/rakeversion.rb +1 -1
  134. data/lib/ruby-lint/definitions/core/random.rb +2 -2
  135. data/lib/ruby-lint/definitions/core/range.rb +4 -4
  136. data/lib/ruby-lint/definitions/core/range_error.rb +2 -2
  137. data/lib/ruby-lint/definitions/core/rational.rb +2 -2
  138. data/lib/ruby-lint/definitions/core/rb_config.rb +3 -3
  139. data/lib/ruby-lint/definitions/core/regexp.rb +28 -28
  140. data/lib/ruby-lint/definitions/core/regexp_error.rb +2 -2
  141. data/lib/ruby-lint/definitions/core/rubinius.rb +1057 -1057
  142. data/lib/ruby-lint/definitions/core/ruby_copyright.rb +1 -1
  143. data/lib/ruby-lint/definitions/core/ruby_description.rb +1 -1
  144. data/lib/ruby-lint/definitions/core/ruby_engine.rb +1 -1
  145. data/lib/ruby-lint/definitions/core/ruby_lint.rb +9 -9
  146. data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +1 -1
  147. data/lib/ruby-lint/definitions/core/ruby_platform.rb +1 -1
  148. data/lib/ruby-lint/definitions/core/ruby_release_date.rb +1 -1
  149. data/lib/ruby-lint/definitions/core/ruby_version.rb +1 -1
  150. data/lib/ruby-lint/definitions/core/runtime_error.rb +2 -2
  151. data/lib/ruby-lint/definitions/core/scan_error.rb +2 -2
  152. data/lib/ruby-lint/definitions/core/script_error.rb +2 -2
  153. data/lib/ruby-lint/definitions/core/security_error.rb +2 -2
  154. data/lib/ruby-lint/definitions/core/shellwords.rb +1 -1
  155. data/lib/ruby-lint/definitions/core/signal.rb +3 -3
  156. data/lib/ruby-lint/definitions/core/signal_exception.rb +2 -2
  157. data/lib/ruby-lint/definitions/core/singleton.rb +2 -2
  158. data/lib/ruby-lint/definitions/core/sized_queue.rb +2 -2
  159. data/lib/ruby-lint/definitions/core/standard_error.rb +2 -2
  160. data/lib/ruby-lint/definitions/core/stderr.rb +1 -1
  161. data/lib/ruby-lint/definitions/core/stdin.rb +1 -1
  162. data/lib/ruby-lint/definitions/core/stdout.rb +1 -1
  163. data/lib/ruby-lint/definitions/core/stop_iteration.rb +2 -2
  164. data/lib/ruby-lint/definitions/core/string.rb +21 -21
  165. data/lib/ruby-lint/definitions/core/string_io.rb +7 -7
  166. data/lib/ruby-lint/definitions/core/string_scanner.rb +4 -4
  167. data/lib/ruby-lint/definitions/core/struct.rb +20 -20
  168. data/lib/ruby-lint/definitions/core/syck.rb +4 -4
  169. data/lib/ruby-lint/definitions/core/symbol.rb +2 -2
  170. data/lib/ruby-lint/definitions/core/syntax_error.rb +2 -2
  171. data/lib/ruby-lint/definitions/core/system_call_error.rb +2 -2
  172. data/lib/ruby-lint/definitions/core/system_exit.rb +2 -2
  173. data/lib/ruby-lint/definitions/core/system_stack_error.rb +2 -2
  174. data/lib/ruby-lint/definitions/core/thread.rb +6 -6
  175. data/lib/ruby-lint/definitions/core/thread_error.rb +2 -2
  176. data/lib/ruby-lint/definitions/core/thread_group.rb +2 -2
  177. data/lib/ruby-lint/definitions/core/time.rb +3 -3
  178. data/lib/ruby-lint/definitions/core/toplevel_binding.rb +1 -1
  179. data/lib/ruby-lint/definitions/core/true.rb +1 -1
  180. data/lib/ruby-lint/definitions/core/true_class.rb +2 -2
  181. data/lib/ruby-lint/definitions/core/type_error.rb +2 -2
  182. data/lib/ruby-lint/definitions/core/unbound_method.rb +2 -2
  183. data/lib/ruby-lint/definitions/core/unmarshalable.rb +1 -1
  184. data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +2 -2
  185. data/lib/ruby-lint/definitions/core/weak_ref.rb +4 -4
  186. data/lib/ruby-lint/definitions/core/zero_division_error.rb +2 -2
  187. data/lib/ruby-lint/definitions/rails.rb +12 -0
  188. data/lib/ruby-lint/definitions/rails/abstract_controller.rb +335 -0
  189. data/lib/ruby-lint/definitions/rails/action_controller.rb +1244 -0
  190. data/lib/ruby-lint/definitions/rails/action_dispatch.rb +741 -0
  191. data/lib/ruby-lint/definitions/rails/action_mailer.rb +502 -0
  192. data/lib/ruby-lint/definitions/rails/action_pack.rb +16 -0
  193. data/lib/ruby-lint/definitions/rails/action_view.rb +898 -0
  194. data/lib/ruby-lint/definitions/rails/active_model.rb +437 -0
  195. data/lib/ruby-lint/definitions/rails/active_record.rb +2901 -0
  196. data/lib/ruby-lint/definitions/rails/active_support.rb +1963 -0
  197. data/lib/ruby-lint/definitions/rails/arel.rb +665 -0
  198. data/lib/ruby-lint/definitions/rails/rails.rb +452 -0
  199. data/lib/ruby-lint/definitions/rails/sprockets.rb +968 -0
  200. data/lib/ruby-lint/generated_constant.rb +33 -0
  201. data/lib/ruby-lint/helper/constant_paths.rb +30 -21
  202. data/lib/ruby-lint/inspector.rb +20 -2
  203. data/lib/ruby-lint/iterator.rb +11 -171
  204. data/lib/ruby-lint/nested_stack.rb +46 -0
  205. data/lib/ruby-lint/parser.rb +24 -806
  206. data/lib/ruby-lint/report.rb +2 -30
  207. data/lib/ruby-lint/report/entry.rb +2 -2
  208. data/lib/ruby-lint/runner.rb +81 -0
  209. data/lib/ruby-lint/template/definition.erb +12 -8
  210. data/lib/ruby-lint/variable_predicates.rb +16 -58
  211. data/lib/ruby-lint/version.rb +1 -1
  212. data/lib/ruby-lint/virtual_machine.rb +1044 -0
  213. data/ruby-lint.gemspec +17 -7
  214. data/spec/fixtures/complex/rails/basic_controller.rb +9 -0
  215. data/spec/fixtures/complex/rcap.rb +38 -0
  216. data/spec/fixtures/complex/slop.rb +680 -0
  217. data/spec/fixtures/config.yml +8 -0
  218. data/spec/fixtures/invalid.rb +3 -0
  219. data/spec/fixtures/invalid_2.rb +3 -0
  220. data/spec/fixtures/syntax_error.rb +1 -0
  221. data/spec/fixtures/valid.rb +3 -0
  222. data/spec/helper.rb +6 -0
  223. data/spec/ruby-lint/{analyze → analysis}/argument_amount.rb +7 -7
  224. data/spec/ruby-lint/analysis/confusing_variables.rb +46 -0
  225. data/spec/ruby-lint/analysis/pedantics.rb +43 -0
  226. data/spec/ruby-lint/{analyze → analysis}/shadowing_variables.rb +5 -5
  227. data/spec/ruby-lint/{analyze → analysis}/undefined_methods.rb +18 -18
  228. data/spec/ruby-lint/{analyze → analysis}/undefined_variables.rb +19 -25
  229. data/spec/ruby-lint/{analyze → analysis}/unused_variables.rb +29 -16
  230. data/spec/ruby-lint/ast/node.rb +33 -0
  231. data/spec/ruby-lint/cli/analyze.rb +31 -0
  232. data/spec/ruby-lint/cli/ast.rb +23 -0
  233. data/spec/ruby-lint/configuration.rb +45 -6
  234. data/spec/ruby-lint/definition/constant_proxy.rb +31 -0
  235. data/spec/ruby-lint/definition/dsl.rb +13 -20
  236. data/spec/ruby-lint/definition/ruby_method.rb +65 -148
  237. data/spec/ruby-lint/definition/ruby_object.rb +60 -96
  238. data/spec/ruby-lint/definition_builder/primitive.rb +62 -0
  239. data/spec/ruby-lint/definition_builder/ruby_class.rb +108 -0
  240. data/spec/ruby-lint/definition_builder/ruby_method.rb +53 -0
  241. data/spec/ruby-lint/definition_builder/ruby_module.rb +50 -0
  242. data/spec/ruby-lint/iterator.rb +40 -16
  243. data/spec/ruby-lint/nested_stack.rb +23 -0
  244. data/spec/ruby-lint/parser.rb +14 -0
  245. data/spec/ruby-lint/report.rb +0 -10
  246. data/spec/ruby-lint/report/entry.rb +8 -4
  247. data/spec/ruby-lint/runner.rb +32 -0
  248. data/spec/ruby-lint/virtual_machine/assignments/arrays.rb +87 -0
  249. data/spec/ruby-lint/virtual_machine/assignments/hashes.rb +52 -0
  250. data/spec/ruby-lint/virtual_machine/assignments/optional.rb +41 -0
  251. data/spec/ruby-lint/{definitions_builder → virtual_machine}/assignments/return_values.rb +11 -11
  252. data/spec/ruby-lint/virtual_machine/assignments/variables.rb +85 -0
  253. data/spec/ruby-lint/virtual_machine/associate_nodes.rb +17 -0
  254. data/spec/ruby-lint/virtual_machine/autoloading.rb +31 -0
  255. data/spec/ruby-lint/virtual_machine/blocks.rb +64 -0
  256. data/spec/ruby-lint/virtual_machine/classes/class_methods.rb +21 -0
  257. data/spec/ruby-lint/virtual_machine/classes/extending.rb +104 -0
  258. data/spec/ruby-lint/virtual_machine/classes/redefining.rb +24 -0
  259. data/spec/ruby-lint/virtual_machine/classes/sclass.rb +94 -0
  260. data/spec/ruby-lint/virtual_machine/classes/scoping.rb +60 -0
  261. data/spec/ruby-lint/virtual_machine/complex/rails.rb +18 -0
  262. data/spec/ruby-lint/virtual_machine/complex/rcap.rb +15 -0
  263. data/spec/ruby-lint/virtual_machine/complex/slop.rb +16 -0
  264. data/spec/ruby-lint/{definitions_builder → virtual_machine}/for.rb +2 -2
  265. data/spec/ruby-lint/virtual_machine/freeze.rb +13 -0
  266. data/spec/ruby-lint/virtual_machine/interpolation.rb +12 -0
  267. data/spec/ruby-lint/virtual_machine/methods/defining.rb +40 -0
  268. data/spec/ruby-lint/virtual_machine/methods/exporting.rb +19 -0
  269. data/spec/ruby-lint/virtual_machine/methods/parameters.rb +77 -0
  270. data/spec/ruby-lint/virtual_machine/methods/patching.rb +26 -0
  271. data/spec/ruby-lint/virtual_machine/methods/scoping.rb +63 -0
  272. data/spec/ruby-lint/virtual_machine/methods/visibility.rb +64 -0
  273. data/spec/ruby-lint/{definitions_builder → virtual_machine}/modules.rb +16 -16
  274. data/spec/ruby-lint/virtual_machine/reference_amount.rb +33 -0
  275. data/spec/ruby-lint/virtual_machine/unused.rb +17 -0
  276. data/spec/support/bacon.rb +13 -13
  277. data/spec/support/building.rb +23 -16
  278. data/spec/support/coveralls.rb +5 -0
  279. data/spec/support/fixtures.rb +20 -0
  280. data/spec/support/parsing.rb +3 -5
  281. data/spec/support/simplecov.rb +5 -3
  282. data/task/build.rake +1 -1
  283. data/task/cop.rake +11 -0
  284. data/task/generate.rake +40 -2
  285. data/task/profile.rake +27 -0
  286. data/task/todo.rake +6 -0
  287. data/task/travis.rake +7 -0
  288. metadata +160 -75
  289. metadata.gz.asc +14 -14
  290. data/doc/build/.gitkeep +0 -0
  291. data/lib/ruby-lint/analyze/argument_amount.rb +0 -73
  292. data/lib/ruby-lint/analyze/shadowing_variables.rb +0 -32
  293. data/lib/ruby-lint/analyze/undefined_methods.rb +0 -68
  294. data/lib/ruby-lint/analyze/undefined_variables.rb +0 -72
  295. data/lib/ruby-lint/analyze/unused_variables.rb +0 -48
  296. data/lib/ruby-lint/base.rb +0 -85
  297. data/lib/ruby-lint/definitions_builder.rb +0 -692
  298. data/lib/ruby-lint/helper/conversion.rb +0 -33
  299. data/lib/ruby-lint/helper/current_scope.rb +0 -98
  300. data/lib/ruby-lint/helper/methods.rb +0 -91
  301. data/lib/ruby-lint/node.rb +0 -107
  302. data/lib/ruby-lint/parser_error.rb +0 -30
  303. data/spec/ruby-lint/constant_loader.rb +0 -32
  304. data/spec/ruby-lint/definition/method_calls.rb +0 -26
  305. data/spec/ruby-lint/definitions_builder/assignments/arrays.rb +0 -71
  306. data/spec/ruby-lint/definitions_builder/assignments/hashes.rb +0 -65
  307. data/spec/ruby-lint/definitions_builder/assignments/objects.rb +0 -23
  308. data/spec/ruby-lint/definitions_builder/assignments/optional.rb +0 -22
  309. data/spec/ruby-lint/definitions_builder/assignments/variables.rb +0 -71
  310. data/spec/ruby-lint/definitions_builder/associate_nodes.rb +0 -17
  311. data/spec/ruby-lint/definitions_builder/blocks.rb +0 -40
  312. data/spec/ruby-lint/definitions_builder/classes.rb +0 -230
  313. data/spec/ruby-lint/definitions_builder/methods.rb +0 -147
  314. data/spec/ruby-lint/definitions_builder/reference_amount.rb +0 -31
  315. data/spec/ruby-lint/definitions_builder/unused.rb +0 -15
  316. data/spec/ruby-lint/node.rb +0 -38
  317. data/spec/ruby-lint/parser/assignments.rb +0 -225
  318. data/spec/ruby-lint/parser/classes.rb +0 -110
  319. data/spec/ruby-lint/parser/errors.rb +0 -12
  320. data/spec/ruby-lint/parser/metadata.rb +0 -17
  321. data/spec/ruby-lint/parser/method_definitions.rb +0 -111
  322. data/spec/ruby-lint/parser/methods.rb +0 -217
  323. data/spec/ruby-lint/parser/modules.rb +0 -70
  324. data/spec/ruby-lint/parser/operators.rb +0 -40
  325. data/spec/ruby-lint/parser/statements/begin.rb +0 -55
  326. data/spec/ruby-lint/parser/statements/case.rb +0 -34
  327. data/spec/ruby-lint/parser/statements/defined.rb +0 -11
  328. data/spec/ruby-lint/parser/statements/for.rb +0 -34
  329. data/spec/ruby-lint/parser/statements/if.rb +0 -46
  330. data/spec/ruby-lint/parser/statements/return.rb +0 -14
  331. data/spec/ruby-lint/parser/statements/super.rb +0 -49
  332. data/spec/ruby-lint/parser/statements/unless.rb +0 -42
  333. data/spec/ruby-lint/parser/statements/until.rb +0 -25
  334. data/spec/ruby-lint/parser/statements/while.rb +0 -25
  335. data/spec/ruby-lint/parser/statements/yield.rb +0 -18
  336. data/spec/ruby-lint/parser/types/arrays.rb +0 -47
  337. data/spec/ruby-lint/parser/types/booleans.rb +0 -11
  338. data/spec/ruby-lint/parser/types/constants.rb +0 -32
  339. data/spec/ruby-lint/parser/types/hashes.rb +0 -55
  340. data/spec/ruby-lint/parser/types/nil.rb +0 -7
  341. data/spec/ruby-lint/parser/types/numbers.rb +0 -11
  342. data/spec/ruby-lint/parser/types/procs.rb +0 -11
  343. data/spec/ruby-lint/parser/types/ranges.rb +0 -11
  344. data/spec/ruby-lint/parser/types/regexp.rb +0 -27
  345. data/spec/ruby-lint/parser/types/strings.rb +0 -44
  346. data/spec/ruby-lint/parser/types/symbols.rb +0 -15
  347. data/task/stdlib.rake +0 -23
@@ -0,0 +1,60 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'scoping class definitions' do
5
+ should 'process a global class' do
6
+ defs = build_definitions('class Example; end')
7
+ example = defs.lookup(:const, 'Example')
8
+
9
+ example.is_a?(ruby_object).should == true
10
+
11
+ example.type.should == :const
12
+ example.name.should == 'Example'
13
+ end
14
+
15
+ should 'process a nested class' do
16
+ code = <<-CODE
17
+ class First
18
+ class Second
19
+ end
20
+ end
21
+ CODE
22
+
23
+ defs = build_definitions(code)
24
+ first = defs.lookup(:const, 'First')
25
+
26
+ first.is_a?(ruby_object).should == true
27
+
28
+ defs.lookup(:const, 'Second').nil?.should == true
29
+
30
+ first.lookup(:const, 'Second') \
31
+ .is_a?(ruby_object) \
32
+ .should == true
33
+ end
34
+
35
+ should 'process a global and nested class' do
36
+ code = <<-CODE
37
+ class First
38
+ class Second
39
+ end
40
+ end
41
+
42
+ class Third
43
+ end
44
+ CODE
45
+
46
+ defs = build_definitions(code)
47
+ first = defs.lookup(:const, 'First')
48
+
49
+ first.lookup(:const, 'Second').is_a?(ruby_object).should == true
50
+ first.lookup(:const, 'Third').is_a?(ruby_object).should == true
51
+
52
+ first.lookup(:const, 'Second') \
53
+ .lookup(:const, 'Third') \
54
+ .is_a?(ruby_object) \
55
+ .should == true
56
+
57
+ defs.lookup(:const, 'Third').is_a?(ruby_object).should == true
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'rails' do
5
+ should 'process a basic Rails controller' do
6
+ code = fixture('complex/rails/basic_controller.rb')
7
+ defs = build_definitions(code)
8
+
9
+ controller = defs.lookup(:const, 'ApplicationController')
10
+
11
+ controller.is_a?(ruby_object).should == true
12
+
13
+ controller.lookup(:instance_method, 'login_required') \
14
+ .is_a?(ruby_method) \
15
+ .should == true
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,15 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ # https://github.com/farrel/RCAP/blob/master/lib/rcap/cap_1_2/alert.rb
5
+ describe 'rcap' do
6
+ should 'process the Alert class' do
7
+ code = fixture('complex/rcap.rb')
8
+ defs = build_definitions(code)
9
+ const = defs.lookup_constant_path('RCAP::CAP_1_2::Alert')
10
+
11
+ const.lookup(:const, 'CAP_VERSION').value.value.should == '1.2'
12
+ const.has_definition?(:instance_method, 'xmlns').should == true
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'slop' do
5
+ should 'process the Slop gem' do
6
+ code = fixture('complex/slop.rb')
7
+ defs = build_definitions(code)
8
+ const = defs.lookup(:const, 'Slop')
9
+
10
+ const.lookup(:const, 'VERSION').value.value.should == '3.4.5'
11
+
12
+ const.has_definition?(:method, 'parse').should == true
13
+ const.has_definition?(:method, 'parse!').should == true
14
+ end
15
+ end
16
+ end
@@ -10,7 +10,7 @@ end
10
10
 
11
11
  defs = build_definitions(code)
12
12
 
13
- defs.lookup(:local_variable, 'key').is_a?(ruby_object).should == true
14
- defs.lookup(:local_variable, 'value').is_a?(ruby_object).should == true
13
+ defs.lookup(:lvar, 'key').is_a?(ruby_object).should == true
14
+ defs.lookup(:lvar, 'value').is_a?(ruby_object).should == true
15
15
  end
16
16
  end
@@ -0,0 +1,13 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ should 'freeze the VM and all instance variables' do
5
+ vm = RubyLint::VirtualMachine.new
6
+
7
+ vm.freeze
8
+
9
+ vm.frozen?.should == true
10
+ vm.definitions.frozen?.should == true
11
+ vm.associations.frozen?.should == true
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'string interpolation' do
5
+ should 'process an assignment in a string' do
6
+ code = '"hello #{number = 10}"'
7
+ defs = build_definitions(code)
8
+
9
+ defs.lookup(:lvar, 'number').value.value.should == 10
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'defining methods' do
5
+ should 'process a definition with a variable assignment in the body' do
6
+ code = <<-CODE
7
+ def example
8
+ number = 10
9
+ end
10
+ CODE
11
+
12
+ defs = build_definitions(code)
13
+
14
+ defs.lookup(:instance_method, 'example') \
15
+ .lookup(:lvar, 'number') \
16
+ .is_a?(ruby_object) \
17
+ .should == true
18
+
19
+ defs.lookup(:lvar, 'number').nil?.should == true
20
+ end
21
+
22
+ should 'process a definition with a receiver' do
23
+ code = <<-CODE
24
+ def String.example
25
+ number = 10
26
+ end
27
+ CODE
28
+
29
+ defs = build_definitions(code)
30
+
31
+ defs.lookup(:const, 'String') \
32
+ .lookup(:method, 'example') \
33
+ .is_a?(ruby_method) \
34
+ .should == true
35
+
36
+ defs.lookup(:method, 'example').nil?.should == true
37
+ defs.lookup(:instance_method, 'example').nil?.should == true
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'exporting variables out of method scopes' do
5
+ should 'export variables to the outer scope' do
6
+ code = <<-CODE
7
+ def example
8
+ @number = 10
9
+ end
10
+ CODE
11
+
12
+ defs = build_definitions(code)
13
+
14
+ defs.lookup(:ivar, '@number') \
15
+ .is_a?(ruby_object) \
16
+ .should == true
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,77 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'creating variables for method parameters' do
5
+ should 'create local variables' do
6
+ code = <<-CODE
7
+ def example(number)
8
+ return number
9
+ end
10
+ CODE
11
+
12
+ defs = build_definitions(code)
13
+
14
+ defs.lookup(:instance_method, 'example') \
15
+ .lookup(:lvar, 'number') \
16
+ .is_a?(ruby_object) \
17
+ .should == true
18
+ end
19
+
20
+ should 'allow the assignment using parameters' do
21
+ code = <<-CODE
22
+ def example(number)
23
+ other_number = number
24
+ end
25
+ CODE
26
+
27
+ defs = build_definitions(code)
28
+
29
+ defs.lookup(:instance_method, 'example') \
30
+ .lookup(:lvar, 'other_number') \
31
+ .is_a?(ruby_object) \
32
+ .should == true
33
+ end
34
+
35
+ should 'take all argument types into account' do
36
+ code = <<-CODE
37
+ def example(required, optional = 10, *splat, more, &block)
38
+ _required = required
39
+ _optional = optional
40
+ _splat = splat
41
+ _more = more
42
+ _block = block
43
+ end
44
+ CODE
45
+
46
+ defs = build_definitions(code)
47
+ method = defs.lookup(:instance_method, 'example')
48
+
49
+ %w{_required _splat _more _block}.each do |name|
50
+ method.lookup(:lvar, name).is_a?(ruby_object).should == true
51
+ end
52
+
53
+ method.lookup(:lvar, '_optional').value.value.should == 10
54
+ end
55
+
56
+ should 'store arguments under special types' do
57
+ code = <<-CODE
58
+ def example(required, optional = 10, *splat, more, &block)
59
+ end
60
+ CODE
61
+
62
+ defs = build_definitions(code)
63
+ method = defs.lookup(:instance_method, 'example')
64
+ types = [
65
+ [:arg, 'required'],
66
+ [:optarg, 'optional'],
67
+ [:restarg, 'splat'],
68
+ [:arg, 'more'],
69
+ [:blockarg, 'block']
70
+ ]
71
+
72
+ types.each do |(type, name)|
73
+ method.lookup(type, name).is_a?(ruby_object).should == true
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ should 'be able to patch global definitions' do
5
+ after do
6
+ RubyLint::VirtualMachine.global_scope.lookup(:const, 'String') \
7
+ .definitions[:method] \
8
+ .delete('foobar')
9
+ end
10
+
11
+ should 'add a class method to the String class' do
12
+ code = <<-CODE
13
+ class String
14
+ def self.foobar
15
+ end
16
+ end
17
+ CODE
18
+
19
+ defs = build_definitions(code)
20
+
21
+ defs.lookup(:const, 'String') \
22
+ .has_definition?(:method, 'foobar') \
23
+ .should == true
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,63 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'scoping method definitions' do
5
+ should 'process a global method' do
6
+ defs = build_definitions('def example; end')
7
+ example = defs.lookup(:instance_method, 'example')
8
+
9
+ example.is_a?(ruby_method).should == true
10
+
11
+ example.type.should == :instance_method
12
+ example.name.should == 'example'
13
+ end
14
+
15
+ should 'process a nested method' do
16
+ code = <<-CODE
17
+ def first
18
+ def second
19
+ end
20
+ end
21
+ CODE
22
+
23
+ defs = build_definitions(code)
24
+ first = defs.lookup(:instance_method, 'first')
25
+
26
+ first.is_a?(ruby_method).should == true
27
+
28
+ first.lookup(:instance_method, 'second') \
29
+ .is_a?(ruby_method) \
30
+ .should == true
31
+
32
+ defs.lookup(:instance_method, 'second').nil?.should == true
33
+ end
34
+
35
+ should 'process a global and nested method' do
36
+ code = <<-CODE
37
+ def first
38
+ def second
39
+ end
40
+ end
41
+
42
+ def third
43
+ end
44
+ CODE
45
+
46
+ defs = build_definitions(code)
47
+ first = defs.lookup(:instance_method, 'first')
48
+
49
+ first.lookup(:instance_method, 'second') \
50
+ .is_a?(ruby_method) \
51
+ .should == true
52
+
53
+ first.lookup(:instance_method, 'second') \
54
+ .lookup(:instance_method, 'third') \
55
+ .is_a?(ruby_method) \
56
+ .should == true
57
+
58
+ defs.lookup(:instance_method, 'third') \
59
+ .is_a?(ruby_method) \
60
+ .should == true
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'method visibility' do
5
+ should 'define a method as public' do
6
+ code = <<-CODE
7
+ def example
8
+ end
9
+ CODE
10
+
11
+ defs = build_definitions(code)
12
+
13
+ defs.lookup(:instance_method, 'example').visibility.should == :public
14
+ end
15
+
16
+ should 'define a method as private' do
17
+ code = <<-CODE
18
+ private
19
+
20
+ def example
21
+ end
22
+ CODE
23
+
24
+ defs = build_definitions(code)
25
+
26
+ defs.lookup(:instance_method, 'example').visibility.should == :private
27
+ end
28
+
29
+ should 'define a method as protected' do
30
+ code = <<-CODE
31
+ protected
32
+
33
+ def example
34
+ end
35
+ CODE
36
+
37
+ defs = build_definitions(code)
38
+
39
+ defs.lookup(:instance_method, 'example').visibility.should == :protected
40
+ end
41
+
42
+ should 'define a method as private and then reset it' do
43
+ code = <<-CODE
44
+ private
45
+
46
+ def example
47
+ end
48
+
49
+ public
50
+
51
+ def example_public
52
+ end
53
+ CODE
54
+
55
+ defs = build_definitions(code)
56
+
57
+ defs.lookup(:instance_method, 'example').visibility.should == :private
58
+
59
+ defs.lookup(:instance_method, 'example_public') \
60
+ .visibility \
61
+ .should == :public
62
+ end
63
+ end
64
+ end