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
@@ -17,7 +17,7 @@ module RubyLint
17
17
  # @return [RubyLint::Definition::RubyObject|NilClass]
18
18
  #
19
19
  def resolve_constant_path(node)
20
- current = definitions
20
+ current = current_scope
21
21
 
22
22
  constant_segments(node).each_with_index do |segment, index|
23
23
  found = current.lookup(:const, segment, index == 0)
@@ -28,7 +28,7 @@ module RubyLint
28
28
  end
29
29
 
30
30
  ##
31
- # Returns an Array containing all child constants and their childrne
31
+ # Returns an Array containing all child constants and their children
32
32
  # (recursively).
33
33
  #
34
34
  # The constants returned by this method are returned as String instances
@@ -92,7 +92,7 @@ module RubyLint
92
92
  def inspect_methods
93
93
  return [] unless constant.respond_to?(:methods)
94
94
 
95
- methods = constant.methods(false).map do |name|
95
+ methods = get_methods.map do |name|
96
96
  method_information(:method, name)
97
97
  end
98
98
 
@@ -107,7 +107,7 @@ module RubyLint
107
107
  def inspect_instance_methods
108
108
  return [] unless constant.respond_to?(:instance_methods)
109
109
 
110
- methods = constant.instance_methods(false).map do |name|
110
+ methods = get_methods(:instance_methods).map do |name|
111
111
  method_information(:instance_method, name)
112
112
  end
113
113
 
@@ -123,41 +123,19 @@ module RubyLint
123
123
  return constant.respond_to?(:superclass) ? constant.superclass : nil
124
124
  end
125
125
 
126
- ##
127
- # Formats the list of methods in a human readable format.
128
- #
129
- # @param [Array] methods
130
- # @return [String]
131
- #
132
- def format_methods(methods)
133
- output = []
134
- longest = 0
135
-
136
- methods.each do |method|
137
- longest = method.name.length if method.name.length > longest
138
- end
139
-
140
- methods.each do |method|
141
- output << "%-#{longest}s: %s" % [
142
- method.name,
143
- method.parameters.inspect
144
- ]
145
- end
146
-
147
- return output.join("\n")
148
- end
126
+ private
149
127
 
150
128
  ##
151
- # Formats a list of constants in a human readable format.
129
+ # Gets the methods of the current constant minus those defined in Object.
152
130
  #
153
- # @param [Array] constants
154
- # @return [String]
131
+ # @param [Symbol] getter
132
+ # @return [Array]
155
133
  #
156
- def format_constants(constants)
157
- return constants.join("\n")
158
- end
134
+ def get_methods(getter = :methods)
135
+ diff = constant.send(getter) - Object.send(getter)
159
136
 
160
- private
137
+ return diff | constant.send(getter, false)
138
+ end
161
139
 
162
140
  ##
163
141
  # @param [Class] source
@@ -35,6 +35,21 @@ module RubyLint
35
35
  # integers it processes. After processing an integer it will display three
36
36
  # dashes.
37
37
  #
38
+ # ## Skipping Child Nodes
39
+ #
40
+ # The `on_*` callbacks can tell the Iterator class to not process any
41
+ # following child nodes by calling `skip_child_nodes!`:
42
+ #
43
+ # def on_const(node)
44
+ # # ...
45
+ #
46
+ # skip_child_nodes!(node)
47
+ # end
48
+ #
49
+ # Internally this uses `throw` and makes sure to only skip the child nodes of
50
+ # the specified node (`throw` calls bubble up regardless of `catch` calls,
51
+ # unlike when using `begin/rescue`).
52
+ #
38
53
  class Iterator
39
54
  ##
40
55
  # @param [Hash] options Hash containing custom options to set for the
@@ -58,11 +73,14 @@ module RubyLint
58
73
  return unless node.is_a?(AST::Node)
59
74
 
60
75
  before, after = callback_names(node)
76
+ skip_node = catch :skip_child_nodes do
77
+ execute_callback(before, node)
78
+ end
61
79
 
62
- execute_callback(before, node)
63
-
64
- node.children.each do |child|
65
- iterate(child) if child.is_a?(AST::Node)
80
+ if skip_node != node
81
+ node.children.each do |child|
82
+ iterate(child) if child.is_a?(AST::Node)
83
+ end
66
84
  end
67
85
 
68
86
  execute_callback(after, node)
@@ -70,6 +88,15 @@ module RubyLint
70
88
 
71
89
  protected
72
90
 
91
+ ##
92
+ # Instructs {#iterate} to not process any child nodes.
93
+ #
94
+ # @param [RubyLint::AST::Node] node
95
+ #
96
+ def skip_child_nodes!(node)
97
+ throw :skip_child_nodes, node
98
+ end
99
+
73
100
  ##
74
101
  # Executes the specified callback method if it exists.
75
102
  #
@@ -0,0 +1,46 @@
1
+ module RubyLint
2
+ module MethodCall
3
+ ##
4
+ # The Alias class is used to evaluate the use of `alias` and
5
+ # `alias_method`.
6
+ #
7
+ class Alias < Base
8
+ ##
9
+ # @see Base#evaluate
10
+ #
11
+ def evaluate(arguments, context, block = nil)
12
+ if node.type == :alias and node.children[0].gvar?
13
+ alias_gvar(arguments, context)
14
+ else
15
+ alias_sym(arguments, context)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ ##
22
+ # @see Base#evaluate
23
+ #
24
+ def alias_sym(arguments, context)
25
+ method_type = context.method_call_type
26
+ alias_name = arguments[0].value.to_s
27
+ source_name = arguments[1].value.to_s
28
+ source = context.lookup(method_type, source_name)
29
+
30
+ context.add(method_type, alias_name, source) if source
31
+ end
32
+
33
+ ##
34
+ # @see Base#evaluate
35
+ #
36
+ def alias_gvar(arguments, context)
37
+ alias_name = node.children[0].name
38
+ source_name = node.children[1].name
39
+ source = context.lookup(:gvar, source_name)
40
+
41
+ # Global variables should be added to the root scope.
42
+ vm.definitions.add(:gvar, alias_name, source) if source
43
+ end
44
+ end # Alias
45
+ end # MethodCall
46
+ end # RubyLint
@@ -0,0 +1,55 @@
1
+ module RubyLint
2
+ module MethodCall
3
+ ##
4
+ # The AssignMember class is used for evaluating object member assignments.
5
+ # This includes the following types of assignments:
6
+ #
7
+ # * Array index assignments
8
+ # * Hash key assignments
9
+ #
10
+ class AssignMember < Base
11
+ ##
12
+ # @see Base#evaluate
13
+ #
14
+ def evaluate(arguments, context, block = nil)
15
+ *members, values = arguments
16
+ member_values = prepare_values(values)
17
+
18
+ members.each do |member|
19
+ member = create_member(member.value.to_s, member_values.shift)
20
+
21
+ context.add_definition(member)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ ##
28
+ # @param [String] name
29
+ # @param [Mixed] value
30
+ # @return [RubyLint::Definition::RubyObject]
31
+ #
32
+ def create_member(name, value)
33
+ return Definition::RubyObject.new(
34
+ :name => name,
35
+ :type => :member,
36
+ :value => value
37
+ )
38
+ end
39
+
40
+ ##
41
+ # @param [Array] values
42
+ # @return [Array]
43
+ #
44
+ def prepare_values(values)
45
+ if values and values.array?
46
+ member_values = values.list(:member).map(&:value)
47
+ elsif values
48
+ member_values = [values]
49
+ end
50
+
51
+ return member_values
52
+ end
53
+ end # AssignMember
54
+ end # MethodCall
55
+ end # RubyLint
@@ -0,0 +1,102 @@
1
+ module RubyLint
2
+ module MethodCall
3
+ ##
4
+ # The Attribute class is used for evaluating method calls to `attr`,
5
+ # `attr_reader` and similar methods.
6
+ #
7
+ class Attribute < Base
8
+ ##
9
+ # @see Base#evaluate
10
+ #
11
+ def evaluate(arguments, context, block = nil)
12
+ method = "evaluate_#{node.children[1]}"
13
+
14
+ send(method, arguments, context)
15
+ end
16
+
17
+ private
18
+
19
+ ##
20
+ # Evaluates a call to `attr`. The `attr` method can be used in two
21
+ # different ways (thank you Ruby for being consistent):
22
+ #
23
+ # 1. `attr [NAME], [TRUE|FALSE]`
24
+ # 2. `attr [NAME], [NAME], etc
25
+ #
26
+ # @see #evaluate
27
+ #
28
+ def evaluate_attr(arguments, context)
29
+ if arguments[1] and arguments[1].type == :true
30
+ names = [arguments[0].value.to_s, arguments[0].value.to_s + '=']
31
+ else
32
+ names = arguments.map { |arg| arg.value.to_s }
33
+ end
34
+
35
+ names.each do |name|
36
+ define_attribute(name, context)
37
+ end
38
+ end
39
+
40
+ ##
41
+ # Evaluates method calls to `attr_reader`.
42
+ #
43
+ # @see #evaluate
44
+ #
45
+ def evaluate_attr_reader(arguments, context)
46
+ arguments.each do |arg|
47
+ define_attribute(arg.value.to_s, context)
48
+ end
49
+ end
50
+
51
+ ##
52
+ # Evaluates method calls to `attr_writer`.
53
+ #
54
+ # @see #evaluate
55
+ #
56
+ def evaluate_attr_writer(arguments, context)
57
+ arguments.each do |arg|
58
+ define_attribute(arg.value.to_s, context, true)
59
+ end
60
+ end
61
+
62
+ ##
63
+ # Evaluates method calls to `attr_accessor`.
64
+ #
65
+ # @see #evaluate
66
+ #
67
+ def evaluate_attr_accessor(arguments, context)
68
+ arguments.each do |arg|
69
+ name = arg.value.to_s
70
+
71
+ define_attribute(name, context)
72
+ define_attribute(name, context, true)
73
+ end
74
+ end
75
+
76
+ ##
77
+ # @param [String] name
78
+ # @param [RubyLint::Definition::RubyObject] context
79
+ # @param [TrueClass|FalseClass] setter
80
+ #
81
+ def define_attribute(name, context, setter = false)
82
+ ivar_name = '@' + name
83
+
84
+ if setter
85
+ name = name + '='
86
+ end
87
+
88
+ context.define_instance_method(name)
89
+
90
+ unless context.has_definition?(:ivar, ivar_name)
91
+ ivar = Definition::RubyObject.new(
92
+ :type => :ivar,
93
+ :name => ivar_name,
94
+ :reference_amount => 1
95
+ )
96
+
97
+ context.add_definition(ivar)
98
+ end
99
+ end
100
+ end # Attribute
101
+ end # MethodCall
102
+ end # RubyLint
@@ -0,0 +1,37 @@
1
+ module RubyLint
2
+ module MethodCall
3
+ ##
4
+ # Base class for the various method call handlers, takes care of some of
5
+ # the common boilerplate code.
6
+ #
7
+ # @!attribute [r] node
8
+ # @return [RubyLint::AST::Node]
9
+ #
10
+ # @!attribute [r] vm
11
+ # @return [RubyLint::VirtualMachine]
12
+ #
13
+ class Base
14
+ attr_reader :node, :vm
15
+
16
+ ##
17
+ # @param [RubyLint::AST::Node] node
18
+ # @param [RubyLint::VirtualMachine] vm
19
+ #
20
+ def initialize(node, vm)
21
+ @node = node
22
+ @vm = vm
23
+ end
24
+
25
+ ##
26
+ # @param [Array] arguments
27
+ # @param [RubyLint::Definition::RubyObject] context
28
+ # @param [RubyLint::Definition::RubyObject] block
29
+ #
30
+ #:nocov:
31
+ def evaluate(arguments, context, block = nil)
32
+ raise NotImplementedError, '#evaluate must be implemented'
33
+ end
34
+ #:nocov:
35
+ end # Base
36
+ end # MethodCall
37
+ end # RubyLint
@@ -0,0 +1,17 @@
1
+ module RubyLint
2
+ module MethodCall
3
+ ##
4
+ # The DefineMethod class is used to process `define_method` calls.
5
+ # Currently this class is only used to set the instance type of the block
6
+ # to the correct value.
7
+ #
8
+ class DefineMethod < Base
9
+ ##
10
+ # @see Base#evaluate
11
+ #
12
+ def evaluate(arguments, context, block = nil)
13
+ block.instance! if block && block.block?
14
+ end
15
+ end # DefineMethod
16
+ end # MethodCall
17
+ end # RubyLint
@@ -0,0 +1,39 @@
1
+ module RubyLint
2
+ module MethodCall
3
+ ##
4
+ # The Include class is used for evaluating the use of `include` and
5
+ # `extend` method calls.
6
+ #
7
+ class Include < Base
8
+ ##
9
+ # Hash containing the source and target definition types for both
10
+ # `include` and `extend` method calls.
11
+ #
12
+ COPY_TYPES = {
13
+ :include => {
14
+ :const => :const,
15
+ :instance_method => :instance_method
16
+ },
17
+ :extend => {
18
+ :const => :const,
19
+ :instance_method => :method
20
+ }
21
+ }
22
+
23
+ ##
24
+ # @see Base#evaluate
25
+ #
26
+ def evaluate(arguments, context, block = nil)
27
+ node_name = node.children[1]
28
+
29
+ arguments.each do |source|
30
+ COPY_TYPES[node_name].each do |from, to|
31
+ source.list(from).each do |definition|
32
+ context.add(to, definition.name, definition)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end # Include
38
+ end # MethodCall
39
+ end # RubyLint