goodcheck 1.5.0 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 93e66b881fded69a52ecf1d3c718ab3c8ae6856c45790d44fb1673b4c067a5ff
4
- data.tar.gz: b7201e56bcf8256d911d3f8e58ba533b00e3d5f1ef34c7e13b45b12d90593dfb
2
+ SHA1:
3
+ metadata.gz: 95c2a7244c21b8436b9b3069df313871905d2544
4
+ data.tar.gz: e2137ec229279936f5abed87dabff5a8dcd083ad
5
5
  SHA512:
6
- metadata.gz: 86112f72e2fe74a4c26f14fd919b515538e2d3f671586cb8f21139b489df5beeafa4363f1424e603d4c8946c09e6f6848157aeb4676feb15d79228e26be947b4
7
- data.tar.gz: c7f7023ccfda443654230c9762fa5f307b842e4c5596ad6833551159766272823310ef7b623677dae558c336773b3824df41b562a5720450613dae37cf0cbf6e
6
+ metadata.gz: 77025fef5bebc19bf8638f3aee6f9777e4bc6cfbb1b41ab0dd0e04b60190c33947d0b6a06ed053e136e80573bb05f71c240e0d036699544c53ab65e323fa5b7e
7
+ data.tar.gz: 93d155f4a8cbd50ec80412713c80ec7093a00de0635cad25db8451a37970ab20609ffc0b14d851e523d8a7a6480d30f71628873fd152c7968738ed4fc3c75473
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.4.5
3
+ - 2.4.6
4
4
  - 2.5.5
5
- - 2.6.2
5
+ - 2.6.3
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.5.1 (2019-05-08)
6
+
7
+ * Regexp matching improvements
8
+ * Performance improvements
9
+
5
10
  ## 1.5.0 (2019-03-18)
6
11
 
7
12
  * Add `exclude` option #43
data/README.md CHANGED
@@ -22,7 +22,7 @@ $ gem install goodcheck
22
22
 
23
23
  Or you can use `bundler`!
24
24
 
25
- If you would not like to install Goodcheck to system (e.g. you would not like to install Ruby 2.4 or higher), you can use a docker image. [See below](#docker-image).
25
+ If you would not like to install Goodcheck to system (e.g. you would not like to install Ruby 2.4 or higher), you can use a docker image. [See below](#docker-images).
26
26
 
27
27
  ## Quickstart
28
28
 
@@ -12,34 +12,23 @@ module Goodcheck
12
12
  if block_given?
13
13
  issues = []
14
14
 
15
- rule.patterns.each do |pattern|
16
- scanner = StringScanner.new(buffer.content)
15
+ regexp = Regexp.union(*rule.patterns.map(&:regexp))
16
+ scanner = StringScanner.new(buffer.content)
17
17
 
18
- break_head = pattern.regexp.source.start_with?("\\b")
19
- after_break = true
20
-
21
- until scanner.eos?
22
- case
23
- when scanner.scan(pattern.regexp)
24
- next if break_head && !after_break
25
-
26
- text = scanner.matched
27
- range = (scanner.pos - text.bytesize) .. scanner.pos
28
- unless issues.any? {|issue| issue.range == range }
29
- issues << Issue.new(buffer: buffer, range: range, rule: rule, text: text)
30
- end
31
- when scanner.scan(/.\b/m)
32
- after_break = true
33
- else
34
- scanner.scan(/./m)
35
- after_break = false
36
- end
18
+ while true
19
+ case
20
+ when scanner.scan_until(regexp)
21
+ text = scanner.matched
22
+ range = (scanner.pos - text.bytesize) .. scanner.pos
23
+ issues << Issue.new(buffer: buffer, range: range, rule: rule, text: text)
24
+ else
25
+ break
37
26
  end
38
27
  end
39
28
 
40
29
  issues.each(&block)
41
30
  else
42
- enum_for(:scan, &block)
31
+ enum_for(:scan)
43
32
  end
44
33
  end
45
34
  end
@@ -109,41 +109,10 @@ module Goodcheck
109
109
  Rule.new(id: id, patterns: patterns, justifications: justifications, globs: globs, message: message, passes: passes, fails: fails)
110
110
  end
111
111
 
112
- def combine_literal_patterns(patterns, case_sensitive:)
113
- return nil if patterns.empty?
114
- literals = patterns.map do |pat|
115
- str = pat.is_a?(String) ? pat : pat[:literal].to_s
116
- Regexp.escape(str)
117
- end
118
- Pattern.regexp(literals.join('|'),
119
- case_sensitive: case_sensitive,
120
- multiline: false)
121
- end
122
-
123
- def literal_pattern?(pattern)
124
- pattern.is_a?(String) || pattern[:literal]
125
- end
126
-
127
- def select_literal_pattern(patterns, case_sensitive:)
128
- patterns.select do |pat|
129
- if case_sensitive
130
- literal_pattern?(pat) && case_sensitive?(pat)
131
- else
132
- literal_pattern?(pat) && !case_sensitive?(pat)
133
- end
134
- end
135
- end
136
-
137
112
  def retrieve_patterns(hash)
138
- pat_array = array(hash[:pattern])
139
- non_literal = pat_array.reject { |pat| literal_pattern?(pat) }
140
- patterns = non_literal.map { |pat| load_pattern(pat) }
141
- [true, false].each do |boolean|
142
- literal = select_literal_pattern(pat_array, case_sensitive: boolean)
143
- comb_pat = combine_literal_patterns(literal, case_sensitive: boolean)
144
- patterns << comb_pat if comb_pat
113
+ array(hash[:pattern]).map do |pat|
114
+ load_pattern(pat)
145
115
  end
146
- patterns
147
116
  end
148
117
 
149
118
  def load_globs(globs)
@@ -1,3 +1,3 @@
1
1
  module Goodcheck
2
- VERSION = "1.5.0"
2
+ VERSION = "1.5.1"
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: 1.5.0
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-03-17 00:00:00.000000000 Z
11
+ date: 2019-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -182,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
182
  version: '0'
183
183
  requirements: []
184
184
  rubyforge_project:
185
- rubygems_version: 2.7.6
185
+ rubygems_version: 2.6.14.1
186
186
  signing_key:
187
187
  specification_version: 4
188
188
  summary: Regexp based customizable linter