rubocop-pixelforce 0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c39237d29ba2cb32b80ca7537a40b943a217099d499cbf65dfe40da2e07e3483
4
+ data.tar.gz: d7d8fd1807d26e2581b871c46cdde1672058300d2bbb206ab46b4f184b1adf1d
5
+ SHA512:
6
+ metadata.gz: d17544bd7582c2031329d6969ee1631ea973be725b0ba7c5b05f4c8875684ce0a8b07601204519bb499c0d976857489d323c268485340322a7883015c0faea33
7
+ data.tar.gz: 2e93ca8bb8f766cd4ba52adc19ffea77de99cc65274102e06d7f33b4c5b890b315045145dee5a2b8ebaef112bd4a53931aec4c47e00330af8abace65a63cfcc7
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.4.7
7
+ before_install: gem install bundler -v 2.0.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rubocop-pixelforce.gemspec
4
+ gemspec
@@ -0,0 +1,59 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ rubocop-pixelforce (0.4)
5
+ rubocop (~> 0.76)
6
+ rubocop-performance
7
+ rubocop-rails
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ ast (2.4.0)
13
+ 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)
19
+ rainbow (3.0.0)
20
+ rake (10.4.2)
21
+ rspec (3.9.0)
22
+ rspec-core (~> 3.9.0)
23
+ rspec-expectations (~> 3.9.0)
24
+ rspec-mocks (~> 3.9.0)
25
+ rspec-core (3.9.0)
26
+ rspec-support (~> 3.9.0)
27
+ rspec-expectations (3.9.0)
28
+ diff-lcs (>= 1.2.0, < 2.0)
29
+ rspec-support (~> 3.9.0)
30
+ rspec-mocks (3.9.0)
31
+ diff-lcs (>= 1.2.0, < 2.0)
32
+ rspec-support (~> 3.9.0)
33
+ rspec-support (3.9.0)
34
+ rubocop (0.76.0)
35
+ jaro_winkler (~> 1.5.1)
36
+ parallel (~> 1.10)
37
+ parser (>= 2.6)
38
+ rainbow (>= 2.2.2, < 4.0)
39
+ 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)
44
+ rack (>= 1.1)
45
+ rubocop (>= 0.72.0)
46
+ ruby-progressbar (1.10.1)
47
+ unicode-display_width (1.6.0)
48
+
49
+ PLATFORMS
50
+ ruby
51
+
52
+ DEPENDENCIES
53
+ bundler (~> 2.0)
54
+ rake (~> 10.0)
55
+ rspec (~> 3.0)
56
+ rubocop-pixelforce!
57
+
58
+ BUNDLED WITH
59
+ 2.0.2
@@ -0,0 +1,69 @@
1
+ # Rubocop::Pixelforce
2
+
3
+ Custom Rubocop cop for PixlForce
4
+
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'rubocop-pixelforce'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ and create .rubocop file like this
19
+
20
+ ```
21
+ inherit_gem:
22
+ rubocop-pixelforce: default.yml
23
+ ```
24
+
25
+ ## Pixelforce/ClassStructure: Don't Use empty lines between same categories.
26
+
27
+ ```ruby
28
+ # bad
29
+ belongs_to :user
30
+
31
+ belongs_to :category
32
+
33
+ after_commit :update_geo_location
34
+
35
+ # good
36
+ belongs_to :user
37
+ belongs_to :category
38
+
39
+ after_commit :update_geo_location
40
+ ```
41
+
42
+ ## Pixelforce/ClassStructure: Use empty lines between categories.
43
+
44
+ ```ruby
45
+ # bad
46
+ enum status: { draft: 0, active: 1, approved: 2, declined: 3 }
47
+ belongs_to :user
48
+ belongs_to :category
49
+ after_commit :update_geo_location
50
+
51
+ # good
52
+ enum status: { draft: 0, active: 1, approved: 2, declined: 3 }
53
+
54
+ belongs_to :user
55
+ belongs_to :category
56
+
57
+ after_commit :update_geo_location
58
+ ```
59
+
60
+
61
+ ## Development
62
+
63
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
64
+
65
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
66
+
67
+ ## Contributing
68
+
69
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/rubocop-pixelforce.
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "rubocop/pixelforce"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,141 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rails
4
+ - rubocop-pixelforce
5
+
6
+ AllCops:
7
+ Exclude:
8
+ - 'Gemfile'
9
+ - 'db/**/*'
10
+ - 'bin/*'
11
+
12
+ Rails/UnknownEnv:
13
+ Environments:
14
+ - production
15
+ - development
16
+ - test
17
+ - staging
18
+
19
+ Rails/HasManyOrHasOneDependent:
20
+ Enabled: false
21
+
22
+ Rails/FilePath:
23
+ Enabled: false
24
+
25
+ Layout/ClassStructure: &class_structures
26
+ Enabled: true
27
+ ExpectedOrder:
28
+ - module_inclusion
29
+ - constants
30
+ - attr_macros
31
+ - association
32
+ - public_attribute_macros
33
+ - public_delegate
34
+ - macros
35
+ - callbacks
36
+ - public_class_methods
37
+ - initializer
38
+ - public_methods
39
+ - protected_attribute_macros
40
+ - protected_methods
41
+ - private_attribute_macros
42
+ - private_delegate
43
+ - private_methods
44
+ Categories:
45
+ attr_macros:
46
+ - attr_accessor
47
+ - enum
48
+ association:
49
+ - belongs_to
50
+ - has_many
51
+ - has_one
52
+ public_attribute_macros:
53
+ - accepts_nested_attributes_for
54
+ attribute_macros:
55
+ - attr_accessor
56
+ - attr_reader
57
+ - attr_writer
58
+ callbacks:
59
+ - before_create
60
+ - before_save
61
+ - before_update
62
+ - before_validation
63
+ - before_destroy
64
+ - before_commit
65
+ - after_create
66
+ - after_save
67
+ - after_update
68
+ - after_validation
69
+ - after_destroy
70
+ - after_commit
71
+ macros:
72
+ - validates
73
+ - validate
74
+ module_inclusion:
75
+ - include
76
+ - prepend
77
+ - extend
78
+
79
+ Pixelforce/EmptyLineBwteenCategories:
80
+ <<: *class_structures
81
+ Enabled: true
82
+
83
+ Layout/AlignHash:
84
+ EnforcedColonStyle: table
85
+
86
+ Metrics/ModuleLength:
87
+ Enabled: false
88
+
89
+ Style/NestedTernaryOperator:
90
+ Enabled: false
91
+
92
+ Style/FrozenStringLiteralComment:
93
+ Enabled: false
94
+
95
+ Documentation:
96
+ Enabled: false
97
+
98
+ Metrics/LineLength:
99
+ Enabled: false
100
+
101
+ Metrics/MethodLength:
102
+ Enabled: false
103
+
104
+ Metrics/BlockNesting:
105
+ Enabled: false
106
+
107
+ Metrics/AbcSize:
108
+ Enabled: false
109
+
110
+ Metrics/ClassLength:
111
+ Enabled: false
112
+
113
+ Metrics/BlockLength:
114
+ Enabled: false
115
+
116
+ Style/IfUnlessModifier:
117
+ Enabled: false
118
+
119
+ Metrics/CyclomaticComplexity:
120
+ Enabled: false
121
+
122
+ Metrics/PerceivedComplexity:
123
+ Enabled: false
124
+
125
+ Style/GuardClause:
126
+ Enabled: false
127
+
128
+ Style/AsciiComments:
129
+ Enabled: false
130
+
131
+ Style/ClassAndModuleChildren:
132
+ Enabled: false
133
+
134
+ Style/TernaryParentheses:
135
+ Enabled: false
136
+
137
+ Style/GlobalVars:
138
+ Enabled: false
139
+
140
+ Metrics/ParameterLists:
141
+ Enabled: false
@@ -0,0 +1,3 @@
1
+ require 'rubocop'
2
+
3
+ require 'rubocop/cop/pixelforce/empty_line_between_categories'
@@ -0,0 +1,240 @@
1
+ module RuboCop
2
+ module Cop
3
+ module Pixelforce
4
+ class EmptyLineBwteenCategories < Cop
5
+ include RangeHelp
6
+
7
+ HUMANIZED_NODE_TYPE = {
8
+ casgn: :constants,
9
+ defs: :class_methods,
10
+ def: :public_methods,
11
+ sclass: :class_singleton
12
+ }.freeze
13
+
14
+ VISIBILITY_SCOPES = %i[private protected public].freeze
15
+ MSG = 'Use empty lines between categories.'
16
+
17
+ def_node_matcher :visibility_block?, <<~PATTERN
18
+ (send nil? { :private :protected :public })
19
+ PATTERN
20
+
21
+ # Validates code style on class declaration.
22
+ # Add offense when find a node out of expected order.
23
+ def on_class(class_node)
24
+ previous_category = nil
25
+ previous_node_end_line = -1
26
+ previous_method_name = nil
27
+ walk_over_nested_class_definition(class_node) do |node, category|
28
+ next unless node.respond_to?(:method_name)
29
+ if previous_category && category != previous_category && node.loc.first_line - previous_node_end_line < 2
30
+ add_offense(node, message: MSG)
31
+ end
32
+
33
+ if previous_method_name && previous_method_name == node.method_name && node.loc.first_line - previous_node_end_line > 1
34
+ add_offense(node, message: "Don't Use empty lines between same categories.")
35
+ end
36
+ previous_category = category
37
+ previous_node_end_line = node.loc.last_line
38
+ previous_method_name = node.method_name
39
+ end
40
+ end
41
+
42
+ def autocorrect(node)
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)
47
+
48
+ count = blank_lines_count_between(prev_category, node)
49
+
50
+ if count > 1
51
+ autocorrect_remove_lines(newline_pos, count)
52
+ else
53
+ autocorrect_insert_lines(newline_pos, count)
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ # Classifies a node to match with something in the {expected_order}
60
+ # @param node to be analysed
61
+ # @return String when the node type is a `:block` then
62
+ # {classify} recursively with the first children
63
+ # @return String when the node type is a `:send` then {find_category}
64
+ # by method name
65
+ # @return String otherwise trying to {humanize_node} of the current node
66
+ def classify(node)
67
+ return node.to_s unless node.respond_to?(:type)
68
+
69
+ case node.type
70
+ when :block
71
+ classify(node.send_node)
72
+ when :send
73
+ find_category(node)
74
+ else
75
+ humanize_node(node)
76
+ end.to_s
77
+ end
78
+
79
+ # Categorize a node according to the {expected_order}
80
+ # Try to match {categories} values against the node's method_name given
81
+ # also its visibility.
82
+ # @param node to be analysed.
83
+ # @return [String] with the key category or the `method_name` as string
84
+ def find_category(node)
85
+ name = node.method_name.to_s
86
+ category, = categories.find { |_, names| names.include?(name) }
87
+ key = category || name
88
+ visibility_key = "#{node_visibility(node)}_#{key}"
89
+ expected_order.include?(visibility_key) ? visibility_key : key
90
+ end
91
+
92
+ def walk_over_nested_class_definition(class_node)
93
+ class_elements(class_node).each do |node|
94
+ classification = classify(node)
95
+ next if ignore?(classification)
96
+
97
+ yield node, classification
98
+ end
99
+ end
100
+
101
+ def class_elements(class_node)
102
+ class_def = class_node.body
103
+
104
+ return [] unless class_def
105
+
106
+ if class_def.def_type? || class_def.send_type?
107
+ [class_def]
108
+ else
109
+ class_def.children.compact
110
+ end
111
+ end
112
+
113
+ def ignore?(classification)
114
+ classification.nil? ||
115
+ classification.to_s.end_with?('=') ||
116
+ expected_order.index(classification).nil?
117
+ end
118
+
119
+ def node_visibility(node)
120
+ scope = find_visibility_start(node)
121
+ scope&.method_name || :public
122
+ end
123
+
124
+ def find_visibility_start(node)
125
+ left_siblings_of(node)
126
+ .reverse
127
+ .find(&method(:visibility_block?))
128
+ end
129
+
130
+ # Navigate to find the last protected method
131
+ def find_visibility_end(node)
132
+ possible_visibilities = VISIBILITY_SCOPES - [node_visibility(node)]
133
+ right = right_siblings_of(node)
134
+ right.find do |child_node|
135
+ possible_visibilities.include?(node_visibility(child_node))
136
+ end || right.last
137
+ end
138
+
139
+ def siblings_of(node)
140
+ node.parent.children
141
+ end
142
+
143
+ def right_siblings_of(node)
144
+ siblings_of(node)[node.sibling_index..-1]
145
+ end
146
+
147
+ def left_siblings_of(node)
148
+ siblings_of(node)[0, node.sibling_index]
149
+ end
150
+
151
+ def humanize_node(node)
152
+ if node.def_type?
153
+ return :initializer if node.method?(:initialize)
154
+
155
+ return "#{node_visibility(node)}_methods"
156
+ end
157
+ HUMANIZED_NODE_TYPE[node.type] || node.type
158
+ end
159
+
160
+ def source_range_with_comment(node)
161
+ begin_pos, end_pos =
162
+ if node.def_type?
163
+ start_node = find_visibility_start(node) || node
164
+ end_node = find_visibility_end(node) || node
165
+ [begin_pos_with_comment(start_node),
166
+ end_position_for(end_node) + 1]
167
+ else
168
+ [begin_pos_with_comment(node), end_position_for(node)]
169
+ end
170
+
171
+ Parser::Source::Range.new(buffer, begin_pos, end_pos)
172
+ end
173
+
174
+ def end_position_for(node)
175
+ end_line = buffer.line_for_position(node.loc.expression.end_pos)
176
+ buffer.line_range(end_line).end_pos
177
+ end
178
+
179
+ def begin_pos_with_comment(node)
180
+ annotation_line = node.first_line - 1
181
+ first_comment = nil
182
+
183
+ processed_source.comments_before_line(annotation_line)
184
+ .reverse_each do |comment|
185
+ if comment.location.line == annotation_line
186
+ first_comment = comment
187
+ annotation_line -= 1
188
+ end
189
+ end
190
+
191
+ start_line_position(first_comment || node)
192
+ end
193
+
194
+ def start_line_position(node)
195
+ buffer.line_range(node.loc.line).begin_pos - 1
196
+ end
197
+
198
+ def buffer
199
+ processed_source.buffer
200
+ end
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
+ # Load expected order from `ExpectedOrder` config.
213
+ # Define new terms in the expected order by adding new {categories}.
214
+ def expected_order
215
+ cop_config['ExpectedOrder']
216
+ end
217
+
218
+ # Setting categories hash allow you to group methods in group to match
219
+ # in the {expected_order}.
220
+ def categories
221
+ cop_config['Categories']
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
237
+ end
238
+ end
239
+ end
240
+ end
@@ -0,0 +1,6 @@
1
+ require "rubocop/pixelforce/version"
2
+
3
+ module Rubocop
4
+ module Pixelforce
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module Rubocop
2
+ module Pixelforce
3
+ VERSION = "0.4"
4
+ end
5
+ end
@@ -0,0 +1,35 @@
1
+ lib = File.expand_path("lib", __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "rubocop/pixelforce/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "rubocop-pixelforce"
7
+ spec.version = Rubocop::Pixelforce::VERSION
8
+ spec.authors = ["Ben Zhang"]
9
+ spec.email = ["bzbnhang@gmail.com"]
10
+
11
+ spec.summary = %q{Custom Rubocop cop for PixelForce.}
12
+ spec.description = %q{Use empty lines between categories and Don't Use empty lines between same categories.}
13
+ spec.homepage = "https://github.com/BenZhang/rubocop-pixelforce"
14
+
15
+ spec.metadata["homepage_uri"] = spec.homepage
16
+ spec.metadata["source_code_uri"] = "https://github.com/BenZhang/rubocop-pixelforce"
17
+ spec.metadata["changelog_uri"] = "https://github.com/BenZhang/rubocop-pixelforce"
18
+
19
+ # Specify which files should be added to the gem when it is released.
20
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
21
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
22
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
23
+ end
24
+ spec.bindir = "exe"
25
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
+ spec.require_paths = ["lib"]
27
+
28
+ spec.add_development_dependency "bundler", "~> 2.0"
29
+ spec.add_development_dependency "rake", "~> 10.0"
30
+ spec.add_development_dependency "rspec", "~> 3.0"
31
+
32
+ spec.add_runtime_dependency "rubocop", "~> 0.76"
33
+ spec.add_runtime_dependency "rubocop-performance"
34
+ spec.add_runtime_dependency "rubocop-rails"
35
+ end
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubocop-pixelforce
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.4'
5
+ platform: ruby
6
+ authors:
7
+ - Ben Zhang
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-11-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.76'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.76'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-performance
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rails
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Use empty lines between categories and Don't Use empty lines between
98
+ same categories.
99
+ email:
100
+ - bzbnhang@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - ".travis.yml"
108
+ - Gemfile
109
+ - Gemfile.lock
110
+ - README.md
111
+ - Rakefile
112
+ - bin/console
113
+ - bin/setup
114
+ - default.yml
115
+ - lib/rubocop-pixelforce.rb
116
+ - lib/rubocop/cop/pixelforce/empty_line_between_categories.rb
117
+ - lib/rubocop/pixelforce.rb
118
+ - lib/rubocop/pixelforce/version.rb
119
+ - rubocop-pixelforce.gemspec
120
+ homepage: https://github.com/BenZhang/rubocop-pixelforce
121
+ licenses: []
122
+ metadata:
123
+ homepage_uri: https://github.com/BenZhang/rubocop-pixelforce
124
+ source_code_uri: https://github.com/BenZhang/rubocop-pixelforce
125
+ changelog_uri: https://github.com/BenZhang/rubocop-pixelforce
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 2.7.9
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: Custom Rubocop cop for PixelForce.
146
+ test_files: []