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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 655728b9b54f9f48689ab1537e36db901b6e0ce7
4
- data.tar.gz: 58b694b053b4fdf26c96c4b7369d87fffdac05cb
3
+ metadata.gz: 1a38825ec6d8bc5b187a12a85f2ef8247e97b3d1
4
+ data.tar.gz: 533593b7f064c57417e2719e9831595d4de5f896
5
5
  SHA512:
6
- metadata.gz: 3241668c77b0b0fcea6a1bf1db06002a2e4df90a91c1bab4013fc15fbb51d65a036e5da91a8e6938019aa59ff3552eb2d13f79b2bf533067d6e04cf62e5f3f8d
7
- data.tar.gz: b5d60bbef44eef2f3c97b23dbcd8ae8f7cf4d2203dcdad431e86e675c9c123170ad79cba50e926c52a43c3e21e4f744d10d64a2c6397c8c9bea3f8ff499879b9
6
+ metadata.gz: b6bfeb6c399bcb7ea16c66e2a285c556b5838ef976328512ad773bc8e51a32b9551829551026389db4f2ab89ff9679d2fe59fcf6fbe394ece71524082f702dcd
7
+ data.tar.gz: 7ba0ded6e4fc1d395ef14012ecc399853a65751357d54a22c5f2b4e8e6b4f63bc47f0a727d82ea8c571ef8da20fa2969b47763260cdf823083531742ddf7f09f
@@ -2,7 +2,12 @@
2
2
 
3
3
  ## master
4
4
 
5
- ## 1.1.0 (2018-06-16)
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- goodcheck (1.1.0)
4
+ goodcheck (1.2.0)
5
5
  activesupport (~> 5.0)
6
6
  rainbow (~> 3.0.0)
7
7
  strong_json (~> 0.5.0)
@@ -35,4 +35,4 @@ DEPENDENCIES
35
35
  rake (~> 10.0)
36
36
 
37
37
  BUNDLED WITH
38
- 1.16.0
38
+ 1.16.2
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 `case_insensitive: false`.
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
- case_insensitive: false
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
- `case_insensitive` is an optional key and the default is `false`.
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
- case_insensitive: true
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, `case_insensitive` and `multiline`.
107
- The default values of `case_insensitive` and `multiline` are `false`.
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
- case_insensitive: true
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, `case_insensitive`.
135
- The default value of `case_insensitive` is `false`.
134
+ It accepts one optional attribute, `case_sensitive`.
135
+ The default value of `case_sensitive` is `true`.
136
136
 
137
137
  ### *glob*
138
138
 
@@ -18,7 +18,6 @@ require "goodcheck/array_helper"
18
18
  require "goodcheck/analyzer"
19
19
  require "goodcheck/issue"
20
20
  require "goodcheck/rule"
21
- require "goodcheck/matcher"
22
21
  require "goodcheck/pattern"
23
22
  require "goodcheck/config"
24
23
  require "goodcheck/config_loader"
@@ -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 :regexp_pattern, object(regexp: string, case_insensitive: boolean?, multiline: boolean?)
9
- let :literal_pattern, object(literal: string, case_insensitive: boolean?)
10
- let :token_pattern, object(token: string, case_insensitive: boolean?)
11
- let :pattern, enum(regexp_pattern, literal_pattern, token_pattern, string)
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, case_insensitive: false)
82
+ Pattern.literal(pattern, case_sensitive: true)
72
83
  when Hash
73
84
  case
74
85
  when pattern[:literal]
75
- ci = pattern[:case_insensitive]
86
+ cs = case_sensitive?(pattern)
76
87
  literal = pattern[:literal]
77
- Pattern.literal(literal, case_insensitive: ci)
88
+ Pattern.literal(literal, case_sensitive: cs)
78
89
  when pattern[:regexp]
79
90
  regexp = pattern[:regexp]
80
- ci = pattern[:case_insensitive]
91
+ cs = case_sensitive?(pattern)
81
92
  multiline = pattern[:multiline]
82
- Pattern.regexp(regexp, case_insensitive: ci, multiline: multiline)
93
+ Pattern.regexp(regexp, case_sensitive: cs, multiline: multiline)
83
94
  when pattern[:token]
84
95
  tok = pattern[:token]
85
- ci = pattern[:case_insensitive]
86
- Pattern.token(tok, case_insensitive: ci)
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
@@ -8,23 +8,23 @@ module Goodcheck
8
8
  @regexp = regexp
9
9
  end
10
10
 
11
- def self.literal(literal, case_insensitive:)
12
- new(source: literal, regexp: Regexp.compile(Regexp.escape(literal), case_insensitive))
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, case_insensitive:, multiline:)
15
+ def self.regexp(regexp, case_sensitive:, multiline:)
16
16
  options = 0
17
- options |= Regexp::IGNORECASE if case_insensitive
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, case_insensitive:)
24
- new(source: tokens, regexp: compile_tokens(tokens, case_insensitive: case_insensitive))
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, case_insensitive:)
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 if case_insensitive
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
@@ -30,6 +30,7 @@ module Goodcheck
30
30
  }
31
31
  end
32
32
  stdout.puts ::JSON.dump(json)
33
+ json
33
34
  end
34
35
 
35
36
  def file(path)
@@ -1,3 +1,3 @@
1
1
  module Goodcheck
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
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.1.0
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-05-16 00:00:00.000000000 Z
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.8
157
+ rubygems_version: 2.6.14.1
159
158
  signing_key:
160
159
  specification_version: 4
161
160
  summary: Regexp based customizable linter
@@ -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