ruby-lint 0.0.3 → 0.0.4

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 (347) hide show
  1. data.tar.gz.asc +14 -14
  2. data/.gitignore +1 -2
  3. data/.rubocop.yml +59 -0
  4. data/.travis.yml +3 -7
  5. data/.yardopts +2 -2
  6. data/Gemfile +4 -0
  7. data/MANIFEST +103 -67
  8. data/README.md +13 -31
  9. data/Rakefile +1 -6
  10. data/checksum/ruby-lint-0.0.3.gem.sha512 +1 -0
  11. data/debug/memory_usage.rb +14 -0
  12. data/debug/profile.rb +18 -0
  13. data/doc/architecture.md +14 -18
  14. data/doc/changelog.md +29 -0
  15. data/doc/code_analysis.md +12 -12
  16. data/doc/configuration.md +21 -50
  17. data/doc/graphviz/flow.dot +1 -1
  18. data/doc/images/flow.png +0 -0
  19. data/lib/ruby-lint.rb +33 -19
  20. data/lib/ruby-lint/analysis/argument_amount.rb +84 -0
  21. data/lib/ruby-lint/analysis/base.rb +132 -0
  22. data/lib/ruby-lint/analysis/confusing_variables.rb +26 -0
  23. data/lib/ruby-lint/analysis/pedantics.rb +36 -0
  24. data/lib/ruby-lint/analysis/shadowing_variables.rb +47 -0
  25. data/lib/ruby-lint/analysis/undefined_methods.rb +91 -0
  26. data/lib/ruby-lint/analysis/undefined_variables.rb +46 -0
  27. data/lib/ruby-lint/analysis/unused_variables.rb +49 -0
  28. data/lib/ruby-lint/ast/builder.rb +17 -0
  29. data/lib/ruby-lint/ast/node.rb +39 -0
  30. data/lib/ruby-lint/cli.rb +0 -19
  31. data/lib/ruby-lint/cli/analyze.rb +54 -28
  32. data/lib/ruby-lint/cli/ast.rb +21 -6
  33. data/lib/ruby-lint/cli/base.rb +0 -23
  34. data/lib/ruby-lint/configuration.rb +112 -42
  35. data/lib/ruby-lint/constant_loader.rb +10 -28
  36. data/lib/ruby-lint/default_names.rb +19 -0
  37. data/lib/ruby-lint/definition/constant_proxy.rb +56 -0
  38. data/lib/ruby-lint/definition/ruby_method.rb +21 -143
  39. data/lib/ruby-lint/definition/ruby_object.rb +142 -246
  40. data/lib/ruby-lint/definition_builder/base.rb +43 -0
  41. data/lib/ruby-lint/definition_builder/primitive.rb +39 -0
  42. data/lib/ruby-lint/definition_builder/ruby_array.rb +77 -0
  43. data/lib/ruby-lint/definition_builder/ruby_block.rb +34 -0
  44. data/lib/ruby-lint/definition_builder/ruby_class.rb +24 -0
  45. data/lib/ruby-lint/definition_builder/ruby_hash.rb +37 -0
  46. data/lib/ruby-lint/definition_builder/ruby_method.rb +84 -0
  47. data/lib/ruby-lint/definition_builder/ruby_module.rb +68 -0
  48. data/lib/ruby-lint/definition_generator.rb +41 -15
  49. data/lib/ruby-lint/definitions/core/arg0.rb +1 -1
  50. data/lib/ruby-lint/definitions/core/argf.rb +1 -1
  51. data/lib/ruby-lint/definitions/core/argument_error.rb +2 -2
  52. data/lib/ruby-lint/definitions/core/argv.rb +1 -1
  53. data/lib/ruby-lint/definitions/core/array.rb +6 -6
  54. data/lib/ruby-lint/definitions/core/autoload.rb +2 -2
  55. data/lib/ruby-lint/definitions/core/basic_object.rb +3 -3
  56. data/lib/ruby-lint/definitions/core/bignum.rb +2 -2
  57. data/lib/ruby-lint/definitions/core/binding.rb +2 -2
  58. data/lib/ruby-lint/definitions/core/class.rb +2 -2
  59. data/lib/ruby-lint/definitions/core/comparable.rb +1 -1
  60. data/lib/ruby-lint/definitions/core/complex.rb +4 -4
  61. data/lib/ruby-lint/definitions/core/condition_variable.rb +2 -2
  62. data/lib/ruby-lint/definitions/core/continuation.rb +2 -2
  63. data/lib/ruby-lint/definitions/core/data.rb +2 -2
  64. data/lib/ruby-lint/definitions/core/date.rb +34 -34
  65. data/lib/ruby-lint/definitions/core/date_time.rb +26 -26
  66. data/lib/ruby-lint/definitions/core/default_record_separator.rb +1 -1
  67. data/lib/ruby-lint/definitions/core/digest.rb +14 -14
  68. data/lib/ruby-lint/definitions/core/dir.rb +34 -34
  69. data/lib/ruby-lint/definitions/core/encoding.rb +237 -237
  70. data/lib/ruby-lint/definitions/core/encoding_error.rb +2 -2
  71. data/lib/ruby-lint/definitions/core/enumerable.rb +15 -15
  72. data/lib/ruby-lint/definitions/core/enumerator.rb +2 -2
  73. data/lib/ruby-lint/definitions/core/env.rb +1 -1
  74. data/lib/ruby-lint/definitions/core/eoferror.rb +2 -2
  75. data/lib/ruby-lint/definitions/core/erb.rb +22 -22
  76. data/lib/ruby-lint/definitions/core/errno.rb +525 -525
  77. data/lib/ruby-lint/definitions/core/etc.rb +6 -6
  78. data/lib/ruby-lint/definitions/core/exception.rb +2 -2
  79. data/lib/ruby-lint/definitions/core/false.rb +1 -1
  80. data/lib/ruby-lint/definitions/core/false_class.rb +2 -2
  81. data/lib/ruby-lint/definitions/core/fatal_error.rb +2 -2
  82. data/lib/ruby-lint/definitions/core/fiber.rb +2 -2
  83. data/lib/ruby-lint/definitions/core/fiber_error.rb +2 -2
  84. data/lib/ruby-lint/definitions/core/file.rb +68 -68
  85. data/lib/ruby-lint/definitions/core/file_list.rb +2 -2
  86. data/lib/ruby-lint/definitions/core/file_test.rb +1 -1
  87. data/lib/ruby-lint/definitions/core/file_utils.rb +16 -16
  88. data/lib/ruby-lint/definitions/core/fixnum.rb +4 -4
  89. data/lib/ruby-lint/definitions/core/float.rb +16 -16
  90. data/lib/ruby-lint/definitions/core/float_domain_error.rb +2 -2
  91. data/lib/ruby-lint/definitions/core/gc.rb +2 -2
  92. data/lib/ruby-lint/definitions/core/gem.rb +119 -119
  93. data/lib/ruby-lint/definitions/core/hash.rb +14 -14
  94. data/lib/ruby-lint/definitions/core/immediate_value.rb +1 -1
  95. data/lib/ruby-lint/definitions/core/index_error.rb +2 -2
  96. data/lib/ruby-lint/definitions/core/integer.rb +2 -2
  97. data/lib/ruby-lint/definitions/core/interrupt.rb +2 -2
  98. data/lib/ruby-lint/definitions/core/io.rb +38 -38
  99. data/lib/ruby-lint/definitions/core/ioerror.rb +2 -2
  100. data/lib/ruby-lint/definitions/core/kernel.rb +3 -3
  101. data/lib/ruby-lint/definitions/core/key_error.rb +2 -2
  102. data/lib/ruby-lint/definitions/core/load_error.rb +6 -6
  103. data/lib/ruby-lint/definitions/core/local_jump_error.rb +2 -2
  104. data/lib/ruby-lint/definitions/core/main.rb +1 -1
  105. data/lib/ruby-lint/definitions/core/marshal.rb +35 -35
  106. data/lib/ruby-lint/definitions/core/match_data.rb +2 -2
  107. data/lib/ruby-lint/definitions/core/math.rb +7 -7
  108. data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +2 -2
  109. data/lib/ruby-lint/definitions/core/method.rb +2 -2
  110. data/lib/ruby-lint/definitions/core/module.rb +1 -1
  111. data/lib/ruby-lint/definitions/core/monitor.rb +4 -4
  112. data/lib/ruby-lint/definitions/core/monitor_mixin.rb +5 -5
  113. data/lib/ruby-lint/definitions/core/mutex.rb +2 -2
  114. data/lib/ruby-lint/definitions/core/name_error.rb +2 -2
  115. data/lib/ruby-lint/definitions/core/nil.rb +1 -1
  116. data/lib/ruby-lint/definitions/core/nil_class.rb +2 -2
  117. data/lib/ruby-lint/definitions/core/no_memory_error.rb +2 -2
  118. data/lib/ruby-lint/definitions/core/no_method_error.rb +2 -2
  119. data/lib/ruby-lint/definitions/core/not_implemented_error.rb +2 -2
  120. data/lib/ruby-lint/definitions/core/numeric.rb +2 -2
  121. data/lib/ruby-lint/definitions/core/object.rb +2 -2
  122. data/lib/ruby-lint/definitions/core/object_space.rb +1 -1
  123. data/lib/ruby-lint/definitions/core/open_struct.rb +3 -3
  124. data/lib/ruby-lint/definitions/core/option_parser.rb +83 -83
  125. data/lib/ruby-lint/definitions/core/precision.rb +1 -1
  126. data/lib/ruby-lint/definitions/core/primitive_failure.rb +2 -2
  127. data/lib/ruby-lint/definitions/core/proc.rb +2 -2
  128. data/lib/ruby-lint/definitions/core/process.rb +29 -29
  129. data/lib/ruby-lint/definitions/core/psych.rb +149 -149
  130. data/lib/ruby-lint/definitions/core/queue.rb +2 -2
  131. data/lib/ruby-lint/definitions/core/rake.rb +117 -117
  132. data/lib/ruby-lint/definitions/core/rake_file_utils.rb +1 -1
  133. data/lib/ruby-lint/definitions/core/rakeversion.rb +1 -1
  134. data/lib/ruby-lint/definitions/core/random.rb +2 -2
  135. data/lib/ruby-lint/definitions/core/range.rb +4 -4
  136. data/lib/ruby-lint/definitions/core/range_error.rb +2 -2
  137. data/lib/ruby-lint/definitions/core/rational.rb +2 -2
  138. data/lib/ruby-lint/definitions/core/rb_config.rb +3 -3
  139. data/lib/ruby-lint/definitions/core/regexp.rb +28 -28
  140. data/lib/ruby-lint/definitions/core/regexp_error.rb +2 -2
  141. data/lib/ruby-lint/definitions/core/rubinius.rb +1057 -1057
  142. data/lib/ruby-lint/definitions/core/ruby_copyright.rb +1 -1
  143. data/lib/ruby-lint/definitions/core/ruby_description.rb +1 -1
  144. data/lib/ruby-lint/definitions/core/ruby_engine.rb +1 -1
  145. data/lib/ruby-lint/definitions/core/ruby_lint.rb +9 -9
  146. data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +1 -1
  147. data/lib/ruby-lint/definitions/core/ruby_platform.rb +1 -1
  148. data/lib/ruby-lint/definitions/core/ruby_release_date.rb +1 -1
  149. data/lib/ruby-lint/definitions/core/ruby_version.rb +1 -1
  150. data/lib/ruby-lint/definitions/core/runtime_error.rb +2 -2
  151. data/lib/ruby-lint/definitions/core/scan_error.rb +2 -2
  152. data/lib/ruby-lint/definitions/core/script_error.rb +2 -2
  153. data/lib/ruby-lint/definitions/core/security_error.rb +2 -2
  154. data/lib/ruby-lint/definitions/core/shellwords.rb +1 -1
  155. data/lib/ruby-lint/definitions/core/signal.rb +3 -3
  156. data/lib/ruby-lint/definitions/core/signal_exception.rb +2 -2
  157. data/lib/ruby-lint/definitions/core/singleton.rb +2 -2
  158. data/lib/ruby-lint/definitions/core/sized_queue.rb +2 -2
  159. data/lib/ruby-lint/definitions/core/standard_error.rb +2 -2
  160. data/lib/ruby-lint/definitions/core/stderr.rb +1 -1
  161. data/lib/ruby-lint/definitions/core/stdin.rb +1 -1
  162. data/lib/ruby-lint/definitions/core/stdout.rb +1 -1
  163. data/lib/ruby-lint/definitions/core/stop_iteration.rb +2 -2
  164. data/lib/ruby-lint/definitions/core/string.rb +21 -21
  165. data/lib/ruby-lint/definitions/core/string_io.rb +7 -7
  166. data/lib/ruby-lint/definitions/core/string_scanner.rb +4 -4
  167. data/lib/ruby-lint/definitions/core/struct.rb +20 -20
  168. data/lib/ruby-lint/definitions/core/syck.rb +4 -4
  169. data/lib/ruby-lint/definitions/core/symbol.rb +2 -2
  170. data/lib/ruby-lint/definitions/core/syntax_error.rb +2 -2
  171. data/lib/ruby-lint/definitions/core/system_call_error.rb +2 -2
  172. data/lib/ruby-lint/definitions/core/system_exit.rb +2 -2
  173. data/lib/ruby-lint/definitions/core/system_stack_error.rb +2 -2
  174. data/lib/ruby-lint/definitions/core/thread.rb +6 -6
  175. data/lib/ruby-lint/definitions/core/thread_error.rb +2 -2
  176. data/lib/ruby-lint/definitions/core/thread_group.rb +2 -2
  177. data/lib/ruby-lint/definitions/core/time.rb +3 -3
  178. data/lib/ruby-lint/definitions/core/toplevel_binding.rb +1 -1
  179. data/lib/ruby-lint/definitions/core/true.rb +1 -1
  180. data/lib/ruby-lint/definitions/core/true_class.rb +2 -2
  181. data/lib/ruby-lint/definitions/core/type_error.rb +2 -2
  182. data/lib/ruby-lint/definitions/core/unbound_method.rb +2 -2
  183. data/lib/ruby-lint/definitions/core/unmarshalable.rb +1 -1
  184. data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +2 -2
  185. data/lib/ruby-lint/definitions/core/weak_ref.rb +4 -4
  186. data/lib/ruby-lint/definitions/core/zero_division_error.rb +2 -2
  187. data/lib/ruby-lint/definitions/rails.rb +12 -0
  188. data/lib/ruby-lint/definitions/rails/abstract_controller.rb +335 -0
  189. data/lib/ruby-lint/definitions/rails/action_controller.rb +1244 -0
  190. data/lib/ruby-lint/definitions/rails/action_dispatch.rb +741 -0
  191. data/lib/ruby-lint/definitions/rails/action_mailer.rb +502 -0
  192. data/lib/ruby-lint/definitions/rails/action_pack.rb +16 -0
  193. data/lib/ruby-lint/definitions/rails/action_view.rb +898 -0
  194. data/lib/ruby-lint/definitions/rails/active_model.rb +437 -0
  195. data/lib/ruby-lint/definitions/rails/active_record.rb +2901 -0
  196. data/lib/ruby-lint/definitions/rails/active_support.rb +1963 -0
  197. data/lib/ruby-lint/definitions/rails/arel.rb +665 -0
  198. data/lib/ruby-lint/definitions/rails/rails.rb +452 -0
  199. data/lib/ruby-lint/definitions/rails/sprockets.rb +968 -0
  200. data/lib/ruby-lint/generated_constant.rb +33 -0
  201. data/lib/ruby-lint/helper/constant_paths.rb +30 -21
  202. data/lib/ruby-lint/inspector.rb +20 -2
  203. data/lib/ruby-lint/iterator.rb +11 -171
  204. data/lib/ruby-lint/nested_stack.rb +46 -0
  205. data/lib/ruby-lint/parser.rb +24 -806
  206. data/lib/ruby-lint/report.rb +2 -30
  207. data/lib/ruby-lint/report/entry.rb +2 -2
  208. data/lib/ruby-lint/runner.rb +81 -0
  209. data/lib/ruby-lint/template/definition.erb +12 -8
  210. data/lib/ruby-lint/variable_predicates.rb +16 -58
  211. data/lib/ruby-lint/version.rb +1 -1
  212. data/lib/ruby-lint/virtual_machine.rb +1044 -0
  213. data/ruby-lint.gemspec +17 -7
  214. data/spec/fixtures/complex/rails/basic_controller.rb +9 -0
  215. data/spec/fixtures/complex/rcap.rb +38 -0
  216. data/spec/fixtures/complex/slop.rb +680 -0
  217. data/spec/fixtures/config.yml +8 -0
  218. data/spec/fixtures/invalid.rb +3 -0
  219. data/spec/fixtures/invalid_2.rb +3 -0
  220. data/spec/fixtures/syntax_error.rb +1 -0
  221. data/spec/fixtures/valid.rb +3 -0
  222. data/spec/helper.rb +6 -0
  223. data/spec/ruby-lint/{analyze → analysis}/argument_amount.rb +7 -7
  224. data/spec/ruby-lint/analysis/confusing_variables.rb +46 -0
  225. data/spec/ruby-lint/analysis/pedantics.rb +43 -0
  226. data/spec/ruby-lint/{analyze → analysis}/shadowing_variables.rb +5 -5
  227. data/spec/ruby-lint/{analyze → analysis}/undefined_methods.rb +18 -18
  228. data/spec/ruby-lint/{analyze → analysis}/undefined_variables.rb +19 -25
  229. data/spec/ruby-lint/{analyze → analysis}/unused_variables.rb +29 -16
  230. data/spec/ruby-lint/ast/node.rb +33 -0
  231. data/spec/ruby-lint/cli/analyze.rb +31 -0
  232. data/spec/ruby-lint/cli/ast.rb +23 -0
  233. data/spec/ruby-lint/configuration.rb +45 -6
  234. data/spec/ruby-lint/definition/constant_proxy.rb +31 -0
  235. data/spec/ruby-lint/definition/dsl.rb +13 -20
  236. data/spec/ruby-lint/definition/ruby_method.rb +65 -148
  237. data/spec/ruby-lint/definition/ruby_object.rb +60 -96
  238. data/spec/ruby-lint/definition_builder/primitive.rb +62 -0
  239. data/spec/ruby-lint/definition_builder/ruby_class.rb +108 -0
  240. data/spec/ruby-lint/definition_builder/ruby_method.rb +53 -0
  241. data/spec/ruby-lint/definition_builder/ruby_module.rb +50 -0
  242. data/spec/ruby-lint/iterator.rb +40 -16
  243. data/spec/ruby-lint/nested_stack.rb +23 -0
  244. data/spec/ruby-lint/parser.rb +14 -0
  245. data/spec/ruby-lint/report.rb +0 -10
  246. data/spec/ruby-lint/report/entry.rb +8 -4
  247. data/spec/ruby-lint/runner.rb +32 -0
  248. data/spec/ruby-lint/virtual_machine/assignments/arrays.rb +87 -0
  249. data/spec/ruby-lint/virtual_machine/assignments/hashes.rb +52 -0
  250. data/spec/ruby-lint/virtual_machine/assignments/optional.rb +41 -0
  251. data/spec/ruby-lint/{definitions_builder → virtual_machine}/assignments/return_values.rb +11 -11
  252. data/spec/ruby-lint/virtual_machine/assignments/variables.rb +85 -0
  253. data/spec/ruby-lint/virtual_machine/associate_nodes.rb +17 -0
  254. data/spec/ruby-lint/virtual_machine/autoloading.rb +31 -0
  255. data/spec/ruby-lint/virtual_machine/blocks.rb +64 -0
  256. data/spec/ruby-lint/virtual_machine/classes/class_methods.rb +21 -0
  257. data/spec/ruby-lint/virtual_machine/classes/extending.rb +104 -0
  258. data/spec/ruby-lint/virtual_machine/classes/redefining.rb +24 -0
  259. data/spec/ruby-lint/virtual_machine/classes/sclass.rb +94 -0
  260. data/spec/ruby-lint/virtual_machine/classes/scoping.rb +60 -0
  261. data/spec/ruby-lint/virtual_machine/complex/rails.rb +18 -0
  262. data/spec/ruby-lint/virtual_machine/complex/rcap.rb +15 -0
  263. data/spec/ruby-lint/virtual_machine/complex/slop.rb +16 -0
  264. data/spec/ruby-lint/{definitions_builder → virtual_machine}/for.rb +2 -2
  265. data/spec/ruby-lint/virtual_machine/freeze.rb +13 -0
  266. data/spec/ruby-lint/virtual_machine/interpolation.rb +12 -0
  267. data/spec/ruby-lint/virtual_machine/methods/defining.rb +40 -0
  268. data/spec/ruby-lint/virtual_machine/methods/exporting.rb +19 -0
  269. data/spec/ruby-lint/virtual_machine/methods/parameters.rb +77 -0
  270. data/spec/ruby-lint/virtual_machine/methods/patching.rb +26 -0
  271. data/spec/ruby-lint/virtual_machine/methods/scoping.rb +63 -0
  272. data/spec/ruby-lint/virtual_machine/methods/visibility.rb +64 -0
  273. data/spec/ruby-lint/{definitions_builder → virtual_machine}/modules.rb +16 -16
  274. data/spec/ruby-lint/virtual_machine/reference_amount.rb +33 -0
  275. data/spec/ruby-lint/virtual_machine/unused.rb +17 -0
  276. data/spec/support/bacon.rb +13 -13
  277. data/spec/support/building.rb +23 -16
  278. data/spec/support/coveralls.rb +5 -0
  279. data/spec/support/fixtures.rb +20 -0
  280. data/spec/support/parsing.rb +3 -5
  281. data/spec/support/simplecov.rb +5 -3
  282. data/task/build.rake +1 -1
  283. data/task/cop.rake +11 -0
  284. data/task/generate.rake +40 -2
  285. data/task/profile.rake +27 -0
  286. data/task/todo.rake +6 -0
  287. data/task/travis.rake +7 -0
  288. metadata +160 -75
  289. metadata.gz.asc +14 -14
  290. data/doc/build/.gitkeep +0 -0
  291. data/lib/ruby-lint/analyze/argument_amount.rb +0 -73
  292. data/lib/ruby-lint/analyze/shadowing_variables.rb +0 -32
  293. data/lib/ruby-lint/analyze/undefined_methods.rb +0 -68
  294. data/lib/ruby-lint/analyze/undefined_variables.rb +0 -72
  295. data/lib/ruby-lint/analyze/unused_variables.rb +0 -48
  296. data/lib/ruby-lint/base.rb +0 -85
  297. data/lib/ruby-lint/definitions_builder.rb +0 -692
  298. data/lib/ruby-lint/helper/conversion.rb +0 -33
  299. data/lib/ruby-lint/helper/current_scope.rb +0 -98
  300. data/lib/ruby-lint/helper/methods.rb +0 -91
  301. data/lib/ruby-lint/node.rb +0 -107
  302. data/lib/ruby-lint/parser_error.rb +0 -30
  303. data/spec/ruby-lint/constant_loader.rb +0 -32
  304. data/spec/ruby-lint/definition/method_calls.rb +0 -26
  305. data/spec/ruby-lint/definitions_builder/assignments/arrays.rb +0 -71
  306. data/spec/ruby-lint/definitions_builder/assignments/hashes.rb +0 -65
  307. data/spec/ruby-lint/definitions_builder/assignments/objects.rb +0 -23
  308. data/spec/ruby-lint/definitions_builder/assignments/optional.rb +0 -22
  309. data/spec/ruby-lint/definitions_builder/assignments/variables.rb +0 -71
  310. data/spec/ruby-lint/definitions_builder/associate_nodes.rb +0 -17
  311. data/spec/ruby-lint/definitions_builder/blocks.rb +0 -40
  312. data/spec/ruby-lint/definitions_builder/classes.rb +0 -230
  313. data/spec/ruby-lint/definitions_builder/methods.rb +0 -147
  314. data/spec/ruby-lint/definitions_builder/reference_amount.rb +0 -31
  315. data/spec/ruby-lint/definitions_builder/unused.rb +0 -15
  316. data/spec/ruby-lint/node.rb +0 -38
  317. data/spec/ruby-lint/parser/assignments.rb +0 -225
  318. data/spec/ruby-lint/parser/classes.rb +0 -110
  319. data/spec/ruby-lint/parser/errors.rb +0 -12
  320. data/spec/ruby-lint/parser/metadata.rb +0 -17
  321. data/spec/ruby-lint/parser/method_definitions.rb +0 -111
  322. data/spec/ruby-lint/parser/methods.rb +0 -217
  323. data/spec/ruby-lint/parser/modules.rb +0 -70
  324. data/spec/ruby-lint/parser/operators.rb +0 -40
  325. data/spec/ruby-lint/parser/statements/begin.rb +0 -55
  326. data/spec/ruby-lint/parser/statements/case.rb +0 -34
  327. data/spec/ruby-lint/parser/statements/defined.rb +0 -11
  328. data/spec/ruby-lint/parser/statements/for.rb +0 -34
  329. data/spec/ruby-lint/parser/statements/if.rb +0 -46
  330. data/spec/ruby-lint/parser/statements/return.rb +0 -14
  331. data/spec/ruby-lint/parser/statements/super.rb +0 -49
  332. data/spec/ruby-lint/parser/statements/unless.rb +0 -42
  333. data/spec/ruby-lint/parser/statements/until.rb +0 -25
  334. data/spec/ruby-lint/parser/statements/while.rb +0 -25
  335. data/spec/ruby-lint/parser/statements/yield.rb +0 -18
  336. data/spec/ruby-lint/parser/types/arrays.rb +0 -47
  337. data/spec/ruby-lint/parser/types/booleans.rb +0 -11
  338. data/spec/ruby-lint/parser/types/constants.rb +0 -32
  339. data/spec/ruby-lint/parser/types/hashes.rb +0 -55
  340. data/spec/ruby-lint/parser/types/nil.rb +0 -7
  341. data/spec/ruby-lint/parser/types/numbers.rb +0 -11
  342. data/spec/ruby-lint/parser/types/procs.rb +0 -11
  343. data/spec/ruby-lint/parser/types/ranges.rb +0 -11
  344. data/spec/ruby-lint/parser/types/regexp.rb +0 -27
  345. data/spec/ruby-lint/parser/types/strings.rb +0 -44
  346. data/spec/ruby-lint/parser/types/symbols.rb +0 -15
  347. data/task/stdlib.rake +0 -23
@@ -4,11 +4,11 @@ describe 'Building module definitions' do
4
4
  describe 'scoping definitions' do
5
5
  should 'process a global module' do
6
6
  defs = build_definitions('module Example; end')
7
- example = defs.lookup(:constant, 'Example')
7
+ example = defs.lookup(:const, 'Example')
8
8
 
9
9
  example.is_a?(ruby_object).should == true
10
10
 
11
- example.type.should == :module
11
+ example.type.should == :const
12
12
  example.name.should == 'Example'
13
13
  end
14
14
 
@@ -21,13 +21,13 @@ end
21
21
  CODE
22
22
 
23
23
  defs = build_definitions(code)
24
- first = defs.lookup(:constant, 'First')
24
+ first = defs.lookup(:const, 'First')
25
25
 
26
26
  first.is_a?(ruby_object).should == true
27
27
 
28
- defs.lookup(:constant, 'Second').nil?.should == true
28
+ defs.lookup(:const, 'Second').nil?.should == true
29
29
 
30
- first.lookup(:constant, 'Second') \
30
+ first.lookup(:const, 'Second') \
31
31
  .is_a?(ruby_object) \
32
32
  .should == true
33
33
  end
@@ -44,24 +44,24 @@ end
44
44
  CODE
45
45
 
46
46
  defs = build_definitions(code)
47
- first = defs.lookup(:constant, 'First')
47
+ first = defs.lookup(:const, 'First')
48
48
 
49
- first.lookup(:constant, 'Second') \
49
+ first.lookup(:const, 'Second') \
50
50
  .is_a?(ruby_object) \
51
51
  .should == true
52
52
 
53
53
  # Due to "First" and "Third" being defined in the same scope the "Third"
54
54
  # constant is available inside the "First" module.
55
- first.lookup(:constant, 'Third') \
55
+ first.lookup(:const, 'Third') \
56
56
  .is_a?(ruby_object) \
57
57
  .should == true
58
58
 
59
- first.lookup(:constant, 'Second') \
60
- .lookup(:constant, 'Third') \
59
+ first.lookup(:const, 'Second') \
60
+ .lookup(:const, 'Third') \
61
61
  .is_a?(ruby_object) \
62
62
  .should == true
63
63
 
64
- defs.lookup(:constant, 'Third') \
64
+ defs.lookup(:const, 'Third') \
65
65
  .is_a?(ruby_object) \
66
66
  .should == true
67
67
  end
@@ -81,7 +81,7 @@ end
81
81
 
82
82
  defs = build_definitions(code)
83
83
 
84
- defs.lookup(:constant, 'First') \
84
+ defs.lookup(:const, 'First') \
85
85
  .lookup(:instance_method, 'example') \
86
86
  .is_a?(ruby_method) \
87
87
  .should == true
@@ -103,7 +103,7 @@ end
103
103
 
104
104
  defs = build_definitions(code)
105
105
 
106
- defs.lookup(:constant, 'Second') \
106
+ defs.lookup(:const, 'Second') \
107
107
  .lookup(:instance_method, 'example') \
108
108
  .is_a?(ruby_method) \
109
109
  .should == true
@@ -123,7 +123,7 @@ end
123
123
 
124
124
  defs = build_definitions(code)
125
125
 
126
- defs.lookup(:constant, 'Second') \
126
+ defs.lookup(:const, 'Second') \
127
127
  .lookup(:method, 'example') \
128
128
  .is_a?(ruby_method) \
129
129
  .should == true
@@ -145,7 +145,7 @@ end
145
145
 
146
146
  defs = build_definitions(code)
147
147
 
148
- defs.lookup(:constant, 'Third') \
148
+ defs.lookup(:const, 'Third') \
149
149
  .lookup(:instance_method, 'example') \
150
150
  .is_a?(ruby_method) \
151
151
  .should == true
@@ -166,7 +166,7 @@ end
166
166
 
167
167
  defs = build_definitions(code)
168
168
 
169
- defs.lookup(:constant, 'Second') \
169
+ defs.lookup(:const, 'Second') \
170
170
  .lookup(:instance_method, 'example') \
171
171
  .is_a?(ruby_method) \
172
172
  .should == true
@@ -0,0 +1,33 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'reference counting' do
5
+ should 'count the amount of references for a variable' do
6
+ code = <<-CODE
7
+ number = 10
8
+ number
9
+ number
10
+ CODE
11
+
12
+ defs = build_definitions(code)
13
+
14
+ defs.lookup(:lvar, 'number').reference_amount.should == 2
15
+ end
16
+
17
+ should 'count the amount of references for a constant path' do
18
+ code = <<-CODE
19
+ module A; end
20
+ A::B = 10
21
+ A::B
22
+ A::B
23
+ CODE
24
+
25
+ defs = build_definitions(code)
26
+
27
+ defs.lookup(:const, 'A') \
28
+ .lookup(:const, 'B') \
29
+ .reference_amount \
30
+ .should == 2
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'marking variables as used/unused' do
5
+ should 'mark variables as unused by default' do
6
+ defs = build_definitions('number = 10')
7
+
8
+ defs.lookup(:lvar, 'number').used?.should == false
9
+ end
10
+
11
+ should 'mark variables as used' do
12
+ defs = build_definitions('number = 10; number')
13
+
14
+ defs.lookup(:lvar, 'number').used?.should == true
15
+ end
16
+ end
17
+ end
@@ -15,19 +15,19 @@ end
15
15
 
16
16
  # Show performance related information after running the tests.
17
17
  module Bacon
18
- class << self
19
- alias old_handle_summary handle_summary
20
- end
18
+ module ColoredOutput
19
+ alias_method :old_handle_summary, :handle_summary
21
20
 
22
- def self.handle_summary
23
- old_handle_summary
21
+ def handle_summary
22
+ old_handle_summary
24
23
 
25
- memory = `ps -o rss= #{Process.pid}`.strip.to_f
26
- memory_mb = (memory / 1024)
27
- time_secs = (Time.now - @timer)
28
- time_ms = time_secs * 1000
24
+ memory = `ps -o rss= #{Process.pid}`.strip.to_f
25
+ memory_mb = (memory / 1024)
26
+ time_secs = (Time.now - @timer)
27
+ time_ms = time_secs * 1000
29
28
 
30
- puts '%i KB (%.2f MB) used in %.2f miliseconds (%.2f seconds)' \
31
- % [memory, memory_mb, time_ms, time_secs]
32
- end
33
- end
29
+ puts '%i KB (%.2f MB) used in %.2f miliseconds (%.2f seconds)' \
30
+ % [memory, memory_mb, time_ms, time_secs]
31
+ end
32
+ end # TestUnitOutput
33
+ end # Bacon
@@ -5,14 +5,12 @@
5
5
  # @return [RubyLint::Definition::RubyObject]
6
6
  #
7
7
  def build_definitions(code)
8
- loader = RubyLint::ConstantLoader.new
9
- iterator = RubyLint::DefinitionsBuilder.new
10
- ast = parse(code, false)
8
+ ast = parse(code, false)
9
+ vm = RubyLint::VirtualMachine.new
11
10
 
12
- loader.iterate(ast)
13
- iterator.iterate(ast)
11
+ vm.run(ast)
14
12
 
15
- return iterator.options[:definitions]
13
+ return vm.definitions
16
14
  end
17
15
 
18
16
  ##
@@ -23,21 +21,30 @@ end
23
21
  # @return [RubyLint::Report]
24
22
  #
25
23
  def build_report(code, iterator)
26
- ast = parse(code, false)
27
- defs_builder = RubyLint::DefinitionsBuilder.new
28
- loader = RubyLint::ConstantLoader.new
24
+ ast = parse(code, false)
25
+ vm = RubyLint::VirtualMachine.new
29
26
 
30
- loader.iterate(ast)
31
- defs_builder.iterate(ast)
27
+ vm.run(ast)
32
28
 
33
29
  report = RubyLint::Report.new
34
- iterator = iterator.new(
35
- :report => report,
36
- :definitions => defs_builder.options[:definitions],
37
- :node_definitions => defs_builder.options[:node_definitions]
38
- )
30
+ iterator = iterator.new(:report => report, :vm => vm)
39
31
 
40
32
  iterator.iterate(ast)
41
33
 
42
34
  return report
43
35
  end
36
+
37
+ ##
38
+ # Processes the given AST and returns the node associations.
39
+ #
40
+ # @see build_definitions
41
+ # @return [Hash]
42
+ #
43
+ def build_associations(code)
44
+ ast = parse(code, false)
45
+ vm = RubyLint::VirtualMachine.new
46
+
47
+ vm.run(ast)
48
+
49
+ return vm.associations
50
+ end
@@ -0,0 +1,5 @@
1
+ require 'coveralls'
2
+
3
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
4
+
5
+ Coveralls.wear!
@@ -0,0 +1,20 @@
1
+ ##
2
+ # Returns the source code of a fixture file.
3
+ #
4
+ # @param [String] path The path to the fixture file, relative to the fixture
5
+ # directory
6
+ # @return [String]
7
+ #
8
+ def fixture(path)
9
+ return File.read(fixture_path(path))
10
+ end
11
+
12
+ ##
13
+ # Returns the path to the given fixture file.
14
+ #
15
+ # @param [String] path The path relative to the fixtures directory.
16
+ # @return [String]
17
+ #
18
+ def fixture_path(path)
19
+ return File.join(File.expand_path('../../fixtures', __FILE__), path)
20
+ end
@@ -8,16 +8,14 @@
8
8
  # @return [RubyLint::Node]
9
9
  #
10
10
  def parse(code, first = true)
11
- ast = RubyLint::Parser.new(code).parse
11
+ ast = RubyLint::Parser.new.parse(code)
12
12
 
13
13
  return first ? ast.children[0] : ast
14
14
  end
15
15
 
16
16
  ##
17
- # Shorthand for creating instances of {RubyLint::Node}.
18
- #
19
- # @see RubyLint::Node#initialize
17
+ # Shorthand for creating instances of a AST node.
20
18
  #
21
19
  def s(type, *children)
22
- return RubyLint::Node.new(type, children)
20
+ return RubyLint::AST::Node.new(type, children)
23
21
  end
@@ -5,12 +5,14 @@ SimpleCov.configure do
5
5
  command_name 'bacon'
6
6
  project_name 'ruby-lint'
7
7
 
8
- add_group 'Analysis' , 'ruby-lint/analyze'
9
- add_group 'Definitions', 'ruby-lint/definition'
10
- add_group 'Formatters' , 'ruby-lint/formatter'
8
+ add_group 'Analysis', 'ruby-lint/analysis'
9
+ add_group 'Definition Containers', 'ruby-lint/definition'
10
+ add_group 'Definition Builders', 'ruby-lint/definition_builder'
11
+ add_group 'Presenters', 'ruby-lint/presenter'
11
12
 
12
13
  add_filter 'spec'
13
14
  add_filter 'lib/ruby-lint/version'
15
+ add_filter 'lib/ruby-lint/definitions'
14
16
  end
15
17
 
16
18
  SimpleCov.start
data/task/build.rake CHANGED
@@ -1,5 +1,5 @@
1
1
  desc 'Builds and signs a new Gem'
2
- task :build => [:gem] do
2
+ task :signed_build => [:build] do
3
3
  name = "#{GEMSPEC.name}-#{GEMSPEC.version}.gem"
4
4
  path = File.join(File.expand_path('../../pkg', __FILE__), name)
5
5
 
data/task/cop.rake ADDED
@@ -0,0 +1,11 @@
1
+ desc 'Runs rubocop on lib/'
2
+ task :cop do
3
+ if `which rubocop 2>&1` =~ /no rubocop in/
4
+ abort <<-EOF.strip
5
+ Rubocop is not installed, install it by running `gem insatll rubocop`.
6
+ Make sure that you install version 0.9.0 or newer.
7
+ EOF
8
+ end
9
+
10
+ sh 'rubocop lib/'
11
+ end
data/task/generate.rake CHANGED
@@ -1,13 +1,13 @@
1
1
  namespace :generate do
2
2
  desc 'Generates a set of definitions for a constant'
3
- task :definitions, :constant, :directory do |task, args|
3
+ task :definitions, :constant, :directory, :overwrite do |task, args|
4
4
  abort 'You have to specify a constant' unless args[:constant]
5
5
  abort 'You have to specify a directory' unless args[:directory]
6
6
 
7
7
  generator = RubyLint::DefinitionGenerator.new(
8
8
  args[:constant],
9
9
  args[:directory],
10
- :overwrite => true
10
+ :overwrite => !!args[:overwrite]
11
11
  )
12
12
 
13
13
  generator.generate
@@ -31,4 +31,42 @@ namespace :generate do
31
31
 
32
32
  generator.generate
33
33
  end
34
+
35
+ desc 'Generates definitions for Rails'
36
+ task :rails do
37
+ require 'mail'
38
+ require 'rails/all'
39
+
40
+ dir = File.expand_path('../../lib/ruby-lint/definitions/rails', __FILE__)
41
+
42
+ constants = [
43
+ 'AbstractController',
44
+ 'ActionController',
45
+ 'ActionDispatch',
46
+ 'ActionMailer',
47
+ 'ActionPack',
48
+ 'ActionView',
49
+ 'ActiveModel',
50
+ 'ActiveRecord',
51
+ 'ActiveSupport',
52
+ 'Arel',
53
+ 'Rails',
54
+ 'Sprockets',
55
+ ]
56
+
57
+ constants.each do |name|
58
+ constant = Object.const_get(name)
59
+
60
+ # Deal with Rails' autoloading nonsense.
61
+ if constant.respond_to?(:eager_load!)
62
+ constant.eager_load!
63
+ end
64
+
65
+ Rake::Task['generate:definitions'].execute(
66
+ :constant => name,
67
+ :directory => dir,
68
+ :overwrite => true
69
+ )
70
+ end
71
+ end
34
72
  end
data/task/profile.rake ADDED
@@ -0,0 +1,27 @@
1
+ namespace :profile do
2
+ desc 'Runs debug/profile.rb'
3
+ task :profile do
4
+ sh 'ruby debug/profile.rb 2>&1 | less -R -S'
5
+ end
6
+
7
+ desc 'Profiles memory usage'
8
+ task :memory do
9
+ ENV['RUBY_PROF_MEASURE_MODE'] = 'memory'
10
+
11
+ Rake::Task['profile:profile'].invoke
12
+ end
13
+
14
+ desc 'Profiles object allocations'
15
+ task :allocations do
16
+ ENV['RUBY_PROF_MEASURE_MODE'] = 'allocations'
17
+
18
+ Rake::Task['profile:profile'].invoke
19
+ end
20
+
21
+ desc 'Profiles process time'
22
+ task :process do
23
+ ENV['RUBY_PROF_MEASURE_MODE'] = 'process'
24
+
25
+ Rake::Task['profile:profile'].invoke
26
+ end
27
+ end
data/task/todo.rake ADDED
@@ -0,0 +1,6 @@
1
+ desc 'Extracts TODO tags and the likes'
2
+ task :todo do
3
+ regex = %w{NOTE: FIXME: TODO: THINK: @todo}.join('|')
4
+
5
+ sh "ack '#{regex}' lib"
6
+ end
data/task/travis.rake ADDED
@@ -0,0 +1,7 @@
1
+ desc 'Runs tests on Travis CI'
2
+ task :travis do
3
+ ENV['COVERALLS'] = '1'
4
+ ENV['COVERAGE'] = '1'
5
+
6
+ Rake::Task['test'].invoke
7
+ end