ruby-lint 1.0.3 → 1.1.0

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 (341) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +2 -5
  4. data/Gemfile +9 -4
  5. data/MANIFEST +32 -28
  6. data/README.md +18 -5
  7. data/Rakefile +7 -3
  8. data/checksum/ruby-lint-1.0.2.gem.sha512 +1 -0
  9. data/checksum/ruby-lint-1.0.3.gem.sha512 +1 -0
  10. data/doc/changelog.md +40 -0
  11. data/doc/definitions.md +182 -0
  12. data/gen/rails/constants.txt +12 -0
  13. data/gen/rails/requires.rb +2 -0
  14. data/gen/stdlib/constants.rb +30 -0
  15. data/gen/stdlib/constants.txt +214 -0
  16. data/gen/stdlib/requires.rb +64 -0
  17. data/lib/ruby-lint.rb +7 -14
  18. data/lib/ruby-lint/analysis/undefined_methods.rb +8 -1
  19. data/lib/ruby-lint/analysis/useless_equality_checks.rb +92 -0
  20. data/lib/ruby-lint/cli.rb +1 -2
  21. data/lib/ruby-lint/cli/analyze.rb +55 -26
  22. data/lib/ruby-lint/cli/cache.rb +60 -0
  23. data/lib/ruby-lint/configuration.rb +10 -4
  24. data/lib/ruby-lint/constant_loader.rb +75 -22
  25. data/lib/ruby-lint/definition/constant_proxy.rb +51 -3
  26. data/lib/ruby-lint/definition/registry.rb +126 -0
  27. data/lib/ruby-lint/definition/ruby_method.rb +0 -11
  28. data/lib/ruby-lint/definition/ruby_object.rb +32 -24
  29. data/lib/ruby-lint/definition_builder/base.rb +9 -12
  30. data/lib/ruby-lint/definition_builder/primitive.rb +1 -1
  31. data/lib/ruby-lint/definition_builder/ruby_array.rb +1 -1
  32. data/lib/ruby-lint/definition_builder/ruby_block.rb +3 -3
  33. data/lib/ruby-lint/definition_builder/ruby_class.rb +2 -2
  34. data/lib/ruby-lint/definition_builder/ruby_hash.rb +1 -1
  35. data/lib/ruby-lint/definition_builder/ruby_method.rb +1 -1
  36. data/lib/ruby-lint/definition_builder/ruby_module.rb +4 -4
  37. data/lib/ruby-lint/definition_generator.rb +12 -2
  38. data/lib/ruby-lint/definitions/core/abbrev.rb +8 -11
  39. data/lib/ruby-lint/definitions/core/argf.rb +9 -7
  40. data/lib/ruby-lint/definitions/core/argument_error.rb +8 -10
  41. data/lib/ruby-lint/definitions/core/argv.rb +9 -9
  42. data/lib/ruby-lint/definitions/core/array.rb +296 -534
  43. data/lib/ruby-lint/definitions/core/base64.rb +22 -25
  44. data/lib/ruby-lint/definitions/core/basic_object.rb +30 -30
  45. data/lib/ruby-lint/definitions/core/basic_socket.rb +341 -455
  46. data/lib/ruby-lint/definitions/core/benchmark.rb +157 -24
  47. data/lib/ruby-lint/definitions/core/bignum.rb +110 -95
  48. data/lib/ruby-lint/definitions/core/binding.rb +38 -35
  49. data/lib/ruby-lint/definitions/core/cgi.rb +333 -49
  50. data/lib/ruby-lint/definitions/core/class.rb +16 -16
  51. data/lib/ruby-lint/definitions/core/common_headers.rb +4 -548
  52. data/lib/ruby-lint/definitions/core/common_libs.rb +4 -421
  53. data/lib/ruby-lint/definitions/core/comparable.rb +28 -29
  54. data/lib/ruby-lint/definitions/core/complex.rb +103 -141
  55. data/lib/ruby-lint/definitions/core/condition_variable.rb +14 -14
  56. data/lib/ruby-lint/definitions/core/config.rb +4 -318
  57. data/lib/ruby-lint/definitions/core/conftest_c.rb +4 -548
  58. data/lib/ruby-lint/definitions/core/coutflag.rb +4 -548
  59. data/lib/ruby-lint/definitions/core/csv.rb +729 -329
  60. data/lib/ruby-lint/definitions/core/data.rb +9 -8
  61. data/lib/ruby-lint/definitions/core/date.rb +452 -526
  62. data/lib/ruby-lint/definitions/core/date_time.rb +234 -303
  63. data/lib/ruby-lint/definitions/core/delegator.rb +57 -48
  64. data/lib/ruby-lint/definitions/core/digest.rb +94 -115
  65. data/lib/ruby-lint/definitions/core/dir.rb +89 -459
  66. data/lib/ruby-lint/definitions/core/drb.rb +531 -36
  67. data/lib/ruby-lint/definitions/core/drb_id_conv.rb +10 -19
  68. data/lib/ruby-lint/definitions/core/drb_object.rb +53 -58
  69. data/lib/ruby-lint/definitions/core/drb_undumped.rb +7 -10
  70. data/lib/ruby-lint/definitions/core/encoding.rb +1026 -1718
  71. data/lib/ruby-lint/definitions/core/encoding_error.rb +9 -8
  72. data/lib/ruby-lint/definitions/core/enumerable.rb +123 -292
  73. data/lib/ruby-lint/definitions/core/enumerator.rb +28 -26
  74. data/lib/ruby-lint/definitions/core/env.rb +8 -9
  75. data/lib/ruby-lint/definitions/core/eoferror.rb +9 -8
  76. data/lib/ruby-lint/definitions/core/erb.rb +201 -226
  77. data/lib/ruby-lint/definitions/core/errno.rb +1593 -2917
  78. data/lib/ruby-lint/definitions/core/etc.rb +86 -107
  79. data/lib/ruby-lint/definitions/core/exception.rb +70 -50
  80. data/lib/ruby-lint/definitions/core/exception_for_matrix.rb +24 -37
  81. data/lib/ruby-lint/definitions/core/export_prefix.rb +4 -16
  82. data/lib/ruby-lint/definitions/core/failed_message.rb +4 -548
  83. data/lib/ruby-lint/definitions/core/false.rb +9 -7
  84. data/lib/ruby-lint/definitions/core/false_class.rb +40 -22
  85. data/lib/ruby-lint/definitions/core/fcntl.rb +120 -7
  86. data/lib/ruby-lint/definitions/core/fiber.rb +25 -26
  87. data/lib/ruby-lint/definitions/core/fiber_error.rb +9 -8
  88. data/lib/ruby-lint/definitions/core/file.rb +1119 -860
  89. data/lib/ruby-lint/definitions/core/file_test.rb +79 -80
  90. data/lib/ruby-lint/definitions/core/file_utils.rb +1203 -765
  91. data/lib/ruby-lint/definitions/core/find.rb +9 -12
  92. data/lib/ruby-lint/definitions/core/fixnum.rb +113 -663
  93. data/lib/ruby-lint/definitions/core/float.rb +171 -2755
  94. data/lib/ruby-lint/definitions/core/float_domain_error.rb +9 -8
  95. data/lib/ruby-lint/definitions/core/forwardable.rb +37 -30
  96. data/lib/ruby-lint/definitions/core/gc.rb +31 -38
  97. data/lib/ruby-lint/definitions/core/gem.rb +2324 -2183
  98. data/lib/ruby-lint/definitions/core/getopt_long.rb +107 -32
  99. data/lib/ruby-lint/definitions/core/gserver.rb +61 -61
  100. data/lib/ruby-lint/definitions/core/hash.rb +354 -1172
  101. data/lib/ruby-lint/definitions/core/hdr_ext.rb +4 -421
  102. data/lib/ruby-lint/definitions/core/index_error.rb +9 -8
  103. data/lib/ruby-lint/definitions/core/install_dirs.rb +4 -421
  104. data/lib/ruby-lint/definitions/core/integer.rb +93 -67
  105. data/lib/ruby-lint/definitions/core/interrupt.rb +11 -11
  106. data/lib/ruby-lint/definitions/core/io.rb +574 -673
  107. data/lib/ruby-lint/definitions/core/ioerror.rb +9 -8
  108. data/lib/ruby-lint/definitions/core/ipaddr.rb +115 -90
  109. data/lib/ruby-lint/definitions/core/ipsocket.rb +301 -472
  110. data/lib/ruby-lint/definitions/core/irb.rb +1206 -34
  111. data/lib/ruby-lint/definitions/core/json.rb +483 -74
  112. data/lib/ruby-lint/definitions/core/kconv.rb +88 -36
  113. data/lib/ruby-lint/definitions/core/kernel.rb +408 -412
  114. data/lib/ruby-lint/definitions/core/key_error.rb +9 -8
  115. data/lib/ruby-lint/definitions/core/libarg.rb +4 -548
  116. data/lib/ruby-lint/definitions/core/libpathflag.rb +4 -548
  117. data/lib/ruby-lint/definitions/core/link_so.rb +4 -548
  118. data/lib/ruby-lint/definitions/core/load_error.rb +24 -25
  119. data/lib/ruby-lint/definitions/core/local_jump_error.rb +9 -8
  120. data/lib/ruby-lint/definitions/core/logger.rb +294 -61
  121. data/lib/ruby-lint/definitions/core/logging.rb +17 -20
  122. data/lib/ruby-lint/definitions/core/make_makefile.rb +548 -384
  123. data/lib/ruby-lint/definitions/core/marshal.rb +260 -358
  124. data/lib/ruby-lint/definitions/core/match_data.rb +51 -48
  125. data/lib/ruby-lint/definitions/core/math.rb +170 -178
  126. data/lib/ruby-lint/definitions/core/matrix.rb +354 -297
  127. data/lib/ruby-lint/definitions/core/method.rb +41 -42
  128. data/lib/ruby-lint/definitions/core/module.rb +219 -223
  129. data/lib/ruby-lint/definitions/core/monitor.rb +26 -28
  130. data/lib/ruby-lint/definitions/core/monitor_mixin.rb +36 -42
  131. data/lib/ruby-lint/definitions/core/mutex.rb +20 -22
  132. data/lib/ruby-lint/definitions/core/mutex_m.rb +24 -27
  133. data/lib/ruby-lint/definitions/core/name_error.rb +13 -13
  134. data/lib/ruby-lint/definitions/core/nil.rb +9 -7
  135. data/lib/ruby-lint/definitions/core/nil_class.rb +47 -31
  136. data/lib/ruby-lint/definitions/core/nkf.rb +76 -9
  137. data/lib/ruby-lint/definitions/core/no_memory_error.rb +9 -8
  138. data/lib/ruby-lint/definitions/core/no_method_error.rb +14 -14
  139. data/lib/ruby-lint/definitions/core/not_implemented_error.rb +9 -8
  140. data/lib/ruby-lint/definitions/core/numeric.rb +88 -80
  141. data/lib/ruby-lint/definitions/core/object.rb +20 -20
  142. data/lib/ruby-lint/definitions/core/object_space.rb +28 -31
  143. data/lib/ruby-lint/definitions/core/observable.rb +20 -23
  144. data/lib/ruby-lint/definitions/core/open3.rb +47 -50
  145. data/lib/ruby-lint/definitions/core/open_ssl.rb +4158 -13
  146. data/lib/ruby-lint/definitions/core/open_struct.rb +40 -37
  147. data/lib/ruby-lint/definitions/core/open_uri.rb +142 -25
  148. data/lib/ruby-lint/definitions/core/option_parser.rb +919 -981
  149. data/lib/ruby-lint/definitions/core/orig_libpath.rb +4 -32
  150. data/lib/ruby-lint/definitions/core/outflag.rb +4 -548
  151. data/lib/ruby-lint/definitions/core/pathname.rb +211 -186
  152. data/lib/ruby-lint/definitions/core/pp.rb +160 -99
  153. data/lib/ruby-lint/definitions/core/pretty_print.rb +170 -56
  154. data/lib/ruby-lint/definitions/core/prime.rb +329 -234
  155. data/lib/ruby-lint/definitions/core/proc.rb +63 -75
  156. data/lib/ruby-lint/definitions/core/process.rb +504 -412
  157. data/lib/ruby-lint/definitions/core/profiler__.rb +13 -16
  158. data/lib/ruby-lint/definitions/core/pstore.rb +66 -36
  159. data/lib/ruby-lint/definitions/core/queue.rb +32 -32
  160. data/lib/ruby-lint/definitions/core/random.rb +29 -29
  161. data/lib/ruby-lint/definitions/core/range.rb +123 -77
  162. data/lib/ruby-lint/definitions/core/range_error.rb +9 -8
  163. data/lib/ruby-lint/definitions/core/rational.rb +84 -67
  164. data/lib/ruby-lint/definitions/core/rb_config.rb +18 -29
  165. data/lib/ruby-lint/definitions/core/readline.rb +85 -41
  166. data/lib/ruby-lint/definitions/core/regexp.rb +239 -293
  167. data/lib/ruby-lint/definitions/core/regexp_error.rb +9 -8
  168. data/lib/ruby-lint/definitions/core/resolv.rb +1365 -38
  169. data/lib/ruby-lint/definitions/core/rpathflag.rb +4 -548
  170. data/lib/ruby-lint/definitions/core/ruby_copyright.rb +9 -9
  171. data/lib/ruby-lint/definitions/core/ruby_description.rb +9 -9
  172. data/lib/ruby-lint/definitions/core/ruby_engine.rb +9 -9
  173. data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +9 -9
  174. data/lib/ruby-lint/definitions/core/ruby_platform.rb +9 -9
  175. data/lib/ruby-lint/definitions/core/ruby_release_date.rb +9 -9
  176. data/lib/ruby-lint/definitions/core/ruby_revision.rb +4 -246
  177. data/lib/ruby-lint/definitions/core/ruby_version.rb +9 -9
  178. data/lib/ruby-lint/definitions/core/runtime_error.rb +9 -8
  179. data/lib/ruby-lint/definitions/core/scan_error.rb +9 -8
  180. data/lib/ruby-lint/definitions/core/scanf.rb +83 -7
  181. data/lib/ruby-lint/definitions/core/script_error.rb +9 -8
  182. data/lib/ruby-lint/definitions/core/secure_random.rb +22 -25
  183. data/lib/ruby-lint/definitions/core/security_error.rb +9 -8
  184. data/lib/ruby-lint/definitions/core/set.rb +154 -504
  185. data/lib/ruby-lint/definitions/core/shellwords.rb +27 -28
  186. data/lib/ruby-lint/definitions/core/signal.rb +21 -29
  187. data/lib/ruby-lint/definitions/core/signal_exception.rb +15 -15
  188. data/lib/ruby-lint/definitions/core/simple_delegator.rb +10 -26
  189. data/lib/ruby-lint/definitions/core/single_forwardable.rb +35 -38
  190. data/lib/ruby-lint/definitions/core/singleton.rb +21 -28
  191. data/lib/ruby-lint/definitions/core/sized_queue.rb +35 -31
  192. data/lib/ruby-lint/definitions/core/socket.rb +2942 -438
  193. data/lib/ruby-lint/definitions/core/socket_error.rb +4 -54
  194. data/lib/ruby-lint/definitions/core/sorted_set.rb +49 -263
  195. data/lib/ruby-lint/definitions/core/src_ext.rb +4 -421
  196. data/lib/ruby-lint/definitions/core/standard_error.rb +9 -8
  197. data/lib/ruby-lint/definitions/core/stderr.rb +9 -9
  198. data/lib/ruby-lint/definitions/core/stdin.rb +9 -9
  199. data/lib/ruby-lint/definitions/core/stdout.rb +9 -9
  200. data/lib/ruby-lint/definitions/core/stop_iteration.rb +10 -8
  201. data/lib/ruby-lint/definitions/core/string.rb +451 -1222
  202. data/lib/ruby-lint/definitions/core/string_io.rb +226 -518
  203. data/lib/ruby-lint/definitions/core/string_scanner.rb +107 -108
  204. data/lib/ruby-lint/definitions/core/struct.rb +113 -761
  205. data/lib/ruby-lint/definitions/core/syck.rb +1292 -25
  206. data/lib/ruby-lint/definitions/core/symbol.rb +78 -59
  207. data/lib/ruby-lint/definitions/core/syntax_error.rb +23 -33
  208. data/lib/ruby-lint/definitions/core/system_call_error.rb +26 -24
  209. data/lib/ruby-lint/definitions/core/system_exit.rb +15 -15
  210. data/lib/ruby-lint/definitions/core/system_stack_error.rb +9 -8
  211. data/lib/ruby-lint/definitions/core/tcpserver.rb +291 -486
  212. data/lib/ruby-lint/definitions/core/tcpsocket.rb +302 -483
  213. data/lib/ruby-lint/definitions/core/tempfile.rb +39 -832
  214. data/lib/ruby-lint/definitions/core/th_wait.rb +35 -70
  215. data/lib/ruby-lint/definitions/core/thread.rb +131 -144
  216. data/lib/ruby-lint/definitions/core/thread_error.rb +9 -8
  217. data/lib/ruby-lint/definitions/core/thread_group.rb +23 -16
  218. data/lib/ruby-lint/definitions/core/threads_wait.rb +43 -63
  219. data/lib/ruby-lint/definitions/core/time.rb +236 -159
  220. data/lib/ruby-lint/definitions/core/timeout.rb +40 -14
  221. data/lib/ruby-lint/definitions/core/timeout_error.rb +4 -54
  222. data/lib/ruby-lint/definitions/core/toplevel_binding.rb +9 -7
  223. data/lib/ruby-lint/definitions/core/true.rb +9 -7
  224. data/lib/ruby-lint/definitions/core/true_class.rb +40 -22
  225. data/lib/ruby-lint/definitions/core/try_link.rb +4 -548
  226. data/lib/ruby-lint/definitions/core/tsort.rb +21 -19
  227. data/lib/ruby-lint/definitions/core/type_error.rb +9 -8
  228. data/lib/ruby-lint/definitions/core/udpsocket.rb +302 -487
  229. data/lib/ruby-lint/definitions/core/unbound_method.rb +35 -36
  230. data/lib/ruby-lint/definitions/core/universal_ints.rb +4 -421
  231. data/lib/ruby-lint/definitions/core/unixserver.rb +291 -490
  232. data/lib/ruby-lint/definitions/core/unixsocket.rb +314 -476
  233. data/lib/ruby-lint/definitions/core/uri.rb +1309 -38
  234. data/lib/ruby-lint/definitions/core/vector.rb +143 -242
  235. data/lib/ruby-lint/definitions/core/weak_ref.rb +29 -32
  236. data/lib/ruby-lint/definitions/core/webrick.rb +2430 -7
  237. data/lib/ruby-lint/definitions/core/xmlrpc.rb +5 -7
  238. data/lib/ruby-lint/definitions/core/yaml.rb +109 -2325
  239. data/lib/ruby-lint/definitions/core/zero_division_error.rb +9 -8
  240. data/lib/ruby-lint/definitions/core/zlib.rb +272 -8526
  241. data/lib/ruby-lint/definitions/gems/.gitkeep +0 -0
  242. data/lib/ruby-lint/definitions/gems/devise.rb +2271 -0
  243. data/lib/ruby-lint/definitions/gems/nokogiri.rb +7668 -0
  244. data/lib/ruby-lint/definitions/rails/abstract_controller.rb +508 -322
  245. data/lib/ruby-lint/definitions/rails/action_controller.rb +2252 -4462
  246. data/lib/ruby-lint/definitions/rails/action_dispatch.rb +3448 -1846
  247. data/lib/ruby-lint/definitions/rails/action_mailer.rb +750 -1349
  248. data/lib/ruby-lint/definitions/rails/action_pack.rb +31 -14
  249. data/lib/ruby-lint/definitions/rails/action_view.rb +5788 -5748
  250. data/lib/ruby-lint/definitions/rails/active_model.rb +1015 -1065
  251. data/lib/ruby-lint/definitions/rails/active_record.rb +8080 -8075
  252. data/lib/ruby-lint/definitions/rails/active_support.rb +3844 -4153
  253. data/lib/ruby-lint/definitions/rails/arel.rb +6752 -2301
  254. data/lib/ruby-lint/definitions/rails/rails.rb +1553 -2383
  255. data/lib/ruby-lint/definitions/rails/sprockets.rb +1131 -3140
  256. data/lib/ruby-lint/file_list.rb +43 -0
  257. data/lib/ruby-lint/file_scanner.rb +3 -3
  258. data/lib/ruby-lint/generated_constant.rb +5 -1
  259. data/lib/ruby-lint/inspector.rb +108 -46
  260. data/lib/ruby-lint/method_call/attribute.rb +3 -1
  261. data/lib/ruby-lint/rake_task.rb +98 -0
  262. data/lib/ruby-lint/ruby_lint.rb +11 -0
  263. data/lib/ruby-lint/runner.rb +0 -11
  264. data/lib/ruby-lint/template/definition.erb +26 -19
  265. data/lib/ruby-lint/template/scope.rb +12 -0
  266. data/lib/ruby-lint/variable_predicates.rb +14 -0
  267. data/lib/ruby-lint/version.rb +1 -1
  268. data/lib/ruby-lint/virtual_machine.rb +82 -46
  269. data/ruby-lint.gemspec +3 -14
  270. data/spec/ruby-lint/analysis/undefined_methods_spec.rb +20 -3
  271. data/spec/ruby-lint/analysis/useless_equality_checks_spec.rb +107 -0
  272. data/spec/ruby-lint/configuration_spec.rb +20 -0
  273. data/spec/ruby-lint/constant_loader_spec.rb +79 -0
  274. data/spec/ruby-lint/definition/constant_proxy_spec.rb +65 -34
  275. data/spec/ruby-lint/definition/registry_spec.rb +106 -0
  276. data/spec/ruby-lint/definition/ruby_object_spec.rb +25 -25
  277. data/spec/ruby-lint/definition_builder/primitive_spec.rb +10 -10
  278. data/spec/ruby-lint/definition_builder/ruby_class_spec.rb +18 -19
  279. data/spec/ruby-lint/definition_builder/ruby_method_spec.rb +12 -12
  280. data/spec/ruby-lint/definition_builder/ruby_module_spec.rb +14 -14
  281. data/spec/ruby-lint/definitions/argv_spec.rb +3 -2
  282. data/spec/ruby-lint/definitions/env_spec.rb +5 -3
  283. data/spec/ruby-lint/definitions/file_spec.rb +17 -0
  284. data/spec/ruby-lint/definitions/fixnum_spec.rb +18 -0
  285. data/spec/ruby-lint/definitions/io_spec.rb +5 -3
  286. data/spec/ruby-lint/definitions/kernel_spec.rb +18 -0
  287. data/spec/ruby-lint/definitions/range_spec.rb +21 -0
  288. data/spec/ruby-lint/definitions/string_spec.rb +20 -0
  289. data/spec/ruby-lint/file_list_spec.rb +25 -0
  290. data/spec/ruby-lint/file_scanner_spec.rb +12 -0
  291. data/spec/ruby-lint/inspector_spec.rb +203 -23
  292. data/spec/ruby-lint/method_call/.gitkeep +0 -0
  293. data/spec/ruby-lint/variable_predicates_spec.rb +30 -0
  294. data/spec/ruby-lint/virtual_machine/associate_nodes_spec.rb +6 -4
  295. data/spec/ruby-lint/virtual_machine/autoloading_spec.rb +3 -16
  296. data/spec/ruby-lint/virtual_machine/classes/redefining_spec.rb +28 -1
  297. data/spec/ruby-lint/virtual_machine/complex/rails_spec.rb +12 -9
  298. data/spec/ruby-lint/virtual_machine/global_variables_spec.rb +8 -5
  299. data/spec/ruby-lint/virtual_machine/method_call_tracking_spec.rb +0 -7
  300. data/spec/ruby-lint/virtual_machine/methods/attr_spec.rb +66 -0
  301. data/spec/ruby-lint/virtual_machine/methods/calls_spec.rb +25 -0
  302. data/spec/ruby-lint/virtual_machine/methods/define_method_spec.rb +1 -1
  303. data/spec/ruby-lint/virtual_machine/methods/docstrings_spec.rb +20 -9
  304. data/spec/ruby-lint/virtual_machine/methods/kernel_spec.rb +25 -0
  305. data/spec/ruby-lint/virtual_machine/methods/patching_spec.rb +0 -6
  306. data/spec/ruby-lint/virtual_machine/methods/square_bracket_spec.rb +32 -0
  307. data/spec/ruby-lint/virtual_machine/self_spec.rb +37 -0
  308. data/spec/spec_helper.rb +0 -1
  309. data/spec/support/building.rb +0 -4
  310. data/spec/support/definitions.rb +16 -0
  311. data/task/generate.rake +35 -33
  312. data/task/todo.rake +1 -1
  313. metadata +73 -100
  314. data/lib/ruby-lint/cli/ast.rb +0 -50
  315. data/lib/ruby-lint/cli/plot.rb +0 -94
  316. data/lib/ruby-lint/definitions/core/arg0.rb +0 -9
  317. data/lib/ruby-lint/definitions/core/autoload.rb +0 -41
  318. data/lib/ruby-lint/definitions/core/continuation.rb +0 -10
  319. data/lib/ruby-lint/definitions/core/default_record_separator.rb +0 -9
  320. data/lib/ruby-lint/definitions/core/fatal_error.rb +0 -10
  321. data/lib/ruby-lint/definitions/core/file_list.rb +0 -729
  322. data/lib/ruby-lint/definitions/core/immediate_value.rb +0 -21
  323. data/lib/ruby-lint/definitions/core/md5.rb +0 -80
  324. data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +0 -10
  325. data/lib/ruby-lint/definitions/core/precision.rb +0 -23
  326. data/lib/ruby-lint/definitions/core/primitive_failure.rb +0 -10
  327. data/lib/ruby-lint/definitions/core/psych.rb +0 -139
  328. data/lib/ruby-lint/definitions/core/rake.rb +0 -4786
  329. data/lib/ruby-lint/definitions/core/rake_file_utils.rb +0 -205
  330. data/lib/ruby-lint/definitions/core/rakeversion.rb +0 -9
  331. data/lib/ruby-lint/definitions/core/rdoc.rb +0 -15
  332. data/lib/ruby-lint/definitions/core/rexml.rb +0 -13
  333. data/lib/ruby-lint/definitions/core/rss.rb +0 -13
  334. data/lib/ruby-lint/definitions/core/sha1.rb +0 -80
  335. data/lib/ruby-lint/definitions/core/unmarshalable.rb +0 -15
  336. data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +0 -10
  337. data/lib/ruby-lint/definitions/global_variables.rb +0 -9
  338. data/lib/ruby-lint/definitions/rails.rb +0 -12
  339. data/lib/ruby-lint/global_scope.rb +0 -56
  340. data/spec/ruby-lint/cli/ast_spec.rb +0 -23
  341. data/spec/ruby-lint/method_call/assign_member_spec.rb +0 -25
@@ -2,10 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::DefinitionBuilder::RubyClass do
4
4
  describe 'using an implicit parent class' do
5
- before do
5
+ before :all do
6
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)
7
+ @vm = RubyLint::VirtualMachine.new
8
+ @builder = RubyLint::DefinitionBuilder::RubyClass.new(node, @vm)
9
9
  end
10
10
 
11
11
  example 'return the name of the class' do
@@ -30,21 +30,20 @@ describe RubyLint::DefinitionBuilder::RubyClass do
30
30
  end
31
31
 
32
32
  example 'return the scope to define the class in' do
33
- @builder.scope.should == @root
33
+ @builder.scope.should == @vm.current_scope
34
34
  end
35
35
  end
36
36
 
37
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')
38
+ before :all do
39
+ node = s(:class, s(:const, nil, :A), s(:const, nil, :B), s(:nil))
40
+ @vm = RubyLint::VirtualMachine.new
41
+ parent = @vm.definitions.define_constant('B')
43
42
 
44
43
  @builder = RubyLint::DefinitionBuilder::RubyClass.new(
45
44
  node,
46
- @root,
47
- :parent => @root.lookup(:const, 'B')
45
+ @vm,
46
+ :parent => parent
48
47
  )
49
48
  end
50
49
 
@@ -62,12 +61,12 @@ describe RubyLint::DefinitionBuilder::RubyClass do
62
61
  end
63
62
 
64
63
  example 'return the scope to define the class in' do
65
- @builder.scope.should == @root
64
+ @builder.scope.should == @vm.current_scope
66
65
  end
67
66
  end
68
67
 
69
68
  describe 'using constant paths' do
70
- before do
69
+ before :all do
71
70
  node = s(
72
71
  :class,
73
72
  s(:const, s(:const, nil, :A), :B),
@@ -75,15 +74,15 @@ describe RubyLint::DefinitionBuilder::RubyClass do
75
74
  s(:nil)
76
75
  )
77
76
 
78
- @root = ruby_object.new(:name => 'root')
77
+ @vm = RubyLint::VirtualMachine.new
79
78
 
80
- @root.define_constant('A')
79
+ @vm.definitions.define_constant('A')
81
80
 
82
- d_const = @root.define_constant('C').define_constant('D')
81
+ d_const = @vm.definitions.define_constant('C').define_constant('D')
83
82
 
84
83
  @builder = RubyLint::DefinitionBuilder::RubyClass.new(
85
84
  node,
86
- @root,
85
+ @vm,
87
86
  :parent => d_const
88
87
  )
89
88
  end
@@ -102,7 +101,7 @@ describe RubyLint::DefinitionBuilder::RubyClass do
102
101
  end
103
102
 
104
103
  example 'return the scope to define the class in' do
105
- @builder.scope.should == @root.lookup(:const, 'A')
104
+ @builder.scope.should == @vm.definitions.lookup(:const, 'A')
106
105
  end
107
106
  end
108
- end
107
+ end
@@ -2,10 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::DefinitionBuilder::RubyMethod do
4
4
  describe 'defining a method without a receiver' do
5
- before do
5
+ before :all do
6
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)
7
+ @vm = RubyLint::VirtualMachine.new
8
+ @builder = RubyLint::DefinitionBuilder::RubyMethod.new(node, @vm)
9
9
  end
10
10
 
11
11
  example 'return the name of the method' do
@@ -17,23 +17,23 @@ describe RubyLint::DefinitionBuilder::RubyMethod do
17
17
  end
18
18
 
19
19
  example 'return the parent definitions' do
20
- @builder.build.parents.should == [@root]
20
+ @builder.build.parents.should == [@vm.current_scope]
21
21
  end
22
22
 
23
23
  example 'return the scope to define the method in' do
24
- @builder.scope.should == @root
24
+ @builder.scope.should == @vm.current_scope
25
25
  end
26
26
  end
27
27
 
28
28
  describe 'defining a method with a constant as a receiver' do
29
- before do
29
+ before :all do
30
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')
31
+ @vm = RubyLint::VirtualMachine.new
32
+ a_const = @vm.definitions.define_constant('A')
33
33
 
34
34
  @builder = RubyLint::DefinitionBuilder::RubyMethod.new(
35
35
  node,
36
- @root,
36
+ @vm,
37
37
  :receiver => a_const
38
38
  )
39
39
  end
@@ -43,11 +43,11 @@ describe RubyLint::DefinitionBuilder::RubyMethod do
43
43
  end
44
44
 
45
45
  example 'return the parent definitions' do
46
- @builder.build.parents.should == [@root.lookup(:const, 'A')]
46
+ @builder.build.parents.should == [@vm.definitions.lookup(:const, 'A')]
47
47
  end
48
48
 
49
49
  example 'return the scope to define the method in' do
50
- @builder.scope.should == @root.lookup(:const, 'A')
50
+ @builder.scope.should == @vm.definitions.lookup(:const, 'A')
51
51
  end
52
52
  end
53
- end
53
+ end
@@ -2,11 +2,11 @@ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::DefinitionBuilder::RubyModule do
4
4
  describe 'building a simple module' do
5
- before do
5
+ before :all do
6
6
  node = s(:module, s(:const, nil, :A), s(:nil))
7
- @root = ruby_object.new(:name => 'root')
8
- @builder = RubyLint::DefinitionBuilder::RubyModule.new(node, @root)
9
- @module = RubyLint::GlobalScope.global_constant('Module')
7
+ @vm = RubyLint::VirtualMachine.new
8
+ @builder = RubyLint::DefinitionBuilder::RubyModule.new(node, @vm)
9
+ @module = @vm.definitions.lookup(:const, 'Module')
10
10
  end
11
11
 
12
12
  example 'return the name of the module' do
@@ -14,7 +14,7 @@ describe RubyLint::DefinitionBuilder::RubyModule do
14
14
  end
15
15
 
16
16
  example 'return the parent definitions' do
17
- @builder.build.parents.should == [@module, @root]
17
+ @builder.build.parents.should == [@module, @vm.current_scope]
18
18
  end
19
19
 
20
20
  example 'return the reference amount' do
@@ -22,19 +22,19 @@ describe RubyLint::DefinitionBuilder::RubyModule do
22
22
  end
23
23
 
24
24
  example 'return the scope to define the module in' do
25
- @builder.scope.should == @root
25
+ @builder.scope.should == @vm.current_scope
26
26
  end
27
27
  end
28
28
 
29
29
  describe 'using constant paths' do
30
- before do
31
- node = s(:module, s(:const, s(:const, nil, :A), :B), s(:nil))
32
- @root = ruby_object.new(:name => 'root')
30
+ before :all do
31
+ node = s(:module, s(:const, s(:const, nil, :A), :B), s(:nil))
32
+ @vm = RubyLint::VirtualMachine.new
33
33
 
34
- @root.define_constant('A')
34
+ @vm.definitions.define_constant('A')
35
35
 
36
- @builder = RubyLint::DefinitionBuilder::RubyModule.new(node, @root)
37
- @module = RubyLint::GlobalScope.global_constant('Module')
36
+ @builder = RubyLint::DefinitionBuilder::RubyModule.new(node, @vm)
37
+ @module = @vm.definitions.lookup(:const, 'Module')
38
38
  end
39
39
 
40
40
  example 'return the name of the module' do
@@ -42,11 +42,11 @@ describe RubyLint::DefinitionBuilder::RubyModule do
42
42
  end
43
43
 
44
44
  example 'return the parent definitions' do
45
- @builder.build.parents.should == [@module, @root]
45
+ @builder.build.parents.should == [@module, @vm.current_scope]
46
46
  end
47
47
 
48
48
  example 'return the scope to define the module in' do
49
- @builder.scope.should == @root.lookup(:const, 'A')
49
+ @builder.scope.should == @vm.definitions.lookup(:const, 'A')
50
50
  end
51
51
  end
52
52
  end
@@ -2,8 +2,9 @@ require 'spec_helper'
2
2
 
3
3
  describe 'ruby-lint definitions' do
4
4
  context 'ARGV' do
5
- before do
6
- @const = RubyLint::GlobalScope.global_constant('ARGV')
5
+ before :all do
6
+ root = load_definitions('ARGV', 'Array')
7
+ @const = root.lookup(:const, 'ARGV')
7
8
  end
8
9
 
9
10
  example 'treat ARGV as an instance' do
@@ -2,10 +2,12 @@ require 'spec_helper'
2
2
 
3
3
  describe 'ruby-lint definitions' do
4
4
  context 'ENV' do
5
- example 'treat ENV as an instance' do
6
- const = RubyLint::GlobalScope.global_constant('ENV')
5
+ before :all do
6
+ @const = load_definitions('ENV').lookup(:const, 'ENV')
7
+ end
7
8
 
8
- const.instance?.should == true
9
+ example 'treat ENV as an instance' do
10
+ @const.instance?.should == true
9
11
  end
10
12
  end
11
13
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ruby-lint definitions' do
4
+ context 'File' do
5
+ before :all do
6
+ @file = load_definitions('File').lookup(:const, 'File')
7
+ end
8
+
9
+ example 'File.read should be defined' do
10
+ @file.has_definition?(:method, 'read').should == true
11
+ end
12
+
13
+ example 'File.open should be defined' do
14
+ @file.has_definition?(:method, 'open').should == true
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ruby-lint definitions' do
4
+ context 'Fixnum' do
5
+ before :all do
6
+ root = load_definitions('Fixnum', 'Integer', 'Numeric')
7
+ @fixnum = root.lookup(:const, 'Fixnum')
8
+ end
9
+
10
+ example 'inherit from Integer' do
11
+ @fixnum.parents.map(&:name).include?('Integer').should == true
12
+ end
13
+
14
+ example 'respond to methods from Numeric' do
15
+ @fixnum.has_definition?(:instance_method, '%').should == true
16
+ end
17
+ end
18
+ end
@@ -2,11 +2,13 @@ require 'spec_helper'
2
2
 
3
3
  describe 'ruby-lint definitions' do
4
4
  context 'IO' do
5
+ before :all do
6
+ @root = load_definitions('STDERR', 'STDOUT', 'STDIN')
7
+ end
8
+
5
9
  example 'treat STDERR/STDOUT/STDIN as instances' do
6
10
  %w{STDERR STDOUT STDIN}.each do |name|
7
- const = RubyLint::GlobalScope.global_constant(name)
8
-
9
- const.instance?.should == true
11
+ @root.lookup(:const, name).instance?.should == true
10
12
  end
11
13
  end
12
14
  end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ruby-lint definitions' do
4
+ context 'Kernel' do
5
+ before :all do
6
+ @root = load_definitions('Kernel')
7
+ @kernel = @root.lookup(:const, 'Kernel')
8
+ end
9
+
10
+ example 'The method is_a?() should be a class method' do
11
+ @kernel.defines?(:method, 'is_a?').should == true
12
+ end
13
+
14
+ example 'The method is_a?() should be an instance method' do
15
+ @kernel.defines?(:instance_method, 'is_a?').should == true
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ruby-lint definitions' do
4
+ context 'Range' do
5
+ before :all do
6
+ @range = load_definitions('Range', 'Enumerable').lookup(:const, 'Range')
7
+ end
8
+
9
+ example 'Enumerable should be a parent' do
10
+ @range.parents.map(&:name).include?('Enumerable').should == true
11
+ end
12
+
13
+ example 'inherit methods from Enumrable' do
14
+ @range.has_definition?(:instance_method, 'map').should == true
15
+ end
16
+
17
+ example 'do not define Enumerable methods directly' do
18
+ @range.defines?(:instance_method, 'map').should == false
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'ruby-lint definitions' do
4
+ context 'String' do
5
+ before :all do
6
+ @string = load_definitions('String').lookup(:const, 'String')
7
+ end
8
+
9
+ example 'define self as a class method' do
10
+ @string.lookup(:method, 'self').return_value.class?.should == true
11
+ end
12
+
13
+ example 'define self as an instance method' do
14
+ @string.lookup(:instance_method, 'self')
15
+ .return_value
16
+ .instance?
17
+ .should == true
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyLint::FileList do
4
+ before :all do
5
+ @list = RubyLint::FileList.new
6
+ end
7
+
8
+ example 'list a set of files' do
9
+ path = fixture_path('valid.rb')
10
+
11
+ @list.process([path]).should == [path]
12
+ end
13
+
14
+ example 'list a set of directories' do
15
+ @list.process([fixture_path('deeply')]).should == [
16
+ fixture_path('deeply/nested/file.rb')
17
+ ]
18
+ end
19
+
20
+ example 'raise for non existing files' do
21
+ block = lambda { @list.process(['yeah-right']) }
22
+
23
+ block.should raise_error(Errno::ENOENT)
24
+ end
25
+ end
@@ -23,6 +23,18 @@ describe RubyLint::FileScanner do
23
23
  scanner.directories.include?(app).should == false
24
24
  end
25
25
 
26
+ example 'glob Ruby source files in a single directory' do
27
+ scanner = RubyLint::FileScanner.new([@lib_dir])
28
+
29
+ scanner.glob_ruby_files.empty?.should == false
30
+ end
31
+
32
+ example 'glob Ruby source files in multiple directories' do
33
+ scanner = RubyLint::FileScanner.new([@lib_dir, @rails_dir])
34
+
35
+ scanner.glob_ruby_files.empty?.should == false
36
+ end
37
+
26
38
  example 'finding a class' do
27
39
  scanner = RubyLint::FileScanner.new([@lib_dir])
28
40
  paths = scanner.scan('Example::User')
@@ -1,44 +1,224 @@
1
1
  require 'spec_helper'
2
- require_relative '../../lib/ruby-lint/inspector'
3
2
 
4
3
  describe RubyLint::Inspector do
5
- let(:inspector) { RubyLint::Inspector.new(Encoding) }
4
+ context 'inspecting constants' do
5
+ before :all do
6
+ inspector = RubyLint::Inspector.new(Encoding)
7
+ @constants = inspector.inspect_constants
8
+ end
6
9
 
7
- example 'return a list of child constants' do
8
- inspector.inspect_constants.include?('Encoding::BINARY').should == true
10
+ example 'include the source constant' do
11
+ @constants.include?('Encoding').should == true
12
+ end
13
+
14
+ example 'include the child constants' do
15
+ @constants.include?('Encoding::BINARY').should == true
16
+ @constants.include?('Encoding::ASCII_8BIT').should == true
17
+ end
18
+ end
19
+
20
+ context 'ignoring duplicates' do
21
+ before :all do
22
+ inspector = RubyLint::Inspector.new(Encoding)
23
+ @constants = inspector.inspect_constants(
24
+ inspector.constant,
25
+ ['Encoding::BINARY']
26
+ )
27
+ end
28
+
29
+ example 'ignore duplicates' do
30
+ @constants.include?('Encoding::BINARY').should == false
31
+ end
32
+
33
+ example 'include other constants' do
34
+ @constants.include?('Encoding::ASCII_8BIT').should == true
35
+ end
36
+ end
37
+
38
+ context 'dealing with recursive constant lists' do
39
+ before :all do
40
+ # This ignores all constants except those defined on the right hand side
41
+ # of the subtraction. This speeds up the tests quite a bit (we don't care
42
+ # about constants such as CGI and Parser in this case).
43
+ ignore = Object.constants.map(&:to_s) - %w{Object Class Module Encoding}
44
+
45
+ inspector = RubyLint::Inspector.new(Object)
46
+ @constants = inspector.inspect_constants(inspector.constant, ignore)
47
+ end
48
+
49
+ example 'include Class and Module' do
50
+ @constants.include?('Class').should == true
51
+ @constants.include?('Module').should == true
52
+ end
53
+
54
+ example 'exclude recursive constants' do
55
+ @constants.include?('Class::Object').should == false
56
+ @constants.include?('Module::Object').should == false
57
+ end
58
+
59
+ example 'include other regular constants' do
60
+ @constants.include?('Encoding').should == true
61
+ @constants.include?('Encoding::BINARY').should == true
62
+ end
63
+ end
64
+
65
+ context 'Ruby implementation shenanigans' do
66
+ before :all do
67
+ mod = Module.new { include Enumerable }
68
+
69
+ inspector = RubyLint::Inspector.new(mod)
70
+ @constants = inspector.inspect_constants
71
+ end
72
+
73
+ # This test was added since Rubinius defines `Range::Enumerator` which is
74
+ # an alias of `Enumerable::Enumerator`.
75
+ example 'ignore constants from a different root constant' do
76
+ @constants.include?('Enumerable::Enumerator').should == false
77
+ end
9
78
  end
10
79
 
11
- example 'ignore a given constant' do
12
- ins = inspector
13
- constants = ins.inspect_constants(ins.constant, ['Encoding::BINARY'])
80
+ context 'inspecting parent classes' do
81
+ before :all do
82
+ @inspector = RubyLint::Inspector.new(Object)
83
+ end
14
84
 
15
- constants.include?('Encoding::BINARY').should == false
85
+ example 'return the parent class' do
86
+ @inspector.inspect_superclass.should == BasicObject
87
+ end
16
88
  end
17
89
 
18
- example 'return the methods' do
19
- names = inspector.inspect_methods.map(&:name)
90
+ context 'inspecting anonymous parent classes' do
91
+ before :all do
92
+ parent = Class.new
93
+ klass = Class.new(parent)
20
94
 
21
- names.include?(:find).should == true
95
+ @inspector = RubyLint::Inspector.new(klass)
96
+ end
97
+
98
+ example 'ignore anonymous parent classes' do
99
+ @inspector.inspect_superclass.nil?.should == true
100
+ end
22
101
  end
23
102
 
24
- example 'return the instance methods' do
25
- names = inspector.inspect_instance_methods.map(&:name)
103
+ context 'inspecting included modules' do
104
+ before :all do
105
+ klass = Class.new { include Enumerable }
106
+ child = Class.new(klass) { include Enumerable }
107
+
108
+ @modules = RubyLint::Inspector.new(klass).inspect_modules
109
+ @child_modules = RubyLint::Inspector.new(child).inspect_modules
110
+ end
111
+
112
+ example 'include Enumerable' do
113
+ @modules.include?(Enumerable).should == true
114
+ end
26
115
 
27
- names.include?(:to_s).should == true
116
+ example 'ignore modules that are already included in the parent' do
117
+ @child_modules.empty?.should == true
118
+ end
28
119
  end
29
120
 
30
- example 'ignore methods defined in Object' do
31
- method = double(:fake_method, :name => :tainted?)
32
- const = double(:fake_constant, :methods => [:tainted?], :method => method)
121
+ context 'inspecing included modules with anonymous modules' do
122
+ before :all do
123
+ mod = Module.new { def foo; end }
124
+ klass = Class.new { include mod }
33
125
 
34
- inspector = RubyLint::Inspector.new(const)
35
- methods = inspector.inspect_methods.map(&:name)
126
+ @modules = RubyLint::Inspector.new(klass).inspect_modules
127
+ end
36
128
 
37
- methods.include?(:frozen?).should == false
38
- methods.include?(:tainted?).should == true
129
+ example 'ignore anonymous modules' do
130
+ @modules.empty?.should == true
131
+ end
39
132
  end
40
133
 
41
- example 'return the superclass' do
42
- inspector.inspect_superclass.should == Object
134
+ context 'inspecting class methods' do
135
+ before :all do
136
+ inspector = RubyLint::Inspector.new(Encoding)
137
+ @methods = inspector.inspect_methods.map(&:name)
138
+ end
139
+
140
+ example 'include a method' do
141
+ @methods.include?(:find).should == true
142
+ end
143
+ end
144
+
145
+ context 'inspecting instance methods' do
146
+ before :all do
147
+ inspector = RubyLint::Inspector.new(Encoding)
148
+ @methods = inspector.inspect_instance_methods.map(&:name)
149
+ end
150
+
151
+ example 'include a method' do
152
+ @methods.include?(:to_s).should == true
153
+ end
154
+ end
155
+
156
+ context 'exclude methods defined in a parent class' do
157
+ before :all do
158
+ parent = Class.new { def foo; end }
159
+ child = Class.new(parent) { def bar; end }
160
+ inspector = RubyLint::Inspector.new(child)
161
+ @methods = inspector.inspect_instance_methods.map(&:name)
162
+ end
163
+
164
+ example 'exclude parent methods' do
165
+ @methods.include?(:foo).should == false
166
+ end
167
+
168
+ example 'include the instance methods of the source' do
169
+ @methods.include?(:bar).should == true
170
+ end
171
+ end
172
+
173
+ context 'exclude methods defined in an included module' do
174
+ before :all do
175
+ mod = Module.new { def foo; end }
176
+ klass = Class.new { include(mod); def bar; end }
177
+ inspector = RubyLint::Inspector.new(klass)
178
+ @methods = inspector.inspect_instance_methods.map(&:name)
179
+ end
180
+
181
+ example 'do not include methods from included modules' do
182
+ @methods.include?(:foo).should == false
183
+ end
184
+
185
+ example 'include methods defined directly in the class' do
186
+ @methods.include?(:bar).should == true
187
+ end
188
+ end
189
+
190
+ context 'excluding parent methods when extending Object' do
191
+ before :all do
192
+ child = Class.new(Object) { def foo; end }
193
+ inspector = RubyLint::Inspector.new(child)
194
+ @methods = inspector.inspect_instance_methods.map(&:name)
195
+ end
196
+
197
+ example 'only include methods of the sub class' do
198
+ @methods.should == [:foo]
199
+ end
200
+ end
201
+
202
+ context 'including initialize methods' do
203
+ before :all do
204
+ @no_init = Class.new
205
+ @init = Class.new { def initialize; end }
206
+
207
+ @no_init_methods = RubyLint::Inspector.new(@no_init)
208
+ .inspect_instance_methods
209
+ .map(&:name)
210
+
211
+ @init_methods = RubyLint::Inspector.new(@init)
212
+ .inspect_instance_methods
213
+ .map(&:name)
214
+ end
215
+
216
+ example 'exclude initialize if it is not defined directly' do
217
+ @no_init_methods.include?(:initialize).should == false
218
+ end
219
+
220
+ example 'include initialize if it is defined directly' do
221
+ @init_methods.include?(:initialize).should == true
222
+ end
43
223
  end
44
224
  end