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
@@ -0,0 +1,12 @@
1
+ AbstractController
2
+ ActionController
3
+ ActionDispatch
4
+ ActionMailer
5
+ ActionPack
6
+ ActionView
7
+ ActiveModel
8
+ ActiveRecord
9
+ ActiveSupport
10
+ Arel
11
+ Rails
12
+ Sprockets
@@ -0,0 +1,2 @@
1
+ require 'mail'
2
+ require 'rails/all'
@@ -0,0 +1,30 @@
1
+ # Loads all stdlib files and writes a list of constants to a text file. This is
2
+ # run outside of Rake to ensure a clean environment not polluted by Rake and
3
+ # other loaded dependencies.
4
+
5
+ require_relative 'requires'
6
+
7
+ # These are maintained manually.
8
+ ignore = DATA.read.split("\n")
9
+ consts = Object.constants.map(&:to_s) - ignore
10
+
11
+ File.open(File.expand_path('../constants.txt', __FILE__), 'w') do |handle|
12
+ handle.write(consts.sort.join("\n"))
13
+ end
14
+
15
+ __END__
16
+ ARGV
17
+ BasicObject
18
+ Class
19
+ ENV
20
+ Kernel
21
+ Module
22
+ RSS
23
+ Rubinius
24
+ RubyLex
25
+ RubySL
26
+ RubyToken
27
+ Rubysl
28
+ STDERR
29
+ STDIN
30
+ STDOUT
@@ -0,0 +1,214 @@
1
+ ARGF
2
+ Abbrev
3
+ Addrinfo
4
+ ArgumentError
5
+ Array
6
+ Base64
7
+ BasicSocket
8
+ Benchmark
9
+ Bignum
10
+ Binding
11
+ CGI
12
+ CLEANINGS
13
+ CMath
14
+ COMMON_HEADERS
15
+ COMMON_LIBS
16
+ COMPILE_C
17
+ COMPILE_CXX
18
+ COMPILE_RULES
19
+ CONFIG
20
+ CONFTEST
21
+ CONFTEST_C
22
+ COUTFLAG
23
+ CPPOUTFILE
24
+ CROSS_COMPILING
25
+ CSV
26
+ CXX_EXT
27
+ C_EXT
28
+ Comparable
29
+ Complex
30
+ ConditionVariable
31
+ Config
32
+ DATA
33
+ DRb
34
+ DRbIdConv
35
+ DRbObject
36
+ DRbUndumped
37
+ Data
38
+ Date
39
+ DateTime
40
+ Delegator
41
+ Digest
42
+ Dir
43
+ EOFError
44
+ ERB
45
+ EXPORT_PREFIX
46
+ Encoding
47
+ EncodingError
48
+ Enumerable
49
+ Enumerator
50
+ Errno
51
+ Etc
52
+ Exception
53
+ Exception2MessageMapper
54
+ ExceptionForMatrix
55
+ FALSE
56
+ FailedMessage
57
+ FalseClass
58
+ Fcntl
59
+ Fiber
60
+ FiberError
61
+ File
62
+ FileTest
63
+ FileUtils
64
+ Find
65
+ Fixnum
66
+ Float
67
+ FloatDomainError
68
+ Forwardable
69
+ GC
70
+ GServer
71
+ Gem
72
+ GetoptLong
73
+ HDR_EXT
74
+ Hash
75
+ INSTALL_DIRS
76
+ IO
77
+ IOError
78
+ IPAddr
79
+ IPSocket
80
+ IRB
81
+ IndexError
82
+ Integer
83
+ Interrupt
84
+ JSON
85
+ Kconv
86
+ KeyError
87
+ LIBARG
88
+ LIBPATHFLAG
89
+ LINK_SO
90
+ LoadError
91
+ LocalJumpError
92
+ Logger
93
+ Logging
94
+ MAIN_DOES_NOTHING
95
+ MakeMakefile
96
+ Marshal
97
+ MatchData
98
+ Math
99
+ Matrix
100
+ Method
101
+ Monitor
102
+ MonitorMixin
103
+ Mutex
104
+ Mutex_m
105
+ NIL
106
+ NKF
107
+ NameError
108
+ NilClass
109
+ NoMemoryError
110
+ NoMethodError
111
+ NotImplementedError
112
+ Numeric
113
+ ORIG_LIBPATH
114
+ OUTFLAG
115
+ Object
116
+ ObjectSpace
117
+ Observable
118
+ Open3
119
+ OpenSSL
120
+ OpenStruct
121
+ OpenURI
122
+ OptionParser
123
+ PP
124
+ PStore
125
+ Pathname
126
+ PrettyPrint
127
+ Prime
128
+ Proc
129
+ Process
130
+ Profiler__
131
+ Psych
132
+ Queue
133
+ RPATHFLAG
134
+ RUBYGEMS_ACTIVATION_MONITOR
135
+ RUBY_COPYRIGHT
136
+ RUBY_DESCRIPTION
137
+ RUBY_ENGINE
138
+ RUBY_PATCHLEVEL
139
+ RUBY_PLATFORM
140
+ RUBY_RELEASE_DATE
141
+ RUBY_REVISION
142
+ RUBY_VERSION
143
+ RULE_SUBST
144
+ Random
145
+ Range
146
+ RangeError
147
+ Rational
148
+ RbConfig
149
+ Readline
150
+ Regexp
151
+ RegexpError
152
+ Resolv
153
+ RubyVM
154
+ RuntimeError
155
+ SRC_EXT
156
+ STRING_OR_FAILED_FORMAT
157
+ ScanError
158
+ Scanf
159
+ ScriptError
160
+ SecureRandom
161
+ SecurityError
162
+ Set
163
+ Shellwords
164
+ Signal
165
+ SignalException
166
+ SimpleDelegator
167
+ SingleForwardable
168
+ Singleton
169
+ SizedQueue
170
+ Socket
171
+ SocketError
172
+ SortedSet
173
+ StandardError
174
+ StopIteration
175
+ String
176
+ StringIO
177
+ StringScanner
178
+ Struct
179
+ Symbol
180
+ SyntaxError
181
+ SystemCallError
182
+ SystemExit
183
+ SystemStackError
184
+ TCPServer
185
+ TCPSocket
186
+ TOPLEVEL_BINDING
187
+ TRUE
188
+ TRY_LINK
189
+ TSort
190
+ Tempfile
191
+ ThWait
192
+ Thread
193
+ ThreadError
194
+ ThreadGroup
195
+ ThreadsWait
196
+ Time
197
+ Timeout
198
+ TimeoutError
199
+ TracePoint
200
+ TrueClass
201
+ TypeError
202
+ UDPSocket
203
+ UNIVERSAL_INTS
204
+ UNIXServer
205
+ UNIXSocket
206
+ URI
207
+ UnboundMethod
208
+ Vector
209
+ WEBrick
210
+ WeakRef
211
+ XMLRPC
212
+ YAML
213
+ ZeroDivisionError
214
+ Zlib
@@ -0,0 +1,64 @@
1
+ require 'abbrev'
2
+ require 'base64'
3
+ require 'benchmark'
4
+ require 'cgi'
5
+ require 'cmath'
6
+ require 'complex'
7
+ require 'csv'
8
+ require 'date'
9
+ require 'delegate'
10
+ require 'digest'
11
+ require 'drb'
12
+ require 'e2mmap'
13
+ require 'English'
14
+ require 'erb'
15
+ require 'expect'
16
+ require 'fileutils'
17
+ require 'find'
18
+ require 'forwardable'
19
+ require 'getoptlong'
20
+ require 'gserver'
21
+ require 'ipaddr'
22
+ require 'irb'
23
+ require 'json'
24
+ require 'kconv'
25
+ require 'logger'
26
+ require 'mathn'
27
+ require 'matrix'
28
+ require 'mkmf'
29
+ require 'monitor'
30
+ require 'mutex_m'
31
+ require 'observer'
32
+ require 'open3'
33
+ require 'openssl'
34
+ require 'open-uri'
35
+ require 'optparse'
36
+ require 'ostruct'
37
+ require 'pathname'
38
+ require 'pp'
39
+ require 'prettyprint'
40
+ require 'prime'
41
+ require 'profiler'
42
+ require 'pstore'
43
+ require 'rational'
44
+ require 'resolv'
45
+ require 'scanf'
46
+ require 'securerandom'
47
+ require 'set'
48
+ require 'shellwords'
49
+ require 'singleton'
50
+ require 'socket'
51
+ require 'stringio'
52
+ require 'tempfile'
53
+ require 'thread'
54
+ require 'thwait'
55
+ require 'timeout'
56
+ require 'time'
57
+ require 'tmpdir'
58
+ require 'tsort'
59
+ require 'uri'
60
+ require 'weakref'
61
+ require 'webrick'
62
+ require 'xmlrpc'
63
+ require 'yaml'
64
+ require 'zlib'
@@ -1,17 +1,7 @@
1
- gem 'parser', '~> 2.0'
1
+ gem 'parser', ['~> 2.1', '>= 2.1.1']
2
2
 
3
3
  require 'parser'
4
-
5
- # Try to load the latest parser and fall back to 2.0. This should only occur on
6
- # Ruby versions >= 2.1 (e.g. Rubinius HEAD).
7
- begin
8
- require 'parser/current'
9
- rescue NotImplementedError => error
10
- warn "Falling back to Ruby 2.0: #{error.message}"
11
-
12
- require 'parser/ruby20'
13
- Parser::CurrentRuby = Parser::Ruby20
14
- end
4
+ require 'parser/current'
15
5
 
16
6
  require 'yaml'
17
7
  require 'set'
@@ -20,11 +10,13 @@ require 'zlib'
20
10
 
21
11
  require_relative 'ruby-lint/extensions/string'
22
12
 
13
+ require_relative 'ruby-lint/ruby_lint'
23
14
  require_relative 'ruby-lint/variable_predicates'
24
15
  require_relative 'ruby-lint/ast/node'
25
16
  require_relative 'ruby-lint/ast/builder'
26
17
  require_relative 'ruby-lint/parser'
27
18
  require_relative 'ruby-lint/file_scanner'
19
+ require_relative 'ruby-lint/file_list'
28
20
  require_relative 'ruby-lint/nested_stack'
29
21
  require_relative 'ruby-lint/docstring/parser'
30
22
  require_relative 'ruby-lint/docstring/param_tag'
@@ -36,6 +28,7 @@ require_relative 'ruby-lint/cache'
36
28
  require_relative 'ruby-lint/cache_entry'
37
29
 
38
30
  require_relative 'ruby-lint/constant_path'
31
+ require_relative 'ruby-lint/inspector'
39
32
 
40
33
  require_relative 'ruby-lint/definition_builder/base'
41
34
  require_relative 'ruby-lint/definition_builder/ruby_module'
@@ -54,17 +47,16 @@ require_relative 'ruby-lint/method_call/attribute'
54
47
  require_relative 'ruby-lint/method_call/define_method'
55
48
 
56
49
  require_relative 'ruby-lint/iterator'
57
- require_relative 'ruby-lint/global_scope'
58
50
  require_relative 'ruby-lint/virtual_machine'
59
51
  require_relative 'ruby-lint/constant_loader'
60
52
  require_relative 'ruby-lint/file_loader'
61
53
  require_relative 'ruby-lint/method_call_info'
62
54
 
55
+ require_relative 'ruby-lint/definition/registry'
63
56
  require_relative 'ruby-lint/definition/ruby_object'
64
57
  require_relative 'ruby-lint/definition/ruby_method'
65
58
  require_relative 'ruby-lint/definition/constant_proxy'
66
59
  require_relative 'ruby-lint/definitions/core'
67
- require_relative 'ruby-lint/definitions/global_variables'
68
60
 
69
61
  require_relative 'ruby-lint/analysis/base'
70
62
  require_relative 'ruby-lint/analysis/unused_variables'
@@ -73,6 +65,7 @@ require_relative 'ruby-lint/analysis/undefined_variables'
73
65
  require_relative 'ruby-lint/analysis/undefined_methods'
74
66
  require_relative 'ruby-lint/analysis/argument_amount'
75
67
  require_relative 'ruby-lint/analysis/pedantics'
68
+ require_relative 'ruby-lint/analysis/useless_equality_checks'
76
69
 
77
70
  require_relative 'ruby-lint/report'
78
71
  require_relative 'ruby-lint/report/entry'
@@ -43,7 +43,8 @@ module RubyLint
43
43
  # @param [String] name
44
44
  #
45
45
  def has_definition?(scope, name)
46
- exists = scope.has_definition?(scope.method_call_type, name)
46
+ type = scope.method_call_type
47
+ exists = scope.has_definition?(type, name)
47
48
 
48
49
  # Due to the way `parser` wraps block nodes (`(block (send) ...)`
49
50
  # opposed to `(send ... (block))`) we'll try to find the method in the
@@ -53,6 +54,12 @@ module RubyLint
53
54
  exists = prev.has_definition?(prev.method_call_type, name)
54
55
  end
55
56
 
57
+ # If method_missing is defined we'll assume the method calls are
58
+ # handled gracefully and not add any errors for them.
59
+ if !exists and scope.has_definition?(type, 'method_missing')
60
+ exists = true
61
+ end
62
+
56
63
  return exists
57
64
  end
58
65
 
@@ -0,0 +1,92 @@
1
+ module RubyLint
2
+ module Analysis
3
+ ##
4
+ # Analysis class that checks for equality checks and adds warnings when
5
+ # these always evaluate to false. An example of such a check is
6
+ # `:hello == 'hello'`.
7
+ #
8
+ # This analysis class was added after a co-worker banged their head against
9
+ # a wall after finding the following code:
10
+ #
11
+ # if some_value.to_sym == "overall"
12
+ # # ...
13
+ # end
14
+ #
15
+ # This code would never evaluate to true. In the particular case this would
16
+ # result in it never caching certain data.
17
+ #
18
+ class UselessEqualityChecks < Base
19
+ ##
20
+ # @param [RubyLint::AST::Node] node
21
+ #
22
+ def on_send(node)
23
+ receiver, name, arg = *node
24
+
25
+ return unless name == :==
26
+
27
+ left_type = node_type(receiver)
28
+ right_type = node_type(arg)
29
+
30
+ if skip_type?(left_type) or skip_type?(right_type)
31
+ return
32
+ end
33
+
34
+ if left_type != right_type
35
+ warning(
36
+ "Comparing #{left_type} with #{right_type} evaluates to false",
37
+ node
38
+ )
39
+ end
40
+ end
41
+
42
+ ##
43
+ # Returns the type name for a given AST node.
44
+ #
45
+ # @param [RubyLint::AST::Node] node
46
+ # @return [String]
47
+ #
48
+ def node_type(node)
49
+ definition = vm.associations[node]
50
+ type = nil
51
+
52
+ if definition
53
+ type = definition_type(definition)
54
+ end
55
+
56
+ return type
57
+ end
58
+
59
+ ##
60
+ # Returns the type name of the given definition.
61
+ #
62
+ # @param [RubyLint::Definition::RubyObject] object
63
+ # @return [String]
64
+ #
65
+ def definition_type(object)
66
+ name = nil
67
+
68
+ # Built-in types such as Array.
69
+ if object.ruby_class
70
+ name = object.ruby_class
71
+
72
+ # Variables
73
+ elsif object.variable? and object.value
74
+ name = definition_type(object.value)
75
+
76
+ # Constants.
77
+ elsif object.constant? and !object.name.empty?
78
+ name = object.name
79
+ end
80
+
81
+ return name
82
+ end
83
+
84
+ ##
85
+ # @param [String] type
86
+ #
87
+ def skip_type?(type)
88
+ return !type || type == 'unknown'
89
+ end
90
+ end # UselessEqualityChecks
91
+ end # Analysis
92
+ end # RubyLint