Class: RuboCop::Cop::Chef::Ruby::UnlessDefinedRequire
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Chef::Ruby::UnlessDefinedRequire
- Extended by:
- AutoCorrector
- Defined in:
- lib/rubocop/cop/chef/ruby/unless_defined_require.rb
Overview
Rubygems is VERY slow to require gems even if they’ve already been loaded. To work around this wrap your require statement with an ‘if defined?()` check.
Constant Summary collapse
- MSG =
"Workaround rubygems slow requires by only running require if the class isn't already defined"
- REQUIRE_TO_CLASS =
{ "addressable/uri" => "Addressable::URI", "appscript" => "Appscript", "base64" => "Base64", "benchmark" => "Benchmark", "cgi" => "CGI", "chef-utils" => "ChefUtils::CANARY", "chef-utils/dist" => "ChefUtils::Dist", "csv" => "CSV", "digest" => "Digest", "digest/md5" => "Digest::MD5", "digest/sha1" => "Digest::SHA1", "digest/sha2" => "Digest::SHA2", "droplet_kit" => "DropletKit", "erb" => "Erb", "erubis" => "Erubis", "etc" => "Etc", "excon" => "Excon", "faraday" => "Faraday", "ffi_yajl" => "FFI_Yajl", "ffi" => "FFI", "fileutils" => "FileUtils", "find" => "Find.find", "forwardable" => "Forwardable", "ipaddr" => "IPAddr", "json" => "JSON", "mime/types" => "MIME::Types", "mixlib/archive" => "Mixlib::Archive", "mixlib/cli" => "Mixlib::CLI", "mixlib/config" => "Mixlib::Config", "mixlib/shellout" => "Mixlib::ShellOut", "multi_json" => "MultiJson", "net/http" => "Net::HTTP", "net/ssh" => "Net::SSH", "netaddr" => "NetAddr", "nokogiri" => "Nokogiri", "ohai" => "Ohai::System", "open-uri" => "OpenURI", "openssl" => "OpenSSL", "optparse" => "OptionParser", "ostruct" => "OpenStruct", "pathname" => "Pathname", "pp" => "PP", "rack" => "Rack", "rbconfig" => "RbConfig", "retryable" => "Retryable", "rexml/document" => "REXML::Document", "rubygems" => "Gem", "rubygems/package" => "Gem::Package", "securerandom" => "SecureRandom", "set" => "Set", "shellwords" => "Shellwords", "singleton" => "Singleton", "socket" => "Socket", "sslshake" => "SSLShake", "stringio" => "StringIO", "tempfile" => "Tempfile", "thor" => "Thor", "time" => "Time.zone_offset", "timeout" => "Timeout", "tmpdir" => "Dir.mktmpdir", "tomlrb" => "Tomlrb", "uri" => "URI", "webrick" => "WEBrick", "win32/registry" => "Win32::Registry", "win32ole" => "WIN32OLE", "winrm" => "WinRM::Connection", "yard" => "YARD", "zip" => "Zip", "zlib" => "Zlib", "pastel" => "Pastel", }.freeze
Instance Method Summary collapse
Instance Method Details
#on_send(node) ⇒ Object
108 109 110 111 112 113 114 115 116 117 |
# File 'lib/rubocop/cop/chef/ruby/unless_defined_require.rb', line 108 def on_send(node) require?(node) do |r| next if node.parent && node.parent.conditional? # catch both if and unless next unless REQUIRE_TO_CLASS[r] add_offense(node.loc.expression, message: MSG, severity: :refactor) do |corrector| corrector.replace(node.loc.expression, "#{node.source} unless defined?(#{REQUIRE_TO_CLASS[r]})") end end end |