goodcheck 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -1
- data/Gemfile.lock +2 -2
- data/README.md +9 -9
- data/lib/goodcheck.rb +0 -1
- data/lib/goodcheck/commands/config_loading.rb +1 -1
- data/lib/goodcheck/config_loader.rb +42 -12
- data/lib/goodcheck/pattern.rb +8 -8
- data/lib/goodcheck/reporters/json.rb +1 -0
- data/lib/goodcheck/version.rb +1 -1
- metadata +3 -4
- data/lib/goodcheck/matcher.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a38825ec6d8bc5b187a12a85f2ef8247e97b3d1
|
4
|
+
data.tar.gz: 533593b7f064c57417e2719e9831595d4de5f896
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6bfeb6c399bcb7ea16c66e2a285c556b5838ef976328512ad773bc8e51a32b9551829551026389db4f2ab89ff9679d2fe59fcf6fbe394ece71524082f702dcd
|
7
|
+
data.tar.gz: 7ba0ded6e4fc1d395ef14012ecc399853a65751357d54a22c5f2b4e8e6b4f63bc47f0a727d82ea8c571ef8da20fa2969b47763260cdf823083531742ddf7f09f
|
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,12 @@
|
|
2
2
|
|
3
3
|
## master
|
4
4
|
|
5
|
-
## 1.
|
5
|
+
## 1.2.0 (2018-06-29)
|
6
|
+
|
7
|
+
* `case_insensitive` option is now renamed to `case_sensitive`. #4
|
8
|
+
* Return analysis JSON object from JSON reporter. #13 (@aergonaut)
|
9
|
+
|
10
|
+
## 1.1.0 (2018-05-16)
|
6
11
|
|
7
12
|
* Support `{}` syntax in glob. #11
|
8
13
|
* Add `case_insensitive` option for `token` pattern. #10
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -71,7 +71,7 @@ The *rule* hash contains the following keys.
|
|
71
71
|
### *pattern*
|
72
72
|
|
73
73
|
A *pattern* can be a *literal pattern*, *regexp pattern*, *token pattern*, or a string.
|
74
|
-
When a string is given, it is interpreted as a *literal pattern* with `
|
74
|
+
When a string is given, it is interpreted as a *literal pattern* with `case_sensitive: true`.
|
75
75
|
|
76
76
|
#### *literal pattern*
|
77
77
|
|
@@ -81,12 +81,12 @@ When a string is given, it is interpreted as a *literal pattern* with `case_inse
|
|
81
81
|
id: com.sample.GitHub
|
82
82
|
pattern:
|
83
83
|
literal: Github
|
84
|
-
|
84
|
+
case_sensitive: true
|
85
85
|
message: Write GitHub, not Github
|
86
86
|
```
|
87
87
|
|
88
88
|
All regexp meta characters included in the `literal` value will be escaped.
|
89
|
-
`
|
89
|
+
`case_sensitive` is an optional key and the default is `true`.
|
90
90
|
|
91
91
|
#### *regexp pattern*
|
92
92
|
|
@@ -96,15 +96,15 @@ All regexp meta characters included in the `literal` value will be escaped.
|
|
96
96
|
id: com.sample.digits
|
97
97
|
pattern:
|
98
98
|
regexp: \d{4,}
|
99
|
-
|
99
|
+
case_sensitive: false
|
100
100
|
multiline: false
|
101
101
|
message: Insert delimiters when writing large numbers
|
102
102
|
justification:
|
103
103
|
- When you are not writing numbers, including phone numbers, zip code, ...
|
104
104
|
```
|
105
105
|
|
106
|
-
It accepts two optional attributes, `
|
107
|
-
The default values of `
|
106
|
+
It accepts two optional attributes, `case_sensitive` and `multiline`.
|
107
|
+
The default values of `case_sensitive` and `multiline` are `true` and `false` respectively.
|
108
108
|
|
109
109
|
The regexp will be passed to `Regexp.compile`.
|
110
110
|
The precise definition of regular expression can be found in the documentation for Ruby.
|
@@ -117,7 +117,7 @@ The precise definition of regular expression can be found in the documentation f
|
|
117
117
|
id: com.sample.no-blink
|
118
118
|
pattern:
|
119
119
|
token: "<blink"
|
120
|
-
|
120
|
+
case_sensitive: false
|
121
121
|
message: Stop using <blink> tag
|
122
122
|
glob: "**/*.html"
|
123
123
|
justifications:
|
@@ -131,8 +131,8 @@ In that case, try using *regexp pattern*.
|
|
131
131
|
The generated regexp of `<blink` is `<\s*blink\b`.
|
132
132
|
It matches with `<blink />` and `< BLINK>`, but does not match with `https://www.chromium.org/blink`.
|
133
133
|
|
134
|
-
It accepts one optional attribute, `
|
135
|
-
The default value of `
|
134
|
+
It accepts one optional attribute, `case_sensitive`.
|
135
|
+
The default value of `case_sensitive` is `true`.
|
136
136
|
|
137
137
|
### *glob*
|
138
138
|
|
data/lib/goodcheck.rb
CHANGED
@@ -5,7 +5,7 @@ module Goodcheck
|
|
5
5
|
|
6
6
|
def load_config!
|
7
7
|
content = JSON.parse(JSON.dump(YAML.load(config_path.read, config_path.to_s)), symbolize_names: true)
|
8
|
-
loader = ConfigLoader.new(path: config_path, content: content)
|
8
|
+
loader = ConfigLoader.new(path: config_path, content: content, stderr: stderr)
|
9
9
|
@config = loader.load
|
10
10
|
end
|
11
11
|
end
|
@@ -5,10 +5,17 @@ module Goodcheck
|
|
5
5
|
class InvalidPattern < StandardError; end
|
6
6
|
|
7
7
|
Schema = StrongJSON.new do
|
8
|
-
let :
|
9
|
-
let :
|
10
|
-
let :
|
11
|
-
|
8
|
+
let :deprecated_regexp_pattern, object(regexp: string, case_insensitive: boolean?, multiline: boolean?)
|
9
|
+
let :deprecated_literal_pattern, object(literal: string, case_insensitive: boolean?)
|
10
|
+
let :deprecated_token_pattern, object(token: string, case_insensitive: boolean?)
|
11
|
+
|
12
|
+
let :regexp_pattern, object(regexp: string, case_sensitive: boolean?, multiline: boolean?)
|
13
|
+
let :literal_pattern, object(literal: string, case_sensitive: boolean?)
|
14
|
+
let :token_pattern, object(token: string, case_sensitive: boolean?)
|
15
|
+
|
16
|
+
let :pattern, enum(regexp_pattern, literal_pattern, token_pattern,
|
17
|
+
deprecated_regexp_pattern, deprecated_literal_pattern, deprecated_token_pattern,
|
18
|
+
string)
|
12
19
|
|
13
20
|
let :encoding, enum(*Encoding.name_list.map {|name| literal(name) })
|
14
21
|
let :glob, object(pattern: string, encoding: optional(encoding))
|
@@ -30,10 +37,14 @@ module Goodcheck
|
|
30
37
|
|
31
38
|
attr_reader :path
|
32
39
|
attr_reader :content
|
40
|
+
attr_reader :stderr
|
41
|
+
attr_reader :printed_warnings
|
33
42
|
|
34
|
-
def initialize(path:, content:)
|
43
|
+
def initialize(path:, content:, stderr:)
|
35
44
|
@path = path
|
36
45
|
@content = content
|
46
|
+
@stderr = stderr
|
47
|
+
@printed_warnings = Set.new
|
37
48
|
end
|
38
49
|
|
39
50
|
def load
|
@@ -68,24 +79,43 @@ module Goodcheck
|
|
68
79
|
def load_pattern(pattern)
|
69
80
|
case pattern
|
70
81
|
when String
|
71
|
-
Pattern.literal(pattern,
|
82
|
+
Pattern.literal(pattern, case_sensitive: true)
|
72
83
|
when Hash
|
73
84
|
case
|
74
85
|
when pattern[:literal]
|
75
|
-
|
86
|
+
cs = case_sensitive?(pattern)
|
76
87
|
literal = pattern[:literal]
|
77
|
-
Pattern.literal(literal,
|
88
|
+
Pattern.literal(literal, case_sensitive: cs)
|
78
89
|
when pattern[:regexp]
|
79
90
|
regexp = pattern[:regexp]
|
80
|
-
|
91
|
+
cs = case_sensitive?(pattern)
|
81
92
|
multiline = pattern[:multiline]
|
82
|
-
Pattern.regexp(regexp,
|
93
|
+
Pattern.regexp(regexp, case_sensitive: cs, multiline: multiline)
|
83
94
|
when pattern[:token]
|
84
95
|
tok = pattern[:token]
|
85
|
-
|
86
|
-
Pattern.token(tok,
|
96
|
+
cs = case_sensitive?(pattern)
|
97
|
+
Pattern.token(tok, case_sensitive: cs)
|
87
98
|
end
|
88
99
|
end
|
89
100
|
end
|
101
|
+
|
102
|
+
def case_sensitive?(pattern)
|
103
|
+
case
|
104
|
+
when pattern.key?(:case_sensitive)
|
105
|
+
pattern[:case_sensitive]
|
106
|
+
when pattern.key?(:case_insensitive)
|
107
|
+
print_warning_once "👻 `case_insensitive` option is deprecated. Use `case_sensitive` option instead."
|
108
|
+
!pattern[:case_insensitive]
|
109
|
+
else
|
110
|
+
true
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def print_warning_once(message)
|
115
|
+
unless printed_warnings.include?(message)
|
116
|
+
stderr.puts "[Warning] " + message
|
117
|
+
printed_warnings << message
|
118
|
+
end
|
119
|
+
end
|
90
120
|
end
|
91
121
|
end
|
data/lib/goodcheck/pattern.rb
CHANGED
@@ -8,23 +8,23 @@ module Goodcheck
|
|
8
8
|
@regexp = regexp
|
9
9
|
end
|
10
10
|
|
11
|
-
def self.literal(literal,
|
12
|
-
new(source: literal, regexp: Regexp.compile(Regexp.escape(literal),
|
11
|
+
def self.literal(literal, case_sensitive:)
|
12
|
+
new(source: literal, regexp: Regexp.compile(Regexp.escape(literal), !case_sensitive))
|
13
13
|
end
|
14
14
|
|
15
|
-
def self.regexp(regexp,
|
15
|
+
def self.regexp(regexp, case_sensitive:, multiline:)
|
16
16
|
options = 0
|
17
|
-
options |= Regexp::IGNORECASE
|
17
|
+
options |= Regexp::IGNORECASE unless case_sensitive
|
18
18
|
options |= Regexp::MULTILINE if multiline
|
19
19
|
|
20
20
|
new(source: regexp, regexp: Regexp.compile(regexp, options))
|
21
21
|
end
|
22
22
|
|
23
|
-
def self.token(tokens,
|
24
|
-
new(source: tokens, regexp: compile_tokens(tokens,
|
23
|
+
def self.token(tokens, case_sensitive:)
|
24
|
+
new(source: tokens, regexp: compile_tokens(tokens, case_sensitive: case_sensitive))
|
25
25
|
end
|
26
26
|
|
27
|
-
def self.compile_tokens(source,
|
27
|
+
def self.compile_tokens(source, case_sensitive:)
|
28
28
|
tokens = []
|
29
29
|
s = StringScanner.new(source)
|
30
30
|
|
@@ -52,7 +52,7 @@ module Goodcheck
|
|
52
52
|
end
|
53
53
|
|
54
54
|
options = Regexp::MULTILINE
|
55
|
-
options |= Regexp::IGNORECASE
|
55
|
+
options |= Regexp::IGNORECASE unless case_sensitive
|
56
56
|
|
57
57
|
Regexp.new(tokens.join('\s*').gsub(/\\s\*(\\s\+\\s\*)+/, '\s+'), options)
|
58
58
|
end
|
data/lib/goodcheck/version.rb
CHANGED
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: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Soutaro Matsumoto
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -129,7 +129,6 @@ files:
|
|
129
129
|
- lib/goodcheck/glob.rb
|
130
130
|
- lib/goodcheck/issue.rb
|
131
131
|
- lib/goodcheck/location.rb
|
132
|
-
- lib/goodcheck/matcher.rb
|
133
132
|
- lib/goodcheck/pattern.rb
|
134
133
|
- lib/goodcheck/reporters/json.rb
|
135
134
|
- lib/goodcheck/reporters/text.rb
|
@@ -155,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
154
|
version: '0'
|
156
155
|
requirements: []
|
157
156
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.6.
|
157
|
+
rubygems_version: 2.6.14.1
|
159
158
|
signing_key:
|
160
159
|
specification_version: 4
|
161
160
|
summary: Regexp based customizable linter
|
data/lib/goodcheck/matcher.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module Goodcheck
|
2
|
-
class Matcher
|
3
|
-
attr_reader :path
|
4
|
-
attr_reader :src
|
5
|
-
attr_reader :rule
|
6
|
-
|
7
|
-
def initialize(path:, src:, rule:)
|
8
|
-
@path = path
|
9
|
-
@src = src
|
10
|
-
@rule = rule
|
11
|
-
end
|
12
|
-
|
13
|
-
def each
|
14
|
-
if block_given?
|
15
|
-
|
16
|
-
else
|
17
|
-
enum_for :each
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|