rubocop-pixelforce 0.4

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.
@@ -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: []