Module: RuboCop::Version

Defined in:
lib/rubocop/version.rb

Overview

This module holds the RuboCop version information.

Constant Summary collapse

STRING =
'1.8.1'
MSG =
'%<version>s (using Parser %<parser_version>s, '\
'rubocop-ast %<rubocop_ast_version>s, ' \
'running on %<ruby_engine>s %<ruby_version>s %<ruby_platform>s)'
CANONICAL_FEATURE_NAMES =
{ 'Rspec' => 'RSpec' }.freeze

Class Method Summary collapse

Class Method Details

.document_versionObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


81
82
83
# File 'lib/rubocop/version.rb', line 81

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

.extension_versions(env) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rubocop/version.rb', line 36

def self.extension_versions(env)
  features = Util.silence_warnings do
    # Suppress any config issues when loading the config (ie. deprecations,
    # pending cops, etc.).
    env.config_store.for_pwd.loaded_features.sort
  end

  features.map do |loaded_feature|
    next unless (match = loaded_feature.match(/rubocop-(?<feature>.*)/))

    feature = match[:feature]
    begin
      require "rubocop/#{feature}/version"
    rescue LoadError
      # Not worth mentioning libs that are not installed
    else
      next unless (feature_version = feature_version(feature))

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

.feature_version(feature) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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)


65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/rubocop/version.rb', line 65

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

.version(debug: false, env: nil) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/rubocop/version.rb', line 15

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,
                                  ruby_engine: RUBY_ENGINE, ruby_version: RUBY_VERSION,
                                  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