ruby-lint 0.0.4 → 0.0.5

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 (317) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.asc +17 -0
  3. data.tar.gz.asc +14 -14
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +0 -1
  6. data/.yardopts +1 -0
  7. data/CONTRIBUTING.md +41 -0
  8. data/MANIFEST +99 -66
  9. data/README.md +36 -10
  10. data/Rakefile +6 -0
  11. data/checksum/ruby-lint-0.0.4.gem.sha512 +1 -0
  12. data/doc/changelog.md +94 -0
  13. data/lib/ruby-lint.rb +18 -1
  14. data/lib/ruby-lint/analysis/argument_amount.rb +43 -10
  15. data/lib/ruby-lint/analysis/base.rb +23 -17
  16. data/lib/ruby-lint/analysis/pedantics.rb +3 -1
  17. data/lib/ruby-lint/analysis/undefined_methods.rb +48 -10
  18. data/lib/ruby-lint/analysis/unused_variables.rb +27 -5
  19. data/lib/ruby-lint/ast/node.rb +10 -0
  20. data/lib/ruby-lint/cli/analyze.rb +22 -4
  21. data/lib/ruby-lint/cli/base.rb +8 -2
  22. data/lib/ruby-lint/configuration.rb +43 -4
  23. data/lib/ruby-lint/definition/constant_proxy.rb +10 -1
  24. data/lib/ruby-lint/definition/ruby_method.rb +45 -31
  25. data/lib/ruby-lint/definition/ruby_object.rb +56 -15
  26. data/lib/ruby-lint/definition_builder/base.rb +4 -0
  27. data/lib/ruby-lint/definition_builder/primitive.rb +1 -1
  28. data/lib/ruby-lint/definition_builder/ruby_array.rb +1 -1
  29. data/lib/ruby-lint/definition_builder/ruby_block.rb +1 -0
  30. data/lib/ruby-lint/definition_builder/ruby_class.rb +1 -1
  31. data/lib/ruby-lint/definition_builder/ruby_hash.rb +1 -1
  32. data/lib/ruby-lint/definition_builder/ruby_module.rb +3 -1
  33. data/lib/ruby-lint/definition_generator.rb +15 -7
  34. data/lib/ruby-lint/definitions/core/arg0.rb +1 -1
  35. data/lib/ruby-lint/definitions/core/argf.rb +1 -1
  36. data/lib/ruby-lint/definitions/core/argument_error.rb +2 -2
  37. data/lib/ruby-lint/definitions/core/argv.rb +1 -1
  38. data/lib/ruby-lint/definitions/core/array.rb +6 -6
  39. data/lib/ruby-lint/definitions/core/autoload.rb +2 -2
  40. data/lib/ruby-lint/definitions/core/basic_object.rb +8 -12
  41. data/lib/ruby-lint/definitions/core/bignum.rb +2 -2
  42. data/lib/ruby-lint/definitions/core/binding.rb +2 -2
  43. data/lib/ruby-lint/definitions/core/class.rb +2 -2
  44. data/lib/ruby-lint/definitions/core/comparable.rb +1 -1
  45. data/lib/ruby-lint/definitions/core/complex.rb +4 -4
  46. data/lib/ruby-lint/definitions/core/condition_variable.rb +2 -2
  47. data/lib/ruby-lint/definitions/core/continuation.rb +2 -2
  48. data/lib/ruby-lint/definitions/core/data.rb +2 -2
  49. data/lib/ruby-lint/definitions/core/date.rb +34 -34
  50. data/lib/ruby-lint/definitions/core/date_time.rb +26 -26
  51. data/lib/ruby-lint/definitions/core/default_record_separator.rb +1 -1
  52. data/lib/ruby-lint/definitions/core/digest.rb +14 -14
  53. data/lib/ruby-lint/definitions/core/dir.rb +34 -34
  54. data/lib/ruby-lint/definitions/core/encoding.rb +237 -237
  55. data/lib/ruby-lint/definitions/core/encoding_error.rb +2 -2
  56. data/lib/ruby-lint/definitions/core/enumerable.rb +15 -15
  57. data/lib/ruby-lint/definitions/core/enumerator.rb +2 -2
  58. data/lib/ruby-lint/definitions/core/env.rb +1 -1
  59. data/lib/ruby-lint/definitions/core/eoferror.rb +2 -2
  60. data/lib/ruby-lint/definitions/core/erb.rb +30 -23
  61. data/lib/ruby-lint/definitions/core/errno.rb +525 -525
  62. data/lib/ruby-lint/definitions/core/etc.rb +6 -6
  63. data/lib/ruby-lint/definitions/core/exception.rb +2 -2
  64. data/lib/ruby-lint/definitions/core/false.rb +1 -1
  65. data/lib/ruby-lint/definitions/core/false_class.rb +2 -2
  66. data/lib/ruby-lint/definitions/core/fatal_error.rb +2 -2
  67. data/lib/ruby-lint/definitions/core/fiber.rb +2 -2
  68. data/lib/ruby-lint/definitions/core/fiber_error.rb +2 -2
  69. data/lib/ruby-lint/definitions/core/file.rb +68 -68
  70. data/lib/ruby-lint/definitions/core/file_list.rb +2 -2
  71. data/lib/ruby-lint/definitions/core/file_test.rb +1 -1
  72. data/lib/ruby-lint/definitions/core/file_utils.rb +16 -16
  73. data/lib/ruby-lint/definitions/core/fixnum.rb +4 -4
  74. data/lib/ruby-lint/definitions/core/float.rb +16 -16
  75. data/lib/ruby-lint/definitions/core/float_domain_error.rb +2 -2
  76. data/lib/ruby-lint/definitions/core/gc.rb +2 -2
  77. data/lib/ruby-lint/definitions/core/gem.rb +119 -119
  78. data/lib/ruby-lint/definitions/core/hash.rb +14 -14
  79. data/lib/ruby-lint/definitions/core/immediate_value.rb +1 -1
  80. data/lib/ruby-lint/definitions/core/index_error.rb +2 -2
  81. data/lib/ruby-lint/definitions/core/integer.rb +2 -2
  82. data/lib/ruby-lint/definitions/core/interrupt.rb +2 -2
  83. data/lib/ruby-lint/definitions/core/io.rb +38 -38
  84. data/lib/ruby-lint/definitions/core/ioerror.rb +2 -2
  85. data/lib/ruby-lint/definitions/core/kernel.rb +113 -60
  86. data/lib/ruby-lint/definitions/core/key_error.rb +2 -2
  87. data/lib/ruby-lint/definitions/core/load_error.rb +6 -6
  88. data/lib/ruby-lint/definitions/core/local_jump_error.rb +2 -2
  89. data/lib/ruby-lint/definitions/core/marshal.rb +35 -35
  90. data/lib/ruby-lint/definitions/core/match_data.rb +2 -2
  91. data/lib/ruby-lint/definitions/core/math.rb +7 -7
  92. data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +2 -2
  93. data/lib/ruby-lint/definitions/core/method.rb +2 -2
  94. data/lib/ruby-lint/definitions/core/module.rb +39 -3
  95. data/lib/ruby-lint/definitions/core/monitor.rb +4 -4
  96. data/lib/ruby-lint/definitions/core/monitor_mixin.rb +5 -5
  97. data/lib/ruby-lint/definitions/core/mutex.rb +2 -2
  98. data/lib/ruby-lint/definitions/core/name_error.rb +2 -2
  99. data/lib/ruby-lint/definitions/core/nil.rb +1 -1
  100. data/lib/ruby-lint/definitions/core/nil_class.rb +2 -2
  101. data/lib/ruby-lint/definitions/core/no_memory_error.rb +2 -2
  102. data/lib/ruby-lint/definitions/core/no_method_error.rb +2 -2
  103. data/lib/ruby-lint/definitions/core/not_implemented_error.rb +2 -2
  104. data/lib/ruby-lint/definitions/core/numeric.rb +2 -2
  105. data/lib/ruby-lint/definitions/core/object.rb +2 -2
  106. data/lib/ruby-lint/definitions/core/object_space.rb +1 -1
  107. data/lib/ruby-lint/definitions/core/open_struct.rb +3 -3
  108. data/lib/ruby-lint/definitions/core/option_parser.rb +83 -83
  109. data/lib/ruby-lint/definitions/core/precision.rb +1 -1
  110. data/lib/ruby-lint/definitions/core/primitive_failure.rb +2 -2
  111. data/lib/ruby-lint/definitions/core/proc.rb +2 -2
  112. data/lib/ruby-lint/definitions/core/process.rb +29 -29
  113. data/lib/ruby-lint/definitions/core/queue.rb +2 -2
  114. data/lib/ruby-lint/definitions/core/rake.rb +117 -117
  115. data/lib/ruby-lint/definitions/core/rake_file_utils.rb +1 -1
  116. data/lib/ruby-lint/definitions/core/rakeversion.rb +1 -1
  117. data/lib/ruby-lint/definitions/core/random.rb +2 -2
  118. data/lib/ruby-lint/definitions/core/range.rb +4 -4
  119. data/lib/ruby-lint/definitions/core/range_error.rb +2 -2
  120. data/lib/ruby-lint/definitions/core/rational.rb +2 -2
  121. data/lib/ruby-lint/definitions/core/rb_config.rb +3 -3
  122. data/lib/ruby-lint/definitions/core/regexp.rb +28 -28
  123. data/lib/ruby-lint/definitions/core/regexp_error.rb +2 -2
  124. data/lib/ruby-lint/definitions/core/ruby_copyright.rb +1 -1
  125. data/lib/ruby-lint/definitions/core/ruby_description.rb +1 -1
  126. data/lib/ruby-lint/definitions/core/ruby_engine.rb +1 -1
  127. data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +1 -1
  128. data/lib/ruby-lint/definitions/core/ruby_platform.rb +1 -1
  129. data/lib/ruby-lint/definitions/core/ruby_release_date.rb +1 -1
  130. data/lib/ruby-lint/definitions/core/ruby_version.rb +1 -1
  131. data/lib/ruby-lint/definitions/core/runtime_error.rb +2 -2
  132. data/lib/ruby-lint/definitions/core/scan_error.rb +2 -2
  133. data/lib/ruby-lint/definitions/core/script_error.rb +2 -2
  134. data/lib/ruby-lint/definitions/core/security_error.rb +2 -2
  135. data/lib/ruby-lint/definitions/core/shellwords.rb +1 -1
  136. data/lib/ruby-lint/definitions/core/signal.rb +3 -3
  137. data/lib/ruby-lint/definitions/core/signal_exception.rb +2 -2
  138. data/lib/ruby-lint/definitions/core/singleton.rb +2 -2
  139. data/lib/ruby-lint/definitions/core/sized_queue.rb +2 -2
  140. data/lib/ruby-lint/definitions/core/standard_error.rb +2 -2
  141. data/lib/ruby-lint/definitions/core/stderr.rb +3 -2
  142. data/lib/ruby-lint/definitions/core/stdin.rb +3 -2
  143. data/lib/ruby-lint/definitions/core/stdout.rb +3 -2
  144. data/lib/ruby-lint/definitions/core/stop_iteration.rb +2 -2
  145. data/lib/ruby-lint/definitions/core/string.rb +21 -21
  146. data/lib/ruby-lint/definitions/core/string_io.rb +7 -7
  147. data/lib/ruby-lint/definitions/core/string_scanner.rb +4 -4
  148. data/lib/ruby-lint/definitions/core/struct.rb +20 -20
  149. data/lib/ruby-lint/definitions/core/syck.rb +4 -4
  150. data/lib/ruby-lint/definitions/core/symbol.rb +2 -2
  151. data/lib/ruby-lint/definitions/core/syntax_error.rb +2 -2
  152. data/lib/ruby-lint/definitions/core/system_call_error.rb +2 -2
  153. data/lib/ruby-lint/definitions/core/system_exit.rb +2 -2
  154. data/lib/ruby-lint/definitions/core/system_stack_error.rb +2 -2
  155. data/lib/ruby-lint/definitions/core/thread.rb +6 -6
  156. data/lib/ruby-lint/definitions/core/thread_error.rb +2 -2
  157. data/lib/ruby-lint/definitions/core/thread_group.rb +2 -2
  158. data/lib/ruby-lint/definitions/core/time.rb +3 -3
  159. data/lib/ruby-lint/definitions/core/toplevel_binding.rb +1 -1
  160. data/lib/ruby-lint/definitions/core/true.rb +1 -1
  161. data/lib/ruby-lint/definitions/core/true_class.rb +2 -2
  162. data/lib/ruby-lint/definitions/core/type_error.rb +2 -2
  163. data/lib/ruby-lint/definitions/core/unbound_method.rb +2 -2
  164. data/lib/ruby-lint/definitions/core/unmarshalable.rb +1 -1
  165. data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +2 -2
  166. data/lib/ruby-lint/definitions/core/weak_ref.rb +4 -4
  167. data/lib/ruby-lint/definitions/core/yaml.rb +2361 -0
  168. data/lib/ruby-lint/definitions/core/zero_division_error.rb +2 -2
  169. data/lib/ruby-lint/definitions/global_variables.rb +9 -0
  170. data/lib/ruby-lint/definitions/rails/abstract_controller.rb +174 -28
  171. data/lib/ruby-lint/definitions/rails/action_controller.rb +4959 -550
  172. data/lib/ruby-lint/definitions/rails/action_dispatch.rb +2489 -292
  173. data/lib/ruby-lint/definitions/rails/action_mailer.rb +1285 -42
  174. data/lib/ruby-lint/definitions/rails/action_pack.rb +14 -6
  175. data/lib/ruby-lint/definitions/rails/action_view.rb +6941 -445
  176. data/lib/ruby-lint/definitions/rails/active_model.rb +1212 -69
  177. data/lib/ruby-lint/definitions/rails/active_record.rb +10344 -1450
  178. data/lib/ruby-lint/definitions/rails/active_support.rb +4631 -573
  179. data/lib/ruby-lint/definitions/rails/arel.rb +3211 -319
  180. data/lib/ruby-lint/definitions/rails/rails.rb +2922 -84
  181. data/lib/ruby-lint/definitions/rails/sprockets.rb +3048 -277
  182. data/lib/ruby-lint/docstring/mapping.rb +55 -0
  183. data/lib/ruby-lint/docstring/param_tag.rb +29 -0
  184. data/lib/ruby-lint/docstring/parser.rb +133 -0
  185. data/lib/ruby-lint/docstring/return_tag.rb +24 -0
  186. data/lib/ruby-lint/file_loader.rb +96 -0
  187. data/lib/ruby-lint/file_scanner.rb +91 -0
  188. data/lib/ruby-lint/global_scope.rb +56 -0
  189. data/lib/ruby-lint/helper/constant_paths.rb +1 -1
  190. data/lib/ruby-lint/inspector.rb +11 -33
  191. data/lib/ruby-lint/iterator.rb +31 -4
  192. data/lib/ruby-lint/method_call/alias.rb +46 -0
  193. data/lib/ruby-lint/method_call/assign_member.rb +55 -0
  194. data/lib/ruby-lint/method_call/attribute.rb +102 -0
  195. data/lib/ruby-lint/method_call/base.rb +37 -0
  196. data/lib/ruby-lint/method_call/define_method.rb +17 -0
  197. data/lib/ruby-lint/method_call/include.rb +39 -0
  198. data/lib/ruby-lint/parser.rb +9 -4
  199. data/lib/ruby-lint/presenter/text.rb +2 -1
  200. data/lib/ruby-lint/report.rb +19 -42
  201. data/lib/ruby-lint/report/entry.rb +20 -17
  202. data/lib/ruby-lint/runner.rb +92 -11
  203. data/lib/ruby-lint/template/definition.erb +2 -2
  204. data/lib/ruby-lint/variable_predicates.rb +7 -10
  205. data/lib/ruby-lint/version.rb +1 -1
  206. data/lib/ruby-lint/virtual_machine.rb +265 -188
  207. data/ruby-lint.gemspec +4 -4
  208. data/ruby-lint.yml +7 -0
  209. data/spec/fixtures/associating.rb +7 -0
  210. data/spec/fixtures/file_scanner/lib/example/recursive/source.rb +6 -0
  211. data/spec/fixtures/file_scanner/lib/example/recursive/target.rb +8 -0
  212. data/spec/fixtures/file_scanner/lib/example/user.rb +6 -0
  213. data/spec/fixtures/file_scanner/lib/test-dashes/foo.rb +4 -0
  214. data/spec/fixtures/file_scanner/rails/app/models/example/user.rb +6 -0
  215. data/spec/fixtures/file_scanner/rails/app/models/user.rb +4 -0
  216. data/spec/fixtures/uses_external.rb +1 -0
  217. data/spec/fixtures/uses_external_invalid.rb +3 -0
  218. data/spec/fixtures/uses_external_namespace.rb +1 -0
  219. data/spec/ruby-lint/analysis/{argument_amount.rb → argument_amount_spec.rb} +33 -7
  220. data/spec/ruby-lint/analysis/base_spec.rb +12 -0
  221. data/spec/ruby-lint/analysis/{pedantics.rb → pedantics_spec.rb} +24 -4
  222. data/spec/ruby-lint/analysis/{shadowing_variables.rb → shadowing_variables_spec.rb} +6 -6
  223. data/spec/ruby-lint/analysis/undefined_methods_spec.rb +320 -0
  224. data/spec/ruby-lint/analysis/{undefined_variables.rb → undefined_variables_spec.rb} +33 -10
  225. data/spec/ruby-lint/analysis/{unused_variables.rb → unused_variables_spec.rb} +36 -9
  226. data/spec/ruby-lint/ast/{node.rb → node_spec.rb} +12 -6
  227. data/spec/ruby-lint/cli/{analyze.rb → analyze_spec.rb} +16 -5
  228. data/spec/ruby-lint/cli/{ast.rb → ast_spec.rb} +3 -3
  229. data/spec/ruby-lint/configuration_spec.rb +106 -0
  230. data/spec/ruby-lint/definition/constant_proxy_spec.rb +54 -0
  231. data/spec/ruby-lint/definition/{dsl.rb → dsl_spec.rb} +15 -15
  232. data/spec/ruby-lint/definition/{ruby_method.rb → ruby_method_spec.rb} +31 -17
  233. data/spec/ruby-lint/definition/{ruby_object.rb → ruby_object_spec.rb} +28 -23
  234. data/spec/ruby-lint/definition_builder/{primitive.rb → primitive_spec.rb} +9 -9
  235. data/spec/ruby-lint/definition_builder/{ruby_class.rb → ruby_class_spec.rb} +13 -13
  236. data/spec/ruby-lint/definition_builder/{ruby_method.rb → ruby_method_spec.rb} +9 -9
  237. data/spec/ruby-lint/definition_builder/{ruby_module.rb → ruby_module_spec.rb} +12 -10
  238. data/spec/ruby-lint/docstring/mapping.rb +27 -0
  239. data/spec/ruby-lint/docstring/parser_spec.rb +88 -0
  240. data/spec/ruby-lint/extensions/{string.rb → string_spec.rb} +3 -3
  241. data/spec/ruby-lint/file_loader_spec.rb +69 -0
  242. data/spec/ruby-lint/file_scanner_spec.rb +51 -0
  243. data/spec/ruby-lint/inspector_spec.rb +44 -0
  244. data/spec/ruby-lint/{iterator.rb → iterator_spec.rb} +39 -4
  245. data/spec/ruby-lint/{nested_stack.rb → nested_stack_spec.rb} +4 -4
  246. data/spec/ruby-lint/parser_spec.rb +31 -0
  247. data/spec/ruby-lint/presenter/json_spec.rb +58 -0
  248. data/spec/ruby-lint/presenter/text_spec.rb +49 -0
  249. data/spec/ruby-lint/report/entry_spec.rb +58 -0
  250. data/spec/ruby-lint/report_spec.rb +39 -0
  251. data/spec/ruby-lint/runner_spec.rb +52 -0
  252. data/spec/ruby-lint/virtual_machine/alias_spec.rb +55 -0
  253. data/spec/ruby-lint/virtual_machine/assignments/{arrays.rb → arrays_spec.rb} +7 -7
  254. data/spec/ruby-lint/virtual_machine/assignments/{hashes.rb → hashes_spec.rb} +6 -6
  255. data/spec/ruby-lint/virtual_machine/assignments/{optional.rb → optional_spec.rb} +6 -6
  256. data/spec/ruby-lint/virtual_machine/assignments/{return_values.rb → return_values_spec.rb} +11 -11
  257. data/spec/ruby-lint/virtual_machine/assignments/{variables.rb → variables_spec.rb} +38 -7
  258. data/spec/ruby-lint/virtual_machine/associate_nodes_spec.rb +59 -0
  259. data/spec/ruby-lint/virtual_machine/{autoloading.rb → autoloading_spec.rb} +6 -6
  260. data/spec/ruby-lint/virtual_machine/{blocks.rb → blocks_spec.rb} +30 -4
  261. data/spec/ruby-lint/virtual_machine/classes/{class_methods.rb → class_methods_spec.rb} +3 -3
  262. data/spec/ruby-lint/virtual_machine/classes/{extending.rb → extending_spec.rb} +20 -15
  263. data/spec/ruby-lint/virtual_machine/classes/{redefining.rb → redefining_spec.rb} +3 -3
  264. data/spec/ruby-lint/virtual_machine/classes/{sclass.rb → sclass_spec.rb} +7 -7
  265. data/spec/ruby-lint/virtual_machine/classes/{scoping.rb → scoping_spec.rb} +5 -5
  266. data/spec/ruby-lint/virtual_machine/complex/{rails.rb → rails_spec.rb} +3 -3
  267. data/spec/ruby-lint/virtual_machine/complex/{rcap.rb → rcap_spec.rb} +3 -3
  268. data/spec/ruby-lint/virtual_machine/complex/{slop.rb → slop_spec.rb} +3 -3
  269. data/spec/ruby-lint/virtual_machine/constants_spec.rb +31 -0
  270. data/spec/ruby-lint/virtual_machine/{for.rb → for_spec.rb} +3 -3
  271. data/spec/ruby-lint/virtual_machine/{freeze.rb → freeze_spec.rb} +3 -3
  272. data/spec/ruby-lint/virtual_machine/global_variables_spec.rb +12 -0
  273. data/spec/ruby-lint/virtual_machine/inherit_kernel_spec.rb +15 -0
  274. data/spec/ruby-lint/virtual_machine/{interpolation.rb → interpolation_spec.rb} +3 -3
  275. data/spec/ruby-lint/virtual_machine/methods/attr_spec.rb +116 -0
  276. data/spec/ruby-lint/virtual_machine/methods/define_method_spec.rb +41 -0
  277. data/spec/ruby-lint/virtual_machine/methods/{defining.rb → defining_spec.rb} +4 -4
  278. data/spec/ruby-lint/virtual_machine/methods/docstrings_spec.rb +69 -0
  279. data/spec/ruby-lint/virtual_machine/methods/{exporting.rb → exporting_spec.rb} +3 -3
  280. data/spec/ruby-lint/virtual_machine/methods/{parameters.rb → parameters_spec.rb} +17 -5
  281. data/spec/ruby-lint/virtual_machine/methods/{patching.rb → patching_spec.rb} +4 -4
  282. data/spec/ruby-lint/virtual_machine/methods/{scoping.rb → scoping_spec.rb} +5 -5
  283. data/spec/ruby-lint/virtual_machine/methods/{visibility.rb → visibility_spec.rb} +6 -6
  284. data/spec/ruby-lint/virtual_machine/{modules.rb → modules_spec.rb} +39 -9
  285. data/spec/ruby-lint/virtual_machine/reference_amount_spec.rb +61 -0
  286. data/spec/ruby-lint/virtual_machine/{unused.rb → unused_spec.rb} +4 -4
  287. data/spec/{helper.rb → spec_helper.rb} +6 -4
  288. data/spec/support/building.rb +10 -6
  289. data/spec/support/coveralls.rb +1 -1
  290. data/spec/support/parsing.rb +10 -1
  291. data/spec/support/simplecov.rb +1 -1
  292. data/spec/support/versions.rb +9 -0
  293. data/task/test.rake +2 -4
  294. data/task/travis.rake +1 -0
  295. metadata +144 -143
  296. metadata.gz.asc +14 -14
  297. data/.rubocop.yml +0 -59
  298. data/doc/contributing.md +0 -16
  299. data/lib/ruby-lint/analysis/confusing_variables.rb +0 -26
  300. data/lib/ruby-lint/definitions/core/main.rb +0 -25
  301. data/lib/ruby-lint/definitions/core/psych.rb +0 -2231
  302. data/lib/ruby-lint/definitions/core/rubinius.rb +0 -16637
  303. data/lib/ruby-lint/definitions/core/ruby_lint.rb +0 -93
  304. data/spec/ruby-lint/analysis/confusing_variables.rb +0 -46
  305. data/spec/ruby-lint/analysis/undefined_methods.rb +0 -174
  306. data/spec/ruby-lint/configuration.rb +0 -54
  307. data/spec/ruby-lint/definition/constant_proxy.rb +0 -31
  308. data/spec/ruby-lint/parser.rb +0 -14
  309. data/spec/ruby-lint/presenter/json.rb +0 -31
  310. data/spec/ruby-lint/presenter/text.rb +0 -22
  311. data/spec/ruby-lint/report.rb +0 -50
  312. data/spec/ruby-lint/report/entry.rb +0 -28
  313. data/spec/ruby-lint/runner.rb +0 -32
  314. data/spec/ruby-lint/virtual_machine/associate_nodes.rb +0 -17
  315. data/spec/ruby-lint/virtual_machine/reference_amount.rb +0 -33
  316. data/spec/support/bacon.rb +0 -33
  317. data/task/cop.rake +0 -11
@@ -1,8 +1,8 @@
1
- require File.expand_path('../../../../helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
4
  describe 'exporting variables out of method scopes' do
5
- should 'export variables to the outer scope' do
5
+ example 'export variables to the outer scope' do
6
6
  code = <<-CODE
7
7
  def example
8
8
  @number = 10
@@ -16,4 +16,4 @@ end
16
16
  .should == true
17
17
  end
18
18
  end
19
- end
19
+ end
@@ -1,8 +1,8 @@
1
- require File.expand_path('../../../../helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
4
  describe 'creating variables for method parameters' do
5
- should 'create local variables' do
5
+ example 'create local variables' do
6
6
  code = <<-CODE
7
7
  def example(number)
8
8
  return number
@@ -17,7 +17,7 @@ end
17
17
  .should == true
18
18
  end
19
19
 
20
- should 'allow the assignment using parameters' do
20
+ example 'allow the assignment using parameters' do
21
21
  code = <<-CODE
22
22
  def example(number)
23
23
  other_number = number
@@ -32,7 +32,7 @@ end
32
32
  .should == true
33
33
  end
34
34
 
35
- should 'take all argument types into account' do
35
+ example 'take all argument types into account' do
36
36
  code = <<-CODE
37
37
  def example(required, optional = 10, *splat, more, &block)
38
38
  _required = required
@@ -53,7 +53,7 @@ end
53
53
  method.lookup(:lvar, '_optional').value.value.should == 10
54
54
  end
55
55
 
56
- should 'store arguments under special types' do
56
+ example 'store arguments under special types' do
57
57
  code = <<-CODE
58
58
  def example(required, optional = 10, *splat, more, &block)
59
59
  end
@@ -73,5 +73,17 @@ end
73
73
  method.lookup(type, name).is_a?(ruby_object).should == true
74
74
  end
75
75
  end
76
+
77
+ # Keyword arguments were introduced in Ruby 2.0.
78
+ specific_ruby_version '2.0' do
79
+ example 'support keyword arguments' do
80
+ code = 'def example(number: 10); end'
81
+ defs = build_definitions(code)
82
+ method = defs.lookup(:instance_method, 'example')
83
+
84
+ method.lookup(:kwoptarg, 'number').value.value.should == 10
85
+ method.lookup(:lvar, 'number').value.value.should == 10
86
+ end
87
+ end
76
88
  end
77
89
  end
@@ -1,14 +1,14 @@
1
- require File.expand_path('../../../../helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
- should 'be able to patch global definitions' do
4
+ describe 'patching methods' do
5
5
  after do
6
- RubyLint::VirtualMachine.global_scope.lookup(:const, 'String') \
6
+ RubyLint::GlobalScope.definitions.lookup(:const, 'String') \
7
7
  .definitions[:method] \
8
8
  .delete('foobar')
9
9
  end
10
10
 
11
- should 'add a class method to the String class' do
11
+ example 'add a class method to the String class' do
12
12
  code = <<-CODE
13
13
  class String
14
14
  def self.foobar
@@ -1,8 +1,8 @@
1
- require File.expand_path('../../../../helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
4
  describe 'scoping method definitions' do
5
- should 'process a global method' do
5
+ example 'process a global method' do
6
6
  defs = build_definitions('def example; end')
7
7
  example = defs.lookup(:instance_method, 'example')
8
8
 
@@ -12,7 +12,7 @@ describe RubyLint::VirtualMachine do
12
12
  example.name.should == 'example'
13
13
  end
14
14
 
15
- should 'process a nested method' do
15
+ example 'process a nested method' do
16
16
  code = <<-CODE
17
17
  def first
18
18
  def second
@@ -32,7 +32,7 @@ end
32
32
  defs.lookup(:instance_method, 'second').nil?.should == true
33
33
  end
34
34
 
35
- should 'process a global and nested method' do
35
+ example 'process a global and nested method' do
36
36
  code = <<-CODE
37
37
  def first
38
38
  def second
@@ -60,4 +60,4 @@ end
60
60
  .should == true
61
61
  end
62
62
  end
63
- end
63
+ end
@@ -1,8 +1,8 @@
1
- require File.expand_path('../../../../helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
4
  describe 'method visibility' do
5
- should 'define a method as public' do
5
+ example 'define a method as public' do
6
6
  code = <<-CODE
7
7
  def example
8
8
  end
@@ -13,7 +13,7 @@ end
13
13
  defs.lookup(:instance_method, 'example').visibility.should == :public
14
14
  end
15
15
 
16
- should 'define a method as private' do
16
+ example 'define a method as private' do
17
17
  code = <<-CODE
18
18
  private
19
19
 
@@ -26,7 +26,7 @@ end
26
26
  defs.lookup(:instance_method, 'example').visibility.should == :private
27
27
  end
28
28
 
29
- should 'define a method as protected' do
29
+ example 'define a method as protected' do
30
30
  code = <<-CODE
31
31
  protected
32
32
 
@@ -39,7 +39,7 @@ end
39
39
  defs.lookup(:instance_method, 'example').visibility.should == :protected
40
40
  end
41
41
 
42
- should 'define a method as private and then reset it' do
42
+ example 'define a method as private and then reset it' do
43
43
  code = <<-CODE
44
44
  private
45
45
 
@@ -61,4 +61,4 @@ end
61
61
  .should == :public
62
62
  end
63
63
  end
64
- end
64
+ end
@@ -1,8 +1,8 @@
1
- require File.expand_path('../../../helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe 'Building module definitions' do
4
4
  describe 'scoping definitions' do
5
- should 'process a global module' do
5
+ example 'process a global module' do
6
6
  defs = build_definitions('module Example; end')
7
7
  example = defs.lookup(:const, 'Example')
8
8
 
@@ -12,7 +12,7 @@ describe 'Building module definitions' do
12
12
  example.name.should == 'Example'
13
13
  end
14
14
 
15
- should 'process a nested module' do
15
+ example 'process a nested module' do
16
16
  code = <<-CODE
17
17
  module First
18
18
  module Second
@@ -32,7 +32,7 @@ end
32
32
  .should == true
33
33
  end
34
34
 
35
- should 'process a global and nested module' do
35
+ example 'process a global and nested module' do
36
36
  code = <<-CODE
37
37
  module First
38
38
  module Second
@@ -68,7 +68,7 @@ end
68
68
  end
69
69
 
70
70
  describe 'redefining modules' do
71
- should 'update a module when it is redefined' do
71
+ example 'update a module when it is redefined' do
72
72
  code = <<-CODE
73
73
  module First
74
74
  end
@@ -86,10 +86,40 @@ end
86
86
  .is_a?(ruby_method) \
87
87
  .should == true
88
88
  end
89
+
90
+ example 'should not pollute modules in a different namespace' do
91
+ code = <<-CODE
92
+ module Foo
93
+ module Parser
94
+ end
95
+
96
+ module Bar
97
+ module Parser
98
+ def foo
99
+ end
100
+ end
101
+ end
102
+ end
103
+ CODE
104
+
105
+ defs = build_definitions(code)
106
+
107
+ first = defs.lookup(:const, 'Foo')
108
+ .lookup(:const, 'Parser')
109
+
110
+ second = defs.lookup(:const, 'Foo')
111
+ .lookup(:const, 'Bar')
112
+ .lookup(:const, 'Parser')
113
+
114
+ first.should_not == second
115
+
116
+ first.lookup(:instance_method, 'foo').is_a?(ruby_object).should == false
117
+ second.lookup(:instance_method, 'foo').is_a?(ruby_object).should == true
118
+ end
89
119
  end
90
120
 
91
121
  describe 'including modules' do
92
- should 'include a module' do
122
+ example 'include a module' do
93
123
  code = <<-CODE
94
124
  module First
95
125
  def example
@@ -109,7 +139,7 @@ end
109
139
  .should == true
110
140
  end
111
141
 
112
- should 'extend a module' do
142
+ example 'extend a module' do
113
143
  code = <<-CODE
114
144
  module First
115
145
  def example
@@ -129,7 +159,7 @@ end
129
159
  .should == true
130
160
  end
131
161
 
132
- should 'include a module using a constant path' do
162
+ example 'include a module using a constant path' do
133
163
  code = <<-CODE
134
164
  module First
135
165
  module Second
@@ -151,7 +181,7 @@ end
151
181
  .should == true
152
182
  end
153
183
 
154
- should 'include a module using a variable' do
184
+ example 'include a module using a variable' do
155
185
  code = <<-CODE
156
186
  module First
157
187
  def example
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'reference counting' do
5
+ example 'count the amount of references for a variable' do
6
+ code = <<-CODE
7
+ number = 10
8
+ number
9
+ number
10
+ CODE
11
+
12
+ defs = build_definitions(code)
13
+
14
+ defs.lookup(:lvar, 'number').reference_amount.should == 2
15
+ end
16
+
17
+ example 'count the amount of references for a constant path' do
18
+ code = <<-CODE
19
+ module A; end
20
+ A::B = 10
21
+ A::B
22
+ A::B
23
+ CODE
24
+
25
+ defs = build_definitions(code)
26
+
27
+ defs.lookup(:const, 'A') \
28
+ .lookup(:const, 'B') \
29
+ .reference_amount \
30
+ .should == 2
31
+ end
32
+
33
+ example 'mark variables created using OR/AND assignments as used' do
34
+ code = <<-CODE
35
+ number1 = 5
36
+
37
+ number ||= 10
38
+ number1 &&= 10
39
+ CODE
40
+
41
+ defs = build_definitions(code)
42
+
43
+ number = defs.lookup(:lvar, 'number')
44
+ number1 = defs.lookup(:lvar, 'number1')
45
+
46
+ number.used?.should == true
47
+ number1.used?.should == true
48
+ end
49
+
50
+ example 'overwriting a variable should increase the reference amount' do
51
+ code = <<-CODE
52
+ number = 10
53
+ number = 20
54
+ CODE
55
+
56
+ defs = build_definitions(code)
57
+
58
+ defs.lookup(:lvar, 'number').reference_amount.should == 1
59
+ end
60
+ end
61
+ end
@@ -1,17 +1,17 @@
1
- require File.expand_path('../../../helper', __FILE__)
1
+ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
4
  describe 'marking variables as used/unused' do
5
- should 'mark variables as unused by default' do
5
+ example 'mark variables as unused by default' do
6
6
  defs = build_definitions('number = 10')
7
7
 
8
8
  defs.lookup(:lvar, 'number').used?.should == false
9
9
  end
10
10
 
11
- should 'mark variables as used' do
11
+ example 'mark variables as used' do
12
12
  defs = build_definitions('number = 10; number')
13
13
 
14
14
  defs.lookup(:lvar, 'number').used?.should == true
15
15
  end
16
16
  end
17
- end
17
+ end
@@ -1,7 +1,6 @@
1
- require 'bacon'
2
- require 'bacon/colored_output'
1
+ require 'rspec'
3
2
  require 'stringio'
4
- require_relative 'support/bacon'
3
+ require 'redcard'
5
4
 
6
5
  if ENV['COVERAGE']
7
6
  require_relative 'support/simplecov'
@@ -16,5 +15,8 @@ require_relative 'support/building'
16
15
  require_relative 'support/parsing'
17
16
  require_relative 'support/definitions'
18
17
  require_relative 'support/fixtures'
18
+ require_relative 'support/versions'
19
19
 
20
- Bacon.summary_on_exit
20
+ RSpec.configure do |config|
21
+ config.color = true
22
+ end
@@ -5,9 +5,11 @@
5
5
  # @return [RubyLint::Definition::RubyObject]
6
6
  #
7
7
  def build_definitions(code)
8
- ast = parse(code, false)
9
- vm = RubyLint::VirtualMachine.new
8
+ loader = RubyLint::ConstantLoader.new
9
+ ast, comments = parse_with_comments(code)
10
+ vm = RubyLint::VirtualMachine.new(:comments => comments)
10
11
 
12
+ loader.iterate(ast)
11
13
  vm.run(ast)
12
14
 
13
15
  return vm.definitions
@@ -21,9 +23,11 @@ end
21
23
  # @return [RubyLint::Report]
22
24
  #
23
25
  def build_report(code, iterator)
24
- ast = parse(code, false)
25
- vm = RubyLint::VirtualMachine.new
26
+ loader = RubyLint::ConstantLoader.new
27
+ ast, comments = parse_with_comments(code)
28
+ vm = RubyLint::VirtualMachine.new(:comments => comments)
26
29
 
30
+ loader.iterate(ast)
27
31
  vm.run(ast)
28
32
 
29
33
  report = RubyLint::Report.new
@@ -41,8 +45,8 @@ end
41
45
  # @return [Hash]
42
46
  #
43
47
  def build_associations(code)
44
- ast = parse(code, false)
45
- vm = RubyLint::VirtualMachine.new
48
+ ast, comments = parse_with_comments(code)
49
+ vm = RubyLint::VirtualMachine.new(:comments => comments)
46
50
 
47
51
  vm.run(ast)
48
52
 
@@ -2,4 +2,4 @@ require 'coveralls'
2
2
 
3
3
  SimpleCov.formatter = Coveralls::SimpleCov::Formatter
4
4
 
5
- Coveralls.wear!
5
+ Coveralls.wear_merged!
@@ -8,11 +8,20 @@
8
8
  # @return [RubyLint::Node]
9
9
  #
10
10
  def parse(code, first = true)
11
- ast = RubyLint::Parser.new.parse(code)
11
+ ast, _ = RubyLint::Parser.new.parse(code)
12
12
 
13
13
  return first ? ast.children[0] : ast
14
14
  end
15
15
 
16
+ ##
17
+ # Parses the block of code and returns both the AST and comments.
18
+ #
19
+ # @see #parse
20
+ #
21
+ def parse_with_comments(code)
22
+ return RubyLint::Parser.new.parse(code)
23
+ end
24
+
16
25
  ##
17
26
  # Shorthand for creating instances of a AST node.
18
27
  #