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
data/lib/ruby-lint/cli.rb
CHANGED
|
@@ -75,33 +75,10 @@ Examples:
|
|
|
75
75
|
# @return [Array]
|
|
76
76
|
#
|
|
77
77
|
def extract_files(files)
|
|
78
|
-
|
|
78
|
+
return RubyLint::FileList.new.process(files)
|
|
79
79
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if File.file?(file)
|
|
84
|
-
existing << file
|
|
85
|
-
|
|
86
|
-
elsif File.directory?(file)
|
|
87
|
-
existing = existing | glob_files(file)
|
|
88
|
-
|
|
89
|
-
else
|
|
90
|
-
abort "The file/directory #{file} does not exist"
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
return existing
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
##
|
|
98
|
-
# Returns a list of Ruby files in the given directory. This list includes
|
|
99
|
-
# deeply nested files.
|
|
100
|
-
#
|
|
101
|
-
# @return [Array]
|
|
102
|
-
#
|
|
103
|
-
def glob_files(directory)
|
|
104
|
-
return Dir.glob(File.join(directory, '**/*.rb'))
|
|
80
|
+
rescue Errno::ENOENT => error
|
|
81
|
+
abort error.message
|
|
105
82
|
end
|
|
106
83
|
|
|
107
84
|
##
|
|
@@ -130,6 +107,22 @@ Examples:
|
|
|
130
107
|
@output_destination = destination
|
|
131
108
|
end
|
|
132
109
|
|
|
110
|
+
# The stdout and stderr methods mainly exist to make testing a bit easier.
|
|
111
|
+
|
|
112
|
+
##
|
|
113
|
+
# @return [IO]
|
|
114
|
+
#
|
|
115
|
+
def stdout
|
|
116
|
+
return STDOUT
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
##
|
|
120
|
+
# @return [IO]
|
|
121
|
+
#
|
|
122
|
+
def stderr
|
|
123
|
+
return STDERR
|
|
124
|
+
end
|
|
125
|
+
|
|
133
126
|
##
|
|
134
127
|
# @param [RubyLint::Configuration] configuration
|
|
135
128
|
# @param [Hash] opts
|
|
@@ -160,6 +153,40 @@ Examples:
|
|
|
160
153
|
"(#{memory_kb.round(2)} KB)"
|
|
161
154
|
end
|
|
162
155
|
|
|
156
|
+
##
|
|
157
|
+
# Shows a lump of debugging information before the rest of the output.
|
|
158
|
+
#
|
|
159
|
+
# @param [RubyLint::Configuration] config
|
|
160
|
+
#
|
|
161
|
+
#:nocov:
|
|
162
|
+
def debug_header(config)
|
|
163
|
+
directories = config.directories.map do |dir|
|
|
164
|
+
File.directory?(dir) ? "#{dir}: exists" : "#{dir}: doesn't exist"
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
directories = directories.empty? ? 'None' : directories.join("\n")
|
|
168
|
+
|
|
169
|
+
stderr.puts <<-EOF.strip
|
|
170
|
+
ruby: #{RUBY_DESCRIPTION}
|
|
171
|
+
ruby-lint: #{RubyLint::VERSION}
|
|
172
|
+
directory: #{Dir.pwd}
|
|
173
|
+
|
|
174
|
+
Caching:
|
|
175
|
+
|
|
176
|
+
enabled: #{config.enable_cache}
|
|
177
|
+
directory: #{config.cache_directory}
|
|
178
|
+
|
|
179
|
+
Directories:
|
|
180
|
+
|
|
181
|
+
#{directories}
|
|
182
|
+
|
|
183
|
+
------
|
|
184
|
+
EOF
|
|
185
|
+
|
|
186
|
+
stderr.puts
|
|
187
|
+
end
|
|
188
|
+
#:nocov:
|
|
189
|
+
|
|
163
190
|
run do |opts, args|
|
|
164
191
|
abort 'You must specify at least one file to analyze' if args.empty?
|
|
165
192
|
|
|
@@ -169,6 +196,8 @@ Examples:
|
|
|
169
196
|
|
|
170
197
|
configure(configuration, opts)
|
|
171
198
|
|
|
199
|
+
debug_header(configuration) if configuration.debug
|
|
200
|
+
|
|
172
201
|
runner = RubyLint::Runner.new(configuration)
|
|
173
202
|
output = runner.analyze(files)
|
|
174
203
|
exec_time = Time.now.to_f - start_time
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
RubyLint::CLI.options.command :cache do
|
|
2
|
+
banner 'Usage: ruby-lint cache [COMMAND] [OPTIONS]'
|
|
3
|
+
description 'Manages ruby-lint cache files'
|
|
4
|
+
|
|
5
|
+
separator <<-EOF.chomp
|
|
6
|
+
|
|
7
|
+
About:
|
|
8
|
+
|
|
9
|
+
This command can be used to view and manage cache entries created by
|
|
10
|
+
ruby-lint. This command is mainly meant to be used for debugging purposes.
|
|
11
|
+
|
|
12
|
+
Examples:
|
|
13
|
+
|
|
14
|
+
Print a summary of the cache:
|
|
15
|
+
|
|
16
|
+
$ ruby-lint cache
|
|
17
|
+
|
|
18
|
+
Clear the cache:
|
|
19
|
+
|
|
20
|
+
$ ruby-lint cache clear
|
|
21
|
+
EOF
|
|
22
|
+
|
|
23
|
+
separator RubyLint::CLI::OPTIONS_HEADER
|
|
24
|
+
|
|
25
|
+
RubyLint::CLI.help_option(self)
|
|
26
|
+
|
|
27
|
+
run do
|
|
28
|
+
config = RubyLint::Configuration.load_from_file
|
|
29
|
+
pattern = File.join(config.cache_directory, '*.cache')
|
|
30
|
+
files = Dir.glob(pattern)
|
|
31
|
+
size = files.map { |file| File.size(file) }.inject(:+).to_f
|
|
32
|
+
|
|
33
|
+
size_kb = (size / 1024).round(2)
|
|
34
|
+
size_mb = (size / 1024 / 1024).round(2)
|
|
35
|
+
|
|
36
|
+
puts <<-EOF.strip
|
|
37
|
+
Directory: #{config.cache_directory}
|
|
38
|
+
Total files: #{files.length}
|
|
39
|
+
Total size: #{size_kb} KB (#{size_mb} MB)
|
|
40
|
+
EOF
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
command :clear do
|
|
44
|
+
banner 'Usage: ruby-lint cache clear [OPTIONS]'
|
|
45
|
+
description 'Removes all the cache files'
|
|
46
|
+
|
|
47
|
+
separator RubyLint::CLI::OPTIONS_HEADER
|
|
48
|
+
|
|
49
|
+
RubyLint::CLI.help_option(self)
|
|
50
|
+
|
|
51
|
+
run do
|
|
52
|
+
config = RubyLint::Configuration.load_from_file
|
|
53
|
+
pattern = File.join(config.cache_directory, '*.cache')
|
|
54
|
+
|
|
55
|
+
Dir.glob(pattern).each do |file|
|
|
56
|
+
File.unlink(file)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -201,13 +201,19 @@ module RubyLint
|
|
|
201
201
|
# @param [Array] directories
|
|
202
202
|
#
|
|
203
203
|
def directories=(directories)
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
valid = []
|
|
205
|
+
|
|
206
|
+
if directories
|
|
207
|
+
directories.each do |dir|
|
|
208
|
+
unless File.directory?(dir)
|
|
209
|
+
raise ArgumentError, "The directory #{dir} does not exist"
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
valid << File.expand_path(dir)
|
|
207
213
|
end
|
|
208
214
|
end
|
|
209
215
|
|
|
210
|
-
@directories =
|
|
216
|
+
@directories = valid
|
|
211
217
|
end
|
|
212
218
|
|
|
213
219
|
##
|
|
@@ -1,33 +1,75 @@
|
|
|
1
1
|
module RubyLint
|
|
2
2
|
##
|
|
3
|
-
# The ConstantLoader
|
|
4
|
-
#
|
|
3
|
+
# The ConstantLoader is an iterator class (using {RubyLint::Iterator}) that
|
|
4
|
+
# iterates over an AST and tries to load the corresponding built-in
|
|
5
|
+
# definitions. For example, if it finds a constant node for the `ERB` class
|
|
6
|
+
# it will apply the definitions for `ERB` to the ones set in
|
|
7
|
+
# {RubyLint::ConstantLoader#definitions}.
|
|
5
8
|
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
+
# This class also takes care of bootstrapping the target definitions so that
|
|
10
|
+
# the bare minimum definitions (e.g. Module and Object) are always available.
|
|
11
|
+
# Global variables are also bootstrapped.
|
|
9
12
|
#
|
|
10
13
|
# @!attribute [r] loaded
|
|
11
|
-
# @return [
|
|
14
|
+
# @return [Set] Set containing the loaded constants.
|
|
15
|
+
#
|
|
16
|
+
# @!attribute [r] definitions
|
|
17
|
+
# @return [RubyLint::Definition::RubyObject]
|
|
12
18
|
#
|
|
13
19
|
class ConstantLoader < Iterator
|
|
14
|
-
attr_reader :loaded
|
|
20
|
+
attr_reader :loaded, :definitions
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# Built-in definitions that should be bootstrapped.
|
|
24
|
+
#
|
|
25
|
+
# @return [Array]
|
|
26
|
+
#
|
|
27
|
+
BOOTSTRAP_CONSTS = %w{Module Class Kernel BasicObject Object}
|
|
15
28
|
|
|
16
29
|
##
|
|
17
|
-
# List of
|
|
30
|
+
# List of global variables that should be bootstrapped.
|
|
18
31
|
#
|
|
19
32
|
# @return [Array]
|
|
20
33
|
#
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
34
|
+
BOOTSTRAP_GVARS = [
|
|
35
|
+
'$!', '$$', '$&', '$\'', '$*', '$+', '$,', '$-0', '$-F', '$-I', '$-K',
|
|
36
|
+
'$-W', '$-a', '$-d', '$-i', '$-l', '$-p', '$-v', '$-w', '$.', '$/', '$0',
|
|
37
|
+
'$1', '$2', '$3', '$4', '$5', '$6', '$7', '$8', '$9', '$:', '$;', '$<',
|
|
38
|
+
'$=', '$>', '$?', '$@', '$DEBUG', '$FILENAME', '$KCODE',
|
|
39
|
+
'$LOADED_FEATURES', '$LOAD_PATH', '$PROGRAM_NAME', '$SAFE', '$VERBOSE',
|
|
40
|
+
'$\"', '$\\', '$_', '$`', '$stderr', '$stdin', '$stdout', '$~'
|
|
24
41
|
]
|
|
25
42
|
|
|
43
|
+
##
|
|
44
|
+
# Bootstraps various core definitions.
|
|
45
|
+
#
|
|
46
|
+
def bootstrap
|
|
47
|
+
types = VariablePredicates::RUBY_CLASSES.values
|
|
48
|
+
|
|
49
|
+
(BOOTSTRAP_CONSTS | types).each do |name|
|
|
50
|
+
load_constant(name)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
BOOTSTRAP_GVARS.each do |gvar|
|
|
54
|
+
definitions.define_global_variable(gvar)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
##
|
|
59
|
+
# Bootstraps various core definitions (Fixnum, Object, etc) and loads the
|
|
60
|
+
# extra constants referred in the supplied AST.
|
|
61
|
+
#
|
|
62
|
+
# @param [Array<RubyLint::AST::Node>] ast
|
|
63
|
+
#
|
|
64
|
+
def run(ast)
|
|
65
|
+
ast.each { |node| iterate(node) }
|
|
66
|
+
end
|
|
67
|
+
|
|
26
68
|
##
|
|
27
69
|
# Called after a new instance of the class is created.
|
|
28
70
|
#
|
|
29
71
|
def after_initialize
|
|
30
|
-
@loaded =
|
|
72
|
+
@loaded = Set.new
|
|
31
73
|
end
|
|
32
74
|
|
|
33
75
|
##
|
|
@@ -44,7 +86,14 @@ module RubyLint
|
|
|
44
86
|
# @return [TrueClass|FalseClass]
|
|
45
87
|
#
|
|
46
88
|
def loaded?(constant)
|
|
47
|
-
return loaded.
|
|
89
|
+
return loaded.include?(constant)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
##
|
|
93
|
+
# @return [RubyLint::Definition::Registry]
|
|
94
|
+
#
|
|
95
|
+
def registry
|
|
96
|
+
return RubyLint.registry
|
|
48
97
|
end
|
|
49
98
|
|
|
50
99
|
##
|
|
@@ -55,18 +104,22 @@ module RubyLint
|
|
|
55
104
|
def load_constant(constant)
|
|
56
105
|
return if loaded?(constant)
|
|
57
106
|
|
|
58
|
-
|
|
107
|
+
registry.load(constant)
|
|
59
108
|
|
|
60
|
-
|
|
61
|
-
path = File.join(path, filename)
|
|
109
|
+
return unless registry.include?(constant)
|
|
62
110
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
loaded[constant] = true
|
|
111
|
+
apply(constant)
|
|
112
|
+
end
|
|
66
113
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
114
|
+
private
|
|
115
|
+
|
|
116
|
+
##
|
|
117
|
+
# @param [String] constant
|
|
118
|
+
#
|
|
119
|
+
def apply(constant)
|
|
120
|
+
loaded << constant
|
|
121
|
+
|
|
122
|
+
registry.apply(constant, definitions)
|
|
70
123
|
end
|
|
71
124
|
end # ConstantLoader
|
|
72
125
|
end # RubyLint
|
|
@@ -13,22 +13,32 @@ module RubyLint
|
|
|
13
13
|
# @!attribute [r] proxy_name
|
|
14
14
|
# @return [String]
|
|
15
15
|
#
|
|
16
|
+
# @!attribute [r] registry
|
|
17
|
+
# @return [RubyLint::Definition::Registry]
|
|
18
|
+
#
|
|
16
19
|
# @!attribute [r] proxy_definition
|
|
17
20
|
# @return [RubyLint::Definition::RubyObject]
|
|
18
21
|
#
|
|
19
22
|
class ConstantProxy
|
|
20
|
-
|
|
23
|
+
include VariablePredicates
|
|
24
|
+
|
|
25
|
+
attr_reader :proxy_source, :proxy_name, :proxy_definition, :registry
|
|
21
26
|
|
|
22
27
|
##
|
|
23
28
|
# @param [RubyLint::Definition::RubyObject] source The source definition
|
|
24
29
|
# to use for looking up the definition associated with the current
|
|
25
30
|
# proxy.
|
|
31
|
+
#
|
|
26
32
|
# @param [String] name The name/constant path of the constant that this
|
|
27
33
|
# proxy belongs to.
|
|
28
34
|
#
|
|
29
|
-
|
|
35
|
+
# @param [RubyLint::Registry] registry The registry to use when trying
|
|
36
|
+
# to autoload a constant.
|
|
37
|
+
#
|
|
38
|
+
def initialize(source, name, registry = nil)
|
|
30
39
|
@proxy_source = source
|
|
31
40
|
@proxy_name = name
|
|
41
|
+
@registry = registry
|
|
32
42
|
end
|
|
33
43
|
|
|
34
44
|
# Pre-define all the methods of the definition, this is faster than
|
|
@@ -58,7 +68,45 @@ module RubyLint
|
|
|
58
68
|
def lookup_proxy_definition
|
|
59
69
|
return if proxy_definition
|
|
60
70
|
|
|
61
|
-
|
|
71
|
+
found = lookup_constant
|
|
72
|
+
root = root_constant
|
|
73
|
+
|
|
74
|
+
if !found and use_registry?(root)
|
|
75
|
+
registry.apply(root, proxy_source)
|
|
76
|
+
|
|
77
|
+
found = lookup_constant
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
@proxy_definition = found
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
##
|
|
84
|
+
# @param [String] constant
|
|
85
|
+
# @return [TrueClass|FalseClass]
|
|
86
|
+
#
|
|
87
|
+
def use_registry?(constant)
|
|
88
|
+
return false unless registry
|
|
89
|
+
|
|
90
|
+
# Don't load the constant if we already have it.
|
|
91
|
+
return true if registry.include?(constant)
|
|
92
|
+
|
|
93
|
+
registry.load(constant)
|
|
94
|
+
|
|
95
|
+
return registry.include?(constant)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
##
|
|
99
|
+
# @return [String]
|
|
100
|
+
#
|
|
101
|
+
def root_constant
|
|
102
|
+
return proxy_name.split(RubyObject::PATH_SEPARATOR)[0]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
##
|
|
106
|
+
# @return [RubyLint::Definition::RubyObject]
|
|
107
|
+
#
|
|
108
|
+
def lookup_constant
|
|
109
|
+
return proxy_source.lookup_constant_path(proxy_name)
|
|
62
110
|
end
|
|
63
111
|
end # ConstantProxy
|
|
64
112
|
end # Definition
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
module RubyLint
|
|
2
|
+
module Definition
|
|
3
|
+
##
|
|
4
|
+
# The Registry class is used to register and store definitions that have
|
|
5
|
+
# to be applied to instances of {RubyLint::VirtualMachine}. It can also be
|
|
6
|
+
# used to load constant definition files from a custom load path.
|
|
7
|
+
#
|
|
8
|
+
# @!attribute [r] load_path
|
|
9
|
+
# @return [Array] List of directories to search in for definitions.
|
|
10
|
+
#
|
|
11
|
+
# @!attribute [r] loaded_constants
|
|
12
|
+
# @return [Set] Set containing the constants loaded from the load path.
|
|
13
|
+
#
|
|
14
|
+
# @!attribute [r] registered
|
|
15
|
+
# @return [Hash] Returns the registered definitions as a Hash. The keys
|
|
16
|
+
# are set to the constant names, the values to `Proc` instances that,
|
|
17
|
+
# when evaluated, create the corresponding definitions.
|
|
18
|
+
#
|
|
19
|
+
class Registry
|
|
20
|
+
attr_reader :load_path, :loaded_constants, :registered
|
|
21
|
+
|
|
22
|
+
##
|
|
23
|
+
# The default load path to use.
|
|
24
|
+
#
|
|
25
|
+
# @return [Array]
|
|
26
|
+
#
|
|
27
|
+
DEFAULT_LOAD_PATH = [
|
|
28
|
+
File.expand_path('../../definitions/core', __FILE__),
|
|
29
|
+
File.expand_path('../../definitions/rails', __FILE__),
|
|
30
|
+
File.expand_path('../../definitions/gems', __FILE__)
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
def initialize
|
|
34
|
+
@registered = {}
|
|
35
|
+
@load_path = DEFAULT_LOAD_PATH.dup
|
|
36
|
+
@loaded_constants = Set.new
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
##
|
|
40
|
+
# Registers a new definition with the given name.
|
|
41
|
+
#
|
|
42
|
+
# @param [String] name The name of the constant.
|
|
43
|
+
#
|
|
44
|
+
def register(name, &block)
|
|
45
|
+
registered[name] = block
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
##
|
|
49
|
+
# Gets the constant with the given name.
|
|
50
|
+
#
|
|
51
|
+
# @param [String] constant
|
|
52
|
+
# @raise [ArgumentError] Raised if the given constant doesn't exist.
|
|
53
|
+
#
|
|
54
|
+
def get(constant)
|
|
55
|
+
found = registered[constant]
|
|
56
|
+
|
|
57
|
+
if found
|
|
58
|
+
return found
|
|
59
|
+
else
|
|
60
|
+
raise ArgumentError, "The constant #{constant} does not exist"
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
##
|
|
65
|
+
# Returns `true` if the given constant has been registered.
|
|
66
|
+
#
|
|
67
|
+
# @param [String] constant
|
|
68
|
+
# @return [TrueClass|FalseClass]
|
|
69
|
+
#
|
|
70
|
+
def include?(constant)
|
|
71
|
+
return registered.key?(constant) || loaded_constants.include?(constant)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
##
|
|
75
|
+
# Applies the definitions of a given name to the given
|
|
76
|
+
# {RubyLint::Definition::RubyObject} instance.
|
|
77
|
+
#
|
|
78
|
+
# @param [String] constant
|
|
79
|
+
# @param [RubyLint::Definition::RubyObject] definitions
|
|
80
|
+
#
|
|
81
|
+
def apply(constant, definitions)
|
|
82
|
+
unless definitions.defines?(:const, constant)
|
|
83
|
+
get(constant).call(definitions)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
##
|
|
88
|
+
# Tries to find a definition in the current load path and loads it if
|
|
89
|
+
# found.
|
|
90
|
+
#
|
|
91
|
+
# @param [String] constant The name of the top level constant.
|
|
92
|
+
#
|
|
93
|
+
def load(constant)
|
|
94
|
+
return if include?(constant)
|
|
95
|
+
|
|
96
|
+
filename = file_for_constant(constant)
|
|
97
|
+
|
|
98
|
+
load_path.each do |dir|
|
|
99
|
+
filepath = File.join(dir, filename)
|
|
100
|
+
|
|
101
|
+
if File.file?(filepath)
|
|
102
|
+
require(filepath)
|
|
103
|
+
|
|
104
|
+
# Only update the path if we actually found the right constant
|
|
105
|
+
# file.
|
|
106
|
+
if registered.key?(constant)
|
|
107
|
+
loaded_constants << constant
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
break
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
private
|
|
116
|
+
|
|
117
|
+
##
|
|
118
|
+
# @param [String] constant
|
|
119
|
+
# @return [String]
|
|
120
|
+
#
|
|
121
|
+
def file_for_constant(constant)
|
|
122
|
+
return constant.snake_case + '.rb'
|
|
123
|
+
end
|
|
124
|
+
end # Registry
|
|
125
|
+
end # Definition
|
|
126
|
+
end # RubyLint
|