rubocop-pixelforce 0.3 → 1.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
  SHA256:
3
- metadata.gz: f7183c2bd36b9ded637e732f10a442180c1d631946009f0e7b18947cc26c2b91
4
- data.tar.gz: 767a3f22c46a45d9192211fe56f5ba0848ee10bc0a2ab1eb36e089b50ac60692
3
+ metadata.gz: 1588caf9ae02d875f314601fe24c5ccabf39a426d4a2a3c24d36fd77102e7038
4
+ data.tar.gz: 84cf2619ac8bc213caa36b050352e8422d1caeff764ac167cf260d7d6545c17a
5
5
  SHA512:
6
- metadata.gz: a28e3971ac5717957d9ccf62aac47932c4b87b532c6367dbad4b4d985c183944d6559542f0553d47b5667471f2f8341f88466907c5f36afee3df91f0dfd5c1fc
7
- data.tar.gz: eedf613e54c8903a8453fb11e657d93dc5500983864cf2a0407fd98db5169a52970d763fbdd86b707a8a1952adc4a9a34d561fa8d95b80daedbb70a4f70c5544
6
+ metadata.gz: cdbdfc01ce3d8fa70e1c7286083b0d8dc924d71fdd7a49f1f9e6b65064b29c602809708feaa6a71b513ea78bdf7b242bdc8d48ea56cce5ae3f94036fcf97482f
7
+ data.tar.gz: 0a008613890e9fb8d18cfc52d19300b2ff1d02c742b2e5e08cef57a35e0e2d9ae9f87138630c182d04579a09f1ca5583cd2a89d6c0bff16fd19c94a6437a6320
data/.travis.yml CHANGED
@@ -3,5 +3,5 @@ sudo: false
3
3
  language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
- - 2.4.7
6
+ - 2.7.3
7
7
  before_install: gem install bundler -v 2.0.2
data/Gemfile.lock CHANGED
@@ -1,23 +1,34 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubocop-pixelforce (0.3)
5
- rubocop (~> 0.76)
4
+ rubocop-pixelforce (1.0)
5
+ rubocop (~> 1.21)
6
6
  rubocop-performance
7
7
  rubocop-rails
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- ast (2.4.0)
12
+ activesupport (6.1.4.1)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (>= 1.6, < 2)
15
+ minitest (>= 5.1)
16
+ tzinfo (~> 2.0)
17
+ zeitwerk (~> 2.3)
18
+ ast (2.4.2)
19
+ concurrent-ruby (1.1.9)
13
20
  diff-lcs (1.3)
14
- jaro_winkler (1.5.4)
15
- parallel (1.18.0)
16
- parser (2.6.5.0)
17
- ast (~> 2.4.0)
18
- rack (2.0.7)
21
+ i18n (1.8.10)
22
+ concurrent-ruby (~> 1.0)
23
+ minitest (5.14.4)
24
+ parallel (1.21.0)
25
+ parser (3.0.2.0)
26
+ ast (~> 2.4.1)
27
+ rack (2.2.3)
19
28
  rainbow (3.0.0)
20
- rake (10.4.2)
29
+ rake (13.0.1)
30
+ regexp_parser (2.1.1)
31
+ rexml (3.2.5)
21
32
  rspec (3.9.0)
22
33
  rspec-core (~> 3.9.0)
23
34
  rspec-expectations (~> 3.9.0)
@@ -31,29 +42,38 @@ GEM
31
42
  diff-lcs (>= 1.2.0, < 2.0)
32
43
  rspec-support (~> 3.9.0)
33
44
  rspec-support (3.9.0)
34
- rubocop (0.76.0)
35
- jaro_winkler (~> 1.5.1)
45
+ rubocop (1.21.0)
36
46
  parallel (~> 1.10)
37
- parser (>= 2.6)
47
+ parser (>= 3.0.0.0)
38
48
  rainbow (>= 2.2.2, < 4.0)
49
+ regexp_parser (>= 1.8, < 3.0)
50
+ rexml
51
+ rubocop-ast (>= 1.9.1, < 2.0)
39
52
  ruby-progressbar (~> 1.7)
40
- unicode-display_width (>= 1.4.0, < 1.7)
41
- rubocop-performance (1.5.0)
42
- rubocop (>= 0.71.0)
43
- rubocop-rails (2.3.2)
53
+ unicode-display_width (>= 1.4.0, < 3.0)
54
+ rubocop-ast (1.11.0)
55
+ parser (>= 3.0.1.1)
56
+ rubocop-performance (1.11.5)
57
+ rubocop (>= 1.7.0, < 2.0)
58
+ rubocop-ast (>= 0.4.0)
59
+ rubocop-rails (2.12.2)
60
+ activesupport (>= 4.2.0)
44
61
  rack (>= 1.1)
45
- rubocop (>= 0.72.0)
46
- ruby-progressbar (1.10.1)
47
- unicode-display_width (1.6.0)
62
+ rubocop (>= 1.7.0, < 2.0)
63
+ ruby-progressbar (1.11.0)
64
+ tzinfo (2.0.4)
65
+ concurrent-ruby (~> 1.0)
66
+ unicode-display_width (2.0.0)
67
+ zeitwerk (2.4.2)
48
68
 
49
69
  PLATFORMS
50
70
  ruby
51
71
 
52
72
  DEPENDENCIES
53
73
  bundler (~> 2.0)
54
- rake (~> 10.0)
74
+ rake (~> 13.0)
55
75
  rspec (~> 3.0)
56
76
  rubocop-pixelforce!
57
77
 
58
78
  BUNDLED WITH
59
- 2.0.2
79
+ 2.2.3
data/default.yml CHANGED
@@ -8,6 +8,7 @@ AllCops:
8
8
  - 'Gemfile'
9
9
  - 'db/**/*'
10
10
  - 'bin/*'
11
+ - 'config/**/*'
11
12
 
12
13
  Rails/UnknownEnv:
13
14
  Environments:
@@ -22,7 +23,7 @@ Rails/HasManyOrHasOneDependent:
22
23
  Rails/FilePath:
23
24
  Enabled: false
24
25
 
25
- Pixelforce/ClassStructure:
26
+ Layout/ClassStructure: &class_structures
26
27
  Enabled: true
27
28
  ExpectedOrder:
28
29
  - module_inclusion
@@ -76,6 +77,10 @@ Pixelforce/ClassStructure:
76
77
  - prepend
77
78
  - extend
78
79
 
80
+ Pixelforce/EmptyLineBwteenCategories:
81
+ <<: *class_structures
82
+ Enabled: true
83
+
79
84
  Layout/AlignHash:
80
85
  EnforcedColonStyle: table
81
86
 
@@ -1,7 +1,9 @@
1
1
  module RuboCop
2
2
  module Cop
3
3
  module Pixelforce
4
- class ClassStructure < Cop
4
+ class EmptyLineBwteenCategories < Cop
5
+ include RangeHelp
6
+
5
7
  HUMANIZED_NODE_TYPE = {
6
8
  casgn: :constants,
7
9
  defs: :class_methods,
@@ -10,8 +12,7 @@ module RuboCop
10
12
  }.freeze
11
13
 
12
14
  VISIBILITY_SCOPES = %i[private protected public].freeze
13
- MSG = '`%<category>s` is supposed to appear before ' \
14
- '`%<previous>s`.'
15
+ MSG = 'Use empty lines between categories.'
15
16
 
16
17
  def_node_matcher :visibility_block?, <<~PATTERN
17
18
  (send nil? { :private :protected :public })
@@ -20,22 +21,13 @@ module RuboCop
20
21
  # Validates code style on class declaration.
21
22
  # Add offense when find a node out of expected order.
22
23
  def on_class(class_node)
23
- previous = -1
24
24
  previous_category = nil
25
25
  previous_node_end_line = -1
26
26
  previous_method_name = nil
27
27
  walk_over_nested_class_definition(class_node) do |node, category|
28
- index = expected_order.index(category)
29
- if index < previous
30
- message = format(MSG, category: category,
31
- previous: expected_order[previous])
32
- add_offense(node, message: message)
33
- end
34
- previous = index
35
-
36
28
  next unless node.respond_to?(:method_name)
37
29
  if previous_category && category != previous_category && node.loc.first_line - previous_node_end_line < 2
38
- add_offense(node, message: "Use empty lines between categories.")
30
+ add_offense(node, message: MSG)
39
31
  end
40
32
 
41
33
  if previous_method_name && previous_method_name == node.method_name && node.loc.first_line - previous_node_end_line > 1
@@ -45,22 +37,20 @@ module RuboCop
45
37
  previous_node_end_line = node.loc.last_line
46
38
  previous_method_name = node.method_name
47
39
  end
48
- end
40
+ end
49
41
 
50
- # Autocorrect by swapping between two nodes autocorrecting them
51
42
  def autocorrect(node)
52
- node_classification = classify(node)
53
- previous = left_siblings_of(node).find do |sibling|
54
- classification = classify(sibling)
55
- !ignore?(classification) && node_classification != classification
56
- end
43
+ prev_category = prev_node(node)
44
+ # finds position of first newline
45
+ end_pos = end_position_for(prev_category)
46
+ newline_pos = buffer.source.index("\n", end_pos)
57
47
 
58
- current_range = source_range_with_comment(node)
59
- previous_range = source_range_with_comment(previous)
48
+ count = blank_lines_count_between(prev_category, node)
60
49
 
61
- lambda do |corrector|
62
- corrector.insert_before(previous_range, current_range.source)
63
- corrector.remove(current_range)
50
+ if count > 1
51
+ autocorrect_remove_lines(newline_pos, count)
52
+ else
53
+ autocorrect_insert_lines(newline_pos, count)
64
54
  end
65
55
  end
66
56
 
@@ -209,6 +199,16 @@ module RuboCop
209
199
  processed_source.buffer
210
200
  end
211
201
 
202
+ def prev_node(node)
203
+ return nil unless node.sibling_index.positive?
204
+
205
+ node.parent.children[node.sibling_index - 1]
206
+ end
207
+
208
+ def blank_lines_count_between(prev_category, node)
209
+ node.loc.first_line - prev_category.loc.last_line
210
+ end
211
+
212
212
  # Load expected order from `ExpectedOrder` config.
213
213
  # Define new terms in the expected order by adding new {categories}.
214
214
  def expected_order
@@ -220,6 +220,20 @@ module RuboCop
220
220
  def categories
221
221
  cop_config['Categories']
222
222
  end
223
+
224
+ def autocorrect_remove_lines(newline_pos, count)
225
+ range_to_remove = range_between(newline_pos, newline_pos + 1)
226
+ lambda do |corrector|
227
+ corrector.remove(range_to_remove)
228
+ end
229
+ end
230
+
231
+ def autocorrect_insert_lines(newline_pos, count)
232
+ where_to_insert = range_between(newline_pos, newline_pos + 1)
233
+ lambda do |corrector|
234
+ corrector.insert_after(where_to_insert, "\n")
235
+ end
236
+ end
223
237
  end
224
238
  end
225
239
  end
@@ -1,5 +1,5 @@
1
1
  module Rubocop
2
2
  module Pixelforce
3
- VERSION = "0.3"
3
+ VERSION = "1.0"
4
4
  end
5
5
  end
@@ -1,6 +1,3 @@
1
+ require 'rubocop'
1
2
  require "rubocop/pixelforce/version"
2
-
3
- module Rubocop
4
- module Pixelforce
5
- end
6
- end
3
+ require 'rubocop/cop/pixelforce/empty_line_between_categories'
@@ -1,3 +1,3 @@
1
1
  require 'rubocop'
2
2
 
3
- require 'rubocop/cop/pixelforce/class_structure'
3
+ require 'rubocop/cop/pixelforce/empty_line_between_categories'
@@ -26,10 +26,10 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ["lib"]
27
27
 
28
28
  spec.add_development_dependency "bundler", "~> 2.0"
29
- spec.add_development_dependency "rake", "~> 10.0"
29
+ spec.add_development_dependency "rake", "~> 13.0"
30
30
  spec.add_development_dependency "rspec", "~> 3.0"
31
31
 
32
- spec.add_runtime_dependency "rubocop", "~> 0.76"
32
+ spec.add_runtime_dependency "rubocop", "~> 1.21"
33
33
  spec.add_runtime_dependency "rubocop-performance"
34
34
  spec.add_runtime_dependency "rubocop-rails"
35
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-pixelforce
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.3'
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Zhang
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-08 00:00:00.000000000 Z
11
+ date: 2021-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.76'
61
+ version: '1.21'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.76'
68
+ version: '1.21'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubocop-performance
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -113,7 +113,7 @@ files:
113
113
  - bin/setup
114
114
  - default.yml
115
115
  - lib/rubocop-pixelforce.rb
116
- - lib/rubocop/cop/pixelforce/class_structure.rb
116
+ - lib/rubocop/cop/pixelforce/empty_line_between_categories.rb
117
117
  - lib/rubocop/pixelforce.rb
118
118
  - lib/rubocop/pixelforce/version.rb
119
119
  - rubocop-pixelforce.gemspec
@@ -123,7 +123,7 @@ metadata:
123
123
  homepage_uri: https://github.com/BenZhang/rubocop-pixelforce
124
124
  source_code_uri: https://github.com/BenZhang/rubocop-pixelforce
125
125
  changelog_uri: https://github.com/BenZhang/rubocop-pixelforce
126
- post_install_message:
126
+ post_install_message:
127
127
  rdoc_options: []
128
128
  require_paths:
129
129
  - lib
@@ -138,9 +138,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  requirements: []
141
- rubyforge_project:
142
- rubygems_version: 2.7.9
143
- signing_key:
141
+ rubygems_version: 3.2.3
142
+ signing_key:
144
143
  specification_version: 4
145
144
  summary: Custom Rubocop cop for PixelForce.
146
145
  test_files: []