rubocop-decko 0.1 → 0.2
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 +4 -4
- data/README.md +80 -2
- data/lib/rubocop-decko.rb +6 -1
- data/lib/rubocop/cop/decko/block_length.rb +18 -0
- data/lib/rubocop/cop/decko/event_length.rb +4 -6
- data/lib/rubocop/cop/decko/view_length.rb +2 -5
- data/lib/rubocop/cop/mixin/block_lines.rb +20 -0
- data/lib/rubocop/decko.rb +10 -0
- data/lib/rubocop/decko/inject.rb +20 -8
- data/lib/rubocop/decko/version.rb +1 -1
- data/rubocop-decko.gemspec +1 -1
- metadata +6 -4
- data/lib/rubocop/cop/mixin/block_length.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2317e1d406d4d99fed71a1ccf1d846ce5fa6713d
|
4
|
+
data.tar.gz: 4d75085a5ce222c614b5bb9027f0fe94bb3cd0dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2b1133694ebea9df07acef4af6e8eae668a6851cf3e5501538d5b00a9c9eb2038b63fceeab69efc1a12c0b3c824c9fa1f54f877178d31c4bcc76e0c1831f466
|
7
|
+
data.tar.gz: 72c09f7badbbe7f50b8fbd665946507e3f4875fb45f93141a01976e7e9bd6e1bf3b1ad54c3ad21cd246b818187f11aac59a9887d0e3e7da4d7e431f8498c8060
|
data/README.md
CHANGED
@@ -1,2 +1,80 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# RuboCop Decko
|
2
|
+
|
3
|
+
[](http://badge.fury.io/rb/rubocop-decko)
|
4
|
+
|
5
|
+
Wagn-specific analysis for your Wagn deck, as an extension to
|
6
|
+
[RuboCop](https://github.com/bbatsov/rubocop). Heavily inspired by [`rubocop-rspec`](https://github.com/nevir/rubocop-rspec) and [`rubocop-cask`](https://github.com/nevir/rubocop-rspec).
|
7
|
+
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Just install the `rubocop-decko` gem
|
12
|
+
|
13
|
+
```bash
|
14
|
+
gem install rubocop-decko
|
15
|
+
```
|
16
|
+
|
17
|
+
or if you use bundler put this in your `Gemfile`
|
18
|
+
|
19
|
+
```
|
20
|
+
gem 'rubocop-decko'
|
21
|
+
```
|
22
|
+
|
23
|
+
|
24
|
+
## Usage
|
25
|
+
|
26
|
+
You need to tell RuboCop to load the Decko extension. There are three ways to do this:
|
27
|
+
|
28
|
+
### RuboCop configuration file
|
29
|
+
|
30
|
+
Put this into your `.rubocop.yml`:
|
31
|
+
|
32
|
+
```
|
33
|
+
require: rubocop-decko
|
34
|
+
```
|
35
|
+
|
36
|
+
Now you can run `rubocop` and it will automatically load the RuboCop Decko cops together with the standard cops.
|
37
|
+
|
38
|
+
### Command line
|
39
|
+
|
40
|
+
```bash
|
41
|
+
rubocop --require rubocop-decko
|
42
|
+
```
|
43
|
+
|
44
|
+
### Rake task
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
RuboCop::RakeTask.new do |task|
|
48
|
+
task.requires << 'rubocop-decko'
|
49
|
+
end
|
50
|
+
```
|
51
|
+
|
52
|
+
|
53
|
+
## The Cops
|
54
|
+
|
55
|
+
All cops are located under [`lib/rubocop/cop/decko`](lib/rubocop/cop/decko), and contain examples/documentation.
|
56
|
+
|
57
|
+
In your `.rubocop.yml`, you may treat the Decko cops just like any other cop. For example:
|
58
|
+
|
59
|
+
```yaml
|
60
|
+
Decko/ViewLength:
|
61
|
+
Description: Avoid views longer than 15 lines of code.
|
62
|
+
Enabled: true
|
63
|
+
CountComments: false
|
64
|
+
Max: 15
|
65
|
+
```
|
66
|
+
|
67
|
+
|
68
|
+
## Contributing
|
69
|
+
|
70
|
+
1. Fork it
|
71
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
72
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
73
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
74
|
+
5. Create new Pull Request
|
75
|
+
|
76
|
+
## License
|
77
|
+
|
78
|
+
`rubocop-cask` is MIT licensed. [See the accompanying file](MIT-LICENSE.md) for
|
79
|
+
the full text.
|
80
|
+
|
data/lib/rubocop-decko.rb
CHANGED
@@ -1,14 +1,19 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
+
require 'pathname'
|
4
|
+
require 'yaml'
|
5
|
+
|
3
6
|
require 'rubocop'
|
4
7
|
|
8
|
+
require 'rubocop/decko'
|
5
9
|
require 'rubocop/decko/version'
|
6
10
|
require 'rubocop/decko/inject'
|
7
11
|
|
8
12
|
RuboCop::Decko::Inject.defaults!
|
9
13
|
|
10
|
-
require 'rubocop/cop/mixin/
|
14
|
+
require 'rubocop/cop/mixin/block_lines'
|
11
15
|
|
12
16
|
# cops
|
13
17
|
require 'rubocop/cop/decko/view_length'
|
14
18
|
require 'rubocop/cop/decko/event_length'
|
19
|
+
require 'rubocop/cop/decko/block_length'
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
module RuboCop
|
3
|
+
module Cop
|
4
|
+
module Metrics
|
5
|
+
# monkeypatch rubocop's block length cop so that it ignores format
|
6
|
+
# blocks.
|
7
|
+
# It doesn't work if I use the same path ("cop/metrics/block_length")
|
8
|
+
# for this.
|
9
|
+
class BlockLength < Cop
|
10
|
+
include BlockLines
|
11
|
+
|
12
|
+
def on_block(node)
|
13
|
+
check_block_length node, except: [:format, :view, :event]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -5,20 +5,18 @@ module RuboCop
|
|
5
5
|
module Decko
|
6
6
|
# Checks that the lines of a view block don't exceed the allowed maximum
|
7
7
|
# @example
|
8
|
-
#
|
8
|
+
# event :some_event, :store do
|
9
9
|
# ...
|
10
10
|
# end
|
11
11
|
class EventLength < Cop
|
12
|
-
include
|
12
|
+
include BlockLines
|
13
13
|
|
14
14
|
def on_block(node)
|
15
|
-
|
16
|
-
_receiver, method_name, _args = *method
|
17
|
-
return unless method_name == :event
|
18
|
-
check_code_length(node, body)
|
15
|
+
check_block_length node, only: :event
|
19
16
|
end
|
20
17
|
|
21
18
|
private
|
19
|
+
|
22
20
|
def message(length, max_length)
|
23
21
|
format('Event has too many lines. [%d/%d]', length, max_length)
|
24
22
|
end
|
@@ -9,13 +9,10 @@ module RuboCop
|
|
9
9
|
# ...
|
10
10
|
# end
|
11
11
|
class ViewLength < Cop
|
12
|
-
include
|
12
|
+
include BlockLines
|
13
13
|
|
14
14
|
def on_block(node)
|
15
|
-
|
16
|
-
_receiver, method_name, _args = *method
|
17
|
-
return unless method_name == :view
|
18
|
-
check_code_length(node, body)
|
15
|
+
check_block_length node, only: :view
|
19
16
|
end
|
20
17
|
|
21
18
|
private
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module BlockLines
|
6
|
+
# Common functionality for checking length of a block.
|
7
|
+
|
8
|
+
include TooManyLines
|
9
|
+
|
10
|
+
def check_block_length(node, opts={})
|
11
|
+
method, args, body = *node
|
12
|
+
require 'pry'
|
13
|
+
_receiver, method_name, _args = *method
|
14
|
+
return if opts[:only] && !Array(opts[:only]).include?(method_name)
|
15
|
+
return if opts[:except] && Array(opts[:except]).include?(method_name)
|
16
|
+
check_code_length node
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module RuboCop
|
2
|
+
# RuboCop Decko project namespace
|
3
|
+
module Decko
|
4
|
+
PROJECT_ROOT = Pathname.new(__dir__).parent.parent.expand_path.freeze
|
5
|
+
CONFIG_DEFAULT = PROJECT_ROOT.join('config', 'default.yml').freeze
|
6
|
+
CONFIG = YAML.load(CONFIG_DEFAULT.read).freeze
|
7
|
+
|
8
|
+
private_constant(:CONFIG_DEFAULT, :PROJECT_ROOT)
|
9
|
+
end
|
10
|
+
end
|
data/lib/rubocop/decko/inject.rb
CHANGED
@@ -7,17 +7,29 @@ module RuboCop
|
|
7
7
|
# Because RuboCop doesn't yet support plugins, we have to monkey patch in a
|
8
8
|
# bit of our configuration.
|
9
9
|
module Inject
|
10
|
-
DEFAULT_FILE = File.expand_path(
|
11
|
-
'../../../../config/default.yml', __FILE__
|
12
|
-
)
|
13
|
-
|
14
10
|
def self.defaults!
|
15
|
-
|
16
|
-
|
17
|
-
config =
|
18
|
-
|
11
|
+
path = CONFIG_DEFAULT.to_s
|
12
|
+
hash = ConfigLoader.send(:load_yaml_configuration, path)
|
13
|
+
config = Config.new(hash, path)
|
14
|
+
puts "configuration from #{path}" if ConfigLoader.debug?
|
15
|
+
config = ConfigLoader.merge_with_default(config, path)
|
19
16
|
ConfigLoader.instance_variable_set(:@default_configuration, config)
|
20
17
|
end
|
21
18
|
end
|
19
|
+
|
20
|
+
# module Inject
|
21
|
+
#
|
22
|
+
# DEFAULT_FILE = File.expand_path(
|
23
|
+
# '../../../../config/default.yml', __FILE__
|
24
|
+
# )
|
25
|
+
#
|
26
|
+
# def self.defaults!
|
27
|
+
# hash = YAML.load_file(DEFAULT_FILE)
|
28
|
+
# puts "configuration from #{DEFAULT_FILE}" if ConfigLoader.debug?
|
29
|
+
# config = ConfigLoader.merge_with_default(hash, DEFAULT_FILE)
|
30
|
+
#
|
31
|
+
# ConfigLoader.instance_variable_set(:@default_configuration, config)
|
32
|
+
# end
|
33
|
+
# end
|
22
34
|
end
|
23
35
|
end
|
data/rubocop-decko.gemspec
CHANGED
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.test_files = spec.files.grep(%r{^spec/})
|
30
30
|
spec.extra_rdoc_files = ['README.md']
|
31
31
|
|
32
|
-
spec.add_development_dependency('rubocop', '~> 0.
|
32
|
+
spec.add_development_dependency('rubocop', '~> 0.45')
|
33
33
|
# spec.add_development_dependency('rake', '~> 10.1')
|
34
34
|
# spec.add_development_dependency('rspec', '~> 3.0')
|
35
35
|
# spec.add_development_dependency('simplecov', '~> 0.8')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-decko
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.2'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Philipp Kuehl
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.45'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.45'
|
27
27
|
description: |2
|
28
28
|
Code style checking for Wagn/Decko files.
|
29
29
|
A plugin for the RuboCop code style enforcing & linting tool.
|
@@ -38,9 +38,11 @@ files:
|
|
38
38
|
- Rakefile
|
39
39
|
- config/default.yml
|
40
40
|
- lib/rubocop-decko.rb
|
41
|
+
- lib/rubocop/cop/decko/block_length.rb
|
41
42
|
- lib/rubocop/cop/decko/event_length.rb
|
42
43
|
- lib/rubocop/cop/decko/view_length.rb
|
43
|
-
- lib/rubocop/cop/mixin/
|
44
|
+
- lib/rubocop/cop/mixin/block_lines.rb
|
45
|
+
- lib/rubocop/decko.rb
|
44
46
|
- lib/rubocop/decko/inject.rb
|
45
47
|
- lib/rubocop/decko/version.rb
|
46
48
|
- rubocop-decko.gemspec
|
@@ -1,27 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module RuboCop
|
4
|
-
module Cop
|
5
|
-
module BlockLength
|
6
|
-
# Common functionality for checking length of a block.
|
7
|
-
include CodeLength
|
8
|
-
|
9
|
-
def check_code_length(node, body)
|
10
|
-
length = code_length(body.loc.expression)
|
11
|
-
return unless length > max_length
|
12
|
-
|
13
|
-
add_offense(node, :expression, message(length, max_length)) do
|
14
|
-
self.max = length
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
private
|
19
|
-
|
20
|
-
def code_length(node)
|
21
|
-
lines = node.source.lines.to_a[1..-2] || []
|
22
|
-
|
23
|
-
lines.count { |line| !irrelevant_line(line) }
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|