class RuboCop::Server::Cache
Caches the states of server process. @api private
Constants
- GEMFILE_NAMES
- LOCKFILE_NAMES
Attributes
cache_root_path[RW]
Public Class Methods
acquire_lock() { |flock_result != false| ... }
click to toggle source
# File lib/rubocop/server/cache.rb, line 138 def acquire_lock lock_file = File.open(lock_path, File::CREAT) # flock returns 0 if successful, and false if not. flock_result = lock_file.flock(File::LOCK_EX | File::LOCK_NB) yield flock_result != false ensure lock_file.flock(File::LOCK_UN) lock_file.close end
cache_path()
click to toggle source
# File lib/rubocop/server/cache.rb, line 65 def cache_path cache_root_dir = if cache_root_path File.join(cache_root_path, 'rubocop_cache') else cache_root_dir_from_config end File.expand_path(File.join(cache_root_dir, 'server')) end
cache_root_dir_from_config()
click to toggle source
rubocop:disable Metrics/MethodLength
# File lib/rubocop/server/cache.rb, line 76 def cache_root_dir_from_config CacheConfig.root_dir do # `RuboCop::ConfigStore` has heavy dependencies, this is a lightweight implementation # so that only the necessary `CacheRootDirectory` can be obtained. config_path = ConfigFinder.find_config_path(Dir.pwd) file_contents = File.read(config_path) # Returns early if `CacheRootDirectory` is not used before requiring `erb` or `yaml`. next unless file_contents.include?('CacheRootDirectory') require 'erb' yaml_code = ERB.new(file_contents).result require 'yaml' config_yaml = YAML.safe_load( yaml_code, permitted_classes: [Regexp, Symbol], aliases: true ) # For compatibility with Ruby 3.0 or lower. if Gem::Version.new(Psych::VERSION) < Gem::Version.new('4.0.0') config_yaml == false ? nil : config_yaml end config_yaml&.dig('AllCops', 'CacheRootDirectory') end end
dir()
click to toggle source
rubocop:enable Metrics/AbcSize
# File lib/rubocop/server/cache.rb, line 59 def dir Pathname.new(File.join(cache_path, project_dir_cache_key)).tap do |d| d.mkpath unless d.exist? end end
lock_path()
click to toggle source
# File lib/rubocop/server/cache.rb, line 116 def lock_path dir.join('lock') end
pid_path()
click to toggle source
# File lib/rubocop/server/cache.rb, line 112 def pid_path dir.join('pid') end
pid_running?()
click to toggle source
# File lib/rubocop/server/cache.rb, line 132 def pid_running? Process.kill(0, pid_path.read.to_i) == 1 rescue Errno::ESRCH, Errno::ENOENT, Errno::EACCES, Errno::EROFS, Errno::ENAMETOOLONG false end
port_path()
click to toggle source
rubocop:enable Metrics/MethodLength
# File lib/rubocop/server/cache.rb, line 104 def port_path dir.join('port') end
project_dir()
click to toggle source
Searches for Gemfile or gems.rb in the current dir or any parent dirs
# File lib/rubocop/server/cache.rb, line 29 def project_dir current_dir = Dir.pwd while current_dir != '/' return current_dir if GEMFILE_NAMES.any? do |gemfile| File.exist?(File.join(current_dir, gemfile)) end current_dir = File.expand_path('..', current_dir) end # If we can't find a Gemfile, just use the current directory Dir.pwd end
project_dir_cache_key()
click to toggle source
# File lib/rubocop/server/cache.rb, line 42 def project_dir_cache_key @project_dir_cache_key ||= project_dir[1..].tr('/', '+') end
restart_key()
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/rubocop/server/cache.rb, line 47 def restart_key lockfile_path = LOCKFILE_NAMES.map do |lockfile_name| Pathname(project_dir).join(lockfile_name) end.find(&:exist?) version_data = lockfile_path&.read || RuboCop::Version::STRING config_data = Pathname(ConfigFinder.find_config_path(Dir.pwd)).read todo_data = (rubocop_todo = Pathname('.rubocop_todo.yml')).exist? ? rubocop_todo.read : '' Digest::SHA1.hexdigest(version_data + config_data + todo_data) end
status_path()
click to toggle source
# File lib/rubocop/server/cache.rb, line 120 def status_path dir.join('status') end
stderr_path()
click to toggle source
# File lib/rubocop/server/cache.rb, line 128 def stderr_path dir.join('stderr') end
token_path()
click to toggle source
# File lib/rubocop/server/cache.rb, line 108 def token_path dir.join('token') end
version_path()
click to toggle source
# File lib/rubocop/server/cache.rb, line 124 def version_path dir.join('version') end
write_pid_file() { || ... }
click to toggle source
# File lib/rubocop/server/cache.rb, line 153 def write_pid_file pid_path.write(Process.pid) yield ensure dir.rmtree end
write_port_and_token_files(port:, token:)
click to toggle source
# File lib/rubocop/server/cache.rb, line 148 def write_port_and_token_files(port:, token:) port_path.write(port) token_path.write(token) end
write_status_file(status)
click to toggle source
# File lib/rubocop/server/cache.rb, line 160 def write_status_file(status) status_path.write(status) end
write_version_file(version)
click to toggle source
# File lib/rubocop/server/cache.rb, line 164 def write_version_file(version) version_path.write(version) end