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
File without changes
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyLint::VariablePredicates do
4
+ before :all do
5
+ @array = s(:array)
6
+ @hash = s(:hash)
7
+ @const = s(:const, nil, :A)
8
+ @path = s(:const, s(:const, nil, :A), :B)
9
+ end
10
+
11
+ example 'check if an object is an array' do
12
+ @array.array?.should == true
13
+ end
14
+
15
+ example 'check if an object is a hash' do
16
+ @hash.hash?.should == true
17
+ end
18
+
19
+ example 'check if an object is a constant' do
20
+ @const.constant?.should == true
21
+ end
22
+
23
+ example 'check if an object is a constant path' do
24
+ @path.constant_path?.should == true
25
+ end
26
+
27
+ example 'return the Ruby class of an object' do
28
+ @array.ruby_class.should == 'Array'
29
+ end
30
+ end
@@ -28,7 +28,7 @@ describe RubyLint::VirtualMachine do
28
28
  associations = build_associations('foo(:bar)')
29
29
  nodes = associations.keys
30
30
 
31
- nodes.length.should == 1
31
+ nodes.length.should == 2
32
32
  nodes[0].type.should == :root
33
33
  end
34
34
 
@@ -49,11 +49,13 @@ describe RubyLint::VirtualMachine do
49
49
  nodes = associations.keys
50
50
  values = associations.values
51
51
 
52
- nodes.length.should == 2
52
+ nodes.length.should == 3
53
53
  nodes[0].type.should == :root
54
- nodes[1].type.should == :send
54
+ nodes[1].type.should == :sym
55
+ nodes[2].type.should == :send
55
56
 
56
- values[1].type.should == :unknown
57
+ values[1].type.should == :sym
58
+ values[2].type.should == :unknown
57
59
  end
58
60
  end
59
61
  end
@@ -1,30 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
- after do
5
- RubyLint::GlobalScope.definitions.definitions[:const].delete('ERB')
6
- end
7
-
8
4
  example 'automatically load constants' do
9
5
  definitions = build_definitions('ERB')
10
6
 
11
7
  definitions.lookup(:const, 'ERB').is_a?(ruby_object).should == true
12
-
13
- RubyLint::GlobalScope.definitions.lookup(:const, 'ERB') \
14
- .is_a?(ruby_object) \
15
- .should == true
16
8
  end
17
9
 
18
10
  example 'automatically load constant paths' do
19
- definitions = build_definitions('Enumerable::Enumerator')
20
-
21
- definitions.lookup(:const, 'Enumerable') \
22
- .lookup(:const, 'Enumerator') \
23
- .is_a?(ruby_object) \
24
- .should == true
11
+ definitions = build_definitions('Encoding::BINARY')
25
12
 
26
- RubyLint::GlobalScope.definitions.lookup(:const, 'Enumerable') \
27
- .lookup(:const, 'Enumerator') \
13
+ definitions.lookup(:const, 'Encoding') \
14
+ .lookup(:const, 'BINARY') \
28
15
  .is_a?(ruby_object) \
29
16
  .should == true
30
17
  end
@@ -20,5 +20,32 @@ end
20
20
  .is_a?(ruby_method) \
21
21
  .should == true
22
22
  end
23
+
24
+ context 'updating built-in definitions' do
25
+ before :all do
26
+ code = <<-CODE
27
+ class Integer < Numeric
28
+ def foobar
23
29
  end
24
- end
30
+ end
31
+ CODE
32
+
33
+ defs = build_definitions(code)
34
+ @integer = defs.lookup(:const, 'Integer')
35
+ @fixnum = defs.lookup(:const, 'Fixnum')
36
+ end
37
+
38
+ example 'include newly defined methods' do
39
+ @integer.has_definition?(:instance_method, 'foobar').should == true
40
+ end
41
+
42
+ example 'include existing methods' do
43
+ @integer.has_definition?(:instance_method, '%').should == true
44
+ end
45
+
46
+ example 'update definitions that point to the redefined definition' do
47
+ @fixnum.has_definition?(:instance_method, 'foobar').should == true
48
+ end
49
+ end
50
+ end
51
+ end
@@ -2,17 +2,20 @@ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
4
  describe 'rails' do
5
- example 'process a basic Rails controller' do
6
- code = fixture('complex/rails/basic_controller.rb')
7
- defs = build_definitions(code)
8
-
9
- controller = defs.lookup(:const, 'ApplicationController')
5
+ before :all do
6
+ code = fixture('complex/rails/basic_controller.rb')
7
+ @defs = build_definitions(code)
8
+ @controller = @defs.lookup(:const, 'ApplicationController')
9
+ end
10
10
 
11
- controller.is_a?(ruby_object).should == true
11
+ example 'inherit the parent controller' do
12
+ @controller.has_definition?(:instance_method, 'login_required')
13
+ .should == true
14
+ end
12
15
 
13
- controller.lookup(:instance_method, 'login_required') \
14
- .is_a?(ruby_method) \
16
+ example 'include built-in Rails definitions' do
17
+ @controller.has_definition?(:method, 'allow_forgery_protection')
15
18
  .should == true
16
19
  end
17
20
  end
18
- end
21
+ end
@@ -2,11 +2,14 @@ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
4
  describe 'global variables' do
5
- example 'provide a list of default global variables' do
6
- scope = RubyLint::GlobalScope.definitions
5
+ before :all do
6
+ @vm = RubyLint::VirtualMachine.new
7
+ @defs = @vm.definitions
8
+ end
7
9
 
8
- scope.lookup(:gvar, '$LOAD_PATH').is_a?(ruby_object).should == true
9
- scope.lookup(:gvar, '$9').is_a?(ruby_object).should == true
10
+ example 'provide a list of default global variables' do
11
+ @defs.lookup(:gvar, '$LOAD_PATH').is_a?(ruby_object).should == true
12
+ @defs.lookup(:gvar, '$9').is_a?(ruby_object).should == true
10
13
  end
11
14
  end
12
- end
15
+ end
@@ -53,12 +53,5 @@ end
53
53
  @first.callers[0].definition.should == @third
54
54
  @second.callers[0].definition.should == @third
55
55
  end
56
-
57
- example 'should not modify read-only definitions' do
58
- method = @string.lookup(:method, 'new')
59
-
60
- @third.calls[2].definition.should == method
61
- method.callers.empty?.should == true
62
- end
63
56
  end
64
57
  end
@@ -113,4 +113,70 @@ end
113
113
  .should == true
114
114
  end
115
115
  end
116
+
117
+ context 'attr methods and argument amounts' do
118
+ example 'set the arguments for attr' do
119
+ code = <<-CODE
120
+ class Example
121
+ attr :foo
122
+ end
123
+ CODE
124
+
125
+ defs = build_definitions(code)
126
+
127
+ defs.lookup(:const, 'Example')
128
+ .lookup(:instance_method, 'foo')
129
+ .arguments
130
+ .empty?
131
+ .should == true
132
+ end
133
+
134
+ example 'set the arguments for attr_reader' do
135
+ code = <<-CODE
136
+ class Example
137
+ attr_reader :foo
138
+ end
139
+ CODE
140
+
141
+ defs = build_definitions(code)
142
+
143
+ defs.lookup(:const, 'Example')
144
+ .lookup(:instance_method, 'foo')
145
+ .arguments
146
+ .empty?
147
+ .should == true
148
+ end
149
+
150
+ example 'set the arguments for attr_writer' do
151
+ code = <<-CODE
152
+ class Example
153
+ attr_writer :foo
154
+ end
155
+ CODE
156
+
157
+ defs = build_definitions(code)
158
+
159
+ defs.lookup(:const, 'Example')
160
+ .lookup(:instance_method, 'foo=')
161
+ .arguments
162
+ .length
163
+ .should == 1
164
+ end
165
+
166
+ example 'set the arguments for attr_accessor' do
167
+ code = <<-CODE
168
+ class Example
169
+ attr_accessor :foo
170
+ end
171
+ CODE
172
+
173
+ defs = build_definitions(code)
174
+
175
+ defs.lookup(:const, 'Example')
176
+ .lookup(:instance_method, 'foo=')
177
+ .arguments
178
+ .length
179
+ .should == 1
180
+ end
181
+ end
116
182
  end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ context 'evaluating method calls' do
5
+ before :all do
6
+ code = <<-EOF
7
+ # @return [String]
8
+ def example
9
+ return 'foo'
10
+ end
11
+
12
+ variable = example
13
+ EOF
14
+
15
+ @defs = build_definitions(code)
16
+ end
17
+
18
+ example 'assign the correct return value to a local variable' do
19
+ value = @defs.lookup(:lvar, 'variable').value
20
+
21
+ value.type.should == :const
22
+ value.name.should == 'String'
23
+ end
24
+ end
25
+ end
@@ -10,7 +10,7 @@ class A
10
10
  end
11
11
  CODE
12
12
 
13
- assoc = build_associations(code).to_a.last.last
13
+ assoc = build_associations(code).to_a[-2].last
14
14
 
15
15
  assoc.type.should == :block
16
16
  assoc.instance_type.should == :instance
@@ -12,9 +12,10 @@ end
12
12
  defs = build_definitions(code)
13
13
 
14
14
  number = defs.lookup(:instance_method, 'example').lookup(:lvar, 'number')
15
- numeric = RubyLint::GlobalScope.global_constant('Numeric')
15
+ numeric = defs.lookup(:const, 'Numeric')
16
16
 
17
17
  number.is_a?(ruby_object).should == true
18
+ numeric.is_a?(ruby_object).should == true
18
19
  number.parents.include?(numeric).should == true
19
20
  end
20
21
 
@@ -39,10 +40,10 @@ def example(number)
39
40
  end
40
41
  CODE
41
42
 
42
- float = RubyLint::GlobalScope.global_constant('Float')
43
- fixnum = RubyLint::GlobalScope.global_constant('Fixnum')
44
-
45
43
  defs = build_definitions(code)
44
+ float = defs.lookup(:const, 'Float')
45
+ fixnum = defs.lookup(:const, 'Fixnum')
46
+
46
47
  number = defs.lookup(:instance_method, 'example').lookup(:lvar, 'number')
47
48
 
48
49
  number.is_a?(ruby_object).should == true
@@ -52,18 +53,28 @@ end
52
53
  end
53
54
 
54
55
  context 'method return values and docstrings' do
55
- example 'extract the type of a return tag' do
56
+ before :all do
56
57
  code = <<-CODE
57
58
  # @return [Numeric]
58
59
  def example
59
60
  end
60
61
  CODE
61
62
 
62
- defs = build_definitions(code)
63
- method = defs.lookup(:instance_method, 'example')
64
- numeric = RubyLint::GlobalScope.global_constant('Numeric')
63
+ @defs = build_definitions(code)
64
+ end
65
+
66
+ example 'extract the type of a return tag' do
67
+ method = @defs.lookup(:instance_method, 'example')
68
+ numeric = @defs.lookup(:const, 'Numeric')
69
+
70
+ method.return_value.type.should == :const
71
+ method.return_value.name.should == 'Numeric'
72
+ end
73
+
74
+ example 'return values as instances' do
75
+ method = @defs.lookup(:instance_method, 'example')
65
76
 
66
- method.return_value.should == numeric
77
+ method.return_value.instance?.should == true
67
78
  end
68
79
  end
69
80
  end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'updating the Kernel module' do
5
+ before :all do
6
+ code = <<-CODE
7
+ module Kernel
8
+ def foobar
9
+ end
10
+ end
11
+ CODE
12
+
13
+ @definitions = build_definitions(code)
14
+ @kernel = @definitions.lookup(:const, 'Kernel')
15
+ end
16
+
17
+ example 'add the method to the Kernel module' do
18
+ @kernel.has_definition?(:instance_method, 'foobar').should == true
19
+ end
20
+
21
+ example 'add the method to the global scope' do
22
+ @definitions.has_definition?(:instance_method, 'foobar').should == true
23
+ end
24
+ end
25
+ end
@@ -2,12 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe RubyLint::VirtualMachine do
4
4
  describe 'patching methods' do
5
- after do
6
- RubyLint::GlobalScope.definitions.lookup(:const, 'String') \
7
- .definitions[:method] \
8
- .delete('foobar')
9
- end
10
-
11
5
  example 'add a class method to the String class' do
12
6
  code = <<-CODE
13
7
  class String
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ # https://github.com/YorickPeterse/ruby-lint/issues/80
5
+ context 'defining square bracket methods' do
6
+ before :all do
7
+ code = <<-CODE
8
+ class Example
9
+ def [](key)
10
+ end
11
+
12
+ def []=(key, value)
13
+ end
14
+ end
15
+ CODE
16
+
17
+ @definitions = build_definitions(code)
18
+ end
19
+
20
+ example 'define the [] method' do
21
+ @definitions.lookup(:const, 'Example')
22
+ .has_definition?(:instance_method, '[]')
23
+ .should == true
24
+ end
25
+
26
+ example 'define the []= method' do
27
+ @definitions.lookup(:const, 'Example')
28
+ .has_definition?(:instance_method, '[]=')
29
+ .should == true
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyLint::VirtualMachine do
4
+ describe 'self in instances/classes' do
5
+ before :all do
6
+ code = <<-CODE
7
+ class Example
8
+ def self.class_method
9
+ @class_self = self
10
+ end
11
+
12
+ def instance_method
13
+ @instance_self = self
14
+ end
15
+ end
16
+ CODE
17
+
18
+ definitions = build_definitions(code)
19
+ @constant = definitions.lookup(:const, 'Example')
20
+ end
21
+
22
+ example 'set the right instance type' do
23
+ @constant.lookup(:ivar, '@class_self').value.instance?.should == false
24
+ @constant.lookup(:ivar, '@instance_self').value.instance?.should == true
25
+ end
26
+
27
+ example 'self should be defined as a class method' do
28
+ @constant.lookup(:method, 'self').is_a?(ruby_method).should == true
29
+ end
30
+
31
+ example 'self should be defined as an instance method' do
32
+ @constant.lookup(:instance_method, 'self')
33
+ .is_a?(ruby_method)
34
+ .should == true
35
+ end
36
+ end
37
+ end