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,50 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::DefinitionBuilder::RubyModule do
4
+ describe 'building a simple module' do
5
+ before do
6
+ node = s(:module, s(:const, nil, :A), s(:nil))
7
+ @root = ruby_object.new(:name => 'root')
8
+ @builder = RubyLint::DefinitionBuilder::RubyModule.new(node, @root)
9
+ end
10
+
11
+ should 'return the name of the module' do
12
+ @builder.build.name.should == 'A'
13
+ end
14
+
15
+ should 'return the parent definitions' do
16
+ @builder.build.parents.should == [@root]
17
+ end
18
+
19
+ should 'return the reference amount' do
20
+ @builder.build.reference_amount.should == 1
21
+ end
22
+
23
+ should 'return the scope to define the module in' do
24
+ @builder.scope.should == @root
25
+ end
26
+ end
27
+
28
+ describe 'using constant paths' do
29
+ before do
30
+ node = s(:module, s(:const, s(:const, nil, :A), :B), s(:nil))
31
+ @root = ruby_object.new(:name => 'root')
32
+
33
+ @root.define_constant('A')
34
+
35
+ @builder = RubyLint::DefinitionBuilder::RubyModule.new(node, @root)
36
+ end
37
+
38
+ should 'return the name of the module' do
39
+ @builder.build.name.should == 'B'
40
+ end
41
+
42
+ should 'return the parent definitions' do
43
+ @builder.build.parents.should == [@root]
44
+ end
45
+
46
+ should 'return the scope to define the module in' do
47
+ @builder.scope.should == @root.lookup(:const, 'A')
48
+ end
49
+ end
50
+ end
@@ -1,10 +1,28 @@
1
1
  require File.expand_path('../../helper', __FILE__)
2
2
 
3
3
  describe 'RubyLint::Iterator' do
4
+ should 'call after_initialize if it is defined' do
5
+ iterator = Class.new(RubyLint::Iterator) do
6
+ attr_reader :number
7
+
8
+ def after_initialize
9
+ @number = 10
10
+ end
11
+ end
12
+
13
+ iterator.new.number.should == 10
14
+ end
15
+
4
16
  should 'iterate over a simple AST' do
5
17
  ast = parse('10; 20; 30', false)
6
18
 
7
19
  iterator = Class.new(RubyLint::Iterator) do
20
+ attr_reader :options
21
+
22
+ def after_initialize
23
+ @options = {:events => [], :numbers => []}
24
+ end
25
+
8
26
  def on_root(node)
9
27
  @options[:events] << :on_root
10
28
  end
@@ -13,17 +31,17 @@ describe 'RubyLint::Iterator' do
13
31
  @options[:events] << :after_root
14
32
  end
15
33
 
16
- def on_integer(node)
17
- unless @options[:events].include?(:on_integer)
18
- @options[:events] << :on_integer
34
+ def on_int(node)
35
+ unless @options[:events].include?(:on_int)
36
+ @options[:events] << :on_int
19
37
  end
20
38
 
21
39
  @options[:numbers] << node.children[0]
22
40
  end
23
41
 
24
- def after_integer(node)
25
- unless @options[:events].include?(:after_integer)
26
- @options[:events] << :after_integer
42
+ def after_int(node)
43
+ unless @options[:events].include?(:after_int)
44
+ @options[:events] << :after_int
27
45
  end
28
46
  end
29
47
  end
@@ -32,11 +50,11 @@ describe 'RubyLint::Iterator' do
32
50
 
33
51
  iterator.iterate(ast)
34
52
 
35
- iterator.options[:numbers].should == ['10', '20', '30']
53
+ iterator.options[:numbers].should == [10, 20, 30]
36
54
  iterator.options[:events].should == [
37
55
  :on_root,
38
- :on_integer,
39
- :after_integer,
56
+ :on_int,
57
+ :after_int,
40
58
  :after_root
41
59
  ]
42
60
  end
@@ -53,16 +71,22 @@ end
53
71
  ast = parse(code, false)
54
72
 
55
73
  iterator = Class.new(RubyLint::Iterator) do
74
+ attr_reader :options
75
+
76
+ def after_initialize
77
+ @options = {}
78
+ end
79
+
56
80
  def on_class(node)
57
- @options[:class] = node.children[0].children[0]
81
+ @options[:class] = node.children[0].children[1]
58
82
  end
59
83
 
60
- def on_method_definition(node)
84
+ def on_def(node)
61
85
  @options[:method] = node.children[0]
62
86
  end
63
87
 
64
- def on_method(node)
65
- @options[:call] = node.children[0]
88
+ def on_send(node)
89
+ @options[:call] = node.children[1]
66
90
  end
67
91
  end
68
92
 
@@ -70,8 +94,8 @@ end
70
94
 
71
95
  iterator.iterate(ast)
72
96
 
73
- iterator.options[:class].should == 'Example'
74
- iterator.options[:method].should == 'some_method'
75
- iterator.options[:call].should == 'puts'
97
+ iterator.options[:class].should == :Example
98
+ iterator.options[:method].should == :some_method
99
+ iterator.options[:call].should == :puts
76
100
  end
77
101
  end
@@ -0,0 +1,23 @@
1
+ require File.expand_path('../../helper', __FILE__)
2
+
3
+ describe RubyLint::NestedStack do
4
+ before do
5
+ @stack = RubyLint::NestedStack.new
6
+ end
7
+
8
+ should 'add a new stack' do
9
+ @stack.empty?.should == true
10
+
11
+ @stack.add_stack
12
+
13
+ @stack.empty?.should == false
14
+ end
15
+
16
+ should 'push and pop values from the stack' do
17
+ @stack.add_stack
18
+ @stack.push(10)
19
+
20
+ @stack.pop.should == [10]
21
+ @stack.empty?.should == true
22
+ end
23
+ end
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../../helper', __FILE__)
2
+
3
+ describe RubyLint::Parser do
4
+ should 'parse a block of Ruby code' do
5
+ ast = parse('10', false)
6
+
7
+ ast.type.should == :root
8
+ ast.children.length.should == 1
9
+ end
10
+
11
+ should 'use a custom node class' do
12
+ parse('10').class.should == RubyLint::AST::Node
13
+ end
14
+ end
@@ -1,16 +1,6 @@
1
1
  require File.expand_path('../../helper', __FILE__)
2
2
 
3
3
  describe 'RubyLint::Report' do
4
- should 'register a custom level' do
5
- RubyLint::Report.add_level(:test)
6
-
7
- RubyLint::Report.levels.include?(:test).should == true
8
-
9
- RubyLint::Report.delete_level(:test)
10
-
11
- RubyLint::Report.levels.include?(:test).should == false
12
- end
13
-
14
4
  should 'add a message using #add' do
15
5
  report = RubyLint::Report.new
16
6
 
@@ -3,8 +3,9 @@ require File.expand_path('../../../helper', __FILE__)
3
3
  describe RubyLint::Report::Entry do
4
4
  should 'sort a list of entries' do
5
5
  entries = [
6
- RubyLint::Report::Entry.new(:info, 'info', 1, 1, 'a.rb'),
6
+ RubyLint::Report::Entry.new(:info, 'info', 2, 1, 'a.rb'),
7
7
  RubyLint::Report::Entry.new(:error, 'error', 1, 1, 'a.rb'),
8
+ RubyLint::Report::Entry.new(:warning, 'warning', 3, 1, 'a.rb'),
8
9
  RubyLint::Report::Entry.new(:warning, 'warning', 1, 1, 'b.rb'),
9
10
  RubyLint::Report::Entry.new(:error, 'error', 1, 1, 'c.rb'),
10
11
  ].sort
@@ -15,10 +16,13 @@ describe RubyLint::Report::Entry do
15
16
  entries[1].file.should == 'a.rb'
16
17
  entries[1].level.should == :info
17
18
 
18
- entries[2].file.should == 'b.rb'
19
+ entries[2].file.should == 'a.rb'
19
20
  entries[2].level.should == :warning
20
21
 
21
- entries[3].file.should == 'c.rb'
22
- entries[3].level.should == :error
22
+ entries[3].file.should == 'b.rb'
23
+ entries[3].level.should == :warning
24
+
25
+ entries[4].file.should == 'c.rb'
26
+ entries[4].level.should == :error
23
27
  end
24
28
  end
@@ -0,0 +1,32 @@
1
+ require File.expand_path('../../helper', __FILE__)
2
+
3
+ describe RubyLint::Runner do
4
+ before do
5
+ @configuration = RubyLint::Configuration.new
6
+ end
7
+
8
+ should 'run analysis on a single file' do
9
+ files = [fixture_path('invalid.rb')]
10
+ runner = RubyLint::Runner.new(@configuration)
11
+ output = runner.analyze(files)
12
+
13
+ output.should =~ /undefined method foobar on an instance of String/
14
+ end
15
+
16
+ should 'run analysis on multiple files' do
17
+ files = [fixture_path('invalid.rb'), fixture_path('invalid_2.rb')]
18
+ runner = RubyLint::Runner.new(@configuration)
19
+ output = runner.analyze(files)
20
+
21
+ output.should =~ /undefined method foobar on an instance of String/
22
+ output.should =~ /undefined method derp on an instance of String/
23
+ end
24
+
25
+ should 'add syntax errors to the report' do
26
+ files = [fixture_path('syntax_error.rb')]
27
+ runner = RubyLint::Runner.new(@configuration)
28
+ output = runner.analyze(files)
29
+
30
+ output.should =~ /unexpected token \$end/
31
+ end
32
+ end
@@ -0,0 +1,87 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'array assignments' do
5
+ should 'assign an empty array' do
6
+ defs = build_definitions('numbers = []')
7
+ value = defs.lookup(:lvar, 'numbers').value
8
+
9
+ value.type.should == :array
10
+ value.instance?.should == true
11
+
12
+ value.has_definition?(:instance_method, 'each').should == true
13
+ end
14
+
15
+ should 'assign an array with values' do
16
+ defs = build_definitions('numbers = [10, 20]')
17
+ array = defs.lookup(:lvar, 'numbers').value
18
+ members = [10, 20]
19
+
20
+ members.each_with_index do |value, index|
21
+ index = index.to_s
22
+ member = array.lookup(:member, index)
23
+
24
+ member.name.should == index
25
+ member.value.type.should == :int
26
+ member.value.value.should == value
27
+ end
28
+ end
29
+
30
+ should 'process single index assignments' do
31
+ code = <<-CODE
32
+ numbers = []
33
+ numbers[0] = 10
34
+ CODE
35
+
36
+ defs = build_definitions(code)
37
+ numbers = defs.lookup(:lvar, 'numbers')
38
+
39
+ numbers.is_a?(ruby_object).should == true
40
+ numbers.value.is_a?(ruby_object).should == true
41
+ numbers.value.type.should == :array
42
+
43
+ first = numbers.value.lookup(:member, '0')
44
+
45
+ first.type.should == :member
46
+ first.name.should == '0'
47
+
48
+ first.value.is_a?(ruby_object).should == true
49
+ first.value.type.should == :int
50
+ first.value.value.should == 10
51
+ end
52
+
53
+ should 'process multiple index assignments' do
54
+ code = <<-CODE
55
+ numbers = []
56
+ numbers[0,1] = 10
57
+ numbers[2,3] = 20, 30
58
+ numbers[4,5,6] = 40, 50
59
+ CODE
60
+
61
+ defs = build_definitions(code)
62
+ numbers = defs.lookup(:lvar, 'numbers').value
63
+
64
+ numbers.lookup(:member, '0').value.value.should == 10
65
+ numbers.lookup(:member, '1').value.should == nil
66
+ numbers.lookup(:member, '2').value.value.should == 20
67
+ numbers.lookup(:member, '3').value.value.should == 30
68
+ numbers.lookup(:member, '4').value.value.should == 40
69
+ numbers.lookup(:member, '5').value.value.should == 50
70
+ numbers.lookup(:member, '6').value.should == nil
71
+ end
72
+
73
+ should 'process index assignments using variables' do
74
+ code = <<-CODE
75
+ index = 1
76
+ numbers = [10]
77
+ numbers[index] = 20
78
+ CODE
79
+
80
+ defs = build_definitions(code)
81
+ numbers = defs.lookup(:lvar, 'numbers').value
82
+
83
+ numbers.lookup(:member, '0').value.value.should == 10
84
+ numbers.lookup(:member, '1').value.value.should == 20
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,52 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'hash assignments' do
5
+ should 'assign an empty hash' do
6
+ defs = build_definitions('numbers = {}')
7
+ value = defs.lookup(:lvar, 'numbers').value
8
+
9
+ value.type.should == :hash
10
+ value.instance?.should == true
11
+
12
+ value.has_definition?(:instance_method, 'each').should == true
13
+ end
14
+
15
+ should 'assign a hash with values' do
16
+ defs = build_definitions('numbers = {:one => 1, :two => 2}')
17
+ hash = defs.lookup(:lvar, 'numbers').value
18
+ members = {'one' => 1, 'two' => 2}
19
+
20
+ members.each do |name, value|
21
+ member = hash.lookup(:member, name)
22
+
23
+ member.name.should == name
24
+ member.value.type.should == :int
25
+ member.value.value.should == value
26
+ end
27
+ end
28
+
29
+ should 'process single key assignments' do
30
+ defs = build_definitions('numbers = {}; numbers[:one] = 1')
31
+ hash = defs.lookup(:lvar, 'numbers').value
32
+ member = hash.lookup(:member, 'one')
33
+
34
+ member.value.type.should == :int
35
+ member.value.value.should == 1
36
+ end
37
+
38
+ should 'process key assignments using variables' do
39
+ code = <<-CODE
40
+ key = :two
41
+ numbers = {:one => 1}
42
+ numbers[key] = 2
43
+ CODE
44
+
45
+ defs = build_definitions(code)
46
+ hash = defs.lookup(:lvar, 'numbers').value
47
+
48
+ hash.lookup(:member, 'one').value.value.should == 1
49
+ hash.lookup(:member, 'two').value.value.should == 2
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,41 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Building variable definitions' do
4
+ describe 'OR assignments' do
5
+ should 'assign a non existing local variable' do
6
+ defs = build_definitions('number ||= 10')
7
+
8
+ defs.lookup(:lvar, 'number').value.value.should == 10
9
+ end
10
+
11
+ should 'not overwrite an existing variable' do
12
+ code = <<-CODE
13
+ number = 10
14
+ number ||= 20
15
+ CODE
16
+
17
+ defs = build_definitions(code)
18
+
19
+ defs.lookup(:lvar, 'number').value.value.should == 10
20
+ end
21
+ end
22
+
23
+ describe 'AND assignments' do
24
+ should 'not assign a non existing local variable' do
25
+ defs = build_definitions('number &&= 10')
26
+
27
+ defs.lookup(:lvar, 'number').nil?.should == true
28
+ end
29
+
30
+ should 'overwrite an existing variable' do
31
+ code = <<-CODE
32
+ number = 10
33
+ number &&= 20
34
+ CODE
35
+
36
+ defs = build_definitions(code)
37
+
38
+ defs.lookup(:lvar, 'number').value.value.should == 20
39
+ end
40
+ end
41
+ end