ruby-lint 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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