123456789_123456789_123456789_123456789_123456789_

Module: RuboCop::Version

Relationships & Source Files
Defined in: lib/rubocop/version.rb

Overview

This module holds the RuboCop version information.

Constant Summary

Class Method Summary

Class Method Details

.config_for_pwd(env)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/version.rb', line 99

def self.config_for_pwd(env)
  Util.silence_warnings do
    # Suppress any config issues when loading the config (ie. deprecations,
    # pending cops, etc.).
    env.config_store.unvalidated.for_pwd
  end
end

.document_version

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/version.rb', line 129

def self.document_version
  STRING.match('\d+\.\d+').to_s
end

.extension_versions(env)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/version.rb', line 66

def self.extension_versions(env)
  features = config_for_pwd(env).loaded_features.sort
  features.filter_map do |loaded_feature|
    next unless (match = loaded_feature.match(/rubocop-(?<feature>.*)/))

    # Get the expected name of the folder containing the extension code.
    # Usually it would be the same as the extension name. but sometimes authors
    # can choose slightly different name for their gems, e.g. rubocop-md instead of
    # rubocop-markdown.
    feature = EXTENSION_PATH_NAMES.fetch(loaded_feature, match[:feature])

    begin
      require "rubocop/#{feature}/version"
    rescue LoadError
      # Not worth mentioning libs that are not installed
    end

    next unless (feature_version = feature_version(feature))

    "  - #{loaded_feature} #{feature_version}"
  end
end

.feature_version(feature)

This method is for internal use only.

Returns feature version in one of two ways:

  • Find by RuboCop core version style (e.g. rubocop-performance, rubocop-rspec)

  • Find by bundle gem version style (e.g. rubocop-rake)

[ GitHub ]

  
# File 'lib/rubocop/version.rb', line 113

def self.feature_version(feature)
  capitalized_feature = feature.capitalize
  extension_name = CANONICAL_FEATURE_NAMES.fetch(capitalized_feature, capitalized_feature)

  # Find by RuboCop core version style (e.g. rubocop-performance, rubocop-rspec)
  RuboCop.const_get(extension_name)::Version::STRING
rescue NameError
  begin
    # Find by `bundle gem` version style (e.g. rubocop-rake, rubocop-packaging)
    RuboCop.const_get(extension_name)::VERSION
  rescue NameError
    # noop
  end
end

.parser_version

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/version.rb', line 51

def self.parser_version
  config_path = ConfigFinder.find_config_path(Dir.pwd)
  yaml = Util.silence_warnings do
    ConfigLoader.load_yaml_configuration(config_path)
  end

  if yaml.dig('AllCops', 'ParserEngine') == 'parser_prism'
    require 'prism'
    "Prism #{Prism::VERSION}"
  else
    "Parser #{Parser::VERSION}"
  end
end

.server_mode

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/version.rb', line 134

def self.server_mode
  RuboCop.const_defined?(:Server) && Server.running? ? ' +server' : ''
end

.target_ruby_version(env)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/version.rb', line 90

def self.target_ruby_version(env)
  if env
    config_for_pwd(env).target_ruby_version
  else
    TargetRuby.new(Config.new).version
  end
end

.verbose(env: nil)

This method is for internal use only.
[ GitHub ]

  
# File 'lib/rubocop/version.rb', line 46

def self.verbose(env: nil)
  version(debug: true, env: env)
end

.version(debug: false, env: nil)

This method is for internal use only.
Note
Marked as private but used by gems like standard.
[ GitHub ]

  
# File 'lib/rubocop/version.rb', line 23

def self.version(debug: false, env: nil)
  if debug
    verbose_version = format(MSG, version: STRING, parser_version: parser_version,
                                  rubocop_ast_version: RuboCop::AST::Version::STRING,
                                  target_ruby_version: target_ruby_version(env),
                                  ruby_engine: RUBY_ENGINE, ruby_version: RUBY_VERSION,
                                  server_mode: server_mode,
                                  ruby_platform: RUBY_PLATFORM)
    return verbose_version unless env

    extension_versions = extension_versions(env)
    return verbose_version if extension_versions.empty?

    <<~VERSIONS
      #{verbose_version}
      #{extension_versions.join("\n")}
    VERSIONS
  else
    STRING
  end
end