goodcheck 2.5.1 → 3.0.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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +48 -2
  3. data/LICENSE +1 -1
  4. data/README.md +7 -444
  5. data/lib/goodcheck.rb +9 -4
  6. data/lib/goodcheck/analyzer.rb +13 -9
  7. data/lib/goodcheck/buffer.rb +11 -16
  8. data/lib/goodcheck/cli.rb +79 -57
  9. data/lib/goodcheck/commands/check.rb +41 -27
  10. data/lib/goodcheck/commands/config_loading.rb +28 -5
  11. data/lib/goodcheck/commands/init.rb +4 -2
  12. data/lib/goodcheck/commands/pattern.rb +2 -1
  13. data/lib/goodcheck/commands/test.rb +38 -30
  14. data/lib/goodcheck/config.rb +68 -1
  15. data/lib/goodcheck/config_loader.rb +41 -31
  16. data/lib/goodcheck/error.rb +3 -0
  17. data/lib/goodcheck/exit_status.rb +8 -0
  18. data/lib/goodcheck/glob.rb +14 -3
  19. data/lib/goodcheck/import_loader.rb +61 -17
  20. data/lib/goodcheck/issue.rb +3 -3
  21. data/lib/goodcheck/location.rb +28 -0
  22. data/lib/goodcheck/logger.rb +4 -4
  23. data/lib/goodcheck/reporters/json.rb +6 -1
  24. data/lib/goodcheck/reporters/text.rb +44 -11
  25. data/lib/goodcheck/rule.rb +3 -1
  26. data/lib/goodcheck/unarchiver.rb +40 -0
  27. data/lib/goodcheck/version.rb +1 -1
  28. metadata +47 -84
  29. data/.github/workflows/release.yml +0 -16
  30. data/.github/workflows/test.yml +0 -46
  31. data/.gitignore +0 -13
  32. data/.rubocop.yml +0 -5
  33. data/Dockerfile +0 -13
  34. data/Gemfile +0 -6
  35. data/Rakefile +0 -75
  36. data/bin/console +0 -14
  37. data/bin/setup +0 -8
  38. data/cheatsheet.pdf +0 -0
  39. data/docusaurus/.dockerignore +0 -2
  40. data/docusaurus/.gitignore +0 -12
  41. data/docusaurus/Dockerfile +0 -10
  42. data/docusaurus/docker-compose.yml +0 -18
  43. data/docusaurus/docs/commands.md +0 -69
  44. data/docusaurus/docs/configuration.md +0 -300
  45. data/docusaurus/docs/development.md +0 -15
  46. data/docusaurus/docs/getstarted.md +0 -46
  47. data/docusaurus/docs/rules.md +0 -79
  48. data/docusaurus/website/README.md +0 -193
  49. data/docusaurus/website/core/Footer.js +0 -100
  50. data/docusaurus/website/package.json +0 -14
  51. data/docusaurus/website/pages/en/index.js +0 -207
  52. data/docusaurus/website/pages/en/versions.js +0 -118
  53. data/docusaurus/website/sidebars.json +0 -11
  54. data/docusaurus/website/siteConfig.js +0 -171
  55. data/docusaurus/website/static/css/code-block-buttons.css +0 -39
  56. data/docusaurus/website/static/css/custom.css +0 -245
  57. data/docusaurus/website/static/img/favicon.ico +0 -0
  58. data/docusaurus/website/static/js/code-block-buttons.js +0 -47
  59. data/docusaurus/website/versioned_docs/version-1.0.0/commands.md +0 -70
  60. data/docusaurus/website/versioned_docs/version-1.0.0/configuration.md +0 -296
  61. data/docusaurus/website/versioned_docs/version-1.0.0/development.md +0 -16
  62. data/docusaurus/website/versioned_docs/version-1.0.0/getstarted.md +0 -47
  63. data/docusaurus/website/versioned_docs/version-1.0.0/rules.md +0 -81
  64. data/docusaurus/website/versioned_docs/version-1.0.2/rules.md +0 -79
  65. data/docusaurus/website/versioned_docs/version-2.4.0/configuration.md +0 -301
  66. data/docusaurus/website/versioned_docs/version-2.4.3/rules.md +0 -80
  67. data/docusaurus/website/versioned_sidebars/version-1.0.0-sidebars.json +0 -11
  68. data/docusaurus/website/versioned_sidebars/version-1.0.2-sidebars.json +0 -11
  69. data/docusaurus/website/versioned_sidebars/version-2.4.0-sidebars.json +0 -11
  70. data/docusaurus/website/versions.json +0 -11
  71. data/docusaurus/website/yarn.lock +0 -6806
  72. data/goodcheck.gemspec +0 -35
  73. data/goodcheck.yml +0 -10
  74. data/logo/GoodCheck Horizontal.pdf +0 -899
  75. data/logo/GoodCheck Horizontal.png +0 -0
  76. data/logo/GoodCheck Horizontal.svg +0 -55
  77. data/logo/GoodCheck logo.png +0 -0
  78. data/logo/GoodCheck vertical.png +0 -0
  79. data/sample.yml +0 -57
@@ -0,0 +1,3 @@
1
+ module Goodcheck
2
+ class Error < StandardError; end
3
+ end
@@ -0,0 +1,8 @@
1
+ module Goodcheck
2
+ module ExitStatus
3
+ EXIT_SUCCESS = 0
4
+ EXIT_ERROR = 1
5
+ EXIT_MATCH = 2
6
+ EXIT_TEST_FAILED = 3
7
+ end
8
+ end
@@ -1,21 +1,32 @@
1
1
  module Goodcheck
2
2
  class Glob
3
+ FNM_FLAGS = File::FNM_PATHNAME | File::FNM_EXTGLOB | File::FNM_DOTMATCH
4
+
3
5
  attr_reader :pattern
4
6
  attr_reader :encoding
7
+ attr_reader :exclude
5
8
 
6
- def initialize(pattern:, encoding:)
9
+ def initialize(pattern:, encoding:, exclude:)
7
10
  @pattern = pattern
8
11
  @encoding = encoding
12
+ @exclude = exclude
9
13
  end
10
14
 
11
15
  def test(path)
12
- path.fnmatch?(pattern, File::FNM_PATHNAME | File::FNM_EXTGLOB | File::FNM_DOTMATCH)
16
+ path.fnmatch?(pattern, FNM_FLAGS) && !excluded?(path)
13
17
  end
14
18
 
15
19
  def ==(other)
16
20
  other.is_a?(Glob) &&
17
21
  other.pattern == pattern &&
18
- other.encoding == encoding
22
+ other.encoding == encoding &&
23
+ other.exclude == exclude
24
+ end
25
+
26
+ private
27
+
28
+ def excluded?(path)
29
+ Array(exclude).any? { |exc| path.fnmatch?(exc, FNM_FLAGS) }
19
30
  end
20
31
  end
21
32
  end
@@ -1,13 +1,23 @@
1
1
  module Goodcheck
2
2
  class ImportLoader
3
- class UnexpectedSchemaError < StandardError
3
+ class UnexpectedSchemaError < Error
4
4
  attr_reader :uri
5
5
 
6
6
  def initialize(uri)
7
+ super("Unexpected URI schema: #{uri.scheme}")
7
8
  @uri = uri
8
9
  end
9
10
  end
10
11
 
12
+ class FileNotFound < Error
13
+ attr_reader :path
14
+
15
+ def initialize(path)
16
+ super("No such a file: #{path}")
17
+ @path = path
18
+ end
19
+ end
20
+
11
21
  attr_reader :cache_path
12
22
  attr_reader :expires_in
13
23
  attr_reader :force_download
@@ -21,23 +31,39 @@ module Goodcheck
21
31
  end
22
32
 
23
33
  def load(name, &block)
24
- uri = URI.parse(name)
34
+ uri = begin
35
+ URI.parse(name)
36
+ rescue URI::InvalidURIError
37
+ nil
38
+ end
25
39
 
26
- case uri.scheme
27
- when nil, "file"
28
- load_file uri, &block
40
+ case uri&.scheme
41
+ when nil
42
+ load_file name, &block
43
+ when "file"
44
+ load_file uri.path, &block
29
45
  when "http", "https"
30
46
  load_http uri, &block
31
47
  else
32
- raise UnexpectedSchemaError.new("Unexpected URI schema: #{uri.class.name}")
48
+ raise UnexpectedSchemaError.new(uri)
33
49
  end
34
50
  end
35
51
 
36
- def load_file(uri)
37
- path = (config_path.parent + uri.path)
38
-
39
- begin
40
- yield path.read
52
+ def load_file(path, &block)
53
+ files = Pathname.glob(File.join(config_path.parent.to_path, path), File::FNM_DOTMATCH | File::FNM_EXTGLOB).sort
54
+ if files.empty?
55
+ raise FileNotFound.new(path)
56
+ else
57
+ files.each do |file|
58
+ Goodcheck.logger.info "Reading file: #{file}"
59
+ if unarchiver.tar_gz?(file)
60
+ unarchiver.tar_gz(file.read) do |content, filename|
61
+ block.call(content, filename)
62
+ end
63
+ else
64
+ block.call(file.read, file.to_path)
65
+ end
66
+ end
41
67
  end
42
68
  end
43
69
 
@@ -45,7 +71,7 @@ module Goodcheck
45
71
  Digest::SHA2.hexdigest(uri.to_s)
46
72
  end
47
73
 
48
- def load_http(uri)
74
+ def load_http(uri, &block)
49
75
  hash = cache_name(uri)
50
76
  path = cache_path + hash
51
77
 
@@ -71,13 +97,19 @@ module Goodcheck
71
97
  if download
72
98
  path.rmtree if path.exist?
73
99
  Goodcheck.logger.info "Downloading content..."
74
- content = http_get uri
75
- Goodcheck.logger.debug "Downloaded content: #{content[0, 1024].inspect}#{content.size > 1024 ? "..." : ""}"
76
- yield content
77
- write_cache uri, content
100
+ if unarchiver.tar_gz?(uri.path)
101
+ unarchiver.tar_gz(http_get(uri)) do |content, filename|
102
+ block.call(content, filename)
103
+ write_cache "#{uri}/#{filename}", content
104
+ end
105
+ else
106
+ content = http_get(uri)
107
+ block.call(content, uri.path)
108
+ write_cache uri, content
109
+ end
78
110
  else
79
111
  Goodcheck.logger.info "Reading content from cache..."
80
- yield path.read
112
+ block.call(path.read, path.to_path)
81
113
  end
82
114
  end
83
115
 
@@ -101,5 +133,17 @@ module Goodcheck
101
133
  raise "Error: HTTP GET #{uri.inspect} #{res.inspect}"
102
134
  end
103
135
  end
136
+
137
+ private
138
+
139
+ def unarchiver
140
+ @unarchiver ||=
141
+ begin
142
+ filter = ->(filename) {
143
+ %w[.yml .yaml].include?(File.extname(filename).downcase) && File.basename(filename) != DEFAULT_CONFIG_FILE
144
+ }
145
+ Unarchiver.new(file_filter: filter)
146
+ end
147
+ end
104
148
  end
105
149
  end
@@ -1,15 +1,15 @@
1
1
  module Goodcheck
2
2
  class Issue
3
3
  attr_reader :buffer
4
- attr_reader :range
5
4
  attr_reader :rule
6
5
  attr_reader :text
6
+ attr_reader :range
7
7
 
8
- def initialize(buffer:, range:, rule:, text:)
8
+ def initialize(buffer:, rule:, text: nil, text_begin_pos: nil)
9
9
  @buffer = buffer
10
- @range = range
11
10
  @rule = rule
12
11
  @text = text
12
+ @range = text ? text_begin_pos..(text_begin_pos + text.bytesize - 1) : nil
13
13
  @location = nil
14
14
  end
15
15
 
@@ -1,4 +1,18 @@
1
1
  module Goodcheck
2
+ # In the example below, each attribute is:
3
+ #
4
+ # - start_line: 2
5
+ # - start_column: 3
6
+ # - end_line: 2
7
+ # - end_column: 9
8
+ #
9
+ # @example
10
+ #
11
+ # 1 |
12
+ # 2 | A matched text
13
+ # 3 | ^~~~~~~
14
+ # 3456789
15
+ #
2
16
  class Location
3
17
  attr_reader :start_line
4
18
  attr_reader :start_column
@@ -12,6 +26,14 @@ module Goodcheck
12
26
  @end_column = end_column
13
27
  end
14
28
 
29
+ def one_line?
30
+ start_line == end_line
31
+ end
32
+
33
+ def column_size
34
+ end_column - start_column + 1
35
+ end
36
+
15
37
  def ==(other)
16
38
  other.is_a?(Location) &&
17
39
  other.start_line == start_line &&
@@ -19,5 +41,11 @@ module Goodcheck
19
41
  other.end_line == end_line &&
20
42
  other.end_column == end_column
21
43
  end
44
+
45
+ alias eql? ==
46
+
47
+ def hash
48
+ self.class.hash ^ start_line.hash ^ start_column.hash ^ end_line.hash ^ end_column.hash
49
+ end
22
50
  end
23
51
  end
@@ -1,8 +1,8 @@
1
1
  module Goodcheck
2
2
  def self.logger
3
- @logger ||= ActiveSupport::TaggedLogging.new(Logger.new(STDERR)).tap do |logger|
4
- logger.push_tags VERSION
5
- logger.level = Logger::ERROR
6
- end
3
+ @logger ||= Logger.new(
4
+ STDERR, level: Logger::ERROR,
5
+ formatter: ->(severity, time, progname, msg) { "[#{severity}] #{msg}\n" }
6
+ )
7
7
  end
8
8
  end
@@ -26,7 +26,8 @@ module Goodcheck
26
26
  end_column: location.end_column
27
27
  },
28
28
  message: issue.rule.message,
29
- justifications: issue.rule.justifications
29
+ justifications: issue.rule.justifications,
30
+ severity: issue.rule.severity
30
31
  }
31
32
  end
32
33
  stdout.puts ::JSON.dump(json)
@@ -44,6 +45,10 @@ module Goodcheck
44
45
  def issue(issue)
45
46
  issues << issue
46
47
  end
48
+
49
+ def summary
50
+ # noop
51
+ end
47
52
  end
48
53
  end
49
54
  end
@@ -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.5.1"
2
+ VERSION = "3.0.0".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.5.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - Soutaro Matsumoto
8
- autorequire:
7
+ - Sider Corporation
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-03-09 00:00:00.000000000 Z
11
+ date: 2021-06-14 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,64 +145,20 @@ 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: []
149
156
  extra_rdoc_files: []
150
157
  files:
151
- - ".github/workflows/release.yml"
152
- - ".github/workflows/test.yml"
153
- - ".gitignore"
154
- - ".rubocop.yml"
155
158
  - CHANGELOG.md
156
- - Dockerfile
157
- - Gemfile
158
159
  - LICENSE
159
160
  - README.md
160
- - Rakefile
161
- - bin/console
162
- - bin/setup
163
- - cheatsheet.pdf
164
- - docusaurus/.dockerignore
165
- - docusaurus/.gitignore
166
- - docusaurus/Dockerfile
167
- - docusaurus/docker-compose.yml
168
- - docusaurus/docs/commands.md
169
- - docusaurus/docs/configuration.md
170
- - docusaurus/docs/development.md
171
- - docusaurus/docs/getstarted.md
172
- - docusaurus/docs/rules.md
173
- - docusaurus/website/README.md
174
- - docusaurus/website/core/Footer.js
175
- - docusaurus/website/package.json
176
- - docusaurus/website/pages/en/index.js
177
- - docusaurus/website/pages/en/versions.js
178
- - docusaurus/website/sidebars.json
179
- - docusaurus/website/siteConfig.js
180
- - docusaurus/website/static/css/code-block-buttons.css
181
- - docusaurus/website/static/css/custom.css
182
- - docusaurus/website/static/img/favicon.ico
183
- - docusaurus/website/static/js/code-block-buttons.js
184
- - docusaurus/website/versioned_docs/version-1.0.0/commands.md
185
- - docusaurus/website/versioned_docs/version-1.0.0/configuration.md
186
- - docusaurus/website/versioned_docs/version-1.0.0/development.md
187
- - docusaurus/website/versioned_docs/version-1.0.0/getstarted.md
188
- - docusaurus/website/versioned_docs/version-1.0.0/rules.md
189
- - docusaurus/website/versioned_docs/version-1.0.2/rules.md
190
- - docusaurus/website/versioned_docs/version-2.4.0/configuration.md
191
- - docusaurus/website/versioned_docs/version-2.4.3/rules.md
192
- - docusaurus/website/versioned_sidebars/version-1.0.0-sidebars.json
193
- - docusaurus/website/versioned_sidebars/version-1.0.2-sidebars.json
194
- - docusaurus/website/versioned_sidebars/version-2.4.0-sidebars.json
195
- - docusaurus/website/versions.json
196
- - docusaurus/website/yarn.lock
197
161
  - exe/goodcheck
198
- - goodcheck.gemspec
199
- - goodcheck.yml
200
162
  - lib/goodcheck.rb
201
163
  - lib/goodcheck/analyzer.rb
202
164
  - lib/goodcheck/array_helper.rb
@@ -209,6 +171,8 @@ files:
209
171
  - lib/goodcheck/commands/test.rb
210
172
  - lib/goodcheck/config.rb
211
173
  - lib/goodcheck/config_loader.rb
174
+ - lib/goodcheck/error.rb
175
+ - lib/goodcheck/exit_status.rb
212
176
  - lib/goodcheck/glob.rb
213
177
  - lib/goodcheck/home_path.rb
214
178
  - lib/goodcheck/import_loader.rb
@@ -220,18 +184,17 @@ files:
220
184
  - lib/goodcheck/reporters/text.rb
221
185
  - lib/goodcheck/rule.rb
222
186
  - lib/goodcheck/trigger.rb
187
+ - lib/goodcheck/unarchiver.rb
223
188
  - lib/goodcheck/version.rb
224
- - logo/GoodCheck Horizontal.pdf
225
- - logo/GoodCheck Horizontal.png
226
- - logo/GoodCheck Horizontal.svg
227
- - logo/GoodCheck logo.png
228
- - logo/GoodCheck vertical.png
229
- - sample.yml
230
- homepage: https://github.com/sider/goodcheck
189
+ homepage: https://sider.github.io/goodcheck/
231
190
  licenses:
232
191
  - MIT
233
- metadata: {}
234
- post_install_message:
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
197
+ post_install_message:
235
198
  rdoc_options: []
236
199
  require_paths:
237
200
  - lib
@@ -239,15 +202,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
239
202
  requirements:
240
203
  - - ">="
241
204
  - !ruby/object:Gem::Version
242
- version: 2.4.0
205
+ version: 2.5.0
243
206
  required_rubygems_version: !ruby/object:Gem::Requirement
244
207
  requirements:
245
208
  - - ">="
246
209
  - !ruby/object:Gem::Version
247
210
  version: '0'
248
211
  requirements: []
249
- rubygems_version: 3.1.2
250
- signing_key:
212
+ rubygems_version: 3.2.20
213
+ signing_key:
251
214
  specification_version: 4
252
- summary: Regexp based customizable linter
215
+ summary: Regexp based customizable linter.
253
216
  test_files: []