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
@@ -34,6 +34,16 @@ module RubyLint
34
34
  def name
35
35
  return const? ? children[-1].to_s : children[0].to_s
36
36
  end
37
+
38
+ ##
39
+ # Similar to `#inspect` but formats the value so that it fits on a single
40
+ # line.
41
+ #
42
+ # @return [String]
43
+ #
44
+ def inspect_oneline
45
+ return inspect.gsub(/\s*\n\s*/, ' ')
46
+ end
37
47
  end # Node
38
48
  end # AST
39
49
  end # RubyLint
@@ -1,6 +1,6 @@
1
1
  RubyLint::CLI.options.command :analyze do
2
2
  banner 'Usage: ruby-lint analyze [FILES] [OPTIONS]'
3
- description 'Analysiss the source code of Ruby files'
3
+ description 'Analyze the source code of Ruby files'
4
4
 
5
5
  separator <<-EOF.chomp
6
6
 
@@ -15,8 +15,8 @@ Configuration:
15
15
  When this command is executed it will try to load a configuration file in
16
16
  one of the following two locations (in this order):
17
17
 
18
- * $PWD/ruby-lint.rb
19
- * ~/.ruby-lint.rb
18
+ * $PWD/ruby-lint.yml
19
+ * ~/.ruby-lint.yml
20
20
 
21
21
  Only the first existing configuration file is loaded.
22
22
 
@@ -58,6 +58,8 @@ Examples:
58
58
  on :l=, :levels=, 'The reporting levels to enable', :as => Array
59
59
  on :p=, :presenter=, 'The presenter to use', :as => String
60
60
  on :a=, :analysis=, 'The analysis classes to use', :as => Array
61
+ on :b, :benchmark, 'Enables benchmarking mode'
62
+ on :d, :debug, 'Displays debugging output in STDERR'
61
63
 
62
64
  ##
63
65
  # Returns an Array containing the file paths that exist. If a non existing
@@ -89,7 +91,8 @@ Examples:
89
91
  return {
90
92
  :levels => :report_levels=,
91
93
  :presenter => :presenter=,
92
- :analysis => :analysis_classes=
94
+ :analysis => :analysis_classes=,
95
+ :debug => :debug=
93
96
  }
94
97
  end
95
98
 
@@ -110,6 +113,7 @@ Examples:
110
113
  run do |opts, args|
111
114
  abort 'You must specify at least one file to analyze' if args.empty?
112
115
 
116
+ start_time = Time.now.to_f
113
117
  files = extract_files(args)
114
118
  configuration = RubyLint::Configuration.load_from_file
115
119
 
@@ -121,5 +125,19 @@ Examples:
121
125
  output = runner.analyze(files)
122
126
 
123
127
  output_destination.puts output unless output.empty?
128
+
129
+ exec_time = Time.now.to_f - start_time
130
+
131
+ if opts[:benchmark]
132
+ memory_kb = `ps -o rss= #{Process.pid}`.strip.to_f
133
+ memory_mb = memory_kb / 1024
134
+
135
+ output_destination.puts unless output.empty?
136
+
137
+ output_destination.puts "Execution time: #{exec_time.round(2)} seconds"
138
+
139
+ output_destination.puts "Memory usage: #{memory_mb.round(2)} MB " \
140
+ "(#{memory_kb.round(2)} KB)"
141
+ end
124
142
  end # run do |opts, args|
125
143
  end # RubyLint::CLI.options.command
@@ -18,6 +18,8 @@ module RubyLint
18
18
  #
19
19
  OPTIONS_HEADER = "\nOptions:\n"
20
20
 
21
+ #:nocov:
22
+
21
23
  ##
22
24
  # Returns a String containing a list of names as registered in
23
25
  # {RubyLint::Configuration.names}.
@@ -33,8 +35,10 @@ module RubyLint
33
35
  ##
34
36
  # Starts the CLI.
35
37
  #
36
- def self.run
37
- options.parse
38
+ # @param [Array] argv
39
+ #
40
+ def self.run(argv = ARGV)
41
+ options.parse(argv)
38
42
  end
39
43
 
40
44
  ##
@@ -93,5 +97,7 @@ module RubyLint
93
97
  def self.version_information
94
98
  return "ruby-lint v#{VERSION} on #{RUBY_DESCRIPTION}"
95
99
  end
100
+
101
+ #:nocov:
96
102
  end # CLI
97
103
  end # RubyLint
@@ -6,13 +6,25 @@ module RubyLint
6
6
  #
7
7
  # @!attribute [r] analysis_classes
8
8
  # @return [Array]
9
+ #
9
10
  # @!attribute [r] report_levels
10
11
  # @return [Array]
12
+ #
11
13
  # @!attribute [r] presenter
12
14
  # @return [Class]
13
15
  #
16
+ # @!attribute [r] directories
17
+ # @return [Array]
18
+ #
19
+ # @!attribute [rw] debug
20
+ # @return [TrueClass|FalseClass]
21
+ #
22
+ # @!attribute [rw] ignore_paths
23
+ # @return [Array]
24
+ #
14
25
  class Configuration
15
- attr_reader :analysis_classes, :report_levels, :presenter
26
+ attr_reader :analysis_classes, :report_levels, :presenter, :directories
27
+ attr_accessor :debug, :ignore_paths
16
28
 
17
29
  ##
18
30
  # Returns an Array of locations from which to load configuration files.
@@ -74,6 +86,8 @@ module RubyLint
74
86
  # @param [Hash] options
75
87
  #
76
88
  def initialize(options = {})
89
+ @debug = false
90
+
77
91
  options.each do |key, value|
78
92
  setter = "#{key}="
79
93
 
@@ -85,6 +99,8 @@ module RubyLint
85
99
  @analysis_classes ||= default_analysis_classes
86
100
  @report_levels ||= default_report_levels
87
101
  @presenter ||= default_presenter
102
+ @directories ||= default_directories
103
+ @ignore_paths ||= []
88
104
  end
89
105
 
90
106
  ##
@@ -97,7 +113,7 @@ module RubyLint
97
113
  end
98
114
 
99
115
  ##
100
- # Returns a list of the enabled report levels.
116
+ # Sets a list of the enabled report levels.
101
117
  #
102
118
  # @param [Array] given The report levels specified by the user.
103
119
  # @return [Array]
@@ -118,7 +134,7 @@ module RubyLint
118
134
  end
119
135
 
120
136
  ##
121
- # Returns the presenter to use.
137
+ # Sets the presenter to use.
122
138
  #
123
139
  # @param [String] name The friendly name of the presenter as set by the
124
140
  # user.
@@ -136,7 +152,7 @@ module RubyLint
136
152
  end
137
153
 
138
154
  ##
139
- # Returns a collection of the analysis constants to use.
155
+ # Sets a collection of the analysis constants to use.
140
156
  #
141
157
  # @param [Array] names The analysis names as given by the user.
142
158
  # @return [Array]
@@ -156,6 +172,22 @@ module RubyLint
156
172
  @analysis_classes = classes
157
173
  end
158
174
 
175
+ ##
176
+ # Sets the directories to scan for external Ruby files using
177
+ # {RubyLint::FileLoader}.
178
+ #
179
+ # @param [Array] directories
180
+ #
181
+ def directories=(directories)
182
+ directories.each do |dir|
183
+ unless File.directory?(dir)
184
+ raise ArgumentError, "The directory #{dir} does not exist"
185
+ end
186
+ end
187
+
188
+ @directories = directories
189
+ end
190
+
159
191
  ##
160
192
  # Returns the default (= all) analysis classes to use.
161
193
  #
@@ -178,5 +210,12 @@ module RubyLint
178
210
  def default_presenter
179
211
  return RubyLint::Presenter::Text
180
212
  end
213
+
214
+ ##
215
+ # @return [Array]
216
+ #
217
+ def default_directories
218
+ return [Dir.pwd]
219
+ end
181
220
  end # Configuration
182
221
  end # RubyLint
@@ -13,7 +13,7 @@ module RubyLint
13
13
  # @!attribute [r] proxy_name
14
14
  # @return [String]
15
15
  #
16
- # @!attribut [r] proxy_definition
16
+ # @!attribute [r] proxy_definition
17
17
  # @return [RubyLint::Definition::RubyObject]
18
18
  #
19
19
  class ConstantProxy
@@ -41,6 +41,15 @@ module RubyLint
41
41
  end
42
42
  end
43
43
 
44
+ ##
45
+ # @return [String]
46
+ #
47
+ def inspect
48
+ lookup_proxy_definition
49
+
50
+ return proxy_definition ? proxy_definition.inspect : super
51
+ end
52
+
44
53
  private
45
54
 
46
55
  ##
@@ -9,40 +9,45 @@ module RubyLint
9
9
  # @!attribute [r] visibility
10
10
  # @return [Symbol] The method visibility such as `:public`.
11
11
  #
12
- # @!attribute [r] arguments
13
- # @return [Array] The required/specified arguments of a method definition
14
- # or method call.
15
- #
16
- # @!attribute [r] optional_arguments
17
- # @return [Array] Array containing the optional arguments of a method
18
- # definition.
19
- #
20
- # @!attribute [r] rest_argument
21
- # @return [RubyLint::Definition::RubyObject] The rest argument of a
22
- # method definition.
23
- #
24
- # @!attribute [r] block_argument
25
- # @return [RubyLint::Definition::RubyObject] The block argument of a
26
- # method definition.
27
- #
28
12
  # @!attribute [r] return_value
29
13
  # @return [Mixed] The value that is returned by the method.
30
14
  #
31
15
  class RubyMethod < RubyObject
32
- attr_reader :block_argument,
33
- :arguments,
34
- :optional_arguments,
35
- :rest_argument,
36
- :return_value,
37
- :visibility
16
+ attr_reader :return_value, :visibility
17
+
18
+ ##
19
+ # @return [Array]
20
+ #
21
+ def arguments
22
+ return list(:arg)
23
+ end
24
+
25
+ ##
26
+ # @return [RubyLint::Definition::RubyObject]
27
+ #
28
+ def block_argument
29
+ return list(:blockarg).first
30
+ end
31
+
32
+ ##
33
+ # @return [Array]
34
+ #
35
+ def keyword_arguments
36
+ return list(:kwoptarg)
37
+ end
38
+
39
+ ##
40
+ # @return [Array]
41
+ #
42
+ def optional_arguments
43
+ return list(:optarg)
44
+ end
38
45
 
39
46
  ##
40
- # Called after a new instance is created of this class. This method is
41
- # called before calling any supplied blocks.
47
+ # @return [RubyLint::Definition::RubyObject]
42
48
  #
43
- def after_initialize
44
- @arguments ||= []
45
- @optional_arguments ||= []
49
+ def rest_argument
50
+ return list(:restarg).first
46
51
  end
47
52
 
48
53
  ##
@@ -70,7 +75,16 @@ module RubyLint
70
75
  # @param [String] name The name of the argument.
71
76
  #
72
77
  def define_argument(name)
73
- @arguments << create_argument(:arg, name)
78
+ create_argument(:arg, name)
79
+ end
80
+
81
+ ##
82
+ # Defines a keyword argument for the method.
83
+ #
84
+ # @see RubyLint::Definition::RubyObject#define_argument
85
+ #
86
+ def define_keyword_argument(name)
87
+ create_argument(:kwoptarg, name)
74
88
  end
75
89
 
76
90
  ##
@@ -79,7 +93,7 @@ module RubyLint
79
93
  # @see RubyLint::Definition::RubyObject#define_argument
80
94
  #
81
95
  def define_optional_argument(name)
82
- @optional_arguments << create_argument(:optarg, name)
96
+ create_argument(:optarg, name)
83
97
  end
84
98
 
85
99
  ##
@@ -88,7 +102,7 @@ module RubyLint
88
102
  # @see RubyLint::Definition::RubyObject#define_argument
89
103
  #
90
104
  def define_rest_argument(name)
91
- @rest_argument = create_argument(:restarg, name)
105
+ create_argument(:restarg, name)
92
106
  end
93
107
 
94
108
  ##
@@ -97,7 +111,7 @@ module RubyLint
97
111
  # @see RubyLint::Definition::RubyObject#define_argument
98
112
  #
99
113
  def define_block_argument(name)
100
- @block_argument = create_argument(:blockarg, name)
114
+ create_argument(:blockarg, name)
101
115
  end
102
116
 
103
117
  private
@@ -91,19 +91,21 @@ module RubyLint
91
91
  # @return [Array<Symbol>]
92
92
  #
93
93
  VALID_TYPES = [
94
- :lvar,
95
- :ivar,
94
+ :arg,
95
+ :blockarg,
96
+ :const,
96
97
  :cvar,
97
98
  :gvar,
98
- :const,
99
- :method,
100
99
  :instance_method,
101
- :member,
100
+ :ivar,
102
101
  :keyword,
103
- :arg,
102
+ :kwoptarg,
103
+ :lvar,
104
+ :member,
105
+ :method,
104
106
  :optarg,
105
107
  :restarg,
106
- :blockarg
108
+ :unknown
107
109
  ].freeze
108
110
 
109
111
  attr_reader :update_parents,
@@ -114,6 +116,15 @@ module RubyLint
114
116
 
115
117
  attr_accessor :instance_type, :parents, :reference_amount
116
118
 
119
+ ##
120
+ # Creates an object that represents an unknown value.
121
+ #
122
+ # @return [RubyLint::Definition::RubyObject]
123
+ #
124
+ def self.create_unknown
125
+ return new(:type => :unknown, :name => 'unknown')
126
+ end
127
+
117
128
  ##
118
129
  # @example
119
130
  # string = RubyObject.new(:name => 'String', :type => :const)
@@ -243,10 +254,11 @@ module RubyLint
243
254
  if defines?(type, name)
244
255
  found = definitions[type][name]
245
256
 
246
- # Look up the definition in the parent scope(s) (if any are set).
257
+ # Look up the definition in the parent scope(s) (if any are set). This
258
+ # takes the parents themselves also into account.
247
259
  elsif lookup_parent?(type) and lookup_parent
248
260
  parents.each do |parent|
249
- parent_definition = parent.lookup(type, name)
261
+ parent_definition = determine_parent(parent, type, name)
250
262
 
251
263
  if parent_definition
252
264
  found = parent_definition
@@ -320,7 +332,7 @@ module RubyLint
320
332
  # @return [Mixed]
321
333
  #
322
334
  def call(context = self)
323
- retval = return_value
335
+ retval = respond_to?(:return_value) ? return_value : nil
324
336
  retval = retval.call(context) if retval.respond_to?(:call)
325
337
 
326
338
  return retval
@@ -436,6 +448,8 @@ module RubyLint
436
448
  # set to the `source_type` value by default.
437
449
  #
438
450
  def copy(source, source_type, target_type = source_type)
451
+ return unless source.definitions.key?(source_type)
452
+
439
453
  source.list(source_type).each do |definition|
440
454
  add(target_type, definition.name, definition)
441
455
  end
@@ -460,6 +474,14 @@ module RubyLint
460
474
  return self.class.new(options)
461
475
  end
462
476
 
477
+ ##
478
+ # Changes the instance type of the current definition to `:instance`. If
479
+ # you want to return a new definition use {#instance} instead.
480
+ #
481
+ def instance!
482
+ @instance_type = :instance
483
+ end
484
+
463
485
  ##
464
486
  # Returns `true` if the object was referenced more than once.
465
487
  #
@@ -501,7 +523,7 @@ module RubyLint
501
523
  # @param [String] name
502
524
  # @param [Mixed] value
503
525
  #
504
- def define_global_variable(name, value = nil)
526
+ def define_global_variable(name, value = self.class.create_unknown)
505
527
  return add_child_definition(:gvar, name, value)
506
528
  end
507
529
 
@@ -587,6 +609,24 @@ module RubyLint
587
609
  end
588
610
  end
589
611
 
612
+ ##
613
+ # Determines what parent definition to use.
614
+ #
615
+ # @param [RubyLint::Definition::RubyObject] parent
616
+ # @param [Symbol] type
617
+ # @param [String] name
618
+ # @return [RubyLint::Definition::RubyObject]
619
+ #
620
+ def determine_parent(parent, type, name)
621
+ if parent.type == type and parent.name == name
622
+ parent_definition = parent
623
+ else
624
+ parent_definition = parent.lookup(type, name)
625
+ end
626
+
627
+ return parent_definition
628
+ end
629
+
590
630
  ##
591
631
  # Adds a new child definition to the current definition.
592
632
  #
@@ -599,7 +639,7 @@ module RubyLint
599
639
  definition = self.class.new(
600
640
  :name => name,
601
641
  :type => type,
602
- :value => nil,
642
+ :value => value,
603
643
  :parents => [self],
604
644
  &block
605
645
  )
@@ -616,9 +656,10 @@ module RubyLint
616
656
  #
617
657
  def add_child_method(type, name, &block)
618
658
  definition = RubyMethod.new(
619
- :name => name,
620
- :type => type,
621
- :parents => [self],
659
+ :name => name,
660
+ :type => type,
661
+ :parents => [self],
662
+ :instance_type => :instance,
622
663
  &block
623
664
  )
624
665