goodcheck 2.6.0 → 3.0.2

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.
@@ -5,6 +5,8 @@ module Goodcheck
5
5
 
6
6
  def initialize(stdout:)
7
7
  @stdout = stdout
8
+ @file_count = 0
9
+ @issue_count = 0
8
10
  end
9
11
 
10
12
  def analysis
@@ -12,6 +14,7 @@ module Goodcheck
12
14
  end
13
15
 
14
16
  def file(path)
17
+ @file_count += 1
15
18
  yield
16
19
  end
17
20
 
@@ -20,21 +23,51 @@ module Goodcheck
20
23
  end
21
24
 
22
25
  def issue(issue)
26
+ @issue_count += 1
27
+
28
+ message = issue.rule.message.lines.first.chomp
29
+
23
30
  if issue.location
24
- line = issue.buffer.line(issue.location.start_line)
25
- end_column = if issue.location.start_line == issue.location.end_line
26
- issue.location.end_column
27
- else
28
- line.bytesize
29
- end
30
- colored_line = line.byteslice(0, issue.location.start_column) + Rainbow(line.byteslice(issue.location.start_column, end_column - issue.location.start_column)).red + line.byteslice(end_column, line.bytesize)
31
- stdout.puts "#{issue.path}:#{issue.location.start_line}:#{colored_line.chomp}:\t#{issue.rule.message.lines.first.chomp}"
31
+ start_line = issue.location.start_line
32
+ start_column = issue.location.start_column
33
+ start_column_index = start_column - 1
34
+ line = issue.buffer.line(start_line)
35
+ column_size = if issue.location.one_line?
36
+ issue.location.column_size
37
+ else
38
+ line.bytesize - start_column
39
+ end
40
+ rule = Rainbow("(#{issue.rule.id})").darkgray
41
+ severity = issue.rule.severity ? Rainbow("[#{issue.rule.severity}]").magenta : ""
42
+ stdout.puts "#{Rainbow(issue.path).cyan}:#{start_line}:#{start_column}: #{message} #{rule} #{severity}".strip
43
+ stdout.puts line.chomp
44
+ stdout.puts (" " * start_column_index) + Rainbow("^" + "~" * (column_size - 1)).yellow
32
45
  else
33
- line = issue.buffer.line(1)&.chomp
34
- line = line ? Rainbow(line).red : '-'
35
- stdout.puts "#{issue.path}:-:#{line}:\t#{issue.rule.message.lines.first.chomp}"
46
+ stdout.puts "#{Rainbow(issue.path).cyan}:-:-: #{message}"
36
47
  end
37
48
  end
49
+
50
+ def summary
51
+ files = case @file_count
52
+ when 0
53
+ "no files"
54
+ when 1
55
+ "1 file"
56
+ else
57
+ "#{@file_count} files"
58
+ end
59
+ issues = case @issue_count
60
+ when 0
61
+ Rainbow("no issues").green
62
+ when 1
63
+ Rainbow("1 issue").red
64
+ else
65
+ Rainbow("#{@issue_count} issues").red
66
+ end
67
+
68
+ stdout.puts ""
69
+ stdout.puts "#{files} inspected, #{issues} detected"
70
+ end
38
71
  end
39
72
  end
40
73
  end
@@ -4,12 +4,14 @@ module Goodcheck
4
4
  attr_reader :triggers
5
5
  attr_reader :message
6
6
  attr_reader :justifications
7
+ attr_reader :severity
7
8
 
8
- def initialize(id:, triggers:, message:, justifications:)
9
+ def initialize(id:, triggers:, message:, justifications:, severity: nil)
9
10
  @id = id
10
11
  @triggers = triggers
11
12
  @message = message
12
13
  @justifications = justifications
14
+ @severity = severity
13
15
  end
14
16
  end
15
17
  end
@@ -0,0 +1,40 @@
1
+ module Goodcheck
2
+ class Unarchiver
3
+ attr_reader :file_filter
4
+
5
+ def initialize(file_filter: ->(_filename) { true })
6
+ @file_filter = file_filter
7
+ end
8
+
9
+ def tar_gz?(filename)
10
+ name = filename.to_s.downcase
11
+ ext = ".tar.gz"
12
+ name.end_with?(ext) && name != ext
13
+ end
14
+
15
+ def tar_gz(content)
16
+ require "rubygems/package"
17
+
18
+ Gem::Package::TarReader.new(StringIO.new(gz(content))) do |tar_reader|
19
+ tar_reader.each do |file|
20
+ if file.file? && file_filter.call(file.full_name)
21
+ yield file.read, file.full_name
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def gz(content)
30
+ require "zlib"
31
+
32
+ io = Zlib::GzipReader.new(StringIO.new(content))
33
+ begin
34
+ io.read
35
+ ensure
36
+ io.close
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
1
  module Goodcheck
2
- VERSION = "2.6.0".freeze
2
+ VERSION = "3.0.2".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goodcheck
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
- - Soutaro Matsumoto
7
+ - Sider Corporation
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-18 00:00:00.000000000 Z
11
+ date: 2021-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,64 +28,64 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '5.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: minitest-reporters
56
+ name: simplecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 1.4.2
61
+ version: '0.18'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: 1.4.2
68
+ version: '0.18'
69
69
  - !ruby/object:Gem::Dependency
70
- name: activesupport
70
+ name: marcel
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '4.0'
75
+ version: '1.0'
76
76
  - - "<"
77
77
  - !ruby/object:Gem::Version
78
- version: '7.0'
78
+ version: '2.0'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - ">="
84
84
  - !ruby/object:Gem::Version
85
- version: '4.0'
85
+ version: '1.0'
86
86
  - - "<"
87
87
  - !ruby/object:Gem::Version
88
- version: '7.0'
88
+ version: '2.0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: strong_json
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -110,16 +110,22 @@ dependencies:
110
110
  name: rainbow
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
- - - "~>"
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '3.0'
116
+ - - "<"
114
117
  - !ruby/object:Gem::Version
115
- version: 3.0.0
118
+ version: '4.0'
116
119
  type: :runtime
117
120
  prerelease: false
118
121
  version_requirements: !ruby/object:Gem::Requirement
119
122
  requirements:
120
- - - "~>"
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '3.0'
126
+ - - "<"
121
127
  - !ruby/object:Gem::Version
122
- version: 3.0.0
128
+ version: '4.0'
123
129
  - !ruby/object:Gem::Dependency
124
130
  name: psych
125
131
  requirement: !ruby/object:Gem::Requirement
@@ -129,7 +135,7 @@ dependencies:
129
135
  version: '3.1'
130
136
  - - "<"
131
137
  - !ruby/object:Gem::Version
132
- version: '4.0'
138
+ version: '5.0'
133
139
  type: :runtime
134
140
  prerelease: false
135
141
  version_requirements: !ruby/object:Gem::Requirement
@@ -139,10 +145,11 @@ dependencies:
139
145
  version: '3.1'
140
146
  - - "<"
141
147
  - !ruby/object:Gem::Version
142
- version: '4.0'
143
- description: Regexp based customizable linter
148
+ version: '5.0'
149
+ description: Goodcheck is a regexp based linter that allows you to define custom rules
150
+ in a YAML file.
144
151
  email:
145
- - matsumoto@soutaro.com
152
+ - support@siderlabs.com
146
153
  executables:
147
154
  - goodcheck
148
155
  extensions: []
@@ -177,11 +184,16 @@ files:
177
184
  - lib/goodcheck/reporters/text.rb
178
185
  - lib/goodcheck/rule.rb
179
186
  - lib/goodcheck/trigger.rb
187
+ - lib/goodcheck/unarchiver.rb
180
188
  - lib/goodcheck/version.rb
181
- homepage: https://github.com/sider/goodcheck
189
+ homepage: https://sider.github.io/goodcheck/
182
190
  licenses:
183
191
  - MIT
184
- metadata: {}
192
+ metadata:
193
+ homepage_uri: https://sider.github.io/goodcheck/
194
+ source_code_uri: https://github.com/sider/goodcheck
195
+ changelog_uri: https://github.com/sider/goodcheck/blob/master/CHANGELOG.md
196
+ bug_tracker_uri: https://github.com/sider/goodcheck/issues
185
197
  post_install_message:
186
198
  rdoc_options: []
187
199
  require_paths:
@@ -190,15 +202,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
190
202
  requirements:
191
203
  - - ">="
192
204
  - !ruby/object:Gem::Version
193
- version: 2.4.0
205
+ version: 2.5.0
194
206
  required_rubygems_version: !ruby/object:Gem::Requirement
195
207
  requirements:
196
208
  - - ">="
197
209
  - !ruby/object:Gem::Version
198
210
  version: '0'
199
211
  requirements: []
200
- rubygems_version: 3.1.4
212
+ rubygems_version: 3.2.20
201
213
  signing_key:
202
214
  specification_version: 4
203
- summary: Regexp based customizable linter
215
+ summary: Regexp based customizable linter.
204
216
  test_files: []