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
@@ -3,12 +3,12 @@ require File.expand_path('../../../helper', __FILE__)
3
3
  describe ruby_object do
4
4
  before do
5
5
  value = ruby_object.new(
6
- :type => :integer,
6
+ :type => :int,
7
7
  :value => '10'
8
8
  )
9
9
 
10
10
  @object = ruby_object.new(
11
- :type => :local_variable,
11
+ :type => :lvar,
12
12
  :name => 'hello',
13
13
  :value => value
14
14
  )
@@ -19,7 +19,7 @@ describe ruby_object do
19
19
  end
20
20
 
21
21
  should 'return the object type' do
22
- @object.type.should == :local_variable
22
+ @object.type.should == :lvar
23
23
  end
24
24
 
25
25
  should 'return the value of the node' do
@@ -28,59 +28,63 @@ describe ruby_object do
28
28
 
29
29
  should 'only store RubyObject objects' do
30
30
  obj = ruby_object.new(
31
- :type => :local_variable,
31
+ :type => :lvar,
32
32
  :name => 'foo'
33
33
  )
34
34
 
35
35
  should.raise?(TypeError) do
36
- @object.add(:local_variable, 'foo', 10)
36
+ @object.add(:lvar, 'foo', 10)
37
37
  end
38
38
 
39
39
  should.not.raise?(TypeError) do
40
- @object.add(:local_variable, 'foo', obj)
40
+ @object.add(:lvar, 'foo', obj)
41
41
  end
42
42
  end
43
43
 
44
- should 'store a variable' do
45
- var = ruby_object.new(
46
- :type => :local_variable,
47
- :name => 'number'
48
- )
44
+ should 'only add valid collection types' do
45
+ obj = ruby_object.new(:name => 'Foo', :type => :test)
49
46
 
50
- @object.add(:local_variable, var.name, var)
47
+ should.raise?(ArgumentError) do
48
+ @object.add_definition(obj)
49
+ end
50
+ end
51
51
 
52
- found = @object.lookup(:local_variable, var.name)
52
+ should 'look up a constant path' do
53
+ first = ruby_object.new(:name => 'A', :type => :const)
54
+ second = ruby_object.new(:name => 'B', :type => :const)
55
+ third = ruby_object.new(:name => 'C', :type => :const)
53
56
 
54
- found.is_a?(ruby_object).should == true
57
+ second.add_definition(third)
58
+ first.add_definition(second)
55
59
 
56
- found.name.should == 'number'
57
- found.type.should == :local_variable
60
+ first.lookup_constant_path('B::C').should == third
58
61
  end
59
62
 
60
- should 'clear all the definitions' do
63
+ should 'store a variable' do
61
64
  var = ruby_object.new(
62
- :type => :local_variable,
65
+ :type => :lvar,
63
66
  :name => 'number'
64
67
  )
65
68
 
66
- @object.add(:local_variable, var.name, var)
69
+ @object.add(:lvar, var.name, var)
67
70
 
68
- @object.lookup(:local_variable, var.name).nil?.should == false
71
+ found = @object.lookup(:lvar, var.name)
69
72
 
70
- @object.clear!
73
+ found.is_a?(ruby_object).should == true
71
74
 
72
- @object.lookup(:local_variable, var.name).nil?.should == true
75
+ found.name.should == 'number'
76
+ found.type.should == :lvar
73
77
  end
74
78
 
75
79
  should 'set the parent definitions' do
76
80
  var1 = ruby_object.new(
77
- :type => :local_variable,
81
+ :type => :lvar,
78
82
  :name => 'numberx',
79
83
  :value => '10'
80
84
  )
81
85
 
82
86
  var2 = ruby_object.new(
83
- :type => :local_variable,
87
+ :type => :lvar,
84
88
  :name => 'number',
85
89
  :value => '10',
86
90
  :parents => [var1]
@@ -91,7 +95,7 @@ describe ruby_object do
91
95
 
92
96
  should 'retrieve parent definitions' do
93
97
  method = ruby_object.new(
94
- :type => :local_variable,
98
+ :type => :lvar,
95
99
  :name => 'example'
96
100
  )
97
101
 
@@ -110,74 +114,8 @@ describe ruby_object do
110
114
  found.name.should == 'example'
111
115
  end
112
116
 
113
- describe 'creating definitions from RubyLint::Node instances' do
114
- should 'create a definition for a string' do
115
- object = ruby_object.new_from_node(
116
- s(:string, 'hello')
117
- )
118
-
119
- object.type.should == :string
120
- object.value.should == 'hello'
121
- end
122
-
123
- should 'create a definition for a variable with a value' do
124
- object = ruby_object.new_from_node(
125
- s(:local_variable, 'number'),
126
- :value => s(:integer, '10')
127
- )
128
-
129
- object.type.should == :local_variable
130
- object.name.should == 'number'
131
-
132
- object.value.type.should == :integer
133
- object.value.value.should == '10'
134
- end
135
-
136
- should 'create a definition for a constant path' do
137
- var = ruby_object.new_from_node(
138
- s(
139
- :constant_path,
140
- s(:constant, 'First'),
141
- s(:constant, 'Second'),
142
- s(:constant, 'Third')
143
- )
144
- )
145
-
146
- var.type.should == :constant
147
- var.name.should == 'Third'
148
-
149
- var.receiver.name.should == 'Second'
150
- var.receiver.type.should == :constant
151
-
152
- var.receiver.receiver.name.should == 'First'
153
- var.receiver.receiver.type.should == :constant
154
- end
155
- end
156
-
157
- should 'return multiple values for a collection' do
158
- variable = s(:local_variable, 'numbers')
159
- numbers = s(:array, s(:integer, '10'), s(:integer, '20'))
160
- object = ruby_object.new_from_node(
161
- variable,
162
- :value => numbers
163
- )
164
-
165
- object.value.type.should == :array
166
-
167
- object.value.value.is_a?(Array).should == true
168
- object.value.value.length.should == 2
169
-
170
- values = object.value.value
171
-
172
- values[0].is_a?(ruby_object).should == true
173
- values[1].is_a?(ruby_object).should == true
174
-
175
- values[0].value.should == '10'
176
- values[1].value.should == '20'
177
- end
178
-
179
117
  should 'create a RubyObject that represents an instance' do
180
- object = ruby_object.new(:type => :constant, :name => 'String')
118
+ object = ruby_object.new(:type => :const, :name => 'String')
181
119
 
182
120
  object.instance_type.should == :class
183
121
 
@@ -190,19 +128,19 @@ describe ruby_object do
190
128
 
191
129
  should 'add data to a parent definition' do
192
130
  initial = ruby_object.new(
193
- :type => :local_variable,
131
+ :type => :lvar,
194
132
  :name => 'test',
195
133
  :value => '10'
196
134
  )
197
135
 
198
136
  copy = ruby_object.new(
199
- :type => :local_variable,
137
+ :type => :lvar,
200
138
  :name => 'test',
201
139
  :value => '20'
202
140
  )
203
141
 
204
142
  child_only = ruby_object.new(
205
- :type => :local_variable,
143
+ :type => :lvar,
206
144
  :name => 'child_only',
207
145
  :value => '30'
208
146
  )
@@ -210,7 +148,7 @@ describe ruby_object do
210
148
  parent = ruby_object.new(:name => 'parent')
211
149
  child = ruby_object.new(
212
150
  :name => 'child',
213
- :update_parents => [:local_variable],
151
+ :update_parents => [:lvar],
214
152
  :parents => [parent]
215
153
  )
216
154
 
@@ -225,4 +163,30 @@ describe ruby_object do
225
163
 
226
164
  parent.lookup(child_only.type, child_only.name).nil?.should == true
227
165
  end
166
+
167
+ should 'return the members as the definition value' do
168
+ array = ruby_object.new(:type => :array, :members_as_value => true)
169
+ values = [10, 20]
170
+
171
+ values.each_with_index do |value, index|
172
+ value = ruby_object.new(:type => :int, :value => value)
173
+ member = ruby_object.new(
174
+ :type => :member,
175
+ :name => index.to_s,
176
+ :value => value
177
+ )
178
+
179
+ array.add(member.type, member.name, member)
180
+ end
181
+
182
+ array.value.is_a?(Array).should == true
183
+ array.value.length.should == 2
184
+
185
+ values.each_with_index do |value, index|
186
+ array.value[index].name.should == index.to_s
187
+
188
+ array.value[index].value.type.should == :int
189
+ array.value[index].value.value.should == value
190
+ end
191
+ end
228
192
  end
@@ -0,0 +1,62 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::DefinitionBuilder::Primitive do
4
+ before do
5
+ @root = ruby_object.new(:name => 'root')
6
+ end
7
+
8
+ should 'build an integer definition' do
9
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:int, 10), @root)
10
+ built = builder.build
11
+
12
+ built.type.should == :int
13
+ built.value.should == 10
14
+ end
15
+
16
+ should 'build a float definition' do
17
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:float, 10.0), @root)
18
+ built = builder.build
19
+
20
+ built.type.should == :float
21
+ built.value.should == 10.0
22
+ end
23
+
24
+ should 'build a string definition' do
25
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:str, 'a'), @root)
26
+ built = builder.build
27
+
28
+ built.type.should == :str
29
+ built.value.should == 'a'
30
+ end
31
+
32
+ should 'build a symbol definition' do
33
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:sym, :a), @root)
34
+ built = builder.build
35
+
36
+ built.type.should == :sym
37
+ built.value.should == :a
38
+ end
39
+
40
+ should 'build primitives as instances by default' do
41
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:int, 10), @root)
42
+
43
+ builder.build.instance?.should == true
44
+ end
45
+
46
+ should 'allow custom options to be defined' do
47
+ builder = RubyLint::DefinitionBuilder::Primitive.new(
48
+ s(:int, 10),
49
+ @root,
50
+ :instance_type => :class
51
+ )
52
+
53
+ builder.build.class?.should == true
54
+ end
55
+
56
+ should 'include the definitions of the corresponding Ruby class' do
57
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:int, 10), @root)
58
+ built = builder.build
59
+
60
+ built.lookup(:instance_method, 'to_s').is_a?(ruby_object).should == true
61
+ end
62
+ end
@@ -0,0 +1,108 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::DefinitionBuilder::RubyClass do
4
+ describe 'using an implicit parent class' do
5
+ before do
6
+ node = s(:class, s(:const, nil, :A), nil, s(:nil))
7
+ @root = ruby_object.new(:name => 'root')
8
+ @builder = RubyLint::DefinitionBuilder::RubyClass.new(node, @root)
9
+ end
10
+
11
+ should 'return the name of the class' do
12
+ @builder.build.name.should == 'A'
13
+ end
14
+
15
+ should 'return the type of the class' do
16
+ @builder.build.type.should == :const
17
+ end
18
+
19
+ should 'return the parent definitions' do
20
+ built = @builder.build
21
+
22
+ built.parents.length.should == 2
23
+
24
+ built.parents[0].name.should == 'Object'
25
+ built.parents[1].name.should == 'root'
26
+ end
27
+
28
+ should 'return the reference amount' do
29
+ @builder.build.reference_amount.should == 1
30
+ end
31
+
32
+ should 'return the scope to define the class in' do
33
+ @builder.scope.should == @root
34
+ end
35
+ end
36
+
37
+ describe 'using an explicit parent class' do
38
+ before do
39
+ node = s(:class, s(:const, nil, :A), s(:const, nil, :B), s(:nil))
40
+ @root = ruby_object.new(:name => 'root')
41
+
42
+ @root.define_constant('B')
43
+
44
+ @builder = RubyLint::DefinitionBuilder::RubyClass.new(
45
+ node,
46
+ @root,
47
+ :parent => @root.lookup(:const, 'B')
48
+ )
49
+ end
50
+
51
+ should 'return the name of the class' do
52
+ @builder.build.name.should == 'A'
53
+ end
54
+
55
+ should 'return the parent definitions' do
56
+ built = @builder.build
57
+
58
+ built.parents.length.should == 2
59
+
60
+ built.parents[0].name.should == 'B'
61
+ built.parents[1].name.should == 'root'
62
+ end
63
+
64
+ should 'return the scope to define the class in' do
65
+ @builder.scope.should == @root
66
+ end
67
+ end
68
+
69
+ describe 'using constant paths' do
70
+ before do
71
+ node = s(
72
+ :class,
73
+ s(:const, s(:const, nil, :A), :B),
74
+ s(:const, s(:const, nil, :C), :D),
75
+ s(:nil)
76
+ )
77
+
78
+ @root = ruby_object.new(:name => 'root')
79
+
80
+ @root.define_constant('A')
81
+
82
+ d_const = @root.define_constant('C').define_constant('D')
83
+
84
+ @builder = RubyLint::DefinitionBuilder::RubyClass.new(
85
+ node,
86
+ @root,
87
+ :parent => d_const
88
+ )
89
+ end
90
+
91
+ should 'return the name of the class' do
92
+ @builder.build.name.should == 'B'
93
+ end
94
+
95
+ should 'return the parent definitions' do
96
+ built = @builder.build
97
+
98
+ built.parents.length.should == 2
99
+
100
+ built.parents[0].name.should == 'D'
101
+ built.parents[1].name.should == 'root'
102
+ end
103
+
104
+ should 'return the scope to define the class in' do
105
+ @builder.scope.should == @root.lookup(:const, 'A')
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,53 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe RubyLint::DefinitionBuilder::RubyMethod do
4
+ describe 'defining a method without a receiver' do
5
+ before do
6
+ node = s(:def, :example, s(:args), s(:nil))
7
+ @root = ruby_object.new(:name => 'root', :instance_type => :instance)
8
+ @builder = RubyLint::DefinitionBuilder::RubyMethod.new(node, @root)
9
+ end
10
+
11
+ should 'return the name of the method' do
12
+ @builder.build.name.should == 'example'
13
+ end
14
+
15
+ should 'return the type of the method' do
16
+ @builder.build.type.should == :instance_method
17
+ end
18
+
19
+ should 'return the parent definitions' do
20
+ @builder.build.parents.should == [@root]
21
+ end
22
+
23
+ should 'return the scope to define the method in' do
24
+ @builder.scope.should == @root
25
+ end
26
+ end
27
+
28
+ describe 'defining a method with a constant as a receiver' do
29
+ before do
30
+ node = s(:defs, s(:const, nil, :A), :example, s(:args), s(:nil))
31
+ @root = ruby_object.new(:name => 'root', :instance_type => :instance)
32
+ a_const = @root.define_constant('A')
33
+
34
+ @builder = RubyLint::DefinitionBuilder::RubyMethod.new(
35
+ node,
36
+ @root,
37
+ :receiver => a_const
38
+ )
39
+ end
40
+
41
+ should 'return the name of the method' do
42
+ @builder.build.name.should == 'example'
43
+ end
44
+
45
+ should 'return the parent definitions' do
46
+ @builder.build.parents.should == [@root.lookup(:const, 'A')]
47
+ end
48
+
49
+ should 'return the scope to define the method in' do
50
+ @builder.scope.should == @root.lookup(:const, 'A')
51
+ end
52
+ end
53
+ end