Module: RuboCop::Version
- Defined in:
- lib/rubocop/version.rb
Overview
This module holds the RuboCop version information.
Constant Summary collapse
- STRING =
'1.68.0'
- MSG =
'%<version>s (using %<parser_version>s, ' \ 'rubocop-ast %<rubocop_ast_version>s, ' \ 'analyzing as Ruby %<target_ruby_version>s, ' \ 'running on %<ruby_engine>s %<ruby_version>s)%<server_mode>s [%<ruby_platform>s]'
- CANONICAL_FEATURE_NAMES =
{ 'Rspec' => 'RSpec', 'Graphql' => 'GraphQL', 'Md' => 'Markdown', 'Factory_bot' => 'FactoryBot', 'Thread_safety' => 'ThreadSafety', 'Rspec_rails' => 'RSpecRails' }.freeze
- EXTENSION_PATH_NAMES =
{ 'rubocop-md' => 'markdown', 'rubocop-factory_bot' => 'factory_bot' }.freeze
Class Method Summary collapse
- .config_for_pwd(env) ⇒ Object private
- .document_version ⇒ Object private
- .extension_versions(env) ⇒ Object private
-
.feature_version(feature) ⇒ Object
private
Returns feature version in one of two ways:.
- .parser_version ⇒ Object private
- .server_mode ⇒ Object private
- .target_ruby_version(env) ⇒ Object private
- .verbose(env: nil) ⇒ Object private
-
.version(debug: false, env: nil) ⇒ Object
private
NOTE: Marked as private but used by gems like standard.
Class Method Details
.config_for_pwd(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.
99 100 101 102 103 104 105 |
# 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 ⇒ 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.
129 130 131 |
# File 'lib/rubocop/version.rb', line 129 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.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# 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) ⇒ 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)
113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# 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 ⇒ 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.
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# 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 ⇒ 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.
134 135 136 |
# File 'lib/rubocop/version.rb', line 134 def self.server_mode RuboCop.const_defined?(:Server) && Server.running? ? ' +server' : '' end |
.target_ruby_version(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.
90 91 92 93 94 95 96 |
# 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) ⇒ 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.
46 47 48 |
# File 'lib/rubocop/version.rb', line 46 def self.verbose(env: nil) version(debug: true, env: env) 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.
NOTE: Marked as private but used by gems like standard.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# 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 |