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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b345fdf9724a766a2684c0977f862cd7e408ce9
4
- data.tar.gz: a6d56efba7d749595035211678c38c8a4323c94d
3
+ metadata.gz: dd18d2ac845d4520591324dc3491cbd5a3d9b0ca
4
+ data.tar.gz: b7a344031e1b300104e1331486dbc4b8903ff9c8
5
5
  SHA512:
6
- metadata.gz: efe10626ab798f0d8069d5bceb3c39efb634c1afbf009490c0a01670ca2f049ddabbbf9f17f3f9a84058cb69fe14c9b42f3031da4d9211c1d8f075d3889596af
7
- data.tar.gz: 14f98dd7fdf7875035021f5830da8574c0f4ab82bbbc7775a1476a26e56052dd4259ba0d67e9c8a1893e090bc5c4db3dc069e6f2ac2d0ddd4ceae06617872813
6
+ metadata.gz: 78ad431d97cef27b33f53842e36b46771895a3d1cef0ce8982a77245e5ce3b1c1400318ece043a24a594277eb21ab5dad6026d74473c9d1c9354a5289ddf6309
7
+ data.tar.gz: c6010baaeb8aec96bdaf8a00eb80c92a186be594fa20136e45a3a374749c20588a3a0dd8bac2dd659d7f911eb40cd321f28f291dd1c3dd92daf6932d7fd3234f
@@ -1 +1 @@
1
- 2.0
1
+ 2.1
@@ -4,7 +4,8 @@ script: bundle exec rake travis
4
4
  rvm:
5
5
  - 1.9.3
6
6
  - 2.0.0
7
- - rbx-2.2.1
7
+ - 2.1.0
8
+ - rbx-2.2
8
9
  - jruby-19mode
9
10
 
10
11
  notifications:
@@ -15,8 +16,4 @@ notifications:
15
16
  on_success: change
16
17
  on_failure: always
17
18
 
18
- branches:
19
- only:
20
- - master
21
-
22
19
  cache: bundler
data/Gemfile CHANGED
@@ -3,8 +3,13 @@ source 'https://rubygems.org/'
3
3
  gemspec
4
4
 
5
5
  group :testing do
6
- gem 'rubysl', :platform => :rbx
7
- gem 'rubinius-developer_tools', :platform => :rbx
8
- gem 'racc', :platform => :rbx
9
- gem 'ruby-prof', :platform => :mri
6
+ platform :rbx do
7
+ gem 'rubysl'
8
+ gem 'rubinius-developer_tools'
9
+ gem 'racc'
10
+ end
11
+
12
+ platform :mri do
13
+ gem 'ruby-prof'
14
+ end
10
15
  end
data/MANIFEST CHANGED
@@ -21,6 +21,8 @@ checksum/ruby-lint-0.9.1.gem.sha512
21
21
  checksum/ruby-lint-1.0.0.gem.sha512
22
22
  checksum/ruby-lint-1.0.0.pre.preview1.gem.sha512
23
23
  checksum/ruby-lint-1.0.1.gem.sha512
24
+ checksum/ruby-lint-1.0.2.gem.sha512
25
+ checksum/ruby-lint-1.0.3.gem.sha512
24
26
  doc/.gitkeep
25
27
  doc/DCO.md
26
28
  doc/architecture.md
@@ -29,9 +31,15 @@ doc/code_analysis.md
29
31
  doc/configuration.md
30
32
  doc/css/.gitkeep
31
33
  doc/css/common.css
34
+ doc/definitions.md
32
35
  doc/graphviz/flow.dot
33
36
  doc/images/.gitkeep
34
37
  doc/images/flow.png
38
+ gen/rails/constants.txt
39
+ gen/rails/requires.rb
40
+ gen/stdlib/constants.rb
41
+ gen/stdlib/constants.txt
42
+ gen/stdlib/requires.rb
35
43
  lib/ruby-lint.rb
36
44
  lib/ruby-lint/analysis/argument_amount.rb
37
45
  lib/ruby-lint/analysis/base.rb
@@ -40,6 +48,7 @@ lib/ruby-lint/analysis/shadowing_variables.rb
40
48
  lib/ruby-lint/analysis/undefined_methods.rb
41
49
  lib/ruby-lint/analysis/undefined_variables.rb
42
50
  lib/ruby-lint/analysis/unused_variables.rb
51
+ lib/ruby-lint/analysis/useless_equality_checks.rb
43
52
  lib/ruby-lint/ast/builder.rb
44
53
  lib/ruby-lint/ast/node.rb
45
54
  lib/ruby-lint/benchmark/average.rb
@@ -47,14 +56,14 @@ lib/ruby-lint/cache.rb
47
56
  lib/ruby-lint/cache_entry.rb
48
57
  lib/ruby-lint/cli.rb
49
58
  lib/ruby-lint/cli/analyze.rb
50
- lib/ruby-lint/cli/ast.rb
51
59
  lib/ruby-lint/cli/base.rb
52
- lib/ruby-lint/cli/plot.rb
60
+ lib/ruby-lint/cli/cache.rb
53
61
  lib/ruby-lint/configuration.rb
54
62
  lib/ruby-lint/constant_loader.rb
55
63
  lib/ruby-lint/constant_path.rb
56
64
  lib/ruby-lint/default_names.rb
57
65
  lib/ruby-lint/definition/constant_proxy.rb
66
+ lib/ruby-lint/definition/registry.rb
58
67
  lib/ruby-lint/definition/ruby_method.rb
59
68
  lib/ruby-lint/definition/ruby_object.rb
60
69
  lib/ruby-lint/definition_builder/base.rb
@@ -68,12 +77,10 @@ lib/ruby-lint/definition_builder/ruby_module.rb
68
77
  lib/ruby-lint/definition_generator.rb
69
78
  lib/ruby-lint/definitions/core.rb
70
79
  lib/ruby-lint/definitions/core/abbrev.rb
71
- lib/ruby-lint/definitions/core/arg0.rb
72
80
  lib/ruby-lint/definitions/core/argf.rb
73
81
  lib/ruby-lint/definitions/core/argument_error.rb
74
82
  lib/ruby-lint/definitions/core/argv.rb
75
83
  lib/ruby-lint/definitions/core/array.rb
76
- lib/ruby-lint/definitions/core/autoload.rb
77
84
  lib/ruby-lint/definitions/core/base64.rb
78
85
  lib/ruby-lint/definitions/core/basic_object.rb
79
86
  lib/ruby-lint/definitions/core/basic_socket.rb
@@ -89,13 +96,11 @@ lib/ruby-lint/definitions/core/complex.rb
89
96
  lib/ruby-lint/definitions/core/condition_variable.rb
90
97
  lib/ruby-lint/definitions/core/config.rb
91
98
  lib/ruby-lint/definitions/core/conftest_c.rb
92
- lib/ruby-lint/definitions/core/continuation.rb
93
99
  lib/ruby-lint/definitions/core/coutflag.rb
94
100
  lib/ruby-lint/definitions/core/csv.rb
95
101
  lib/ruby-lint/definitions/core/data.rb
96
102
  lib/ruby-lint/definitions/core/date.rb
97
103
  lib/ruby-lint/definitions/core/date_time.rb
98
- lib/ruby-lint/definitions/core/default_record_separator.rb
99
104
  lib/ruby-lint/definitions/core/delegator.rb
100
105
  lib/ruby-lint/definitions/core/digest.rb
101
106
  lib/ruby-lint/definitions/core/dir.rb
@@ -118,12 +123,10 @@ lib/ruby-lint/definitions/core/export_prefix.rb
118
123
  lib/ruby-lint/definitions/core/failed_message.rb
119
124
  lib/ruby-lint/definitions/core/false.rb
120
125
  lib/ruby-lint/definitions/core/false_class.rb
121
- lib/ruby-lint/definitions/core/fatal_error.rb
122
126
  lib/ruby-lint/definitions/core/fcntl.rb
123
127
  lib/ruby-lint/definitions/core/fiber.rb
124
128
  lib/ruby-lint/definitions/core/fiber_error.rb
125
129
  lib/ruby-lint/definitions/core/file.rb
126
- lib/ruby-lint/definitions/core/file_list.rb
127
130
  lib/ruby-lint/definitions/core/file_test.rb
128
131
  lib/ruby-lint/definitions/core/file_utils.rb
129
132
  lib/ruby-lint/definitions/core/find.rb
@@ -137,7 +140,6 @@ lib/ruby-lint/definitions/core/getopt_long.rb
137
140
  lib/ruby-lint/definitions/core/gserver.rb
138
141
  lib/ruby-lint/definitions/core/hash.rb
139
142
  lib/ruby-lint/definitions/core/hdr_ext.rb
140
- lib/ruby-lint/definitions/core/immediate_value.rb
141
143
  lib/ruby-lint/definitions/core/index_error.rb
142
144
  lib/ruby-lint/definitions/core/install_dirs.rb
143
145
  lib/ruby-lint/definitions/core/integer.rb
@@ -163,8 +165,6 @@ lib/ruby-lint/definitions/core/marshal.rb
163
165
  lib/ruby-lint/definitions/core/match_data.rb
164
166
  lib/ruby-lint/definitions/core/math.rb
165
167
  lib/ruby-lint/definitions/core/matrix.rb
166
- lib/ruby-lint/definitions/core/md5.rb
167
- lib/ruby-lint/definitions/core/memory_segmention_error.rb
168
168
  lib/ruby-lint/definitions/core/method.rb
169
169
  lib/ruby-lint/definitions/core/module.rb
170
170
  lib/ruby-lint/definitions/core/monitor.rb
@@ -191,32 +191,23 @@ lib/ruby-lint/definitions/core/orig_libpath.rb
191
191
  lib/ruby-lint/definitions/core/outflag.rb
192
192
  lib/ruby-lint/definitions/core/pathname.rb
193
193
  lib/ruby-lint/definitions/core/pp.rb
194
- lib/ruby-lint/definitions/core/precision.rb
195
194
  lib/ruby-lint/definitions/core/pretty_print.rb
196
195
  lib/ruby-lint/definitions/core/prime.rb
197
- lib/ruby-lint/definitions/core/primitive_failure.rb
198
196
  lib/ruby-lint/definitions/core/proc.rb
199
197
  lib/ruby-lint/definitions/core/process.rb
200
198
  lib/ruby-lint/definitions/core/profiler__.rb
201
199
  lib/ruby-lint/definitions/core/pstore.rb
202
- lib/ruby-lint/definitions/core/psych.rb
203
200
  lib/ruby-lint/definitions/core/queue.rb
204
- lib/ruby-lint/definitions/core/rake.rb
205
- lib/ruby-lint/definitions/core/rake_file_utils.rb
206
- lib/ruby-lint/definitions/core/rakeversion.rb
207
201
  lib/ruby-lint/definitions/core/random.rb
208
202
  lib/ruby-lint/definitions/core/range.rb
209
203
  lib/ruby-lint/definitions/core/range_error.rb
210
204
  lib/ruby-lint/definitions/core/rational.rb
211
205
  lib/ruby-lint/definitions/core/rb_config.rb
212
- lib/ruby-lint/definitions/core/rdoc.rb
213
206
  lib/ruby-lint/definitions/core/readline.rb
214
207
  lib/ruby-lint/definitions/core/regexp.rb
215
208
  lib/ruby-lint/definitions/core/regexp_error.rb
216
209
  lib/ruby-lint/definitions/core/resolv.rb
217
- lib/ruby-lint/definitions/core/rexml.rb
218
210
  lib/ruby-lint/definitions/core/rpathflag.rb
219
- lib/ruby-lint/definitions/core/rss.rb
220
211
  lib/ruby-lint/definitions/core/ruby_copyright.rb
221
212
  lib/ruby-lint/definitions/core/ruby_description.rb
222
213
  lib/ruby-lint/definitions/core/ruby_engine.rb
@@ -232,7 +223,6 @@ lib/ruby-lint/definitions/core/script_error.rb
232
223
  lib/ruby-lint/definitions/core/secure_random.rb
233
224
  lib/ruby-lint/definitions/core/security_error.rb
234
225
  lib/ruby-lint/definitions/core/set.rb
235
- lib/ruby-lint/definitions/core/sha1.rb
236
226
  lib/ruby-lint/definitions/core/shellwords.rb
237
227
  lib/ruby-lint/definitions/core/signal.rb
238
228
  lib/ruby-lint/definitions/core/signal_exception.rb
@@ -281,8 +271,6 @@ lib/ruby-lint/definitions/core/unbound_method.rb
281
271
  lib/ruby-lint/definitions/core/universal_ints.rb
282
272
  lib/ruby-lint/definitions/core/unixserver.rb
283
273
  lib/ruby-lint/definitions/core/unixsocket.rb
284
- lib/ruby-lint/definitions/core/unmarshalable.rb
285
- lib/ruby-lint/definitions/core/unsupported_library_error.rb
286
274
  lib/ruby-lint/definitions/core/uri.rb
287
275
  lib/ruby-lint/definitions/core/vector.rb
288
276
  lib/ruby-lint/definitions/core/weak_ref.rb
@@ -291,8 +279,9 @@ lib/ruby-lint/definitions/core/xmlrpc.rb
291
279
  lib/ruby-lint/definitions/core/yaml.rb
292
280
  lib/ruby-lint/definitions/core/zero_division_error.rb
293
281
  lib/ruby-lint/definitions/core/zlib.rb
294
- lib/ruby-lint/definitions/global_variables.rb
295
- lib/ruby-lint/definitions/rails.rb
282
+ lib/ruby-lint/definitions/gems/.gitkeep
283
+ lib/ruby-lint/definitions/gems/devise.rb
284
+ lib/ruby-lint/definitions/gems/nokogiri.rb
296
285
  lib/ruby-lint/definitions/rails/abstract_controller.rb
297
286
  lib/ruby-lint/definitions/rails/action_controller.rb
298
287
  lib/ruby-lint/definitions/rails/action_dispatch.rb
@@ -310,10 +299,10 @@ lib/ruby-lint/docstring/param_tag.rb
310
299
  lib/ruby-lint/docstring/parser.rb
311
300
  lib/ruby-lint/docstring/return_tag.rb
312
301
  lib/ruby-lint/extensions/string.rb
302
+ lib/ruby-lint/file_list.rb
313
303
  lib/ruby-lint/file_loader.rb
314
304
  lib/ruby-lint/file_scanner.rb
315
305
  lib/ruby-lint/generated_constant.rb
316
- lib/ruby-lint/global_scope.rb
317
306
  lib/ruby-lint/inspector.rb
318
307
  lib/ruby-lint/iterator.rb
319
308
  lib/ruby-lint/method_call/alias.rb
@@ -329,8 +318,10 @@ lib/ruby-lint/parser.rb
329
318
  lib/ruby-lint/presenter/json.rb
330
319
  lib/ruby-lint/presenter/syntastic.rb
331
320
  lib/ruby-lint/presenter/text.rb
321
+ lib/ruby-lint/rake_task.rb
332
322
  lib/ruby-lint/report.rb
333
323
  lib/ruby-lint/report/entry.rb
324
+ lib/ruby-lint/ruby_lint.rb
334
325
  lib/ruby-lint/runner.rb
335
326
  lib/ruby-lint/template/definition.erb
336
327
  lib/ruby-lint/template/scope.rb
@@ -369,15 +360,17 @@ spec/ruby-lint/analysis/shadowing_variables_spec.rb
369
360
  spec/ruby-lint/analysis/undefined_methods_spec.rb
370
361
  spec/ruby-lint/analysis/undefined_variables_spec.rb
371
362
  spec/ruby-lint/analysis/unused_variables_spec.rb
363
+ spec/ruby-lint/analysis/useless_equality_checks_spec.rb
372
364
  spec/ruby-lint/ast/node_spec.rb
373
365
  spec/ruby-lint/cache_entry_spec.rb
374
366
  spec/ruby-lint/cache_spec.rb
375
367
  spec/ruby-lint/cli/analyze_spec.rb
376
- spec/ruby-lint/cli/ast_spec.rb
377
368
  spec/ruby-lint/configuration_spec.rb
369
+ spec/ruby-lint/constant_loader_spec.rb
378
370
  spec/ruby-lint/constant_path.rb
379
371
  spec/ruby-lint/definition/constant_proxy_spec.rb
380
372
  spec/ruby-lint/definition/dsl_spec.rb
373
+ spec/ruby-lint/definition/registry_spec.rb
381
374
  spec/ruby-lint/definition/ruby_method_spec.rb
382
375
  spec/ruby-lint/definition/ruby_object_spec.rb
383
376
  spec/ruby-lint/definition_builder/primitive_spec.rb
@@ -386,15 +379,21 @@ spec/ruby-lint/definition_builder/ruby_method_spec.rb
386
379
  spec/ruby-lint/definition_builder/ruby_module_spec.rb
387
380
  spec/ruby-lint/definitions/argv_spec.rb
388
381
  spec/ruby-lint/definitions/env_spec.rb
382
+ spec/ruby-lint/definitions/file_spec.rb
383
+ spec/ruby-lint/definitions/fixnum_spec.rb
389
384
  spec/ruby-lint/definitions/io_spec.rb
385
+ spec/ruby-lint/definitions/kernel_spec.rb
386
+ spec/ruby-lint/definitions/range_spec.rb
387
+ spec/ruby-lint/definitions/string_spec.rb
390
388
  spec/ruby-lint/docstring/mapping.rb
391
389
  spec/ruby-lint/docstring/parser_spec.rb
392
390
  spec/ruby-lint/extensions/string_spec.rb
391
+ spec/ruby-lint/file_list_spec.rb
393
392
  spec/ruby-lint/file_loader_spec.rb
394
393
  spec/ruby-lint/file_scanner_spec.rb
395
394
  spec/ruby-lint/inspector_spec.rb
396
395
  spec/ruby-lint/iterator_spec.rb
397
- spec/ruby-lint/method_call/assign_member_spec.rb
396
+ spec/ruby-lint/method_call/.gitkeep
398
397
  spec/ruby-lint/nested_stack_spec.rb
399
398
  spec/ruby-lint/node_hash_spec.rb
400
399
  spec/ruby-lint/parser_spec.rb
@@ -404,6 +403,7 @@ spec/ruby-lint/presenter/text_spec.rb
404
403
  spec/ruby-lint/report/entry_spec.rb
405
404
  spec/ruby-lint/report_spec.rb
406
405
  spec/ruby-lint/runner_spec.rb
406
+ spec/ruby-lint/variable_predicates_spec.rb
407
407
  spec/ruby-lint/virtual_machine/alias_spec.rb
408
408
  spec/ruby-lint/virtual_machine/assignments/arrays_spec.rb
409
409
  spec/ruby-lint/virtual_machine/assignments/assignment_arguments_spec.rb
@@ -433,16 +433,20 @@ spec/ruby-lint/virtual_machine/interpolation_spec.rb
433
433
  spec/ruby-lint/virtual_machine/location_spec.rb
434
434
  spec/ruby-lint/virtual_machine/method_call_tracking_spec.rb
435
435
  spec/ruby-lint/virtual_machine/methods/attr_spec.rb
436
+ spec/ruby-lint/virtual_machine/methods/calls_spec.rb
436
437
  spec/ruby-lint/virtual_machine/methods/define_method_spec.rb
437
438
  spec/ruby-lint/virtual_machine/methods/defining_spec.rb
438
439
  spec/ruby-lint/virtual_machine/methods/docstrings_spec.rb
439
440
  spec/ruby-lint/virtual_machine/methods/exporting_spec.rb
441
+ spec/ruby-lint/virtual_machine/methods/kernel_spec.rb
440
442
  spec/ruby-lint/virtual_machine/methods/parameters_spec.rb
441
443
  spec/ruby-lint/virtual_machine/methods/patching_spec.rb
442
444
  spec/ruby-lint/virtual_machine/methods/scoping_spec.rb
445
+ spec/ruby-lint/virtual_machine/methods/square_bracket_spec.rb
443
446
  spec/ruby-lint/virtual_machine/methods/visibility_spec.rb
444
447
  spec/ruby-lint/virtual_machine/modules_spec.rb
445
448
  spec/ruby-lint/virtual_machine/reference_amount_spec.rb
449
+ spec/ruby-lint/virtual_machine/self_spec.rb
446
450
  spec/ruby-lint/virtual_machine/unused_spec.rb
447
451
  spec/spec_helper.rb
448
452
  spec/support/building.rb
data/README.md CHANGED
@@ -4,10 +4,21 @@
4
4
  [![Coverage Status](https://coveralls.io/repos/YorickPeterse/ruby-lint/badge.png?branch=master)](https://coveralls.io/r/YorickPeterse/ruby-lint)
5
5
  [![Code Climate](https://codeclimate.com/github/YorickPeterse/ruby-lint.png)](https://codeclimate.com/github/YorickPeterse/ruby-lint)
6
6
 
7
- ruby-lint is a linter and static code analysis tool for Ruby. It is inspired by
8
- similar tools such as jshint, flake8 and similar tools. ruby-lint primarily
9
- focuses on logic related errors such as the use of non existing variables
10
- instead of focusing on semantics (e.g. the amount of characters per line).
7
+ ruby-lint is a static code analysis tool for Ruby. It is inspired by tools such
8
+ as jshint, flake8 and similar tools. ruby-lint primarily focuses on logic
9
+ related errors such as the use of non existing variables instead of focusing on
10
+ semantics (e.g. the amount of characters per line).
11
+
12
+ The features of ruby-lint include but are not limited to the detection of
13
+ unused variables, the use of undefined methods and method calls with invalid
14
+ argument amounts and more. More in-depth analysis will be added over time.
15
+
16
+ The aim of ruby-lint is to provide analysis that is as accurate as possible.
17
+ However, due to the dynamic nature of Ruby and the sheer amount of meta-magic
18
+ in third-party code there will at times be false positives. Analysis can be
19
+ improved by documenting your code using [YARD][yard], in particular the
20
+ `@param` and `@return` tags are used by ruby-lint to obtain extra information
21
+ when processing methods.
11
22
 
12
23
  ## Requirements
13
24
 
@@ -16,7 +27,7 @@ instead of focusing on semantics (e.g. the amount of characters per line).
16
27
 
17
28
  The following Ruby implementations/versions are officially supported:
18
29
 
19
- * MRI 1.9.3 and newer
30
+ * MRI 1.9.3, 2.0 or 2.1
20
31
  * Rubinius 2.0 and newer
21
32
  * Jruby 1.7 and newer
22
33
 
@@ -123,6 +134,7 @@ In the past Gems were also signed using PGP, this is no longer the case.
123
134
  * {file:architecture Architecture}
124
135
  * {file:code\_analysis Code Analysis}
125
136
  * {file:configuration Configuration}
137
+ * {file:definitions Definitions}
126
138
 
127
139
  ## License
128
140
 
@@ -133,3 +145,4 @@ in the root directory of this repository.
133
145
  [syntastic]: https://github.com/scrooloose/syntastic
134
146
  [flycheck]: https://github.com/flycheck/flycheck/
135
147
  [rubocop]: https://github.com/bbatsov/rubocop
148
+ [yard]: http://yardoc.org/
data/Rakefile CHANGED
@@ -1,6 +1,5 @@
1
- require File.expand_path('../lib/ruby-lint/extensions/string', __FILE__)
2
- require File.expand_path('../lib/ruby-lint/inspector', __FILE__)
3
- require File.expand_path('../lib/ruby-lint/definition_generator', __FILE__)
1
+ require_relative 'lib/ruby-lint/definition_generator'
2
+ require_relative 'lib/ruby-lint/rake_task'
4
3
 
5
4
  require 'yaml'
6
5
  require 'bundler/gem_tasks'
@@ -8,6 +7,11 @@ require 'digest/sha2'
8
7
  require 'coveralls/rake/task'
9
8
  require 'rake/clean'
10
9
 
10
+ RubyLint::RakeTask.new do |task|
11
+ task.name = 'lint'
12
+ task.files = ['./lib/ruby-lint']
13
+ end
14
+
11
15
  Coveralls::RakeTask.new
12
16
 
13
17
  GEMSPEC = Gem::Specification.load('ruby-lint.gemspec')
@@ -0,0 +1 @@
1
+ 01bdfe10f10950d2035dc1a0289e0cf1b6f40a0b23fead3ee1f39391e309ed00972bdc0a2b35859539660ebb1a2cc5a222f9eded6d511a28daa32fdeb9829786
@@ -0,0 +1 @@
1
+ dc93aa3a5f196b8badbab5c06975e7da6710508e2f6efebf16f063413d4f1d80d8f02897c0aced4a7593e16d1f2f53465a3be9ff16d0b6b084086ec6a169aa1a
@@ -5,6 +5,46 @@ This document contains a short summary of the various releases of ruby-lint.
5
5
  For a full list of commits included in each release see the corresponding Git
6
6
  tags (named after the versions).
7
7
 
8
+ ## 1.1.0 - 2014-02-02
9
+
10
+ This release changes the way the definitions system works so that it no longer
11
+ stores a set of global definition objects. Instead "templates" (so to speak)
12
+ are provided which are applied to individual `RubyLint::VirtualMachine`
13
+ instances. This makes it much easier to analyze code that patches core classes
14
+ such as `String` or `Fixnum`.
15
+
16
+ There have also been various other, smaller changes. The ones worth mentioning
17
+ as following:
18
+
19
+ * A new analysis class, UselessEqualityChecks, has been added. This class adds
20
+ warnings for expressions such as `"foo" == true`.
21
+ * A Rake task class has been added, making it easier to integrate ruby-lint in
22
+ a Rakefile.
23
+ * The CLI has been cleaned up and the `plot` and `ast` commands have been
24
+ removed. A new command, `cache` has been introduced to manage ruby-lint cache
25
+ files more easily.
26
+ * A bug has been fixed that would prevent ruby-lint from properly loading files
27
+ from multiple directories, see Git commit
28
+ `292bb2b73aa6adfdc750fb846884025afc841393`.
29
+ * Definitions have been added for Devise and Nokogiri.
30
+ * Most built-in definitions have been re-generated.
31
+ * Definitions system has been overhauled to no longer use a global state and a
32
+ complex data copying system. Instead the definitions are applied to every
33
+ individual `RubyLint::VirtualMachine` instance.
34
+ * Updated the version of the parser Gem to use.
35
+
36
+ The following bugs/issues have been resolved in this release:
37
+
38
+ * https://github.com/YorickPeterse/ruby-lint/issues/89
39
+ * https://github.com/YorickPeterse/ruby-lint/issues/85
40
+ * https://github.com/YorickPeterse/ruby-lint/issues/91
41
+ * https://github.com/YorickPeterse/ruby-lint/issues/92
42
+ * https://github.com/YorickPeterse/ruby-lint/issues/93
43
+ * https://github.com/YorickPeterse/ruby-lint/issues/94
44
+ * https://github.com/YorickPeterse/ruby-lint/issues/100
45
+ * https://github.com/YorickPeterse/ruby-lint/issues/101
46
+ * https://github.com/YorickPeterse/ruby-lint/issues/102
47
+
8
48
  ## 1.0.3 - 2013-12-23
9
49
 
10
50
  * `self` is now defined as a class and instance method to ensure that the right
@@ -0,0 +1,182 @@
1
+ # @title Definitions
2
+ # Definitions
3
+
4
+ To obtain extra information used in the analysis process ruby-lint uses a set
5
+ of so called "definitions". These definitions describe constants and their
6
+ methods and the associated arguments of said methods. The definitions can be
7
+ created using a basic DSL. Typically end users don't have to write these
8
+ manually as ruby-lint comes with a set of Rake tasks to ease the process of
9
+ creating these definitions. However, manual tweaking might be required in rare
10
+ cases.
11
+
12
+ ## Rationale
13
+
14
+ The definitions exist for 3 reasons:
15
+
16
+ 1. Both MRI and JRuby provide insufficient runtime reflection on method
17
+ arguments (more on this below), a rather crucial aspect in performing
18
+ meaningful analysis.
19
+ 2. Relying on the current runtime for extra information means that users will
20
+ have to load all their used libraries into a ruby-lint session. This will
21
+ often result in degraded performance, in particular startup times will
22
+ increase.
23
+ 3. It's not possible to, during runtime, determine the return type(s) of a
24
+ method. This can only be done by either relying on source documentation or
25
+ by other manual means.
26
+
27
+ These 3 topics are described in detail below.
28
+
29
+ ### Argument Reflection
30
+
31
+ Ruby as a language provides the means to, during runtime, find out what
32
+ arguments a method has, their types and names. For example, consider the
33
+ following code:
34
+
35
+ def example(a, b)
36
+ return a + b
37
+ end
38
+
39
+ We can obtain the arguments list by running the following code:
40
+
41
+ method(:example).parameters
42
+
43
+ This would result in the following value being returned:
44
+
45
+ [[:req, :a], [:req, :b]]
46
+
47
+ Using this we can see that the method takes two required arguments, `a` and
48
+ `b`.
49
+
50
+ Although this works great for methods that are defined in Ruby itself this does
51
+ not work reliably for methods defined in C (in case of MRI) or in Java (in case
52
+ of JRuby).
53
+
54
+ As an example, lets take a look at `String#gsub`. The RDoc documentation of
55
+ this method states the following about its arguments:
56
+
57
+ = String#gsub
58
+
59
+ (from ruby core)
60
+ ------------------------------------------------------------------------------
61
+ str.gsub(pattern, replacement) -> new_str
62
+ str.gsub(pattern, hash) -> new_str
63
+ str.gsub(pattern) {|match| block } -> new_str
64
+ str.gsub(pattern) -> enumerator
65
+
66
+ This states that the method takes 1 required argument (`pattern`), one optional
67
+ argument (`replacement` / `hash`) and a block. However, when we inspect the
68
+ arguments list of this method in MRI we get different results:
69
+
70
+ String.instance_method(:gsub).parameters # => [[:rest]]
71
+
72
+ This would indicate that the method instead takes a single rest argument. This
73
+ however is simply false as calling the method without any arguments (rest
74
+ arguments being optional) results in an argument error:
75
+
76
+ 'foo'.gsub # => ArgumentError: wrong number of arguments (0 for 1..2)
77
+
78
+ This is due to the fact that `String#gsub` method (and many other methods in
79
+ MRI) are defined in C. Since the C API doesn't expose proper systems for
80
+ exposing the argument amounts/types this information is lost.
81
+
82
+ JRuby is also affected by this though at present it's unclear to me if this is
83
+ intentional (in order to mimic MRI's broken behaviour) or a side effect.
84
+ Currently Rubinius is the only Ruby implementation that I know of that does not
85
+ suffer from this problem, largely due to it actually using Ruby for a large
86
+ amount of its core.
87
+
88
+ The above problem also affects every Ruby C extension such as Nokogiri and many
89
+ others.
90
+
91
+ This particular lack of information is problematic for ruby-lint as it means
92
+ that it can not perform meaningful analysis when it relies on the current
93
+ runtime. After all, the accuracy of the analysis process would change depending
94
+ on the Ruby implementation leading to confusing behaviour and false positives.
95
+
96
+ To combat this ruby-lint doesn't use the current runtime for obtaining method
97
+ information. Instead it uses definitions that are pre-generated using Rubinius.
98
+ However, even on Rubinius the accuracy of these definitions will vary for C
99
+ extensions depending on how much these extensions define in C opposed to Ruby.
100
+
101
+ ### Degraded Performance
102
+
103
+ The second reason for not using the current runtime is that by doing so users
104
+ would be required to load their libraries into a ruby-lint session. For
105
+ example, for a Rails project this means loading all of Rails, all the used
106
+ Gems, custom code defined in the `app/` directory and so forth. Doing so will
107
+ increase the startup time of ruby-lint up to a point where it becomes downright
108
+ annoying.
109
+
110
+ To give an example, merely loading Rails using `require 'rails/all'` will add
111
+ around 500 milliseconds to the startup time. Add a few more Gems such as
112
+ Devise, Mongoid and what not and you'll quickly end up having to wait seconds
113
+ for ruby-lint to start up (or any other Ruby program for that matter).
114
+
115
+ As a result of this it was decided that this was less than optimal, which in
116
+ turn was another reason to use pre-generated definitions.
117
+
118
+ ### Return Types
119
+
120
+ Due to Ruby being dynamically typed it's impossible to deduce the return type
121
+ of a method. As a result of this ruby-lint would not be able to figure out what
122
+ `SomeClass.new` would return. This means that for code such as
123
+ `SomeClass.new.foo` ruby-lint would have no other choice but to completely
124
+ ignore it.
125
+
126
+ ruby-lint tries to work around this using two methods:
127
+
128
+ 1. Using YARD documentation (in particular the `@return` and `@param` tags) to
129
+ obtain more information during runtime.
130
+ 2. Using pre-generated definitions that specify return types such as those for
131
+ the `new` and `initialize` methods.
132
+
133
+ This means that ruby-lint is capable of understanding that `String.new` returns
134
+ an instance of `String`. ruby-lint makes the assumption that the class method
135
+ `new` returns an instance of the constant it is defined in, unless the method
136
+ is explicitly overwritten.
137
+
138
+ ## Generating Definitions
139
+
140
+ In most cases one does not need to write these definitions manually, instead
141
+ they are generated using a set of Rake tasks. For best results it's recommended
142
+ to use Rubinius in case you're generating definitions for the Ruby standard
143
+ library.
144
+
145
+ Assuming you have a local copy of ruby-lint you can generate your definitions
146
+ by running the following Rake task:
147
+
148
+ rake -r YOUR_GEM generate:definitions[CONSTANT,lib/ruby-lint/definitions/gems]
149
+
150
+ Here `YOUR_GEM` would be the name of your Gem, `CONSTANT` would be the
151
+ top-level constant. For example, to generate the definitions for Devise you'd
152
+ run the following:
153
+
154
+ rake -r devise generate:definitions[Devise,lib/ruby-lint/definitions/gems]
155
+
156
+ If you are comfortable with the resulting definitions you can submit a pull
157
+ request and I'll take a look at it. I prefer for the definitions to be included
158
+ with ruby-lint itself as this makes it easier to maintain and distribute them
159
+ without requiring users to install a bunch of extra Gems.
160
+
161
+ ## Using Definitions
162
+
163
+ When processing source code ruby-lint will try to automatically load
164
+ definitions where needed. For this to work the definitions should be available
165
+ in the load path defined in {RubyLint::Definition::Registry#load\_path}. By
166
+ default the following directories are searched in for definitions:
167
+
168
+ * lib/ruby-lint/definitions/core
169
+ * lib/ruby-lint/definitions/rails
170
+ * lib/ruby-lint/definitions/gems
171
+
172
+ There should be no need to add extra paths to this list.
173
+
174
+ Definitions are looked up based on the top-level constant referenced in a file.
175
+ For example, of ruby-lint bumps into the constant path `Foo::Bar::Baz` it will
176
+ try to look for a file called `foo.rb` in the above directories. It is expected
177
+ that if this file exists it defines the `Foo` constant (and its child
178
+ constants).
179
+
180
+ The process of loading definitions is handled by
181
+ {RubyLint::Definition::Registry#load} and
182
+ {RubyLint::ConstantLoader#load\_constant}.