codeclimate 0.6.4 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6ca89f86ce098c983198f10de1ff0233da75971
4
- data.tar.gz: 8cb4b963e927bc4ac671cbc155e36d8ac01ed009
3
+ metadata.gz: c8c9b1ea7e082d3aebf1ec60122ce302cc362105
4
+ data.tar.gz: 8145118b8fc245b9ef21e53d951b40a52ebc58bd
5
5
  SHA512:
6
- metadata.gz: 7caa45a9423eb8dbdadc83028abec571c2955410085d5479bbf3689c50e429b229ad9410b4670b52dc4c18f96595bcdc64274a6cead415a6fa44d349089b471d
7
- data.tar.gz: db25ad93de68cc95525bb9871a329662040f14fafe91e6aefe7f2f1139cbd59f0a403bd4638ae04dd106f3f81d6dca17be342fffff5bc721d98c15704a8aa7f0
6
+ metadata.gz: f57d7240b23377320fefd642a71db3fee4f1a88a4cbff30661623a90bb622d20505dc857e4e820fe10ec16ee4bb33749fae2a99286745592f8c2d770b719c70b
7
+ data.tar.gz: eb6c644256a56ebe17f1b44fa8785247e7b3b354cc634bc86618677c1f30fbbf37a40c86a70897f229f3fc7739b0a77f053e52f4f60abed88e5561deddd811ba
data/config/engines.yml CHANGED
@@ -13,6 +13,21 @@ rubocop:
13
13
  image: codeclimate/codeclimate-rubocop
14
14
  description: A Ruby static code analyzer, based on the community Ruby style guide.
15
15
  community: false
16
+ upgrade_languages:
17
+ - Ruby
18
+ enable_regexps:
19
+ - \.rb$
20
+ default_ratings_paths:
21
+ - "**.rb"
22
+ duplication:
23
+ image: codeclimate/codeclimate-duplication
24
+ description: Find similar structures in your code
25
+ community: false
26
+ default_config:
27
+ languages:
28
+ - ruby
29
+ upgrade_languages:
30
+ - Ruby
16
31
  enable_regexps:
17
32
  - \.rb$
18
33
  default_ratings_paths:
@@ -53,6 +68,8 @@ eslint:
53
68
  image: codeclimate/codeclimate-eslint
54
69
  description: A JavaScript/JSX linting utility
55
70
  community: false
71
+ upgrade_languages:
72
+ - JavaScript
56
73
  enable_regexps:
57
74
  - \.js$
58
75
  - \.jsx$
@@ -85,14 +102,18 @@ bundler-audit:
85
102
  image: codeclimate/codeclimate-bundler-audit
86
103
  description: Patch-level verification for Bundler
87
104
  community: false
88
- enable_patterns:
89
- - Gemfile.lock
105
+ upgrade_languages:
106
+ - Ruby
107
+ enable_regexps:
108
+ - Gemfile\.lock
90
109
  default_ratings_paths:
91
110
  - Gemfile.lock
92
111
  phpcodesniffer:
93
112
  image: codeclimate/codeclimate-phpcodesniffer
94
113
  description: PHP Code Sniffer
95
114
  community: false
115
+ upgrade_languages:
116
+ - PHP
96
117
  enable_regexps:
97
118
  - \.php$
98
119
  - \.module$
@@ -105,6 +126,8 @@ phpmd:
105
126
  image: codeclimate/codeclimate-phpmd
106
127
  description: PHP Mess Detector
107
128
  community: false
129
+ upgrade_languages:
130
+ - PHP
108
131
  enable_regexps:
109
132
  - \.php$
110
133
  - \.module$
@@ -0,0 +1,38 @@
1
+ module CC
2
+ module CLI
3
+ class Config
4
+ delegate :to_yaml, to: :config
5
+ def initialize
6
+ @config = {
7
+ "engines" => {},
8
+ "ratings" => { "paths" => [] }
9
+ }
10
+ end
11
+
12
+ def add_engine(engine_name, engine_config)
13
+ config["engines"][engine_name] = { "enabled" => true }
14
+
15
+ if engine_config["default_config"].present?
16
+ config["engines"][engine_name]["config"] = engine_config["default_config"]
17
+ end
18
+
19
+ config["ratings"]["paths"] |= engine_config["default_ratings_paths"]
20
+ end
21
+
22
+ def add_exclude_paths(paths)
23
+ config["exclude_paths"] ||= []
24
+ config["exclude_paths"] += paths.map do |path|
25
+ if path.ends_with?("/")
26
+ "#{path}**/*"
27
+ else
28
+ path
29
+ end
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ attr_reader :config
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,60 @@
1
+ module CC
2
+ module CLI
3
+ class ConfigGenerator
4
+ CODECLIMATE_YAML = Command::CODECLIMATE_YAML
5
+ AUTO_EXCLUDE_PATHS = %w(config/ db/ features/ node_modules/ script/ spec/ test/ vendor/).freeze
6
+
7
+ def self.for(filesystem, engine_registry, upgrade_requested)
8
+ if upgrade_requested && upgrade_needed?(filesystem)
9
+ UpgradeConfigGenerator.new(filesystem, engine_registry)
10
+ else
11
+ ConfigGenerator.new(filesystem, engine_registry)
12
+ end
13
+ end
14
+
15
+ def initialize(filesystem, engine_registry)
16
+ @filesystem = filesystem
17
+ @engine_registry = engine_registry
18
+ end
19
+
20
+ def eligible_engines
21
+ return @eligible_engines if @eligible_engines
22
+
23
+ engines = engine_registry.list
24
+ @eligible_engines = engines.each_with_object({}) do |(name, config), result|
25
+ if engine_eligible?(config)
26
+ result[name] = config
27
+ end
28
+ end
29
+ end
30
+
31
+ def exclude_paths
32
+ AUTO_EXCLUDE_PATHS.select { |path| filesystem.exist?(path) }
33
+ end
34
+
35
+ def post_generation_verb
36
+ "generated"
37
+ end
38
+
39
+ private
40
+
41
+ attr_reader :engine_registry, :filesystem
42
+
43
+ def self.upgrade_needed?(filesystem)
44
+ if filesystem.exist?(CODECLIMATE_YAML)
45
+ YAML.safe_load(File.read(CODECLIMATE_YAML))["languages"].present?
46
+ end
47
+ end
48
+
49
+ def engine_eligible?(engine)
50
+ !engine["community"] && engine["enable_regexps"].present? && files_exist?(engine)
51
+ end
52
+
53
+ def files_exist?(engine)
54
+ filesystem.any? do |path|
55
+ engine["enable_regexps"].any? { |re| Regexp.new(re).match(path) }
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
data/lib/cc/cli/init.rb CHANGED
@@ -1,36 +1,38 @@
1
+ require 'cc/cli/config'
2
+ require 'cc/cli/config_generator'
3
+ require 'cc/cli/upgrade_config_generator'
4
+
1
5
  module CC
2
6
  module CLI
3
7
  class Init < Command
4
8
  include CC::Analyzer
5
9
 
6
- AUTO_EXCLUDE_PATHS = %w[config db features node_modules script spec test vendor].freeze
7
-
8
10
  def run
9
- if filesystem.exist?(CODECLIMATE_YAML)
11
+ if !upgrade? && filesystem.exist?(CODECLIMATE_YAML)
10
12
  say "Config file .codeclimate.yml already present.\nTry running 'validate-config' to check configuration."
13
+ elsif upgrade? && engines_enabled?
14
+ say "--upgrade should not be used on a .codeclimate.yml configured for the Platform.\nTry running 'validate-config' to check configuration."
11
15
  else
12
16
  create_codeclimate_yaml
13
- say "Config file .codeclimate.yml successfully generated.\nEdit and then try running 'validate-config' to check configuration."
17
+ say "Config file .codeclimate.yml successfully #{config_generator.post_generation_verb}.\nEdit and then try running 'validate-config' to check configuration."
14
18
  create_default_configs
15
19
  end
16
20
  end
17
21
 
18
22
  private
19
23
 
24
+ def upgrade?
25
+ @args.include?("--upgrade")
26
+ end
27
+
20
28
  def create_codeclimate_yaml
21
- config = { "engines" => {} }
22
- eligible_engines.each do |engine_name, engine_config|
23
- config["engines"][engine_name] = {
24
- "enabled" => true
25
- }
26
- config["ratings"] ||= {}
27
- config["ratings"]["paths"] ||= []
29
+ config = CC::CLI::Config.new
28
30
 
29
- config["ratings"]["paths"] |= engine_config["default_ratings_paths"]
31
+ config_generator.eligible_engines.each do |(engine_name, engine_config)|
32
+ config.add_engine(engine_name, engine_config)
30
33
  end
31
34
 
32
- config["exclude_paths"] = exclude_paths(AUTO_EXCLUDE_PATHS)
33
-
35
+ config.add_exclude_paths(config_generator.exclude_paths)
34
36
  filesystem.write_path(CODECLIMATE_YAML, config.to_yaml)
35
37
  end
36
38
 
@@ -47,7 +49,7 @@ module CC
47
49
  end
48
50
 
49
51
  def available_configs
50
- all_paths = eligible_engines.flat_map do |engine_name, _|
52
+ all_paths = config_generator.eligible_engines.flat_map do |engine_name, _|
51
53
  engine_directory = File.expand_path("../../../../config/#{engine_name}", __FILE__)
52
54
  Dir.glob("#{engine_directory}/*", File::FNM_DOTMATCH)
53
55
  end
@@ -55,30 +57,19 @@ module CC
55
57
  all_paths.reject { |path| ['.', '..'].include?(File.basename(path)) }
56
58
  end
57
59
 
58
- def exclude_paths(paths)
59
- expanded_paths = []
60
- paths.each do |dir|
61
- if filesystem.exist?(dir)
62
- expanded_paths << "#{dir}/**/*"
63
- end
60
+ def engines_enabled?
61
+ unless @engines_enabled.nil?
62
+ return @engines_enabled
64
63
  end
65
- expanded_paths
66
- end
67
64
 
68
- def engine_eligible?(engine)
69
- !engine["community"] &&
70
- engine["enable_regexps"].present? &&
71
- filesystem.any? do |path|
72
- engine["enable_regexps"].any? { |re| Regexp.new(re).match(path) }
73
- end
65
+ if filesystem.exist?(CODECLIMATE_YAML)
66
+ config = CC::Analyzer::Config.new(File.read(CODECLIMATE_YAML))
67
+ @engines_enabled ||= config.engine_names.any?
68
+ end
74
69
  end
75
70
 
76
- def eligible_engines
77
- @eligible_engines ||= engine_registry.list.each_with_object({}) do |(engine_name, config), result|
78
- if engine_eligible?(config)
79
- result[engine_name] = config
80
- end
81
- end
71
+ def config_generator
72
+ @config_generator ||= ConfigGenerator.for(filesystem, engine_registry, upgrade?)
82
73
  end
83
74
  end
84
75
  end
@@ -0,0 +1,34 @@
1
+ require "cc/cli/config_generator"
2
+
3
+ module CC
4
+ module CLI
5
+ class UpgradeConfigGenerator < ConfigGenerator
6
+ def exclude_paths
7
+ existing_yaml["exclude_paths"] || []
8
+ end
9
+
10
+ def post_generation_verb
11
+ "upgraded"
12
+ end
13
+
14
+ private
15
+
16
+ def engine_eligible?(engine)
17
+ base_eligble = super
18
+ if engine["upgrade_languages"].present?
19
+ base_eligble && (engine["upgrade_languages"] & classic_languages).any?
20
+ else
21
+ base_eligble
22
+ end
23
+ end
24
+
25
+ def classic_languages
26
+ @classic_languages ||= existing_yaml["languages"].reject { |_, v| !v }.map(&:first)
27
+ end
28
+
29
+ def existing_yaml
30
+ @existing_yml ||= YAML.safe_load(File.read(CODECLIMATE_YAML))
31
+ end
32
+ end
33
+ end
34
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeclimate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.4
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code Climate
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-01 00:00:00.000000000 Z
11
+ date: 2015-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -218,6 +218,8 @@ files:
218
218
  - lib/cc/cli.rb
219
219
  - lib/cc/cli/analyze.rb
220
220
  - lib/cc/cli/command.rb
221
+ - lib/cc/cli/config.rb
222
+ - lib/cc/cli/config_generator.rb
221
223
  - lib/cc/cli/console.rb
222
224
  - lib/cc/cli/engines.rb
223
225
  - lib/cc/cli/engines/disable.rb
@@ -229,6 +231,7 @@ files:
229
231
  - lib/cc/cli/help.rb
230
232
  - lib/cc/cli/init.rb
231
233
  - lib/cc/cli/runner.rb
234
+ - lib/cc/cli/upgrade_config_generator.rb
232
235
  - lib/cc/cli/validate_config.rb
233
236
  - lib/cc/cli/version.rb
234
237
  - lib/file_utils_ext.rb
@@ -252,7 +255,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
252
255
  version: '0'
253
256
  requirements: []
254
257
  rubyforge_project:
255
- rubygems_version: 2.4.8
258
+ rubygems_version: 2.4.5
256
259
  signing_key:
257
260
  specification_version: 4
258
261
  summary: Code Climate CLI