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
@@ -0,0 +1,55 @@
1
+ module RubyLint
2
+ module Docstring
3
+ ##
4
+ # {RubyLint::Docstring::Mapping} is a small data container for storing
5
+ # docstring tags separately and optionally by their names (e.g. for
6
+ # parameter tags).
7
+ #
8
+ # @!attribute [r] param_tags
9
+ # @return [Hash]
10
+ #
11
+ # @!attribute [r] return_tag
12
+ # @return [RubyLint::Docstring::ReturnTag]
13
+ #
14
+ class Mapping
15
+ attr_reader :param_tags, :return_tag
16
+
17
+ ##
18
+ # Hash containing the known tag classes and their callback methods.
19
+ #
20
+ # @return [Hash]
21
+ #
22
+ TAG_METHODS = {
23
+ ParamTag => :on_param_tag,
24
+ ReturnTag => :on_return_tag
25
+ }
26
+
27
+ ##
28
+ # @param [Array] tags
29
+ #
30
+ def initialize(tags = [])
31
+ @param_tags = {}
32
+
33
+ tags.each do |tag|
34
+ send(TAG_METHODS[tag.class], tag)
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ ##
41
+ # @param [RubyLint::Docstring::ParamTag] tag
42
+ #
43
+ def on_param_tag(tag)
44
+ @param_tags[tag.name] = tag
45
+ end
46
+
47
+ ##
48
+ # @param [RubyLint::Docstring::ReturnTag] tag
49
+ #
50
+ def on_return_tag(tag)
51
+ @return_tag = tag
52
+ end
53
+ end # Mapping
54
+ end # Docstring
55
+ end # RubyLint
@@ -0,0 +1,29 @@
1
+ module RubyLint
2
+ module Docstring
3
+ ##
4
+ # The ParamTag class contains information about YARD `@param` tags such as
5
+ # the types of the parameter.
6
+ #
7
+ # @!attribute [r] name
8
+ # @return [String]
9
+ #
10
+ # @!attribute [r] types
11
+ # @return [Array]
12
+ #
13
+ # @!attribute [r] description
14
+ # @return [String]
15
+ #
16
+ class ParamTag
17
+ attr_reader :name, :types, :description
18
+
19
+ ##
20
+ # @param [Hash] options
21
+ #
22
+ def initialize(options = {})
23
+ @name = options[:name]
24
+ @types = options[:types] || []
25
+ @description = options[:description]
26
+ end
27
+ end # ParamTag
28
+ end # Docstring
29
+ end # RubyLint
@@ -0,0 +1,133 @@
1
+ module RubyLint
2
+ module Docstring
3
+ ##
4
+ # {RubyLint::Docstring::Parser} parses a collection of Ruby source comments
5
+ # and tries to extract various YARD tags out of them. These tags can then
6
+ # be used as extra information for building definitions (e.g. the arguments
7
+ # of a method definition).
8
+ #
9
+ class Parser
10
+ ##
11
+ # Regexp used to get rid of leading `#` markers. This makes the regular
12
+ # expressions used for tags a little bit easier.
13
+ #
14
+ # @return [Regexp]
15
+ #
16
+ COMMENT_REGEXP = /^#+\s*/
17
+
18
+ ##
19
+ # The character used for separating types in a tag.
20
+ #
21
+ # @return [String]
22
+ #
23
+ TYPE_SEPARATOR = '|'
24
+
25
+ ##
26
+ # Hash containing regular expressions and their corresponding callback
27
+ # methods.
28
+ #
29
+ # @return [Hash]
30
+ #
31
+ KNOWN_TAGS = {
32
+ # Matches: @param [Type] name description
33
+ # Matches: @param [Type<Value>] name description
34
+ /^@param\s+\[(.+)\]\s+(\S+)\s*(.+)*/ => :on_param_with_type,
35
+
36
+ # Matches: @param name description
37
+ /^@param\s+(\S+)\s*(.+)*/ => :on_param,
38
+
39
+ # Matches: @return [Type] description
40
+ /^@return\s+\[(.+)\]\s*(.+)*/ => :on_return_with_type,
41
+
42
+ # Matches; @return description
43
+ /^@return\s+(.+)/ => :on_return,
44
+ }
45
+
46
+ ##
47
+ # Parses an Array of comments and returns a collection of docstring tags.
48
+ #
49
+ # @param [Array] comments
50
+ # @return [Array]
51
+ #
52
+ def parse(comments)
53
+ tags = []
54
+
55
+ comments.each do |comment|
56
+ comment = comment.gsub(COMMENT_REGEXP, '').strip
57
+
58
+ KNOWN_TAGS.each do |regexp, method|
59
+ matchdata = comment.match(regexp)
60
+
61
+ if matchdata
62
+ retval = send(method, *matchdata.captures)
63
+
64
+ if retval
65
+ tags << retval
66
+ break
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ return tags
73
+ end
74
+
75
+ private
76
+
77
+ ##
78
+ # Processes a `@param` tag without a given type.
79
+ #
80
+ # @param [String] name The name of the argument.
81
+ # @param [String] description The description of the argument.
82
+ # @return [RubyLint::Docstring::ParamTag]
83
+ #
84
+ def on_param(name, description)
85
+ return ParamTag.new(:name => name, :description => description)
86
+ end
87
+
88
+ ##
89
+ # Processes a `@param` tag with a set of types specified.
90
+ #
91
+ # @param [String] types The argument types.
92
+ # @see #on_param
93
+ #
94
+ def on_param_with_type(types, name, description)
95
+ # The inner values of compound types are ignored since ruby-lint
96
+ # doesn't have the means to store this information.
97
+ types = types.split(TYPE_SEPARATOR).map do |type|
98
+ type.gsub(/<.+>/, '')
99
+ end
100
+
101
+ return ParamTag.new(
102
+ :name => name,
103
+ :description => description,
104
+ :types => types
105
+ )
106
+ end
107
+
108
+ ##
109
+ # Processes a `@return` tag with just the description.
110
+ #
111
+ # @param [String] description
112
+ # @return [RubyLint::Docstring::ReturnTag]
113
+ #
114
+ def on_return(description)
115
+ return ReturnTag.new(:description => description)
116
+ end
117
+
118
+ ##
119
+ # Processes a `@return` tag with the type and description.
120
+ #
121
+ # @param [String] types The return types.
122
+ # @param [String] description
123
+ # @return [RubyLint::Docstring::ReturnTag]
124
+ #
125
+ def on_return_with_type(types, description)
126
+ return ReturnTag.new(
127
+ :description => description,
128
+ :types => types.split(TYPE_SEPARATOR)
129
+ )
130
+ end
131
+ end # DocstringParser
132
+ end # Docstring
133
+ end # RubyLint
@@ -0,0 +1,24 @@
1
+ module RubyLint
2
+ module Docstring
3
+ ##
4
+ # The ReturnTag class contains information about a YARD `@return` tag.
5
+ #
6
+ # @!attribute [r] types
7
+ # @return [Array]
8
+ #
9
+ # @!attribute [r] description
10
+ # @return [String]
11
+ #
12
+ class ReturnTag
13
+ attr_reader :types, :description
14
+
15
+ ##
16
+ # @param [Hash] options
17
+ #
18
+ def initialize(options = {})
19
+ @types = options[:types] || []
20
+ @description = options[:description]
21
+ end
22
+ end # ReturnTag
23
+ end # Docstring
24
+ end # RubyLint
@@ -0,0 +1,96 @@
1
+ module RubyLint
2
+ ##
3
+ # {RubyLint::FileLoader} iterates over an AST and given a constant node will
4
+ # try to find the corresponding filepath using {RubyLint::FileScanner}.
5
+ #
6
+ # ## Options
7
+ #
8
+ # The following options must be set when creating an instance of this class:
9
+ #
10
+ # * `:directories`: the directories to scan for files.
11
+ # * `:ignore_paths`: a list of paths to ignore when scanning for files.
12
+ #
13
+ # @!attribute [r] file_scanner
14
+ # @return [RubyLint::FileScanner]
15
+ #
16
+ # @!attribute [r] parser
17
+ # @return [RubyLint::Parser]
18
+ #
19
+ # @!attribute [r] nodes
20
+ # @return [Array] A list of extra nodes (and their comments) a VM instance
21
+ # should process before processing the file being analyzed.
22
+ #
23
+ # @!attribute [r] debug
24
+ # @return [TrueClass|FalseClass]
25
+ #
26
+ # @!attribute [r] paths
27
+ # @return [Set]
28
+ #
29
+ class FileLoader < Iterator
30
+ include Helper::ConstantPaths
31
+
32
+ attr_reader :file_scanner, :parser, :nodes, :comments, :debug, :paths
33
+
34
+ ##
35
+ # Called after a new instance of this class is created.
36
+ #
37
+ def after_initialize
38
+ @file_scanner = FileScanner.new(@directories, @ignore_paths)
39
+ @parser = Parser.new
40
+ @nodes = []
41
+ @paths = Set.new
42
+ end
43
+
44
+ ##
45
+ # @param [RubyLint::AST::Node] node
46
+ #
47
+ def on_const(node)
48
+ segments = constant_segments(node)
49
+ constant_path = segments.join('::')
50
+ files = file_scanner.scan(constant_path)
51
+
52
+ paths << node.file
53
+
54
+ files.each do |path|
55
+ next if paths.include?(path)
56
+
57
+ paths << path
58
+
59
+ debug_message("Processing extra file: #{path}")
60
+
61
+ process_file(segments[-1], path)
62
+ end
63
+ end
64
+
65
+ private
66
+
67
+ ##
68
+ # @param [String] constant_name
69
+ # @param [String] path
70
+ #
71
+ def process_file(constant_name, path)
72
+ code = File.read(path)
73
+
74
+ unless code.include?(constant_name)
75
+ debug_message(
76
+ %Q{ Skipping since "#{constant_name}" was not found in this file}
77
+ )
78
+
79
+ return
80
+ end
81
+
82
+ ast, comments = parser.parse(code, path)
83
+
84
+ iterate(ast)
85
+
86
+ nodes << [ast, comments]
87
+ end
88
+
89
+ ##
90
+ # @param [String] message
91
+ #
92
+ def debug_message(message)
93
+ STDERR.puts(message) if debug
94
+ end
95
+ end # FileLoader
96
+ end # RubyLint
@@ -0,0 +1,91 @@
1
+ module RubyLint
2
+ ##
3
+ # {RubyLint::FileScanner} is used for finding a list of files that could
4
+ # potentially define a given Ruby constant (path).
5
+ #
6
+ # @!attribute [r] directories
7
+ # @return [Array]
8
+ #
9
+ # @!attribute [r] ignore
10
+ # @return [Array]
11
+ #
12
+ class FileScanner
13
+ attr_reader :directories, :ignore
14
+
15
+ ##
16
+ # @param [Array] directories A collection of base directories to search in.
17
+ # @param [Array] ignore A list of paths to ignore.
18
+ #
19
+ def initialize(directories = [Dir.pwd], ignore = [])
20
+ unless directories.respond_to?(:each)
21
+ raise TypeError, 'Directories must be specified as an Enumerable'
22
+ end
23
+
24
+ @directories = directories
25
+ @ignore = ignore || []
26
+ end
27
+
28
+ ##
29
+ # Tries to find `constant` in one of the directories. The return value is
30
+ # an Array of file paths sorted from top-level to deeply nested structures
31
+ # (e.g. `a.rb` comes before `foo/a.rb`).
32
+ #
33
+ # @param [String] constant
34
+ # @return [Array]
35
+ #
36
+ def scan(constant)
37
+ segment = constant_to_path(constant)
38
+ paths = Dir.glob(glob_pattern(segment))
39
+
40
+ # Lets see if we can find anything when using dashes for the directory
41
+ # names instead of underscores.
42
+ if paths.empty?
43
+ segment = constant_to_dashed_path(constant)
44
+ paths = Dir.glob(glob_pattern(segment))
45
+ end
46
+
47
+ ignore.each do |pattern|
48
+ paths.reject! do |path|
49
+ path.include?(pattern)
50
+ end
51
+ end
52
+
53
+ # Ensure that the order is from top-level -> deeply nested files instead
54
+ # of a random order.
55
+ paths.sort! do |left, right|
56
+ left.length <=> right.length
57
+ end
58
+
59
+ return paths
60
+ end
61
+
62
+ private
63
+
64
+ ##
65
+ # @param [String] constant
66
+ # @return [String]
67
+ #
68
+ def constant_to_path(constant)
69
+ return constant.gsub('::', '/').snake_case
70
+ end
71
+
72
+ ##
73
+ # @see #constant_to_path
74
+ #
75
+ def constant_to_dashed_path(constant)
76
+ segments = constant.split('::')
77
+ last = segments[-1]
78
+ path = segments[0..-2].join('/').snake_case.gsub('_', '-')
79
+
80
+ return "#{path}/#{last.snake_case}"
81
+ end
82
+
83
+ ##
84
+ # @param [String] segment
85
+ # @return [String]
86
+ #
87
+ def glob_pattern(segment)
88
+ return "{#{directories.join(',')}}/**/#{segment}.rb"
89
+ end
90
+ end # FileScanner
91
+ end # RubyLint
@@ -0,0 +1,56 @@
1
+ module RubyLint
2
+ module GlobalScope
3
+ ##
4
+ # @return [RubyLint::Definition::RubyObject]
5
+ #
6
+ def self.definitions
7
+ return @definitions ||= Definition::RubyObject.new(
8
+ :name => 'global',
9
+ :type => :global
10
+ )
11
+ end
12
+
13
+ ##
14
+ # Looks up the given constant in the global scope. If it does not exist
15
+ # this method will try to load it from one of the existing definitions.
16
+ #
17
+ # @param [String] name
18
+ # @return [RubyLint::Definition::RubyObject]
19
+ #
20
+ def self.global_constant(name)
21
+ found = definitions.lookup_constant_path(name)
22
+
23
+ if !found and !constant_loader.loaded?(name)
24
+ constant_loader.load_constant(name)
25
+
26
+ found = definitions.lookup_constant_path(name)
27
+ end
28
+
29
+ return found
30
+ end
31
+
32
+ class << self
33
+ # This allows the ConstantProxy class to use the same code while still
34
+ # being able to use the global scope as its input.
35
+ alias_method :lookup_constant_path, :global_constant
36
+ end
37
+
38
+ ##
39
+ # Creates a new proxy for a global constant.
40
+ #
41
+ # @param [String] name The name of the constant, can include an entire
42
+ # constant path in the form of `Foo::Bar`.
43
+ # @return [RubyLint::Definition::ConstantProxy]
44
+ #
45
+ def self.constant_proxy(name)
46
+ return Definition::ConstantProxy.new(self, name)
47
+ end
48
+
49
+ ##
50
+ # @return [RubyLint::ConstantLoader]
51
+ #
52
+ def self.constant_loader
53
+ return @constant_loader ||= ConstantLoader.new
54
+ end
55
+ end # GlobalScope
56
+ end # RubyLint