checkstyle-suppression-generator 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +86 -0
- data/bin/checkstyle-suppression-generator +13 -0
- data/lib/CLI/command.rb +50 -0
- data/lib/checkstyle_output_reader.rb +14 -0
- data/lib/checkstyle_output_token.rb +16 -0
- data/lib/checkstyle_output_tokenizer.rb +19 -0
- data/lib/suppression_generator.rb +32 -0
- data/lib/suppression_writer.rb +13 -0
- data/lib/suppressions_populator.rb +24 -0
- metadata +156 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 42e391eb667e9f0df93569f81c1b6b6f2cfb6b870ed541d794b95ec15f71feaa
|
4
|
+
data.tar.gz: 366c228d8a8d5a27cec451fe35e6a9d035f4bb03cf53e6f9a3d76cb42370d91e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 59c239fdf6265eee4930e9eccf4d96bafae357a4c461f1a74606338f876c4f4c50570bc5d546b6a0313e77e1d20a04cc7d222e4725edb845bd16c188b3fc9e4e
|
7
|
+
data.tar.gz: 588388ee5b9c58b34f2fc48c2695177ffc4bb85fd795122ee12ce8bf7d09b287d96db07383dc36cc8c4a395723de7cb0718877cd627d4603d7e6db39ab7abbd6
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2023 Tyler Matthews
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# Checkstyle Suppression Generator
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/checkstyle-suppression-generator.svg)](https://badge.fury.io/rb/checkstyle-suppression-generator)
|
3
|
+
![CI Status](https://github.com/matthewstyler/ruby-perlin-2D-map-generator/actions/workflows/main.yml/badge.svg)
|
4
|
+
![CodeQL](https://github.com/matthewstyler/checkstyle-suppression-generator/workflows/CodeQL/badge.svg)
|
5
|
+
<a href="https://codeclimate.com/github/matthewstyler/checkstyle-suppression-generator/test_coverage"><img src="https://api.codeclimate.com/v1/badges/b63e2b943acbfd970fae/test_coverage" /></a>
|
6
|
+
<a href="https://codeclimate.com/github/matthewstyler/checkstyle-suppression-generator/maintainability"><img src="https://api.codeclimate.com/v1/badges/b63e2b943acbfd970fae/maintainability" /></a>
|
7
|
+
|
8
|
+
A gem that takes as input the output of a maven checkstyle plugin checkstyle:check goal and generates a suppressions.xml file.
|
9
|
+
|
10
|
+
Example Input:
|
11
|
+
```sh
|
12
|
+
[INFO] Scanning for projects...
|
13
|
+
[INFO] ------------------------------------------------------------------------
|
14
|
+
[INFO] Reactor Build Order:
|
15
|
+
[INFO]
|
16
|
+
[INFO] my-project [jar]
|
17
|
+
[INFO] ------------------< com.my-project:my-project >------------------
|
18
|
+
[INFO] Building my-project 0.0.1-SNAPSHOT [1/1]
|
19
|
+
[INFO] from my-project/pom.xml
|
20
|
+
[INFO] --------------------------------[ jar ]---------------------------------
|
21
|
+
[INFO]
|
22
|
+
[INFO] --- checkstyle:3.3.0:check (default-cli) @ my-project ---
|
23
|
+
[WARNING] src/main/java/com/test/DEF.java:[147,4] (coding) OverloadMethodsDeclarationOrder: All overloaded methods should be placed next to each other. Placing non-overloaded methods in between overloaded methods with the same type is a violation. Previous overloaded method located at line '119'.
|
24
|
+
[WARNING] src/main/java/com/test/ABC.java:[26,11] (sizes) ParameterNumber: More than 7 parameters (found 9).
|
25
|
+
[WARNING] src/main/java/com/test/ABC.java:[103,4] (coding) ReturnCount: Return count is 6 (max allowed for non-void methods/lambdas is 4).
|
26
|
+
[WARNING] src/main/java/com/test/ABC.java:[103,4] (metrics) NPathComplexity: NPath Complexity is 720 (max allowed is 200).
|
27
|
+
[INFO] ------------------------------------------------------------------------
|
28
|
+
[INFO] Reactor Summary for my-project 0.0.1-SNAPSHOT:
|
29
|
+
[INFO]
|
30
|
+
[INFO] my-project .................................. FAILURE [ 1.957 s]
|
31
|
+
[INFO] ------------------------------------------------------------------------
|
32
|
+
[INFO] BUILD FAILURE
|
33
|
+
[INFO] ------------------------------------------------------------------------
|
34
|
+
[INFO] Total time: 2.841 s
|
35
|
+
[INFO] Finished at: 2023-12-20T16:31:35-05:00
|
36
|
+
[INFO] ------------------------------------------------------------------------
|
37
|
+
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:3.3.0:check (default-cli) on project my-project: You have 4 Checkstyle violations. -> [Help 1]
|
38
|
+
[ERROR]
|
39
|
+
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
|
40
|
+
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
|
41
|
+
[ERROR]
|
42
|
+
[ERROR] For more information about the errors and possible solutions, please read the following articles:
|
43
|
+
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
|
44
|
+
[ERROR]
|
45
|
+
[ERROR] After correcting the problems, you can resume the build with the command
|
46
|
+
[ERROR] mvn <args> -rf :my-project
|
47
|
+
|
48
|
+
```
|
49
|
+
|
50
|
+
Output:
|
51
|
+
|
52
|
+
```xml
|
53
|
+
<?xml version="1.0"?>
|
54
|
+
<!DOCTYPE suppressions PUBLIC "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
|
55
|
+
"https://checkstyle.org/dtds/suppressions_1_2.dtd">
|
56
|
+
|
57
|
+
<suppressions>
|
58
|
+
|
59
|
+
<suppress checks="OverloadMethodsDeclarationOrder" files="src/main/java/com/test/DEF.java"/>
|
60
|
+
<suppress checks="ParameterNumber" files="src/main/java/com/test/ABC.java"/>
|
61
|
+
<suppress checks="ReturnCount" files="src/main/java/com/test/ABC.java"/>
|
62
|
+
<suppress checks="NPathComplexity" files="src/main/java/com/test/ABC.java"/>
|
63
|
+
|
64
|
+
</suppressions>
|
65
|
+
|
66
|
+
```
|
67
|
+
|
68
|
+
|
69
|
+
## Command Line Usage
|
70
|
+
```sh
|
71
|
+
Usage: checkstyle-suppression-generator command [OPTIONS]
|
72
|
+
CHECKSTYLE_OUTPUT_FILE(STRING) [O=O]
|
73
|
+
|
74
|
+
Generate a Java checkstyle suppressions.xml file from a checkstyle:check output.
|
75
|
+
|
76
|
+
|
77
|
+
Arguments:
|
78
|
+
CHECKSTYLE_OUTPUT_FILE(STRING) Output from checkstyle:check goal
|
79
|
+
|
80
|
+
Keywords:
|
81
|
+
O=O Name of the suppressions file to be generated (default
|
82
|
+
"suppressions.xml")
|
83
|
+
|
84
|
+
Options:
|
85
|
+
-h, --help Print usage
|
86
|
+
```
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
lib_path = File.expand_path('../lib', __dir__)
|
5
|
+
$LOAD_PATH.unshift(lib_path) unless $LOAD_PATH.include?(lib_path)
|
6
|
+
require 'CLI/command'
|
7
|
+
|
8
|
+
Signal.trap('INT') do
|
9
|
+
warn("\n#{caller.join("\n")}: interrupted")
|
10
|
+
exit(1)
|
11
|
+
end
|
12
|
+
|
13
|
+
CLI::Command.new.parse.run
|
data/lib/CLI/command.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'tty/option'
|
4
|
+
require 'suppression_generator'
|
5
|
+
|
6
|
+
module CLI
|
7
|
+
# Command line usage for the suppression generator
|
8
|
+
class Command
|
9
|
+
include TTY::Option
|
10
|
+
|
11
|
+
usage do
|
12
|
+
program 'checkstyle-suppression-generator'
|
13
|
+
desc 'Generate a Java checkstyle suppressions.xml file from a checkstyle:check output.'
|
14
|
+
end
|
15
|
+
|
16
|
+
argument :checkstyle_output_file do
|
17
|
+
name 'checkstyle_output_file(String)'
|
18
|
+
arity one
|
19
|
+
desc 'Output from checkstyle:check goal'
|
20
|
+
end
|
21
|
+
|
22
|
+
keyword :o do
|
23
|
+
default 'suppressions.xml'
|
24
|
+
arity one
|
25
|
+
desc 'Name of the suppressions file to be generated'
|
26
|
+
end
|
27
|
+
|
28
|
+
flag :help do
|
29
|
+
short '-h'
|
30
|
+
long '--help'
|
31
|
+
desc 'Print usage'
|
32
|
+
end
|
33
|
+
|
34
|
+
def run
|
35
|
+
if params[:help]
|
36
|
+
print help
|
37
|
+
elsif params.errors.any?
|
38
|
+
puts params.errors.summary
|
39
|
+
else
|
40
|
+
execute_command
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def execute_command
|
47
|
+
SuppressionGenerator.new(params[:checkstyle_output_file], params[:o]).generate
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Reads the checkstyle:check file
|
4
|
+
class CheckstyleOutputReader
|
5
|
+
def initialize(filename)
|
6
|
+
@filename = filename
|
7
|
+
end
|
8
|
+
|
9
|
+
def read
|
10
|
+
File.read(@filename)
|
11
|
+
rescue Errno::ENOENT
|
12
|
+
raise ArgumentError, "File not found: #{@filename}"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Data bag to capture fields used to generate suppressions from an offending checkstyle output line
|
4
|
+
class CheckstyleOutputToken
|
5
|
+
attr_reader :severity, :file_name, :offense
|
6
|
+
|
7
|
+
def initialize(token_data)
|
8
|
+
@severity = token_data[1]
|
9
|
+
@file_name = token_data[2]
|
10
|
+
@offense = token_data[3]
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_suppression
|
14
|
+
"\t<suppress checks=\"#{offense}\" files=\"#{file_name}\"/>"
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'checkstyle_output_token'
|
4
|
+
|
5
|
+
# Tokenizes each line of a given output string
|
6
|
+
class CheckstyleOutputTokenizer
|
7
|
+
PATTERN = /\[(\w+)\]\s+(\S+\.java)(?:.*\)).(\w+):/.freeze
|
8
|
+
|
9
|
+
def initialize(checkstyle_output)
|
10
|
+
@checkstyle_output = checkstyle_output
|
11
|
+
end
|
12
|
+
|
13
|
+
def tokenize
|
14
|
+
@tokenize ||= @checkstyle_output.each_line.map do |line|
|
15
|
+
token_data = PATTERN.match(line)
|
16
|
+
CheckstyleOutputToken.new(token_data) if token_data
|
17
|
+
end.compact
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'checkstyle_output_reader'
|
4
|
+
require 'checkstyle_output_tokenizer'
|
5
|
+
require 'suppressions_populator'
|
6
|
+
require 'suppression_writer'
|
7
|
+
|
8
|
+
# Facade that manages the application input and output for suppression generation
|
9
|
+
class SuppressionGenerator
|
10
|
+
def initialize(checkstyle_file_name, suppressions_file_name)
|
11
|
+
@checkstyle_file_name = checkstyle_file_name
|
12
|
+
@suppressions_file_name = suppressions_file_name
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate
|
16
|
+
write_suppressions(SuppressionsPopulator.new(tokenize_checkstyle_output(read_checkstyle_file)).populate)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def write_suppressions(suppression_xml)
|
22
|
+
SuppressionWriter.new(@suppressions_file_name, suppression_xml).write
|
23
|
+
end
|
24
|
+
|
25
|
+
def read_checkstyle_file
|
26
|
+
CheckstyleOutputReader.new(@checkstyle_file_name).read
|
27
|
+
end
|
28
|
+
|
29
|
+
def tokenize_checkstyle_output(checkstyle_output)
|
30
|
+
CheckstyleOutputTokenizer.new(checkstyle_output).tokenize
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Writes the suppression xml to a given file name
|
4
|
+
class SuppressionWriter
|
5
|
+
def initialize(file_name, suppression_xml)
|
6
|
+
@file_name = file_name
|
7
|
+
@suppression_xml = suppression_xml
|
8
|
+
end
|
9
|
+
|
10
|
+
def write
|
11
|
+
File.write(@file_name, @suppression_xml)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Populates a string with the suppression xml, given a list of tokens
|
4
|
+
class SuppressionsPopulator
|
5
|
+
HEADER = <<~HEADER
|
6
|
+
<?xml version="1.0"?>
|
7
|
+
<!DOCTYPE suppressions PUBLIC "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
|
8
|
+
"https://checkstyle.org/dtds/suppressions_1_2.dtd">
|
9
|
+
|
10
|
+
<suppressions>
|
11
|
+
HEADER
|
12
|
+
|
13
|
+
FOOTER = <<~FOOTER
|
14
|
+
</suppressions>
|
15
|
+
FOOTER
|
16
|
+
|
17
|
+
def initialize(tokens)
|
18
|
+
@tokens = tokens
|
19
|
+
end
|
20
|
+
|
21
|
+
def populate
|
22
|
+
"#{HEADER}\n#{@tokens.map(&:to_suppression).join("\n")}\n\n#{FOOTER}"
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: checkstyle-suppression-generator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tyler Matthews (matthewstyler)
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-12-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tty-option
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.3.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.3.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.18'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.18'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mocha
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.1.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.1.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry-byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 3.10.1
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 3.10.1
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 13.1.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 13.1.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.58.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.58.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.22.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.22.0
|
111
|
+
description: |-
|
112
|
+
A gem that takes as input the output of a maven checkstyle plugin checkstyle:check goal and
|
113
|
+
generates a suppressions.xml file
|
114
|
+
email: matthews.tyl@gmail.com
|
115
|
+
executables:
|
116
|
+
- checkstyle-suppression-generator
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- LICENSE
|
121
|
+
- README.md
|
122
|
+
- bin/checkstyle-suppression-generator
|
123
|
+
- lib/CLI/command.rb
|
124
|
+
- lib/checkstyle_output_reader.rb
|
125
|
+
- lib/checkstyle_output_token.rb
|
126
|
+
- lib/checkstyle_output_tokenizer.rb
|
127
|
+
- lib/suppression_generator.rb
|
128
|
+
- lib/suppression_writer.rb
|
129
|
+
- lib/suppressions_populator.rb
|
130
|
+
homepage: https://github.com/matthewstyler/checkstyle-suppression-generator
|
131
|
+
licenses:
|
132
|
+
- MIT
|
133
|
+
metadata:
|
134
|
+
source_code_uri: https://github.com/matthewstyler/checkstyle-suppression-generator
|
135
|
+
bug_tracker_uri: https://github.com/matthewstyler/checkstyle-suppression-generator/issues
|
136
|
+
post_install_message:
|
137
|
+
rdoc_options: []
|
138
|
+
require_paths:
|
139
|
+
- lib
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 2.7.0
|
145
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
150
|
+
requirements: []
|
151
|
+
rubygems_version: 3.1.2
|
152
|
+
signing_key:
|
153
|
+
specification_version: 4
|
154
|
+
summary: Generate a Java checkstyle suppressions.xml file from a checkstyle:check
|
155
|
+
output.
|
156
|
+
test_files: []
|