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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +2 -5
- data/Gemfile +9 -4
- data/MANIFEST +32 -28
- data/README.md +18 -5
- data/Rakefile +7 -3
- data/checksum/ruby-lint-1.0.2.gem.sha512 +1 -0
- data/checksum/ruby-lint-1.0.3.gem.sha512 +1 -0
- data/doc/changelog.md +40 -0
- data/doc/definitions.md +182 -0
- data/gen/rails/constants.txt +12 -0
- data/gen/rails/requires.rb +2 -0
- data/gen/stdlib/constants.rb +30 -0
- data/gen/stdlib/constants.txt +214 -0
- data/gen/stdlib/requires.rb +64 -0
- data/lib/ruby-lint.rb +7 -14
- data/lib/ruby-lint/analysis/undefined_methods.rb +8 -1
- data/lib/ruby-lint/analysis/useless_equality_checks.rb +92 -0
- data/lib/ruby-lint/cli.rb +1 -2
- data/lib/ruby-lint/cli/analyze.rb +55 -26
- data/lib/ruby-lint/cli/cache.rb +60 -0
- data/lib/ruby-lint/configuration.rb +10 -4
- data/lib/ruby-lint/constant_loader.rb +75 -22
- data/lib/ruby-lint/definition/constant_proxy.rb +51 -3
- data/lib/ruby-lint/definition/registry.rb +126 -0
- data/lib/ruby-lint/definition/ruby_method.rb +0 -11
- data/lib/ruby-lint/definition/ruby_object.rb +32 -24
- data/lib/ruby-lint/definition_builder/base.rb +9 -12
- data/lib/ruby-lint/definition_builder/primitive.rb +1 -1
- data/lib/ruby-lint/definition_builder/ruby_array.rb +1 -1
- data/lib/ruby-lint/definition_builder/ruby_block.rb +3 -3
- data/lib/ruby-lint/definition_builder/ruby_class.rb +2 -2
- data/lib/ruby-lint/definition_builder/ruby_hash.rb +1 -1
- data/lib/ruby-lint/definition_builder/ruby_method.rb +1 -1
- data/lib/ruby-lint/definition_builder/ruby_module.rb +4 -4
- data/lib/ruby-lint/definition_generator.rb +12 -2
- data/lib/ruby-lint/definitions/core/abbrev.rb +8 -11
- data/lib/ruby-lint/definitions/core/argf.rb +9 -7
- data/lib/ruby-lint/definitions/core/argument_error.rb +8 -10
- data/lib/ruby-lint/definitions/core/argv.rb +9 -9
- data/lib/ruby-lint/definitions/core/array.rb +296 -534
- data/lib/ruby-lint/definitions/core/base64.rb +22 -25
- data/lib/ruby-lint/definitions/core/basic_object.rb +30 -30
- data/lib/ruby-lint/definitions/core/basic_socket.rb +341 -455
- data/lib/ruby-lint/definitions/core/benchmark.rb +157 -24
- data/lib/ruby-lint/definitions/core/bignum.rb +110 -95
- data/lib/ruby-lint/definitions/core/binding.rb +38 -35
- data/lib/ruby-lint/definitions/core/cgi.rb +333 -49
- data/lib/ruby-lint/definitions/core/class.rb +16 -16
- data/lib/ruby-lint/definitions/core/common_headers.rb +4 -548
- data/lib/ruby-lint/definitions/core/common_libs.rb +4 -421
- data/lib/ruby-lint/definitions/core/comparable.rb +28 -29
- data/lib/ruby-lint/definitions/core/complex.rb +103 -141
- data/lib/ruby-lint/definitions/core/condition_variable.rb +14 -14
- data/lib/ruby-lint/definitions/core/config.rb +4 -318
- data/lib/ruby-lint/definitions/core/conftest_c.rb +4 -548
- data/lib/ruby-lint/definitions/core/coutflag.rb +4 -548
- data/lib/ruby-lint/definitions/core/csv.rb +729 -329
- data/lib/ruby-lint/definitions/core/data.rb +9 -8
- data/lib/ruby-lint/definitions/core/date.rb +452 -526
- data/lib/ruby-lint/definitions/core/date_time.rb +234 -303
- data/lib/ruby-lint/definitions/core/delegator.rb +57 -48
- data/lib/ruby-lint/definitions/core/digest.rb +94 -115
- data/lib/ruby-lint/definitions/core/dir.rb +89 -459
- data/lib/ruby-lint/definitions/core/drb.rb +531 -36
- data/lib/ruby-lint/definitions/core/drb_id_conv.rb +10 -19
- data/lib/ruby-lint/definitions/core/drb_object.rb +53 -58
- data/lib/ruby-lint/definitions/core/drb_undumped.rb +7 -10
- data/lib/ruby-lint/definitions/core/encoding.rb +1026 -1718
- data/lib/ruby-lint/definitions/core/encoding_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/enumerable.rb +123 -292
- data/lib/ruby-lint/definitions/core/enumerator.rb +28 -26
- data/lib/ruby-lint/definitions/core/env.rb +8 -9
- data/lib/ruby-lint/definitions/core/eoferror.rb +9 -8
- data/lib/ruby-lint/definitions/core/erb.rb +201 -226
- data/lib/ruby-lint/definitions/core/errno.rb +1593 -2917
- data/lib/ruby-lint/definitions/core/etc.rb +86 -107
- data/lib/ruby-lint/definitions/core/exception.rb +70 -50
- data/lib/ruby-lint/definitions/core/exception_for_matrix.rb +24 -37
- data/lib/ruby-lint/definitions/core/export_prefix.rb +4 -16
- data/lib/ruby-lint/definitions/core/failed_message.rb +4 -548
- data/lib/ruby-lint/definitions/core/false.rb +9 -7
- data/lib/ruby-lint/definitions/core/false_class.rb +40 -22
- data/lib/ruby-lint/definitions/core/fcntl.rb +120 -7
- data/lib/ruby-lint/definitions/core/fiber.rb +25 -26
- data/lib/ruby-lint/definitions/core/fiber_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/file.rb +1119 -860
- data/lib/ruby-lint/definitions/core/file_test.rb +79 -80
- data/lib/ruby-lint/definitions/core/file_utils.rb +1203 -765
- data/lib/ruby-lint/definitions/core/find.rb +9 -12
- data/lib/ruby-lint/definitions/core/fixnum.rb +113 -663
- data/lib/ruby-lint/definitions/core/float.rb +171 -2755
- data/lib/ruby-lint/definitions/core/float_domain_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/forwardable.rb +37 -30
- data/lib/ruby-lint/definitions/core/gc.rb +31 -38
- data/lib/ruby-lint/definitions/core/gem.rb +2324 -2183
- data/lib/ruby-lint/definitions/core/getopt_long.rb +107 -32
- data/lib/ruby-lint/definitions/core/gserver.rb +61 -61
- data/lib/ruby-lint/definitions/core/hash.rb +354 -1172
- data/lib/ruby-lint/definitions/core/hdr_ext.rb +4 -421
- data/lib/ruby-lint/definitions/core/index_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/install_dirs.rb +4 -421
- data/lib/ruby-lint/definitions/core/integer.rb +93 -67
- data/lib/ruby-lint/definitions/core/interrupt.rb +11 -11
- data/lib/ruby-lint/definitions/core/io.rb +574 -673
- data/lib/ruby-lint/definitions/core/ioerror.rb +9 -8
- data/lib/ruby-lint/definitions/core/ipaddr.rb +115 -90
- data/lib/ruby-lint/definitions/core/ipsocket.rb +301 -472
- data/lib/ruby-lint/definitions/core/irb.rb +1206 -34
- data/lib/ruby-lint/definitions/core/json.rb +483 -74
- data/lib/ruby-lint/definitions/core/kconv.rb +88 -36
- data/lib/ruby-lint/definitions/core/kernel.rb +408 -412
- data/lib/ruby-lint/definitions/core/key_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/libarg.rb +4 -548
- data/lib/ruby-lint/definitions/core/libpathflag.rb +4 -548
- data/lib/ruby-lint/definitions/core/link_so.rb +4 -548
- data/lib/ruby-lint/definitions/core/load_error.rb +24 -25
- data/lib/ruby-lint/definitions/core/local_jump_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/logger.rb +294 -61
- data/lib/ruby-lint/definitions/core/logging.rb +17 -20
- data/lib/ruby-lint/definitions/core/make_makefile.rb +548 -384
- data/lib/ruby-lint/definitions/core/marshal.rb +260 -358
- data/lib/ruby-lint/definitions/core/match_data.rb +51 -48
- data/lib/ruby-lint/definitions/core/math.rb +170 -178
- data/lib/ruby-lint/definitions/core/matrix.rb +354 -297
- data/lib/ruby-lint/definitions/core/method.rb +41 -42
- data/lib/ruby-lint/definitions/core/module.rb +219 -223
- data/lib/ruby-lint/definitions/core/monitor.rb +26 -28
- data/lib/ruby-lint/definitions/core/monitor_mixin.rb +36 -42
- data/lib/ruby-lint/definitions/core/mutex.rb +20 -22
- data/lib/ruby-lint/definitions/core/mutex_m.rb +24 -27
- data/lib/ruby-lint/definitions/core/name_error.rb +13 -13
- data/lib/ruby-lint/definitions/core/nil.rb +9 -7
- data/lib/ruby-lint/definitions/core/nil_class.rb +47 -31
- data/lib/ruby-lint/definitions/core/nkf.rb +76 -9
- data/lib/ruby-lint/definitions/core/no_memory_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/no_method_error.rb +14 -14
- data/lib/ruby-lint/definitions/core/not_implemented_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/numeric.rb +88 -80
- data/lib/ruby-lint/definitions/core/object.rb +20 -20
- data/lib/ruby-lint/definitions/core/object_space.rb +28 -31
- data/lib/ruby-lint/definitions/core/observable.rb +20 -23
- data/lib/ruby-lint/definitions/core/open3.rb +47 -50
- data/lib/ruby-lint/definitions/core/open_ssl.rb +4158 -13
- data/lib/ruby-lint/definitions/core/open_struct.rb +40 -37
- data/lib/ruby-lint/definitions/core/open_uri.rb +142 -25
- data/lib/ruby-lint/definitions/core/option_parser.rb +919 -981
- data/lib/ruby-lint/definitions/core/orig_libpath.rb +4 -32
- data/lib/ruby-lint/definitions/core/outflag.rb +4 -548
- data/lib/ruby-lint/definitions/core/pathname.rb +211 -186
- data/lib/ruby-lint/definitions/core/pp.rb +160 -99
- data/lib/ruby-lint/definitions/core/pretty_print.rb +170 -56
- data/lib/ruby-lint/definitions/core/prime.rb +329 -234
- data/lib/ruby-lint/definitions/core/proc.rb +63 -75
- data/lib/ruby-lint/definitions/core/process.rb +504 -412
- data/lib/ruby-lint/definitions/core/profiler__.rb +13 -16
- data/lib/ruby-lint/definitions/core/pstore.rb +66 -36
- data/lib/ruby-lint/definitions/core/queue.rb +32 -32
- data/lib/ruby-lint/definitions/core/random.rb +29 -29
- data/lib/ruby-lint/definitions/core/range.rb +123 -77
- data/lib/ruby-lint/definitions/core/range_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/rational.rb +84 -67
- data/lib/ruby-lint/definitions/core/rb_config.rb +18 -29
- data/lib/ruby-lint/definitions/core/readline.rb +85 -41
- data/lib/ruby-lint/definitions/core/regexp.rb +239 -293
- data/lib/ruby-lint/definitions/core/regexp_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/resolv.rb +1365 -38
- data/lib/ruby-lint/definitions/core/rpathflag.rb +4 -548
- data/lib/ruby-lint/definitions/core/ruby_copyright.rb +9 -9
- data/lib/ruby-lint/definitions/core/ruby_description.rb +9 -9
- data/lib/ruby-lint/definitions/core/ruby_engine.rb +9 -9
- data/lib/ruby-lint/definitions/core/ruby_patchlevel.rb +9 -9
- data/lib/ruby-lint/definitions/core/ruby_platform.rb +9 -9
- data/lib/ruby-lint/definitions/core/ruby_release_date.rb +9 -9
- data/lib/ruby-lint/definitions/core/ruby_revision.rb +4 -246
- data/lib/ruby-lint/definitions/core/ruby_version.rb +9 -9
- data/lib/ruby-lint/definitions/core/runtime_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/scan_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/scanf.rb +83 -7
- data/lib/ruby-lint/definitions/core/script_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/secure_random.rb +22 -25
- data/lib/ruby-lint/definitions/core/security_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/set.rb +154 -504
- data/lib/ruby-lint/definitions/core/shellwords.rb +27 -28
- data/lib/ruby-lint/definitions/core/signal.rb +21 -29
- data/lib/ruby-lint/definitions/core/signal_exception.rb +15 -15
- data/lib/ruby-lint/definitions/core/simple_delegator.rb +10 -26
- data/lib/ruby-lint/definitions/core/single_forwardable.rb +35 -38
- data/lib/ruby-lint/definitions/core/singleton.rb +21 -28
- data/lib/ruby-lint/definitions/core/sized_queue.rb +35 -31
- data/lib/ruby-lint/definitions/core/socket.rb +2942 -438
- data/lib/ruby-lint/definitions/core/socket_error.rb +4 -54
- data/lib/ruby-lint/definitions/core/sorted_set.rb +49 -263
- data/lib/ruby-lint/definitions/core/src_ext.rb +4 -421
- data/lib/ruby-lint/definitions/core/standard_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/stderr.rb +9 -9
- data/lib/ruby-lint/definitions/core/stdin.rb +9 -9
- data/lib/ruby-lint/definitions/core/stdout.rb +9 -9
- data/lib/ruby-lint/definitions/core/stop_iteration.rb +10 -8
- data/lib/ruby-lint/definitions/core/string.rb +451 -1222
- data/lib/ruby-lint/definitions/core/string_io.rb +226 -518
- data/lib/ruby-lint/definitions/core/string_scanner.rb +107 -108
- data/lib/ruby-lint/definitions/core/struct.rb +113 -761
- data/lib/ruby-lint/definitions/core/syck.rb +1292 -25
- data/lib/ruby-lint/definitions/core/symbol.rb +78 -59
- data/lib/ruby-lint/definitions/core/syntax_error.rb +23 -33
- data/lib/ruby-lint/definitions/core/system_call_error.rb +26 -24
- data/lib/ruby-lint/definitions/core/system_exit.rb +15 -15
- data/lib/ruby-lint/definitions/core/system_stack_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/tcpserver.rb +291 -486
- data/lib/ruby-lint/definitions/core/tcpsocket.rb +302 -483
- data/lib/ruby-lint/definitions/core/tempfile.rb +39 -832
- data/lib/ruby-lint/definitions/core/th_wait.rb +35 -70
- data/lib/ruby-lint/definitions/core/thread.rb +131 -144
- data/lib/ruby-lint/definitions/core/thread_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/thread_group.rb +23 -16
- data/lib/ruby-lint/definitions/core/threads_wait.rb +43 -63
- data/lib/ruby-lint/definitions/core/time.rb +236 -159
- data/lib/ruby-lint/definitions/core/timeout.rb +40 -14
- data/lib/ruby-lint/definitions/core/timeout_error.rb +4 -54
- data/lib/ruby-lint/definitions/core/toplevel_binding.rb +9 -7
- data/lib/ruby-lint/definitions/core/true.rb +9 -7
- data/lib/ruby-lint/definitions/core/true_class.rb +40 -22
- data/lib/ruby-lint/definitions/core/try_link.rb +4 -548
- data/lib/ruby-lint/definitions/core/tsort.rb +21 -19
- data/lib/ruby-lint/definitions/core/type_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/udpsocket.rb +302 -487
- data/lib/ruby-lint/definitions/core/unbound_method.rb +35 -36
- data/lib/ruby-lint/definitions/core/universal_ints.rb +4 -421
- data/lib/ruby-lint/definitions/core/unixserver.rb +291 -490
- data/lib/ruby-lint/definitions/core/unixsocket.rb +314 -476
- data/lib/ruby-lint/definitions/core/uri.rb +1309 -38
- data/lib/ruby-lint/definitions/core/vector.rb +143 -242
- data/lib/ruby-lint/definitions/core/weak_ref.rb +29 -32
- data/lib/ruby-lint/definitions/core/webrick.rb +2430 -7
- data/lib/ruby-lint/definitions/core/xmlrpc.rb +5 -7
- data/lib/ruby-lint/definitions/core/yaml.rb +109 -2325
- data/lib/ruby-lint/definitions/core/zero_division_error.rb +9 -8
- data/lib/ruby-lint/definitions/core/zlib.rb +272 -8526
- data/lib/ruby-lint/definitions/gems/.gitkeep +0 -0
- data/lib/ruby-lint/definitions/gems/devise.rb +2271 -0
- data/lib/ruby-lint/definitions/gems/nokogiri.rb +7668 -0
- data/lib/ruby-lint/definitions/rails/abstract_controller.rb +508 -322
- data/lib/ruby-lint/definitions/rails/action_controller.rb +2252 -4462
- data/lib/ruby-lint/definitions/rails/action_dispatch.rb +3448 -1846
- data/lib/ruby-lint/definitions/rails/action_mailer.rb +750 -1349
- data/lib/ruby-lint/definitions/rails/action_pack.rb +31 -14
- data/lib/ruby-lint/definitions/rails/action_view.rb +5788 -5748
- data/lib/ruby-lint/definitions/rails/active_model.rb +1015 -1065
- data/lib/ruby-lint/definitions/rails/active_record.rb +8080 -8075
- data/lib/ruby-lint/definitions/rails/active_support.rb +3844 -4153
- data/lib/ruby-lint/definitions/rails/arel.rb +6752 -2301
- data/lib/ruby-lint/definitions/rails/rails.rb +1553 -2383
- data/lib/ruby-lint/definitions/rails/sprockets.rb +1131 -3140
- data/lib/ruby-lint/file_list.rb +43 -0
- data/lib/ruby-lint/file_scanner.rb +3 -3
- data/lib/ruby-lint/generated_constant.rb +5 -1
- data/lib/ruby-lint/inspector.rb +108 -46
- data/lib/ruby-lint/method_call/attribute.rb +3 -1
- data/lib/ruby-lint/rake_task.rb +98 -0
- data/lib/ruby-lint/ruby_lint.rb +11 -0
- data/lib/ruby-lint/runner.rb +0 -11
- data/lib/ruby-lint/template/definition.erb +26 -19
- data/lib/ruby-lint/template/scope.rb +12 -0
- data/lib/ruby-lint/variable_predicates.rb +14 -0
- data/lib/ruby-lint/version.rb +1 -1
- data/lib/ruby-lint/virtual_machine.rb +82 -46
- data/ruby-lint.gemspec +3 -14
- data/spec/ruby-lint/analysis/undefined_methods_spec.rb +20 -3
- data/spec/ruby-lint/analysis/useless_equality_checks_spec.rb +107 -0
- data/spec/ruby-lint/configuration_spec.rb +20 -0
- data/spec/ruby-lint/constant_loader_spec.rb +79 -0
- data/spec/ruby-lint/definition/constant_proxy_spec.rb +65 -34
- data/spec/ruby-lint/definition/registry_spec.rb +106 -0
- data/spec/ruby-lint/definition/ruby_object_spec.rb +25 -25
- data/spec/ruby-lint/definition_builder/primitive_spec.rb +10 -10
- data/spec/ruby-lint/definition_builder/ruby_class_spec.rb +18 -19
- data/spec/ruby-lint/definition_builder/ruby_method_spec.rb +12 -12
- data/spec/ruby-lint/definition_builder/ruby_module_spec.rb +14 -14
- data/spec/ruby-lint/definitions/argv_spec.rb +3 -2
- data/spec/ruby-lint/definitions/env_spec.rb +5 -3
- data/spec/ruby-lint/definitions/file_spec.rb +17 -0
- data/spec/ruby-lint/definitions/fixnum_spec.rb +18 -0
- data/spec/ruby-lint/definitions/io_spec.rb +5 -3
- data/spec/ruby-lint/definitions/kernel_spec.rb +18 -0
- data/spec/ruby-lint/definitions/range_spec.rb +21 -0
- data/spec/ruby-lint/definitions/string_spec.rb +20 -0
- data/spec/ruby-lint/file_list_spec.rb +25 -0
- data/spec/ruby-lint/file_scanner_spec.rb +12 -0
- data/spec/ruby-lint/inspector_spec.rb +203 -23
- data/spec/ruby-lint/method_call/.gitkeep +0 -0
- data/spec/ruby-lint/variable_predicates_spec.rb +30 -0
- data/spec/ruby-lint/virtual_machine/associate_nodes_spec.rb +6 -4
- data/spec/ruby-lint/virtual_machine/autoloading_spec.rb +3 -16
- data/spec/ruby-lint/virtual_machine/classes/redefining_spec.rb +28 -1
- data/spec/ruby-lint/virtual_machine/complex/rails_spec.rb +12 -9
- data/spec/ruby-lint/virtual_machine/global_variables_spec.rb +8 -5
- data/spec/ruby-lint/virtual_machine/method_call_tracking_spec.rb +0 -7
- data/spec/ruby-lint/virtual_machine/methods/attr_spec.rb +66 -0
- data/spec/ruby-lint/virtual_machine/methods/calls_spec.rb +25 -0
- data/spec/ruby-lint/virtual_machine/methods/define_method_spec.rb +1 -1
- data/spec/ruby-lint/virtual_machine/methods/docstrings_spec.rb +20 -9
- data/spec/ruby-lint/virtual_machine/methods/kernel_spec.rb +25 -0
- data/spec/ruby-lint/virtual_machine/methods/patching_spec.rb +0 -6
- data/spec/ruby-lint/virtual_machine/methods/square_bracket_spec.rb +32 -0
- data/spec/ruby-lint/virtual_machine/self_spec.rb +37 -0
- data/spec/spec_helper.rb +0 -1
- data/spec/support/building.rb +0 -4
- data/spec/support/definitions.rb +16 -0
- data/task/generate.rake +35 -33
- data/task/todo.rake +1 -1
- metadata +73 -100
- data/lib/ruby-lint/cli/ast.rb +0 -50
- data/lib/ruby-lint/cli/plot.rb +0 -94
- data/lib/ruby-lint/definitions/core/arg0.rb +0 -9
- data/lib/ruby-lint/definitions/core/autoload.rb +0 -41
- data/lib/ruby-lint/definitions/core/continuation.rb +0 -10
- data/lib/ruby-lint/definitions/core/default_record_separator.rb +0 -9
- data/lib/ruby-lint/definitions/core/fatal_error.rb +0 -10
- data/lib/ruby-lint/definitions/core/file_list.rb +0 -729
- data/lib/ruby-lint/definitions/core/immediate_value.rb +0 -21
- data/lib/ruby-lint/definitions/core/md5.rb +0 -80
- data/lib/ruby-lint/definitions/core/memory_segmention_error.rb +0 -10
- data/lib/ruby-lint/definitions/core/precision.rb +0 -23
- data/lib/ruby-lint/definitions/core/primitive_failure.rb +0 -10
- data/lib/ruby-lint/definitions/core/psych.rb +0 -139
- data/lib/ruby-lint/definitions/core/rake.rb +0 -4786
- data/lib/ruby-lint/definitions/core/rake_file_utils.rb +0 -205
- data/lib/ruby-lint/definitions/core/rakeversion.rb +0 -9
- data/lib/ruby-lint/definitions/core/rdoc.rb +0 -15
- data/lib/ruby-lint/definitions/core/rexml.rb +0 -13
- data/lib/ruby-lint/definitions/core/rss.rb +0 -13
- data/lib/ruby-lint/definitions/core/sha1.rb +0 -80
- data/lib/ruby-lint/definitions/core/unmarshalable.rb +0 -15
- data/lib/ruby-lint/definitions/core/unsupported_library_error.rb +0 -10
- data/lib/ruby-lint/definitions/global_variables.rb +0 -9
- data/lib/ruby-lint/definitions/rails.rb +0 -12
- data/lib/ruby-lint/global_scope.rb +0 -56
- data/spec/ruby-lint/cli/ast_spec.rb +0 -23
- data/spec/ruby-lint/method_call/assign_member_spec.rb +0 -25
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
##
|
|
3
|
+
# The FileList class acts as a small wrapper around `Dir.glob` and is mainly
|
|
4
|
+
# used to turn a list of filenames/directory names into a list of just file
|
|
5
|
+
# names (excluding ones that don't exist).
|
|
6
|
+
#
|
|
7
|
+
class FileList
|
|
8
|
+
##
|
|
9
|
+
# @param [Array] files
|
|
10
|
+
# @return [Array]
|
|
11
|
+
# @raise [Errno::ENOENT] Raised if a file or directory does not exist.
|
|
12
|
+
#
|
|
13
|
+
def process(files)
|
|
14
|
+
existing = []
|
|
15
|
+
|
|
16
|
+
files.each do |file|
|
|
17
|
+
file = File.expand_path(file)
|
|
18
|
+
|
|
19
|
+
if File.file?(file)
|
|
20
|
+
existing << file
|
|
21
|
+
|
|
22
|
+
elsif File.directory?(file)
|
|
23
|
+
existing = existing | glob_files(file)
|
|
24
|
+
|
|
25
|
+
else
|
|
26
|
+
raise Errno::ENOENT, "The file/directory #{file} does not exist"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
return existing
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
##
|
|
34
|
+
# Returns a list of Ruby files in the given directory. This list includes
|
|
35
|
+
# deeply nested files.
|
|
36
|
+
#
|
|
37
|
+
# @return [Array]
|
|
38
|
+
#
|
|
39
|
+
def glob_files(directory)
|
|
40
|
+
return Dir.glob(File.join(directory, '**/*.rb'))
|
|
41
|
+
end
|
|
42
|
+
end # FileList
|
|
43
|
+
end # RubyLint
|
|
@@ -69,15 +69,15 @@ module RubyLint
|
|
|
69
69
|
return @constant_paths_cache[constant]
|
|
70
70
|
end
|
|
71
71
|
|
|
72
|
-
private
|
|
73
|
-
|
|
74
72
|
##
|
|
75
73
|
# @return [Array]
|
|
76
74
|
#
|
|
77
75
|
def glob_ruby_files
|
|
78
|
-
return Dir.glob("#{directories.join(',')}/**/*.rb")
|
|
76
|
+
return Dir.glob("{#{directories.join(',')}}/**/*.rb")
|
|
79
77
|
end
|
|
80
78
|
|
|
79
|
+
private
|
|
80
|
+
|
|
81
81
|
##
|
|
82
82
|
# Searches all the files that could potentially define the given constant
|
|
83
83
|
# and caches them.
|
|
@@ -15,8 +15,11 @@ module RubyLint
|
|
|
15
15
|
# @!attribute [r] superclass
|
|
16
16
|
# @return [String]
|
|
17
17
|
#
|
|
18
|
+
# @!attribute [r] modules
|
|
19
|
+
# @return [Array]
|
|
20
|
+
#
|
|
18
21
|
class GeneratedConstant
|
|
19
|
-
attr_reader :methods, :name, :constant, :superclass
|
|
22
|
+
attr_reader :methods, :name, :constant, :superclass, :modules
|
|
20
23
|
|
|
21
24
|
##
|
|
22
25
|
# @param [Hash] attributes
|
|
@@ -26,6 +29,7 @@ module RubyLint
|
|
|
26
29
|
instance_variable_set("@#{key}", value)
|
|
27
30
|
end
|
|
28
31
|
|
|
32
|
+
@modules ||= []
|
|
29
33
|
@methods ||= []
|
|
30
34
|
@superclass ||= 'Object'
|
|
31
35
|
end
|
data/lib/ruby-lint/inspector.rb
CHANGED
|
@@ -8,6 +8,7 @@ module RubyLint
|
|
|
8
8
|
#
|
|
9
9
|
# @!attribute [r] constant
|
|
10
10
|
# @return [Class]
|
|
11
|
+
#
|
|
11
12
|
# @!attribute [r] constant_name
|
|
12
13
|
# @return [String]
|
|
13
14
|
#
|
|
@@ -18,70 +19,71 @@ module RubyLint
|
|
|
18
19
|
# @param [String|Class] constant
|
|
19
20
|
#
|
|
20
21
|
def initialize(constant)
|
|
21
|
-
@constant_name = constant
|
|
22
|
+
@constant_name = constant.to_s
|
|
22
23
|
|
|
23
24
|
if constant.is_a?(String)
|
|
24
|
-
constant = resolve_constant(constant)
|
|
25
|
+
@constant = resolve_constant(constant)
|
|
26
|
+
else
|
|
27
|
+
@constant = constant
|
|
25
28
|
end
|
|
26
|
-
|
|
27
|
-
@constant = constant
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
##
|
|
31
|
-
# Returns an Array containing all
|
|
32
|
+
# Returns an Array containing all constants and their child constants
|
|
32
33
|
# (recursively).
|
|
33
34
|
#
|
|
34
|
-
# The constants returned by this method are returned as String instances
|
|
35
|
-
# containing the full path (e.g. `Encoding::BINARY` instead of `BINARY`).
|
|
36
|
-
#
|
|
37
35
|
# @param [Class] source
|
|
38
36
|
# @param [Array] ignore
|
|
39
37
|
# @return [Array<String>]
|
|
40
38
|
#
|
|
41
39
|
def inspect_constants(source = constant, ignore = [])
|
|
40
|
+
names = []
|
|
42
41
|
source_name = source.to_s
|
|
43
|
-
constants = []
|
|
44
42
|
have_children = []
|
|
45
43
|
include_source = source != Object
|
|
46
44
|
|
|
47
|
-
if include_source
|
|
48
|
-
|
|
49
|
-
ignore
|
|
45
|
+
if include_source and !ignore.include?(source_name)
|
|
46
|
+
names << source_name
|
|
47
|
+
ignore << source_name
|
|
50
48
|
end
|
|
51
49
|
|
|
52
50
|
source.constants.each do |name|
|
|
53
|
-
next
|
|
51
|
+
next if skip_constant?(source, name)
|
|
54
52
|
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
full_name = include_source ? "#{source_name}::#{name}" : name.to_s
|
|
54
|
+
|
|
55
|
+
# In certain cases this code tries to load a constant that apparently
|
|
56
|
+
# *is* defined but craps out upon error (e.g. Bundler::Specification).
|
|
57
57
|
begin
|
|
58
58
|
constant = source.const_get(name)
|
|
59
|
-
rescue
|
|
59
|
+
rescue Exception => error
|
|
60
60
|
warn error.message
|
|
61
|
-
|
|
62
61
|
next
|
|
63
62
|
end
|
|
64
63
|
|
|
65
|
-
|
|
66
|
-
full_name
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
# Skip those that we've already processed.
|
|
65
|
+
if ignore.include?(full_name) or source == constant
|
|
66
|
+
next
|
|
67
|
+
end
|
|
69
68
|
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
names << full_name
|
|
70
|
+
ignore << full_name
|
|
71
|
+
have_children << constant if process_child_constants?(constant)
|
|
72
|
+
end
|
|
72
73
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
end
|
|
74
|
+
have_children.each do |const|
|
|
75
|
+
names |= inspect_constants(const, ignore)
|
|
76
76
|
end
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
# Reject every constant that, if we should include the source name, was
|
|
79
|
+
# not defined under that constant. This applies on for example Rubinius
|
|
80
|
+
# since `Range::Enumerator` is a constant that points to
|
|
81
|
+
# `Enumerable::Enumerator`.
|
|
82
|
+
if include_source
|
|
83
|
+
names = names.select { |name| name.start_with?(source_name) }
|
|
82
84
|
end
|
|
83
85
|
|
|
84
|
-
return
|
|
86
|
+
return names
|
|
85
87
|
end
|
|
86
88
|
|
|
87
89
|
##
|
|
@@ -114,16 +116,45 @@ module RubyLint
|
|
|
114
116
|
return methods.sort_by(&:name)
|
|
115
117
|
end
|
|
116
118
|
|
|
119
|
+
##
|
|
120
|
+
# Returns the modules that are included in the constant.
|
|
121
|
+
#
|
|
122
|
+
# @return [Array]
|
|
123
|
+
#
|
|
124
|
+
def inspect_modules
|
|
125
|
+
modules = []
|
|
126
|
+
|
|
127
|
+
if constant.respond_to?(:ancestors)
|
|
128
|
+
parent = inspect_superclass
|
|
129
|
+
|
|
130
|
+
# Take all the modules included *directly* into the constant.
|
|
131
|
+
modules = constant.ancestors.take_while do |ancestor|
|
|
132
|
+
parent && ancestor != parent
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Get rid of non Module instances and modules that don't have a name.
|
|
136
|
+
modules = modules.select do |mod|
|
|
137
|
+
mod.instance_of?(Module) && mod.name
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
return modules
|
|
142
|
+
end
|
|
143
|
+
|
|
117
144
|
##
|
|
118
145
|
# Returns the superclass of the current constant or `nil` if there is none.
|
|
119
146
|
#
|
|
120
147
|
# @return [Mixed]
|
|
121
148
|
#
|
|
122
149
|
def inspect_superclass
|
|
123
|
-
|
|
124
|
-
end
|
|
150
|
+
parent = nil
|
|
125
151
|
|
|
126
|
-
|
|
152
|
+
if constant.respond_to?(:superclass) && constant.superclass.name
|
|
153
|
+
return constant.superclass
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
return parent
|
|
157
|
+
end
|
|
127
158
|
|
|
128
159
|
##
|
|
129
160
|
# Gets the methods of the current constant minus those defined in Object.
|
|
@@ -132,30 +163,61 @@ module RubyLint
|
|
|
132
163
|
# @return [Array]
|
|
133
164
|
#
|
|
134
165
|
def get_methods(getter = :methods)
|
|
135
|
-
|
|
136
|
-
|
|
166
|
+
parent = inspect_superclass || Object
|
|
167
|
+
diff = constant.__send__(getter, false) -
|
|
168
|
+
parent.__send__(getter, false)
|
|
169
|
+
|
|
170
|
+
methods = diff | constant.__send__(getter, false)
|
|
137
171
|
|
|
138
172
|
# If the constant manually defines the initialize method (= private)
|
|
139
173
|
# we'll also want to include it.
|
|
140
|
-
if getter
|
|
141
|
-
and constant.is_a?(Class) \
|
|
142
|
-
and constant.private_method_defined?(:initialize) \
|
|
143
|
-
and constant.instance_method(:initialize).source_location
|
|
174
|
+
if include_initialize?(getter)
|
|
144
175
|
methods = methods | [:initialize]
|
|
145
176
|
end
|
|
146
177
|
|
|
147
178
|
return methods
|
|
148
179
|
end
|
|
149
180
|
|
|
181
|
+
private
|
|
182
|
+
|
|
183
|
+
##
|
|
184
|
+
# @param [Symbol] getter
|
|
185
|
+
# @return [TrueClass|FalseClass]
|
|
186
|
+
#
|
|
187
|
+
def include_initialize?(getter)
|
|
188
|
+
return getter == :instance_methods \
|
|
189
|
+
&& constant.is_a?(Class) \
|
|
190
|
+
&& constant.private_instance_methods(false).include?(:initialize) \
|
|
191
|
+
&& constant.instance_method(:initialize).source_location
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
##
|
|
195
|
+
# @param [Module|Class] const
|
|
196
|
+
# @param [Symbol] child_name
|
|
197
|
+
# @return [TrueClass|FalseClass]
|
|
198
|
+
#
|
|
199
|
+
def skip_constant?(const, child_name)
|
|
200
|
+
# Module and Class defines the same child constants as Object but in a
|
|
201
|
+
# recursive manner. This is a bit of a dirty way to prevent this code
|
|
202
|
+
# from going into an infinite loop.
|
|
203
|
+
if const == Module or const == Class
|
|
204
|
+
return true
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# Config is deprecated and triggers a warning.
|
|
208
|
+
if const == Object and child_name == :Config
|
|
209
|
+
return true
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
return !const.const_defined?(child_name)
|
|
213
|
+
end
|
|
214
|
+
|
|
150
215
|
##
|
|
151
|
-
# @param [Class] source
|
|
152
216
|
# @param [Class] constant
|
|
153
217
|
# @return [TrueClass|FalseClass]
|
|
154
218
|
#
|
|
155
|
-
def process_child_constants?(
|
|
156
|
-
return constant.respond_to?(:
|
|
157
|
-
&& constant != source \
|
|
158
|
-
&& !constant.constants.empty?
|
|
219
|
+
def process_child_constants?(constant)
|
|
220
|
+
return constant.respond_to?(:constants) && !constant.constants.empty?
|
|
159
221
|
end
|
|
160
222
|
|
|
161
223
|
##
|
|
@@ -166,7 +228,7 @@ module RubyLint
|
|
|
166
228
|
# @return [UnboundMethod]
|
|
167
229
|
#
|
|
168
230
|
def method_information(type, name)
|
|
169
|
-
return constant.
|
|
231
|
+
return constant.__send__(type, name)
|
|
170
232
|
end
|
|
171
233
|
|
|
172
234
|
##
|
|
@@ -85,7 +85,9 @@ module RubyLint
|
|
|
85
85
|
name = name + '='
|
|
86
86
|
end
|
|
87
87
|
|
|
88
|
-
context.define_instance_method(name)
|
|
88
|
+
context.define_instance_method(name) do |method|
|
|
89
|
+
method.define_argument('value') if setter
|
|
90
|
+
end
|
|
89
91
|
|
|
90
92
|
unless context.has_definition?(:ivar, ivar_name)
|
|
91
93
|
ivar = Definition::RubyObject.new(
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
require_relative '../ruby-lint'
|
|
2
|
+
require 'rake/tasklib'
|
|
3
|
+
|
|
4
|
+
module RubyLint
|
|
5
|
+
##
|
|
6
|
+
# Class for easily creating Rake tasks without having to shell out to the
|
|
7
|
+
# commandline executable.
|
|
8
|
+
#
|
|
9
|
+
# Basic usage:
|
|
10
|
+
#
|
|
11
|
+
# require 'ruby-lint/rake_task'
|
|
12
|
+
#
|
|
13
|
+
# RubyLint::RakeTask.new do |task|
|
|
14
|
+
# task.name = 'lint'
|
|
15
|
+
# task.files = ['lib/my-project-name']
|
|
16
|
+
# end
|
|
17
|
+
#
|
|
18
|
+
# @!attribute [rw] name
|
|
19
|
+
# @return [String] The name of the task.
|
|
20
|
+
#
|
|
21
|
+
# @!attribute [rw] description
|
|
22
|
+
# @return [String] The description of the task.
|
|
23
|
+
#
|
|
24
|
+
# @!attribute [rw] debug
|
|
25
|
+
# @return [TrueClass|FalseClass] Enables/disables debugging mode.
|
|
26
|
+
#
|
|
27
|
+
# @!attribute [rw] files
|
|
28
|
+
# @return [Array] The files to check.
|
|
29
|
+
#
|
|
30
|
+
# @!attribute [rw] configuration
|
|
31
|
+
# @return [String] Path to the configuration file to use.
|
|
32
|
+
#
|
|
33
|
+
class RakeTask < Rake::TaskLib
|
|
34
|
+
attr_accessor :name, :description, :debug, :files, :configuration
|
|
35
|
+
|
|
36
|
+
##
|
|
37
|
+
# @param [Hash] options
|
|
38
|
+
#
|
|
39
|
+
def initialize(options = {})
|
|
40
|
+
@name = 'lint'
|
|
41
|
+
@description = 'Check source code using ruby-lint'
|
|
42
|
+
|
|
43
|
+
options.each do |key, value|
|
|
44
|
+
instance_variable_set("@#{key}", value) if respond_to?(key)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
yield self if block_given?
|
|
48
|
+
|
|
49
|
+
desc(description)
|
|
50
|
+
task(name) do
|
|
51
|
+
validate!
|
|
52
|
+
run_task
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
##
|
|
57
|
+
# Checks if the task is configured properly, exists with code 1 if this
|
|
58
|
+
# isn't the case.
|
|
59
|
+
#
|
|
60
|
+
def validate!
|
|
61
|
+
if configuration and !File.file?(configuration)
|
|
62
|
+
abort "The configuration file #{configuration} does not exist"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
if files.empty?
|
|
66
|
+
abort 'No files to check were specified'
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
##
|
|
71
|
+
# Processes a list of files and writes the output to STDOUT.
|
|
72
|
+
#
|
|
73
|
+
def run_task
|
|
74
|
+
config = create_configuration
|
|
75
|
+
runner = RubyLint::Runner.new(config)
|
|
76
|
+
list = FileList.new
|
|
77
|
+
output = runner.analyze(list.process(files))
|
|
78
|
+
|
|
79
|
+
puts(output) unless output.empty?
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
##
|
|
83
|
+
# @return [RubyLint::Configuration]
|
|
84
|
+
#
|
|
85
|
+
def create_configuration
|
|
86
|
+
config_files = RubyLint::Configuration.configuration_files
|
|
87
|
+
|
|
88
|
+
if configuration
|
|
89
|
+
config_files = [configuration]
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
config = RubyLint::Configuration.load_from_file(config_files)
|
|
93
|
+
config.debug = debug
|
|
94
|
+
|
|
95
|
+
return config
|
|
96
|
+
end
|
|
97
|
+
end # RakeTask
|
|
98
|
+
end # RubyLint
|
data/lib/ruby-lint/runner.rb
CHANGED
|
@@ -67,8 +67,6 @@ module RubyLint
|
|
|
67
67
|
|
|
68
68
|
comments.merge!(extra_comments)
|
|
69
69
|
|
|
70
|
-
autoload_constants(extra_ast)
|
|
71
|
-
|
|
72
70
|
vm = run_vm(extra_ast, comments)
|
|
73
71
|
|
|
74
72
|
run_analysis(ast, vm, report)
|
|
@@ -88,15 +86,6 @@ module RubyLint
|
|
|
88
86
|
return ast, NodeHash.from_hash(comments)
|
|
89
87
|
end
|
|
90
88
|
|
|
91
|
-
##
|
|
92
|
-
# Automatically loads definitions using {RubyLint::ConstantLoader}.
|
|
93
|
-
#
|
|
94
|
-
# @param [Array] nodes
|
|
95
|
-
#
|
|
96
|
-
def autoload_constants(nodes)
|
|
97
|
-
nodes.each { |node| GlobalScope.constant_loader.iterate(node) }
|
|
98
|
-
end
|
|
99
|
-
|
|
100
89
|
##
|
|
101
90
|
# Processes external Ruby files using {RubyLint::FileLoader}. The return
|
|
102
91
|
# value is a collection of AST nodes and a Hash containing all the
|