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
@@ -4,11 +4,11 @@ describe 'Using return values in assignments' do
4
4
  it 'should assign a return value' do
5
5
  code = 'word = String.new'
6
6
  defs = build_definitions(code)
7
- value = defs.lookup(:local_variable, 'word').value
7
+ value = defs.lookup(:lvar, 'word').value
8
8
 
9
9
  value.is_a?(ruby_object).should == true
10
10
 
11
- value.type.should == :constant
11
+ value.type.should == :const
12
12
  value.name.should == 'String'
13
13
  value.instance?.should == true
14
14
  end
@@ -23,17 +23,17 @@ number = example
23
23
 
24
24
  defs = build_definitions(code)
25
25
 
26
- defs.lookup(:local_variable, 'number').value.nil?.should == true
26
+ defs.lookup(:lvar, 'number').value.nil?.should == true
27
27
  end
28
28
 
29
29
  it 'should assign return values when chaining method calls' do
30
30
  code = 'word = String.new.initialize.initialize'
31
31
  defs = build_definitions(code)
32
- value = defs.lookup(:local_variable, 'word').value
32
+ value = defs.lookup(:lvar, 'word').value
33
33
 
34
34
  value.is_a?(ruby_object).should == true
35
35
 
36
- value.type.should == :constant
36
+ value.type.should == :const
37
37
  value.name.should == 'String'
38
38
  value.instance?.should == true
39
39
  end
@@ -42,37 +42,37 @@ number = example
42
42
  should 'create a new String instance' do
43
43
  defs = build_definitions('number = "10"')
44
44
 
45
- defs.lookup(:local_variable, 'number').value.instance?.should == true
45
+ defs.lookup(:lvar, 'number').value.instance?.should == true
46
46
  end
47
47
 
48
48
  should 'create a new Symbol instance' do
49
49
  defs = build_definitions('number = :"10"')
50
50
 
51
- defs.lookup(:local_variable, 'number').value.instance?.should == true
51
+ defs.lookup(:lvar, 'number').value.instance?.should == true
52
52
  end
53
53
 
54
54
  should 'create a new Fixnum instance' do
55
55
  defs = build_definitions('number = 10')
56
56
 
57
- defs.lookup(:local_variable, 'number').value.instance?.should == true
57
+ defs.lookup(:lvar, 'number').value.instance?.should == true
58
58
  end
59
59
 
60
60
  should 'create a new Float instance' do
61
61
  defs = build_definitions('number = 10.0')
62
62
 
63
- defs.lookup(:local_variable, 'number').value.instance?.should == true
63
+ defs.lookup(:lvar, 'number').value.instance?.should == true
64
64
  end
65
65
 
66
66
  should 'create a new Array instance' do
67
67
  defs = build_definitions('number = [10]')
68
68
 
69
- defs.lookup(:local_variable, 'number').value.instance?.should == true
69
+ defs.lookup(:lvar, 'number').value.instance?.should == true
70
70
  end
71
71
 
72
72
  should 'create a new Hash instance' do
73
73
  defs = build_definitions('number = {:a => 10}')
74
74
 
75
- defs.lookup(:local_variable, 'number').value.instance?.should == true
75
+ defs.lookup(:lvar, 'number').value.instance?.should == true
76
76
  end
77
77
  end
78
78
  end
@@ -0,0 +1,85 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'variable assignments' do
5
+ should 'assign different types of variables' do
6
+ types = {
7
+ 'number' => :lvar,
8
+ '@number' => :ivar,
9
+ '@@number' => :cvar,
10
+ '$number' => :gvar,
11
+ 'NUMBER' => :const
12
+ }
13
+
14
+ types.each do |name, type|
15
+ number = build_definitions("#{name} = 10").lookup(type, name)
16
+
17
+ number.name.should == name
18
+ number.value.value.should == 10
19
+ end
20
+ end
21
+
22
+ should 'assign multiple values to multiple variables' do
23
+ defs = build_definitions('number, numberx = 10, 20')
24
+ number = defs.lookup(:lvar, 'number')
25
+ numberx = defs.lookup(:lvar, 'numberx')
26
+
27
+ number.is_a?(ruby_object).should == true
28
+
29
+ number.name.should == 'number'
30
+ number.value.value.should == 10
31
+
32
+ numberx.is_a?(ruby_object).should == true
33
+
34
+ numberx.name.should == 'numberx'
35
+ numberx.value.value.should == 20
36
+ end
37
+
38
+ should 'assign a value to a constant path' do
39
+ defs = build_definitions('Kernel::FOO = 10')
40
+ foo = defs.lookup(:const, 'Kernel').lookup(:const, 'FOO')
41
+
42
+ foo.is_a?(ruby_object).should == true
43
+
44
+ foo.name.should == 'FOO'
45
+ foo.value.value.should == 10
46
+ end
47
+
48
+ should 'assign a single value to multiple variables' do
49
+ code = 'first = second = third = 10'
50
+ defs = build_definitions(code)
51
+
52
+ %w{first second third}.each do |name|
53
+ variable = defs.lookup(:lvar, name)
54
+
55
+ variable.is_a?(ruby_object).should == true
56
+
57
+ variable.value.type.should == :int
58
+ variable.value.value.should == 10
59
+ end
60
+ end
61
+
62
+ should 'resolve variables in assignments' do
63
+ code = <<-CODE
64
+ a = 1
65
+ b = a
66
+
67
+ foo = 100 # to ensure this code doesn't use the last assigned values.
68
+
69
+ c = b
70
+ d = c
71
+ CODE
72
+
73
+ defs = build_definitions(code)
74
+
75
+ %w{a b c d}.each do |name|
76
+ var = defs.lookup(:lvar, name)
77
+
78
+ var.value.type.should == :int
79
+ var.value.value.should == 1
80
+ end
81
+
82
+ defs.lookup(:lvar, 'foo').value.value.should == 100
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ should 'associate AST nodes and their definitions' do
5
+ tokens = parse('def foobar; end', false)
6
+ vm = RubyLint::VirtualMachine.new
7
+
8
+ vm.iterate(tokens)
9
+
10
+ defs = vm.definitions
11
+ assoc = vm.associations
12
+ method = tokens.children[0]
13
+
14
+ assoc.key?(method).should == true
15
+ assoc[method].should == defs.lookup(:instance_method, 'foobar')
16
+ end
17
+ end
@@ -0,0 +1,31 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ after do
5
+ RubyLint::VirtualMachine.global_scope.definitions[:const].delete('ERB')
6
+ end
7
+
8
+ should 'automatically load constants' do
9
+ definitions = build_definitions('ERB')
10
+
11
+ definitions.lookup(:const, 'ERB').is_a?(ruby_object).should == true
12
+
13
+ RubyLint::VirtualMachine.global_scope.lookup(:const, 'ERB') \
14
+ .is_a?(ruby_object) \
15
+ .should == true
16
+ end
17
+
18
+ should 'automatically load constant paths' do
19
+ definitions = build_definitions('Enumerable::Enumerator')
20
+
21
+ definitions.lookup(:const, 'Enumerable') \
22
+ .lookup(:const, 'Enumerator') \
23
+ .is_a?(ruby_object) \
24
+ .should == true
25
+
26
+ RubyLint::VirtualMachine.global_scope.lookup(:const, 'Enumerable') \
27
+ .lookup(:const, 'Enumerator') \
28
+ .is_a?(ruby_object) \
29
+ .should == true
30
+ end
31
+ end
@@ -0,0 +1,64 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ should 'make variables available in a block' do
5
+ code = <<-CODE
6
+ number = 10
7
+
8
+ example do
9
+ end
10
+ CODE
11
+
12
+ definition = build_associations(code).to_a.last.last
13
+
14
+ number = definition.lookup(:lvar, 'number')
15
+
16
+ number.is_a?(ruby_object).should == true
17
+ number.value.value.should == 10
18
+ end
19
+
20
+ should 'make block arguments available as variables inside the block only' do
21
+ code = <<-CODE
22
+ example do
23
+ number = 10
24
+ end
25
+ CODE
26
+
27
+ associations = build_associations(code).to_a
28
+
29
+ root_def = associations.first.last
30
+ block_def = associations.last.last
31
+
32
+ root_def.lookup(:lvar, 'number').nil?.should == true
33
+ block_def.lookup(:lvar, 'number').value.value.should == 10
34
+ end
35
+
36
+ should 'update outer variables modified in the block' do
37
+ code = <<-CODE
38
+ number = 10
39
+ @number = 10
40
+ @@number = 10
41
+ $number = 10
42
+
43
+ example do
44
+ number = 20
45
+ @number = 20
46
+ @@number = 20
47
+ $number = 20
48
+ end
49
+ CODE
50
+
51
+ defs = build_definitions(code)
52
+
53
+ variables = {
54
+ :lvar => 'number',
55
+ :ivar => '@number',
56
+ :cvar => '@@number',
57
+ :gvar => '$number'
58
+ }
59
+
60
+ variables.each do |type, name|
61
+ defs.lookup(type, name).value.value.should == 20
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,21 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'defining class methods' do
5
+ should 'define a single class method using `self`' do
6
+ code = <<-CODE
7
+ class Example
8
+ def self.class_method
9
+ end
10
+ end
11
+ CODE
12
+
13
+ defs = build_definitions(code)
14
+
15
+ defs.lookup(:const, 'Example') \
16
+ .lookup(:method, 'class_method') \
17
+ .is_a?(ruby_method) \
18
+ .should == true
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,104 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'extending classes' do
5
+ should 'set the default parent class' do
6
+ defs = build_definitions('class First; end')
7
+
8
+ defs.lookup(:const, 'First') \
9
+ .lookup(:method, 'new') \
10
+ .is_a?(ruby_method) \
11
+ .should == true
12
+ end
13
+
14
+ should 'extend a class using a parent' do
15
+ code = <<-CODE
16
+ class First
17
+ def example
18
+ end
19
+ end
20
+
21
+ class Second < First
22
+ end
23
+ CODE
24
+
25
+ defs = build_definitions(code)
26
+
27
+ defs.lookup(:const, 'Second') \
28
+ .parents \
29
+ .map(&:name) \
30
+ .should == ['First', 'root']
31
+
32
+ defs.lookup(:const, 'Second') \
33
+ .lookup(:instance_method, 'example') \
34
+ .is_a?(ruby_method) \
35
+ .should == true
36
+ end
37
+
38
+ should 'extend a class using a constant path as the parent class' do
39
+ code = <<-CODE
40
+ class First
41
+ class Second
42
+ def example
43
+ end
44
+ end
45
+ end
46
+
47
+ class Third < First::Second
48
+ end
49
+ CODE
50
+
51
+ defs = build_definitions(code)
52
+
53
+ defs.lookup(:const, 'Third') \
54
+ .parents \
55
+ .map(&:name) \
56
+ .should == ['Second', 'root']
57
+
58
+ defs.lookup(:const, 'Third') \
59
+ .lookup(:instance_method, 'example') \
60
+ .is_a?(ruby_method) \
61
+ .should == true
62
+ end
63
+
64
+ should 'extend a class using a variable' do
65
+ code = <<-CODE
66
+ parent = String
67
+
68
+ class MyString < parent
69
+ end
70
+ CODE
71
+
72
+ defs = build_definitions(code)
73
+
74
+ parents = defs.lookup(:const, 'MyString').parents
75
+
76
+ parents.length.should == 2
77
+ parents.include?(defs.lookup(:const, 'String')).should == true
78
+ end
79
+
80
+ # Ruby only allows classes to inherit from constants.
81
+ should 'not be able to inherit non constant values' do
82
+ code = <<-CODE
83
+ class MyString < 'foo'
84
+
85
+ end
86
+ CODE
87
+
88
+ error = should.raise?(TypeError) do
89
+ build_definitions(code)
90
+ end
91
+
92
+ error.message.should == 'classes can only inherit another class'
93
+ end
94
+
95
+ should 'inherit from Object when importing String' do
96
+ defs = build_definitions('String')
97
+
98
+ defs.lookup(:const, 'String') \
99
+ .lookup(:method, 'new') \
100
+ .is_a?(ruby_method) \
101
+ .should == true
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,24 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'redefining classes' do
5
+ should 'update a class when it is redefined' do
6
+ code = <<-CODE
7
+ class First
8
+ end
9
+
10
+ class First
11
+ def example
12
+ end
13
+ end
14
+ CODE
15
+
16
+ defs = build_definitions(code)
17
+
18
+ defs.lookup(:const, 'First') \
19
+ .lookup(:instance_method, 'example') \
20
+ .is_a?(ruby_method) \
21
+ .should == true
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,94 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'using sclass blocks' do
5
+ should 'define a class method using `class << self`' do
6
+ code = <<-CODE
7
+ class First
8
+ class << self
9
+ def example
10
+ end
11
+ end
12
+ end
13
+ CODE
14
+
15
+ defs = build_definitions(code)
16
+
17
+ defs.lookup(:const, 'First') \
18
+ .lookup(:method, 'example') \
19
+ .is_a?(ruby_method) \
20
+ .should == true
21
+ end
22
+
23
+ should 'define a class method using `class << self` in the global scope' do
24
+ code = <<-CODE
25
+ class << self
26
+ def example
27
+ end
28
+ end
29
+ CODE
30
+
31
+ defs = build_definitions(code)
32
+
33
+ defs.lookup(:method, 'example').is_a?(ruby_method).should == true
34
+ end
35
+
36
+ should 'define a class method using `class << String`' do
37
+ code = <<-CODE
38
+ class << String
39
+ def example
40
+ end
41
+ end
42
+ CODE
43
+
44
+ defs = build_definitions(code)
45
+
46
+ defs.lookup(:const, 'String') \
47
+ .lookup(:method, 'example') \
48
+ .is_a?(ruby_method) \
49
+ .should == true
50
+ end
51
+
52
+ should 'define a class method using `class << String` nested in a class' do
53
+ code = <<-CODE
54
+ class First
55
+ class << String
56
+ def example
57
+ end
58
+ end
59
+ end
60
+ CODE
61
+
62
+ defs = build_definitions(code)
63
+
64
+ defs.lookup(:const, 'First') \
65
+ .lookup(:method, 'example') \
66
+ .is_a?(ruby_method) \
67
+ .should == false
68
+
69
+ defs.lookup(:const, 'String') \
70
+ .lookup(:method, 'example') \
71
+ .is_a?(ruby_method) \
72
+ .should == true
73
+ end
74
+
75
+ should 'define an instance method using `class << variable`' do
76
+ code = <<-CODE
77
+ variable = "foo"
78
+
79
+ class << variable
80
+ def example
81
+ end
82
+ end
83
+ CODE
84
+
85
+ defs = build_definitions(code)
86
+
87
+ defs.lookup(:lvar, 'variable') \
88
+ .value \
89
+ .lookup(:instance_method, 'example') \
90
+ .is_a?(ruby_object) \
91
+ .should == true
92
+ end
93
+ end
94
+ end