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
@@ -1,33 +0,0 @@
1
- module RubyLint
2
- module Helper
3
- ##
4
- # The Conversion helper can be used to easily convert {RubyLint::Node}
5
- # instances into specific definition objects.
6
- #
7
- module Conversion
8
- ##
9
- # Returns a {RubyLint::Definition::RubyObject} instance that represents
10
- # an instance of the Node's corresponding Ruby class.
11
- #
12
- # @param [RubyLint::Node] node
13
- # @return [RubyLint::Definition::RubyObject]
14
- #
15
- def instance_for_ruby_type(node)
16
- return unless node.ruby_class
17
-
18
- definition = nil
19
- class_def = RubyLint.global_constant(node.ruby_class)
20
-
21
- if class_def
22
- definition = Definition::RubyObject.new_from_node(
23
- node,
24
- :instance_type => :instance,
25
- :parents => [class_def]
26
- )
27
- end
28
-
29
- return definition
30
- end
31
- end # Conversion
32
- end # Helper
33
- end # RubyLint
@@ -1,98 +0,0 @@
1
- module RubyLint
2
- module Helper
3
- ##
4
- # {RubyLint::Helper::CurrentScope} is a helper module that makes it easier
5
- # to retrieve the current scope in callback methods. Instead of having to
6
- # manually retrieve the scope to use based on the current node all you have
7
- # to do is include this module and call `current_scope`.
8
- #
9
- # ## Inheritance
10
- #
11
- # Due to this module defining a few common callback methods such as
12
- # `on_class` you should **always** call `super` if you override these
13
- # methods in a class. For example, this will prevent the helper from
14
- # working properly:
15
- #
16
- # class MyIterator < RubyLint::Iterator
17
- # include RubyLint::Helper::CurrentScope
18
- #
19
- # def on_class(node)
20
- # # ...
21
- # end
22
- # end
23
- #
24
- # This however will not:
25
- #
26
- # class MyIterator < RubyLint::Iterator
27
- # include RubyLint::Helper::CurrentScope
28
- #
29
- # def on_class(node)
30
- # super
31
- #
32
- # # ...
33
- # end
34
- # end
35
- #
36
- module CurrentScope
37
- ##
38
- # @see RubyLint::Iterator#initialize
39
- #
40
- def initialize(*args)
41
- super
42
-
43
- @scopes = []
44
- end
45
-
46
- ##
47
- # Array containing the callback names for which a new scope should be
48
- # created.
49
- #
50
- # @return [Array<Symbol>]
51
- #
52
- SCOPES = [
53
- :block,
54
- :class,
55
- :method_definition,
56
- :module,
57
- :root,
58
- :sclass
59
- ]
60
-
61
- SCOPES.each do |type|
62
- define_method("on_#{type}") do |node|
63
- set_current_scope(node)
64
- end
65
-
66
- define_method("after_#{type}") do |node|
67
- set_previous_scope
68
- end
69
- end
70
-
71
- ##
72
- # Returns the current scope.
73
- #
74
- # @return [RubyLint::Definition::RubyObject]
75
- #
76
- def current_scope
77
- return @scopes[-1]
78
- end
79
-
80
- ##
81
- # Sets the current scope to the definition associated with the given
82
- # node.
83
- #
84
- # @param [RubyLint::Node] node
85
- #
86
- def set_current_scope(node)
87
- @scopes << associated_definition(node)
88
- end
89
-
90
- ##
91
- # Sets the current scope back to the previous one.
92
- #
93
- def set_previous_scope
94
- @scopes.pop
95
- end
96
- end # CurrentScope
97
- end # Helper
98
- end # RubyLint
@@ -1,91 +0,0 @@
1
- module RubyLint
2
- module Helper
3
- ##
4
- # Helper module that provides various methods for looking up methods,
5
- # checking if they exist, etc.
6
- #
7
- module Methods
8
- include CurrentScope
9
- include Conversion
10
-
11
- ##
12
- # Checks if the method for the given node is defined or not.
13
- #
14
- # @param [RubyLint::Node] node
15
- # @return [TrueClass|FalseClass]
16
- #
17
- def method_defined?(node)
18
- scope = method_scope(node)
19
-
20
- if scope
21
- return scope.has_definition?(scope.method_call_type, node.name)
22
- else
23
- return false
24
- end
25
- end
26
-
27
- ##
28
- # Returns a boolean that indicates if the receiver is valid or not.
29
- #
30
- # @param [RubyLint::Node] node
31
- # @return [TrueClass|FalseClass]
32
- #
33
- def invalid_receiver?(node)
34
- invalid = false
35
-
36
- if node.receiver
37
- receiver = method_receiver(node.receiver)
38
- invalid = !receiver || (receiver.variable? && receiver.value.nil?)
39
- end
40
-
41
- return invalid
42
- end
43
-
44
- ##
45
- # Looks up the method definition for the specified method call.
46
- #
47
- # @param [RubyLint::Node] node
48
- # @return [RubyLint::Definition::RubyMethod]
49
- #
50
- def lookup_method(node)
51
- scope = method_scope(node)
52
-
53
- return scope.lookup(scope.method_call_type, node.name)
54
- end
55
-
56
- ##
57
- # Determines the scope to use for a method call.
58
- #
59
- # @param [RubyLint::Node] node
60
- # @return [RubyLint::Definition::RubyObject]
61
- #
62
- def method_scope(node)
63
- scope = node.receiver ? method_receiver(node.receiver) : current_scope
64
-
65
- return scope.variable? && scope.value ? scope.value : scope
66
- end
67
-
68
- ##
69
- # Tries to determine the receiver definition of a method call.
70
- #
71
- # @param [RubyLint::Node|Array] receiver
72
- # @return [RubyLint::Definition::RubyObject]
73
- #
74
- def method_receiver(receiver)
75
- receiver = receiver.is_a?(Array) ? receiver[0] : receiver
76
- scope = instance_for_ruby_type(receiver)
77
-
78
- if !scope
79
- scope = current_scope.lookup(receiver.type, receiver.name)
80
- end
81
-
82
- # Last resort, try to load the receiver as a global constant.
83
- if !scope and receiver.constant?
84
- scope = RubyLint.global_constant(receiver.name)
85
- end
86
-
87
- return scope
88
- end
89
- end # Methods
90
- end # Helper
91
- end # RubyLint
@@ -1,107 +0,0 @@
1
- module RubyLint
2
- ##
3
- # {RubyLint::Node} is a class that represents a single node in the AST of a
4
- # Ruby program. It contains information such as the type, children, line
5
- # number and column number.
6
- #
7
- class Node < AST::Node
8
- include VariablePredicates
9
-
10
- ##
11
- # Returns the line number of the node.
12
- #
13
- # @return [Fixnum]
14
- #
15
- attr_reader :line
16
-
17
- ##
18
- # Returns the column number of the node.
19
- #
20
- # @return [Fixnum]
21
- #
22
- attr_reader :column
23
-
24
- ##
25
- # Returns the name of the file that the node belongs to.
26
- #
27
- # @return [String]
28
- #
29
- attr_reader :file
30
-
31
- ##
32
- # @return [String]
33
- #
34
- def name
35
- name = children[0] || type
36
- name = name.is_a?(Node) ? name.children[0] : name
37
-
38
- return name.to_s
39
- end
40
-
41
- ##
42
- # @return [Mixed]
43
- #
44
- def value
45
- value = collection? ? children : children[-1]
46
- value = children[1] if variable?
47
-
48
- return value
49
- end
50
-
51
- ##
52
- # Returns the receiver of the method call/definition.
53
- #
54
- # @return [RubyLint::Node]
55
- #
56
- def receiver
57
- return method? ? children[-1] : children[-2]
58
- end
59
-
60
- ##
61
- # Returns a symbol that indicates if a node is either a method or instance
62
- # method.
63
- #
64
- # @return [Symbol]
65
- #
66
- def method_type
67
- return receiver ? :method : :instance_method
68
- end
69
-
70
- ##
71
- # Gathers a set of arguments and returns them as an Array.
72
- #
73
- # @param [#to_sym] type The type of arguments to gather.
74
- # @return [Array]
75
- #
76
- def gather_arguments(type = :argument)
77
- args = []
78
- type = type.to_sym
79
-
80
- children.each do |child|
81
- if !child.is_a?(Node) or child.type != :arguments
82
- next
83
- end
84
-
85
- child.children.each do |child_arg|
86
- next unless child_arg.type == type
87
-
88
- args << child_arg.children[0]
89
- end
90
- end
91
-
92
- return args
93
- end
94
-
95
- ##
96
- # Iterates over each argument of the given type.
97
- #
98
- # @param [Symbol] type The argument type.
99
- # @yieldparam [RubyLint::Node] argument
100
- #
101
- def each_argument(type = :argument)
102
- gather_arguments(type).each do |arg|
103
- yield arg
104
- end
105
- end
106
- end # Node
107
- end # RubyLint
@@ -1,30 +0,0 @@
1
- module RubyLint
2
- ##
3
- # Exception class that's raised when the parser {RubyLint::Parser} detects
4
- # syntax errors.
5
- #
6
- # @!attribute [r] line
7
- # @return [Numeric]
8
- # @!attribute [r] column
9
- # @return [Numeric]
10
- # @!attribute [r] file
11
- # @return [String]
12
- #
13
- class ParserError < SyntaxError
14
- attr_reader :line, :column, :file
15
-
16
- ##
17
- # @param [String] message
18
- # @param [Numeric] line
19
- # @param [Numeric] column
20
- # @param [String] file
21
- #
22
- def initialize(message, line, column, file)
23
- @line = line
24
- @column = column
25
- @file = file
26
-
27
- super(message)
28
- end
29
- end # ParserError
30
- end # RubyLint
@@ -1,32 +0,0 @@
1
- require File.expand_path('../../helper', __FILE__)
2
-
3
- describe RubyLint::ConstantLoader do
4
- after do
5
- RubyLint.global_scope.definitions[:constant].delete('ERB')
6
- end
7
-
8
- should 'lazy load using a constant' do
9
- constant = 'ERB'
10
- ast = parse(constant)
11
- iterator = RubyLint::ConstantLoader.new
12
-
13
- RubyLint.global_scope.lookup(:constant, constant).nil?.should == true
14
-
15
- iterator.iterate(ast)
16
-
17
- RubyLint.global_scope.lookup(:constant, constant).nil?.should == false
18
- end
19
-
20
- should 'lazy load using a constant path' do
21
- constant = 'Enumerable'
22
- ast = parse('Enumerable::Enumerator')
23
- iterator = RubyLint::ConstantLoader.new
24
-
25
- RubyLint.global_scope.lookup(:constant, constant).nil?.should == true
26
-
27
- iterator.iterate(ast)
28
-
29
- RubyLint.global_scope.lookup(:constant, constant).nil?.should == false
30
- RubyLint.global_scope.lookup(:constant, 'Enumerator').nil?.should == true
31
- end
32
- end
@@ -1,26 +0,0 @@
1
- require File.expand_path('../../../helper', __FILE__)
2
-
3
- describe 'Evaluating method calls on RubyObject instances' do
4
- before do
5
- @object = ruby_object.new(
6
- :name => 'String',
7
- :type => :constant,
8
- :instance_type => :instance
9
- )
10
-
11
- @method = ruby_method.new(
12
- :name => 'gsub',
13
- :type => :instance_method,
14
- :return_value => proc { |object| object.instance }
15
- )
16
-
17
- @object.add(@method.type, @method.name, @method)
18
- end
19
-
20
- should 'return a instance when evaluating a method call' do
21
- value = @object.call(@method.name)
22
-
23
- value.name.should == @object.name
24
- value.type.should == @object.type
25
- end
26
- end
@@ -1,71 +0,0 @@
1
- require File.expand_path('../../../../helper', __FILE__)
2
-
3
- describe 'Building variable definitions' do
4
- should 'assign arrays as instances' do
5
- defs = build_definitions('numbers = []')
6
- value = defs.lookup(:local_variable, 'numbers').value
7
-
8
- value.instance?.should == true
9
-
10
- value.has_definition?(:instance_method, 'each').should == true
11
- end
12
-
13
- describe 'array index assignments' do
14
- should 'process single index assignments' do
15
- code = <<-CODE
16
- numbers = []
17
- numbers[0] = 10
18
- CODE
19
-
20
- defs = build_definitions(code)
21
- numbers = defs.lookup(:local_variable, 'numbers')
22
-
23
- numbers.is_a?(ruby_object).should == true
24
- numbers.value.is_a?(ruby_object).should == true
25
- numbers.value.type.should == :array
26
-
27
- first = numbers.lookup(:member, 0)
28
-
29
- first.is_a?(ruby_object).should == true
30
- first.type.should == :integer
31
-
32
- first.value.is_a?(ruby_object).should == true
33
- first.value.type.should == :integer
34
- first.value.value.should == '10'
35
- end
36
-
37
- should 'process multiple index assignments' do
38
- code = <<-CODE
39
- numbers = []
40
- numbers[0,1] = 10
41
- numbers[2,3] = 20, 30
42
- numbers[4,5,6] = 40, 50
43
- CODE
44
-
45
- defs = build_definitions(code)
46
- numbers = defs.lookup(:local_variable, 'numbers')
47
-
48
- numbers.lookup(:member, '0').value.value.should == '10'
49
- numbers.lookup(:member, '1').value.should == nil
50
- numbers.lookup(:member, '2').value.value.should == '20'
51
- numbers.lookup(:member, '3').value.value.should == '30'
52
- numbers.lookup(:member, '4').value.value.should == '40'
53
- numbers.lookup(:member, '5').value.value.should == '50'
54
- numbers.lookup(:member, '6').value.should == nil
55
- end
56
-
57
- should 'process index assignments using variables' do
58
- code = <<-CODE
59
- index = 1
60
- numbers = [10]
61
- numbers[index] = 20
62
- CODE
63
-
64
- defs = build_definitions(code)
65
- numbers = defs.lookup(:local_variable, 'numbers')
66
-
67
- numbers.lookup(:member, '0').value.value.should == '10'
68
- numbers.lookup(:member, '1').value.value.should == '20'
69
- end
70
- end
71
- end