goodcheck 1.5.0 → 1.5.1

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 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