codeclimate 0.15.2 → 0.16.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: 38fc838beaa355436f6099d39a452cfc6f2c5dae
4
- data.tar.gz: 41ef4793422c385e2322a284b48742e385d98d87
3
+ metadata.gz: c76b70967c771d965edd6504b4668dece09abf13
4
+ data.tar.gz: 287482f7b12f57a51bbeace56e80484b2d0760b7
5
5
  SHA512:
6
- metadata.gz: c9245515c8bb799f1f830bc07841250e7849cd4d7104e9f0b70ecb2b77c3dfd69cbf39338085bd1266d4ef83395fa68725a44cb1727d3668beea1eec32025f3a
7
- data.tar.gz: 8795ed1791812a57ab280718477bdc6acd34647c736897ca084157f2b5caab501658cd170ca9c83ee985175a4a2291f9ae34551b49a555f86d12fcaf1b4e4144
6
+ metadata.gz: 7ebe59fd88a28aaa4c97faeae185b36047b4e6d226be314994ad93f07eda1c568182ca70e6bce9922d46ac3367b84d65a81f1f2b7a7b48a1dee1a43ccbebabda
7
+ data.tar.gz: 9c7340ec09a4c869153f5d41f3d185287dee5ce388c9154e1f28070d0ff155bbc973c8671714474333d7ee744f3581b72ec78d0e726a9e582be308dece89400e
data/lib/cc/analyzer.rb CHANGED
@@ -5,6 +5,7 @@ module CC
5
5
  autoload :Container, "cc/analyzer/container"
6
6
  autoload :ContainerListener, "cc/analyzer/container_listener"
7
7
  autoload :Engine, "cc/analyzer/engine"
8
+ autoload :EngineOutput, "cc/analyzer/engine_output"
8
9
  autoload :EngineOutputFilter, "cc/analyzer/engine_output_filter"
9
10
  autoload :EngineRegistry, "cc/analyzer/engine_registry"
10
11
  autoload :EnginesConfigBuilder, "cc/analyzer/engines_config_builder"
@@ -12,6 +13,7 @@ module CC
12
13
  autoload :Filesystem, "cc/analyzer/filesystem"
13
14
  autoload :Formatters, "cc/analyzer/formatters"
14
15
  autoload :IncludePathsBuilder, "cc/analyzer/include_paths_builder"
16
+ autoload :Issue, "cc/analyzer/issue"
15
17
  autoload :IssueSorter, "cc/analyzer/issue_sorter"
16
18
  autoload :LocationDescription, "cc/analyzer/location_description"
17
19
  autoload :LoggingContainerListener, "cc/analyzer/logging_container_listener"
@@ -33,9 +33,11 @@ module CC
33
33
  listener: composite_listener,
34
34
  )
35
35
 
36
- container.on_output("\0") do |output|
36
+ container.on_output("\0") do |raw_output|
37
+ output = EngineOutput.new(raw_output)
38
+
37
39
  unless output_filter.filter?(output)
38
- stdout_io.write(output) || container.stop
40
+ stdout_io.write(output.to_json) || container.stop
39
41
  end
40
42
  end
41
43
 
@@ -0,0 +1,32 @@
1
+ module CC
2
+ module Analyzer
3
+ class EngineOutput
4
+ delegate :blank?, to: :raw_output
5
+ delegate :to_json, to: :as_issue
6
+
7
+ def initialize(raw_output)
8
+ @raw_output = raw_output
9
+ end
10
+
11
+ def issue?
12
+ parsed_output &&
13
+ parsed_output["type"].present? &&
14
+ parsed_output["type"].downcase == "issue"
15
+ end
16
+
17
+ def as_issue
18
+ Issue.new(raw_output)
19
+ end
20
+
21
+ private
22
+
23
+ attr_accessor :raw_output
24
+
25
+ def parsed_output
26
+ JSON.parse(raw_output)
27
+ rescue JSON::ParserError
28
+ nil
29
+ end
30
+ end
31
+ end
32
+ end
@@ -8,41 +8,21 @@ module CC
8
8
  end
9
9
 
10
10
  def filter?(output)
11
- return true unless output.present?
12
-
13
- if (json = parse_as_json(output))
14
- issue?(json) && ignore_issue?(json)
15
- else
16
- false
17
- end
11
+ output.blank? || (output.issue? && ignore_issue?(output.as_issue))
18
12
  end
19
13
 
20
14
  private
21
15
 
22
- def parse_as_json(output)
23
- JSON.parse(output)
24
- rescue JSON::ParserError
25
- nil
26
- end
27
-
28
- def issue?(json)
29
- json["type"] && json["type"].downcase == ISSUE_TYPE
30
- end
31
-
32
- def ignore_issue?(json)
33
- check_disabled?(json) || ignore_fingerprint?(json)
16
+ def ignore_issue?(issue)
17
+ check_disabled?(issue) || ignore_fingerprint?(issue)
34
18
  end
35
19
 
36
- def check_disabled?(json)
37
- !check_config(json["check_name"]).fetch("enabled", true)
20
+ def check_disabled?(issue)
21
+ !check_config(issue.check_name).fetch("enabled", true)
38
22
  end
39
23
 
40
- def ignore_fingerprint?(json)
41
- if (fingerprint = json["fingerprint"])
42
- @config.fetch("exclude_fingerprints", []).include?(fingerprint)
43
- else
44
- false
45
- end
24
+ def ignore_fingerprint?(issue)
25
+ @config.fetch("exclude_fingerprints", []).include?(issue.fingerprint)
46
26
  end
47
27
 
48
28
  def check_config(check_name)
@@ -0,0 +1,58 @@
1
+ module CC
2
+ module Analyzer
3
+ class Issue
4
+ SPEC_ISSUE_ATTRIBUTES = %w[
5
+ categories
6
+ check_name
7
+ content
8
+ description
9
+ location
10
+ other_locations
11
+ remediation_points
12
+ severity
13
+ type
14
+ ]
15
+
16
+ def initialize(output)
17
+ @output = output
18
+ end
19
+
20
+ def as_json(*)
21
+ parsed_output.reverse_merge!(
22
+ "fingerprint" => fingerprint,
23
+ )
24
+ end
25
+
26
+ def fingerprint
27
+ parsed_output.fetch("fingerprint", default_fingerprint)
28
+ end
29
+
30
+ # Allow access to hash keys as methods
31
+ SPEC_ISSUE_ATTRIBUTES.each do |key|
32
+ define_method(key) do
33
+ parsed_output[key]
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ attr_reader :output
40
+
41
+ def default_fingerprint
42
+ digest = Digest::MD5.new
43
+ digest << path
44
+ digest << "|"
45
+ digest << check_name.to_s
46
+ digest.to_s
47
+ end
48
+
49
+ def parsed_output
50
+ @parsed_output ||= JSON.parse(output)
51
+ end
52
+
53
+ def path
54
+ parsed_output.fetch("location", {}).fetch("path", "")
55
+ end
56
+ end
57
+ end
58
+ 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.15.2
4
+ version: 0.16.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-12-10 00:00:00.000000000 Z
11
+ date: 2015-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -204,6 +204,7 @@ files:
204
204
  - lib/cc/analyzer/container.rb
205
205
  - lib/cc/analyzer/container_listener.rb
206
206
  - lib/cc/analyzer/engine.rb
207
+ - lib/cc/analyzer/engine_output.rb
207
208
  - lib/cc/analyzer/engine_output_filter.rb
208
209
  - lib/cc/analyzer/engine_registry.rb
209
210
  - lib/cc/analyzer/engines_config_builder.rb
@@ -215,6 +216,7 @@ files:
215
216
  - lib/cc/analyzer/formatters/plain_text_formatter.rb
216
217
  - lib/cc/analyzer/formatters/spinner.rb
217
218
  - lib/cc/analyzer/include_paths_builder.rb
219
+ - lib/cc/analyzer/issue.rb
218
220
  - lib/cc/analyzer/issue_sorter.rb
219
221
  - lib/cc/analyzer/location_description.rb
220
222
  - lib/cc/analyzer/logging_container_listener.rb