rubocop-decko 0.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/rubocop-decko.svg)](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
|