java-checkstyle-precommit 1.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.
- checksums.yaml +7 -0
- data/lib/plugins/pre_commit/checks/checkstyle.rb +73 -0
- data/lib/plugins/pre_commit/domain/bad_file.rb +20 -0
- data/lib/plugins/pre_commit/domain/checkstyle.rb +27 -0
- data/lib/plugins/pre_commit/message/extractor.rb +55 -0
- data/lib/plugins/pre_commit/message/formatter.rb +42 -0
- data/lib/plugins/pre_commit/support/path.rb +20 -0
- data/lib/pre_commit/checkstyle/version.rb +13 -0
- data/lib/resources/checkstyle/checkstyle-6.11-all.jar +0 -0
- data/lib/resources/checkstyle/google_checks.xml +44 -0
- metadata +142 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7f3fe79c21002849f9b84e4293fe51e891a993edb0f1644e5d767cab0a73767d
|
4
|
+
data.tar.gz: f765cecde7bba9ecb8e01562c6ac44b55b7664ae303fefa27fbbca356fd1c3a8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9480d6b281ff399883223ad8e89c234c29fc75070e003bb8041c4cf2f22b60bc5cf7692f88b691a266d617e95b141e8a002d55407ba4aff805cd4521accfbbab
|
7
|
+
data.tar.gz: d7e68ee0e2bef54be64402bbab5e05c126c38f9c38f6322452ca102321a029f28f7eb735965767ac54a39162a73c4fa792f74b4363407f48dcf8b700026abb8d
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pre-commit/checks/shell'
|
4
|
+
require_relative '../message/extractor'
|
5
|
+
require_relative '../message/formatter'
|
6
|
+
require_relative '../support/path'
|
7
|
+
|
8
|
+
module PreCommit
|
9
|
+
module Checks
|
10
|
+
##
|
11
|
+
# Plugin implementation for pre-commit gem
|
12
|
+
#
|
13
|
+
# It provides a java checkstyle validation using checkstyle.jar
|
14
|
+
# for details see:
|
15
|
+
# lib/pre_commit/support/checkstyle
|
16
|
+
class Checkstyle < Shell
|
17
|
+
##
|
18
|
+
# Function called after pre-commit execution
|
19
|
+
# this method receive the +staged_files+ from git
|
20
|
+
#
|
21
|
+
# @param [String] Standard git ouput with staged files
|
22
|
+
def call(staged_files)
|
23
|
+
staged_files = staged_files.grep(/\.java$/)
|
24
|
+
return if staged_files.empty?
|
25
|
+
|
26
|
+
output = execute(args(staged_files))
|
27
|
+
format(extract(output))
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.description
|
31
|
+
'Runs Checkstyle linter for java code.'
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def args(staged_files)
|
37
|
+
[
|
38
|
+
'java',
|
39
|
+
checkstyle_jar,
|
40
|
+
configuration_file,
|
41
|
+
staged_files,
|
42
|
+
output_format
|
43
|
+
]
|
44
|
+
end
|
45
|
+
|
46
|
+
def checkstyle_jar
|
47
|
+
['-jar', Support::Path.relative_to('checkstyle-6.11-all.jar')]
|
48
|
+
end
|
49
|
+
|
50
|
+
def configuration_file
|
51
|
+
config_file ? ['-c', config_file] : []
|
52
|
+
end
|
53
|
+
|
54
|
+
def output_format
|
55
|
+
['-f', 'xml']
|
56
|
+
end
|
57
|
+
|
58
|
+
def alternate_config_file
|
59
|
+
Support::Path.relative_to('google_checks.xml')
|
60
|
+
end
|
61
|
+
|
62
|
+
def format(errors)
|
63
|
+
@formatter ||= PreCommit::Message::Formatter.new
|
64
|
+
@formatter.format errors
|
65
|
+
end
|
66
|
+
|
67
|
+
def extract(data)
|
68
|
+
@extractor ||= PreCommit::Message::Extractor.new
|
69
|
+
@extractor.extract data
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Domain
|
4
|
+
##
|
5
|
+
# Represents a file with style errors.
|
6
|
+
#
|
7
|
+
class BadFile
|
8
|
+
attr_reader :name, :errors
|
9
|
+
|
10
|
+
##
|
11
|
+
# Instanciate a default bad file.
|
12
|
+
#
|
13
|
+
# @param [String] The File name
|
14
|
+
# @param [Array] The errors
|
15
|
+
def initialize(name, errors)
|
16
|
+
@name = name
|
17
|
+
@errors = errors
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Domain
|
4
|
+
##
|
5
|
+
# Represents the Checkstyle
|
6
|
+
# @param [Array] of bad files
|
7
|
+
class Checkstyle
|
8
|
+
attr_reader :bad_files
|
9
|
+
|
10
|
+
def initialize(bad_files)
|
11
|
+
@bad_files = bad_files
|
12
|
+
end
|
13
|
+
|
14
|
+
##
|
15
|
+
# A good checkstyle means no errors.
|
16
|
+
#
|
17
|
+
def good?
|
18
|
+
@bad_files.nil? || @bad_files.empty?
|
19
|
+
end
|
20
|
+
|
21
|
+
##
|
22
|
+
# Factory for Checkstyle without errors
|
23
|
+
def self.good
|
24
|
+
Domain::Checkstyle.new(nil)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'crack'
|
4
|
+
require_relative '../domain/checkstyle'
|
5
|
+
require_relative '../domain/bad_file'
|
6
|
+
|
7
|
+
module PreCommit
|
8
|
+
module Message
|
9
|
+
##
|
10
|
+
# Responsible for extract error messages from terminal output
|
11
|
+
class Extractor
|
12
|
+
##
|
13
|
+
# Extract data from a XML formatted +terminal_output+
|
14
|
+
#
|
15
|
+
# @param terminal_output [String] XML formatted terminal ouput
|
16
|
+
# @return [Domain::Checkstyle] The checkstyle
|
17
|
+
def extract(terminal_output)
|
18
|
+
if blank?(terminal_output) ||
|
19
|
+
blank?(xml_content_of(terminal_output))
|
20
|
+
return Domain::Checkstyle.good
|
21
|
+
end
|
22
|
+
|
23
|
+
xml_data = Crack::XML.parse(xml_content_of(terminal_output))
|
24
|
+
files = xml_data['checkstyle']['file']
|
25
|
+
|
26
|
+
Domain::Checkstyle.new(extract_bad_file(files))
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def xml_content_of(raw_output)
|
32
|
+
raw_output[/<(.*)>/m]
|
33
|
+
end
|
34
|
+
|
35
|
+
def extract_bad_file(xml_files)
|
36
|
+
return [bad_file(xml_files)] unless xml_files.is_a? Array
|
37
|
+
xml_files.map { |e| bad_file(e) }
|
38
|
+
end
|
39
|
+
|
40
|
+
def bad_file(file)
|
41
|
+
Domain::BadFile.new(file['name'], extract_errors(file))
|
42
|
+
end
|
43
|
+
|
44
|
+
def extract_errors(file)
|
45
|
+
return [] if blank? file['error']
|
46
|
+
return [file['error']] unless file['error'].is_a? Array
|
47
|
+
file['error']
|
48
|
+
end
|
49
|
+
|
50
|
+
def blank?(value)
|
51
|
+
value.nil? || value.empty?
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module PreCommit
|
4
|
+
module Message
|
5
|
+
##
|
6
|
+
# Responsible for format a given output
|
7
|
+
class Formatter
|
8
|
+
##
|
9
|
+
# Format output for a given +errors+ details
|
10
|
+
#
|
11
|
+
# @param checkstyle [Domain::Checkstyle] Checkstyle details
|
12
|
+
# @return [String] formatted output or nil when has no errors
|
13
|
+
# @raise ArgumentError when input is empty
|
14
|
+
#
|
15
|
+
def format(checkstyle)
|
16
|
+
throw ArgumentError.new if checkstyle.nil?
|
17
|
+
return nil if checkstyle.good?
|
18
|
+
|
19
|
+
format_multiple(checkstyle.bad_files)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def format_multiple(files)
|
25
|
+
files.reduce('') { |a, e| a + format_single(e) }
|
26
|
+
end
|
27
|
+
|
28
|
+
def format_single(bad_file)
|
29
|
+
"File errors: #{bad_file.name} \n" + format_errors(bad_file.errors)
|
30
|
+
end
|
31
|
+
|
32
|
+
def format_errors(errors)
|
33
|
+
errors.reduce('') { |a, e| a + line(e) }
|
34
|
+
end
|
35
|
+
|
36
|
+
def line(error)
|
37
|
+
" line: #{error['line']}:#{error['column']}"\
|
38
|
+
" error: #{error['message']}\n"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Support
|
4
|
+
##
|
5
|
+
# Responsible for provide relative paths to support files
|
6
|
+
# Files located under: /lib/plugin/pre_commit/support/checkstyle*
|
7
|
+
module Path
|
8
|
+
##
|
9
|
+
# Return support path relative to a given +file+
|
10
|
+
#
|
11
|
+
# @param file [String] file name
|
12
|
+
# @return [String] formatted path
|
13
|
+
def self.relative_to(file)
|
14
|
+
File.expand_path(
|
15
|
+
"../../../../resources/checkstyle/#{file}",
|
16
|
+
__FILE__
|
17
|
+
)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
##
|
4
|
+
# This is a fork version of the original
|
5
|
+
# checkstyle:
|
6
|
+
# https://github.com/secondrotation/pre-commit-checkstyle
|
7
|
+
#
|
8
|
+
module PreCommit
|
9
|
+
# Main file: checks/checkstyle.rb
|
10
|
+
module Checkstyle
|
11
|
+
VERSION = '1.0.0'
|
12
|
+
end
|
13
|
+
end
|
Binary file
|
@@ -0,0 +1,44 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<!DOCTYPE module PUBLIC
|
3
|
+
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
4
|
+
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
5
|
+
|
6
|
+
<module name = "Checker">
|
7
|
+
<property name="charset" value="UTF-8"/>
|
8
|
+
|
9
|
+
<property name="fileExtensions" value="java, properties, xml"/>
|
10
|
+
<!-- Checks for whitespace -->
|
11
|
+
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
|
12
|
+
<module name="FileTabCharacter">
|
13
|
+
<property name="eachLine" value="true"/>
|
14
|
+
</module>
|
15
|
+
|
16
|
+
<module name="TreeWalker">
|
17
|
+
|
18
|
+
<module name="NeedBraces"/>
|
19
|
+
<module name="WhitespaceAround">
|
20
|
+
<property name="allowEmptyConstructors" value="true"/>
|
21
|
+
<property name="allowEmptyMethods" value="true"/>
|
22
|
+
<property name="allowEmptyTypes" value="true"/>
|
23
|
+
<property name="allowEmptyLoops" value="true"/>
|
24
|
+
<message key="ws.notFollowed"
|
25
|
+
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
|
26
|
+
<message key="ws.notPreceded"
|
27
|
+
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
|
28
|
+
</module>
|
29
|
+
<module name="EmptyLineSeparator">
|
30
|
+
<property name="allowNoEmptyLineBetweenFields" value="true"/>
|
31
|
+
</module>
|
32
|
+
<module name="Indentation">
|
33
|
+
<property name="basicOffset" value="2"/>
|
34
|
+
<property name="braceAdjustment" value="0"/>
|
35
|
+
<property name="caseIndent" value="2"/>
|
36
|
+
<property name="throwsIndent" value="4"/>
|
37
|
+
<property name="lineWrappingIndentation" value="4"/>
|
38
|
+
<property name="arrayInitIndent" value="2"/>
|
39
|
+
</module>
|
40
|
+
<module name="EmptyCatchBlock">
|
41
|
+
<property name="exceptionVariableName" value="expected"/>
|
42
|
+
</module>
|
43
|
+
</module>
|
44
|
+
</module>
|
metadata
ADDED
@@ -0,0 +1,142 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: java-checkstyle-precommit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aravind Selvamani
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-03-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pre-commit
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.26'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.26'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: crack
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.4.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.4.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.5'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.4'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 10.4.2
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '10.4'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 10.4.2
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rspec
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 3.3.0
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 3.3.0
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: rubocop
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 0.52.1
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.52.1
|
103
|
+
description: Checkstyle linter plugin for pre-commit. Useful for linting Java code.
|
104
|
+
email:
|
105
|
+
- aaravind281096@gmail.com
|
106
|
+
executables: []
|
107
|
+
extensions: []
|
108
|
+
extra_rdoc_files: []
|
109
|
+
files:
|
110
|
+
- lib/plugins/pre_commit/checks/checkstyle.rb
|
111
|
+
- lib/plugins/pre_commit/domain/bad_file.rb
|
112
|
+
- lib/plugins/pre_commit/domain/checkstyle.rb
|
113
|
+
- lib/plugins/pre_commit/message/extractor.rb
|
114
|
+
- lib/plugins/pre_commit/message/formatter.rb
|
115
|
+
- lib/plugins/pre_commit/support/path.rb
|
116
|
+
- lib/pre_commit/checkstyle/version.rb
|
117
|
+
- lib/resources/checkstyle/checkstyle-6.11-all.jar
|
118
|
+
- lib/resources/checkstyle/google_checks.xml
|
119
|
+
homepage:
|
120
|
+
licenses:
|
121
|
+
- MIT
|
122
|
+
metadata: {}
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options: []
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
requirements: []
|
138
|
+
rubygems_version: 3.0.9
|
139
|
+
signing_key:
|
140
|
+
specification_version: 4
|
141
|
+
summary: Checkstyle linter plugin for pre-commit
|
142
|
+
test_files: []
|