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
@@ -55,6 +55,12 @@ describe RubyLint::Configuration do
55
55
 
56
56
  blk.should raise_error(ArgumentError, /does not exist/)
57
57
  end
58
+
59
+ example 'setting the directories to nil' do
60
+ @configuration.directories = nil
61
+
62
+ @configuration.directories.should == []
63
+ end
58
64
  end
59
65
 
60
66
  context 'setting options via the constructor' do
@@ -85,6 +91,20 @@ describe RubyLint::Configuration do
85
91
  end
86
92
  end
87
93
 
94
+ context 'setting options directly' do
95
+ before do
96
+ @configuration = RubyLint::Configuration.new
97
+ end
98
+
99
+ example 'expand the directories set' do
100
+ @configuration.directories = ['lib']
101
+
102
+ @configuration.directories.should == [
103
+ File.expand_path('lib')
104
+ ]
105
+ end
106
+ end
107
+
88
108
  context 'setting options via a configuration file' do
89
109
  example 'set the options from a YAML file' do
90
110
  paths = [fixture_path('config.yml')]
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyLint::ConstantLoader do
4
+ before do
5
+ @definitions = ruby_object.new
6
+ @loader = RubyLint::ConstantLoader.new(:definitions => @definitions)
7
+ end
8
+
9
+ context 'bootstrapping definitions' do
10
+ before do
11
+ @loader.bootstrap
12
+ end
13
+
14
+ example 'bootstrap Module' do
15
+ @definitions.has_definition?(:const, 'Module').should == true
16
+ end
17
+
18
+ example 'bootstrap Fixnum' do
19
+ @definitions.has_definition?(:const, 'Fixnum').should == true
20
+ end
21
+
22
+ example 'bootstrap global variables' do
23
+ @definitions.has_definition?(:gvar, '$LOAD_PATH').should == true
24
+ end
25
+ end
26
+
27
+ context 'loading constants' do
28
+ before do
29
+ @loader.load_constant('PP')
30
+ end
31
+
32
+ example 'mark bootstrapped constants as loaded' do
33
+ @loader.bootstrap
34
+ @loader.loaded?('Module').should == true
35
+ end
36
+
37
+ example 'load a constant' do
38
+ @loader.loaded?('PP').should == true
39
+ end
40
+
41
+ example 'apply a constant to a definition' do
42
+ @definitions.has_definition?(:const, 'PP').should == true
43
+ end
44
+
45
+ example 'update the registry' do
46
+ @loader.registry.include?('PP').should == true
47
+ end
48
+ end
49
+
50
+ context 'dealing with case sensitivity' do
51
+ before do
52
+ @loader.bootstrap
53
+ end
54
+
55
+ example 'do not raise when loading process.rb for the PROCESS constant' do
56
+ block = lambda { @loader.load_constant('PROCESS') }
57
+
58
+ block.should_not raise_error
59
+ end
60
+ end
61
+
62
+ context 'iterating over an AST' do
63
+ before do
64
+ @ast = s(:root, s(:const, nil, 'PP'))
65
+ end
66
+
67
+ example 'load a constant' do
68
+ @loader.run([@ast])
69
+ @loader.loaded?('PP').should == true
70
+ end
71
+
72
+ example 'call the correct callbacks' do
73
+ @loader.should_receive(:on_const)
74
+ .with(an_instance_of(RubyLint::AST::Node))
75
+
76
+ @loader.run([@ast])
77
+ end
78
+ end
79
+ end
@@ -1,54 +1,85 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe RubyLint::Definition::ConstantProxy do
4
- before do
5
- @source = ruby_object.new(:name => 'global', :type => :global)
6
- @proxy = RubyLint::Definition::ConstantProxy.new(@source, 'Foo')
7
- end
4
+ context 'without a registry' do
5
+ before do
6
+ @source = ruby_object.new(:name => 'global', :type => :global)
7
+ @proxy = RubyLint::Definition::ConstantProxy.new(@source, 'Foo')
8
+ end
8
9
 
9
- example 'create a new constant proxy' do
10
- @proxy.proxy_source.should == @source
11
- @proxy.proxy_name.should == 'Foo'
12
- end
10
+ example 'create a new constant proxy' do
11
+ @proxy.proxy_source.should == @source
12
+ @proxy.proxy_name.should == 'Foo'
13
+ end
13
14
 
14
- example 'act like a RubyObject definition' do
15
- @proxy.lookup(:const, 'Bar').nil?.should == true
16
- end
15
+ example 'act like a RubyObject definition' do
16
+ @proxy.lookup(:const, 'Bar').nil?.should == true
17
+ end
17
18
 
18
- example 'cache the definition when it exists' do
19
- @proxy.name.nil?.should == true
20
- @proxy.type.nil?.should == true
19
+ example 'cache the definition when it exists' do
20
+ @proxy.name.nil?.should == true
21
+ @proxy.type.nil?.should == true
21
22
 
22
- @proxy.lookup(:const, 'VERSION').nil?.should == true
23
+ @proxy.lookup(:const, 'VERSION').nil?.should == true
23
24
 
24
- @source.define_constant('Foo').define_constant('VERSION')
25
+ @source.define_constant('Foo').define_constant('VERSION')
25
26
 
26
- @proxy.name.should == 'Foo'
27
- @proxy.type.should == :const
27
+ @proxy.name.should == 'Foo'
28
+ @proxy.type.should == :const
28
29
 
29
- @proxy.lookup(:const, 'VERSION').is_a?(ruby_object).should == true
30
+ @proxy.lookup(:const, 'VERSION').is_a?(ruby_object).should == true
31
+ end
32
+
33
+ example 'delegating #inspect' do
34
+ foo = @source.define_constant('Foo')
35
+
36
+ @proxy.inspect.should == foo.inspect
37
+ end
30
38
  end
31
39
 
32
- example 'autoload definitions from the global scope' do
33
- proxy = RubyLint::Definition::ConstantProxy.new(
34
- RubyLint::GlobalScope,
35
- 'ObjectSpace'
36
- )
40
+ context 'with a registry' do
41
+ before do
42
+ @source = ruby_object.new
43
+ @registry = RubyLint::Definition::Registry.new
44
+
45
+ @proxy = RubyLint::Definition::ConstantProxy
46
+ .new(@source, 'Foo', @registry)
47
+ end
37
48
 
38
- proxy.type.should == :const
39
- proxy.name.should == 'ObjectSpace'
49
+ example 'do not load anything when the registry is empty' do
50
+ @proxy.lookup(:const, 'Foo').nil?.should == true
51
+ end
40
52
 
41
- proxy.proxy_definition.is_a?(ruby_object).should == true
53
+ example 'autoload a definition when possible' do
54
+ @registry.register('Foo') { |defs| defs.define_constant('Foo') }
55
+
56
+ @proxy.lookup(:const, 'Foo').is_a?(ruby_object).should == true
57
+ end
42
58
  end
43
59
 
44
- example 'delegating #inspect' do
45
- proxy = RubyLint::Definition::ConstantProxy.new(
46
- RubyLint::GlobalScope,
47
- 'ObjectSpace'
48
- )
60
+ context 'loading definitions automatically' do
61
+ before do
62
+ @source = ruby_object.new
63
+ @registry = RubyLint::Definition::Registry.new
64
+
65
+ @proxy = RubyLint::Definition::ConstantProxy
66
+ .new(@source, 'ActionController', @registry)
67
+ end
68
+
69
+ example 'load a definition from the filesystem' do
70
+ @registry.should_receive(:load).with('ActionController')
71
+
72
+ @proxy.lookup(:const, 'Foo')
73
+ end
74
+
75
+ example 'do not load the definition when it is already loaded' do
76
+ @registry.should_not receive(:load)
49
77
 
50
- object_space = RubyLint::GlobalScope.global_constant('ObjectSpace')
78
+ @registry.register('ActionController') do |defs|
79
+ defs.define_constant('ActionController')
80
+ end
51
81
 
52
- proxy.inspect.should == object_space.inspect
82
+ @proxy.lookup(:const, 'Foo')
83
+ end
53
84
  end
54
85
  end
@@ -0,0 +1,106 @@
1
+ require 'spec_helper'
2
+
3
+ describe RubyLint::Definition::Registry do
4
+ before do
5
+ @registry = RubyLint::Definition::Registry.new
6
+ end
7
+
8
+ context 'registering definitions' do
9
+ example 'no definitions should be registered by default' do
10
+ @registry.registered.empty?.should == true
11
+ end
12
+
13
+ example 'register a definition' do
14
+ @registry.register('String') { }
15
+
16
+ @registry.registered.key?('String').should == true
17
+ end
18
+ end
19
+
20
+ context 'checking if definitions exist' do
21
+ example 'check for a non existing definition' do
22
+ @registry.include?('Foo').should == false
23
+ end
24
+
25
+ example 'check for an existing definition' do
26
+ @registry.register('Foo') { }
27
+
28
+ @registry.include?('Foo').should == true
29
+ end
30
+ end
31
+
32
+ context 'retrieving definitions' do
33
+ example 'raise when the constant does not exist' do
34
+ lambda { @registry.get('Foo') }.should raise_error(ArgumentError)
35
+ end
36
+
37
+ example 'return the definition when it exists' do
38
+ @registry.register('Foo') { }
39
+
40
+ @registry.get('Foo').is_a?(Proc).should == true
41
+ end
42
+ end
43
+
44
+ context 'applying definitions' do
45
+ before do
46
+ @root = ruby_object.new
47
+
48
+ @registry.register('Foo') do |defs|
49
+ defs.define_constant('Foo') do |foo|
50
+ foo.define_method('bar')
51
+ end
52
+ end
53
+
54
+ @registry.apply('Foo', @root)
55
+ end
56
+
57
+ example 'define the constant' do
58
+ @root.has_definition?(:const, 'Foo').should == true
59
+ end
60
+
61
+ example 'define sub definitions correctly' do
62
+ @root.lookup(:const, 'Foo')
63
+ .has_definition?(:method, 'bar')
64
+ .should == true
65
+ end
66
+
67
+ example 'do not overwrite existing definitions' do
68
+ foo = @root.lookup(:const, 'Foo')
69
+
70
+ @registry.apply('Foo', @root)
71
+
72
+ @root.lookup(:const, 'Foo').should == foo
73
+ end
74
+ end
75
+
76
+ context 'managing load paths' do
77
+ before do
78
+ @registry = RubyLint::Definition::Registry.new
79
+ end
80
+
81
+ example 'use the default load path' do
82
+ @registry.load_path
83
+ .should == RubyLint::Definition::Registry::DEFAULT_LOAD_PATH
84
+ end
85
+
86
+ example 'add a path to the load path' do
87
+ @registry.load_path << 'foo'
88
+
89
+ @registry.load_path.include?('foo').should == true
90
+ end
91
+ end
92
+
93
+ context 'loading constant definitions from the load path' do
94
+ before do
95
+ RubyLint.registry.load('Rational')
96
+ end
97
+
98
+ example 'load the String constant' do
99
+ RubyLint.registry.loaded_constants.include?('Rational').should == true
100
+ end
101
+
102
+ example 'register the String definition' do
103
+ RubyLint.registry.include?('Rational').should == true
104
+ end
105
+ end
106
+ end
@@ -107,6 +107,14 @@ describe ruby_object do
107
107
  found.name.should == 'example'
108
108
  end
109
109
 
110
+ example 'create a shim of a definition' do
111
+ object = ruby_object.new(:type => :const, :name => 'Foo')
112
+ shim = object.shim
113
+
114
+ shim.name.should == object.name
115
+ shim.parents.should == [object]
116
+ end
117
+
110
118
  example 'create a RubyObject that represents an instance' do
111
119
  object = ruby_object.new(:type => :const, :name => 'String')
112
120
 
@@ -203,31 +211,6 @@ describe ruby_object do
203
211
  obj.file.should == '(ruby-lint)'
204
212
  end
205
213
 
206
- context 'deep freezing definitions' do
207
- before :all do
208
- @const = ruby_object.new(:type => :const, :name => 'Foo')
209
- @method = ruby_method.new(:type => :method, :name => 'test')
210
-
211
- @const.add_definition(@method)
212
-
213
- @const.deep_freeze
214
- end
215
-
216
- example 'freeze the root constant' do
217
- @const.frozen?.should == true
218
- end
219
-
220
- example 'freeze the definitions list of the root constant' do
221
- @const.definitions.frozen?.should == true
222
- end
223
-
224
- example 'freeze child definitions' do
225
- @method.frozen?.should == true
226
- @method.calls.frozen?.should == true
227
- @method.callers.frozen?.should == true
228
- end
229
- end
230
-
231
214
  context 'defining self' do
232
215
  before do
233
216
  @class = ruby_object.new(:instance_type => :class)
@@ -261,4 +244,21 @@ describe ruby_object do
261
244
  @class.lookup(:method, 'self').return_value.should == @class
262
245
  end
263
246
  end
247
+
248
+ context 'constant proxies' do
249
+ before do
250
+ @root = ruby_object.new(:type => :const, :name => 'Foo')
251
+ @proxy = @root.constant_proxy('Bar')
252
+ end
253
+
254
+ example 'create a constant proxy' do
255
+ @proxy.is_a?(RubyLint::Definition::ConstantProxy).should == true
256
+ end
257
+
258
+ example 'point to the definition when it exists' do
259
+ baz = @root.define_constant('Bar').define_constant('Baz')
260
+
261
+ @proxy.lookup(:const, 'Baz').should == baz
262
+ end
263
+ end
264
264
  end
@@ -1,12 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe RubyLint::DefinitionBuilder::Primitive do
4
- before do
5
- @root = ruby_object.new(:name => 'root')
4
+ before :all do
5
+ @vm = RubyLint::VirtualMachine.new
6
6
  end
7
7
 
8
8
  example 'build an integer definition' do
9
- builder = RubyLint::DefinitionBuilder::Primitive.new(s(:int, 10), @root)
9
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:int, 10), @vm)
10
10
  built = builder.build
11
11
 
12
12
  built.type.should == :int
@@ -14,7 +14,7 @@ describe RubyLint::DefinitionBuilder::Primitive do
14
14
  end
15
15
 
16
16
  example 'build a float definition' do
17
- builder = RubyLint::DefinitionBuilder::Primitive.new(s(:float, 10.0), @root)
17
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:float, 10.0), @vm)
18
18
  built = builder.build
19
19
 
20
20
  built.type.should == :float
@@ -22,7 +22,7 @@ describe RubyLint::DefinitionBuilder::Primitive do
22
22
  end
23
23
 
24
24
  example 'build a string definition' do
25
- builder = RubyLint::DefinitionBuilder::Primitive.new(s(:str, 'a'), @root)
25
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:str, 'a'), @vm)
26
26
  built = builder.build
27
27
 
28
28
  built.type.should == :str
@@ -30,7 +30,7 @@ describe RubyLint::DefinitionBuilder::Primitive do
30
30
  end
31
31
 
32
32
  example 'build a symbol definition' do
33
- builder = RubyLint::DefinitionBuilder::Primitive.new(s(:sym, :a), @root)
33
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:sym, :a), @vm)
34
34
  built = builder.build
35
35
 
36
36
  built.type.should == :sym
@@ -38,7 +38,7 @@ describe RubyLint::DefinitionBuilder::Primitive do
38
38
  end
39
39
 
40
40
  example 'build primitives as instances by default' do
41
- builder = RubyLint::DefinitionBuilder::Primitive.new(s(:int, 10), @root)
41
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:int, 10), @vm)
42
42
 
43
43
  builder.build.instance?.should == true
44
44
  end
@@ -46,7 +46,7 @@ describe RubyLint::DefinitionBuilder::Primitive do
46
46
  example 'allow custom options to be defined' do
47
47
  builder = RubyLint::DefinitionBuilder::Primitive.new(
48
48
  s(:int, 10),
49
- @root,
49
+ @vm,
50
50
  :instance_type => :class
51
51
  )
52
52
 
@@ -54,9 +54,9 @@ describe RubyLint::DefinitionBuilder::Primitive do
54
54
  end
55
55
 
56
56
  example 'include the definitions of the corresponding Ruby class' do
57
- builder = RubyLint::DefinitionBuilder::Primitive.new(s(:int, 10), @root)
57
+ builder = RubyLint::DefinitionBuilder::Primitive.new(s(:int, 10), @vm)
58
58
  built = builder.build
59
59
 
60
60
  built.lookup(:instance_method, 'to_s').is_a?(ruby_object).should == true
61
61
  end
62
- end
62
+ end