rubocop-mirego 0.0.3
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 +7 -0
- data/.rubocop.yml +72 -0
- data/.travis.yml +13 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +52 -0
- data/README.md +1 -0
- data/config/default.yml +5 -0
- data/lib/rubocop-mirego.rb +9 -0
- data/lib/rubocop/cop/mirego/explicit_return_value.rb +42 -0
- data/lib/rubocop/cop/mirego/receive_counts.rb +38 -0
- data/lib/rubocop/mirego/inject.rb +16 -0
- data/lib/rubocop/mirego/version.rb +5 -0
- data/rubocop-mirego.gemspec +27 -0
- data/spec/rubocop/cop/mirego/explicit_return_value_spec.rb +43 -0
- data/spec/rubocop/cop/mirego/receive_counts_spec.rb +28 -0
- data/spec/spec_helper.rb +18 -0
- metadata +138 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 092aa7b1f465b752fe8c6416f871767fb643f3ac
|
4
|
+
data.tar.gz: b836c8a3674b77bf3be615b4cb4016ff13c7900b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e2f3a991ac5820e2a8a46fe545337688bc7f53099fd596584da84a736dc3e83c22493c686701c96948aba823d652e0b1732e3409443db120161ddc5a86aa7fe3
|
7
|
+
data.tar.gz: faf7cfb1f81200f7b2d24b12af3e121d5fef1b9b7e4d9ec2ea8d864cffb5592b1797a3b7428ed47b67aa30e8b1a413324fddc2149f653b0173ba37d32dee7b4e
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
require: rubocop-rspec
|
2
|
+
|
3
|
+
AllCops:
|
4
|
+
TargetRubyVersion: 2.1
|
5
|
+
|
6
|
+
Documentation:
|
7
|
+
Enabled: false
|
8
|
+
|
9
|
+
Encoding:
|
10
|
+
Enabled: false
|
11
|
+
|
12
|
+
LineLength:
|
13
|
+
Max: 200
|
14
|
+
|
15
|
+
AccessModifierIndentation:
|
16
|
+
EnforcedStyle: outdent
|
17
|
+
|
18
|
+
IfUnlessModifier:
|
19
|
+
Enabled: false
|
20
|
+
|
21
|
+
CaseIndentation:
|
22
|
+
IndentWhenRelativeTo: end
|
23
|
+
IndentOneStep: true
|
24
|
+
|
25
|
+
MethodLength:
|
26
|
+
CountComments: false
|
27
|
+
Max: 20
|
28
|
+
|
29
|
+
SignalException:
|
30
|
+
Enabled: false
|
31
|
+
|
32
|
+
ColonMethodCall:
|
33
|
+
Enabled: false
|
34
|
+
|
35
|
+
AsciiComments:
|
36
|
+
Enabled: false
|
37
|
+
|
38
|
+
RegexpLiteral:
|
39
|
+
Enabled: false
|
40
|
+
|
41
|
+
AssignmentInCondition:
|
42
|
+
Enabled: false
|
43
|
+
|
44
|
+
ParameterLists:
|
45
|
+
CountKeywordArgs: false
|
46
|
+
|
47
|
+
SingleLineBlockParams:
|
48
|
+
Methods:
|
49
|
+
- reduce:
|
50
|
+
- memo
|
51
|
+
- item
|
52
|
+
|
53
|
+
MethodCalledOnDoEndBlock:
|
54
|
+
Enabled: true
|
55
|
+
|
56
|
+
Metrics/AbcSize:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
Style/CollectionMethods:
|
60
|
+
Enabled: true
|
61
|
+
|
62
|
+
Style/SymbolArray:
|
63
|
+
Enabled: true
|
64
|
+
|
65
|
+
Style/ExtraSpacing:
|
66
|
+
Enabled: true
|
67
|
+
|
68
|
+
RSpec/DescribedClass:
|
69
|
+
Enabled: false
|
70
|
+
|
71
|
+
Style/FileName:
|
72
|
+
Enabled: false
|
data/.travis.yml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Use Travis container-based infrastructure
|
2
|
+
sudo: false
|
3
|
+
|
4
|
+
# Ruby baby!
|
5
|
+
language: 'ruby'
|
6
|
+
|
7
|
+
# Only build on our Ruby version
|
8
|
+
rvm:
|
9
|
+
- '2.3.0'
|
10
|
+
|
11
|
+
script:
|
12
|
+
- 'echo "Checking code style" && bundle exec phare'
|
13
|
+
- 'echo "Running tests" && bundle exec rspec'
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rubocop-mirego (0.0.2)
|
5
|
+
rubocop (= 0.39.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
ast (2.2.0)
|
11
|
+
diff-lcs (1.2.5)
|
12
|
+
parser (2.3.0.7)
|
13
|
+
ast (~> 2.2)
|
14
|
+
phare (0.7.1)
|
15
|
+
powerpack (0.1.1)
|
16
|
+
rainbow (2.1.0)
|
17
|
+
rspec (3.4.0)
|
18
|
+
rspec-core (~> 3.4.0)
|
19
|
+
rspec-expectations (~> 3.4.0)
|
20
|
+
rspec-mocks (~> 3.4.0)
|
21
|
+
rspec-core (3.4.4)
|
22
|
+
rspec-support (~> 3.4.0)
|
23
|
+
rspec-expectations (3.4.0)
|
24
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
25
|
+
rspec-support (~> 3.4.0)
|
26
|
+
rspec-mocks (3.4.1)
|
27
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
28
|
+
rspec-support (~> 3.4.0)
|
29
|
+
rspec-support (3.4.1)
|
30
|
+
rubocop (0.39.0)
|
31
|
+
parser (>= 2.3.0.7, < 3.0)
|
32
|
+
powerpack (~> 0.1)
|
33
|
+
rainbow (>= 1.99.1, < 3.0)
|
34
|
+
ruby-progressbar (~> 1.7)
|
35
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
36
|
+
rubocop-rspec (1.4.1)
|
37
|
+
rubocop (= 0.39.0)
|
38
|
+
ruby-progressbar (1.7.5)
|
39
|
+
unicode-display_width (1.0.3)
|
40
|
+
|
41
|
+
PLATFORMS
|
42
|
+
ruby
|
43
|
+
|
44
|
+
DEPENDENCIES
|
45
|
+
bundler (~> 1.3)
|
46
|
+
phare (~> 0.7)
|
47
|
+
rspec (~> 3.4)
|
48
|
+
rubocop-mirego!
|
49
|
+
rubocop-rspec (~> 1.4, >= 1.4.1)
|
50
|
+
|
51
|
+
BUNDLED WITH
|
52
|
+
1.11.2
|
data/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
## Rubocop-mirego
|
data/config/default.yml
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module RuboCop
|
2
|
+
module Cop
|
3
|
+
module Mirego
|
4
|
+
class ExplicitReturnValue < Cop
|
5
|
+
MESSAGE = 'Always specify a value with `return`'.freeze
|
6
|
+
|
7
|
+
def on_def(node)
|
8
|
+
_, _, body = *node
|
9
|
+
check(node: body)
|
10
|
+
end
|
11
|
+
|
12
|
+
def on_defs(node)
|
13
|
+
_, _, _, body = *node
|
14
|
+
check(node: body)
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def check(node:)
|
20
|
+
expressions = *node
|
21
|
+
return nil unless node
|
22
|
+
|
23
|
+
if return_node_type(node: node)
|
24
|
+
check_return_node(node: node, children: node.children)
|
25
|
+
elsif expressions.last && return_node_type(node: expressions.last)
|
26
|
+
check_return_node(node: node, children: expressions.last.to_a)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def check_return_node(node:, children:)
|
31
|
+
return nil unless children.empty?
|
32
|
+
|
33
|
+
add_offense(node, :expression, MESSAGE)
|
34
|
+
end
|
35
|
+
|
36
|
+
def return_node_type(node:)
|
37
|
+
node.respond_to?(:type) && node.type == :return
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module RuboCop
|
2
|
+
module Cop
|
3
|
+
module Mirego
|
4
|
+
class ReceiveCounts < Cop
|
5
|
+
MESSAGE = 'Always specify a receive count with `receive`'.freeze
|
6
|
+
RECEIVE_COUNTS_METHODS = %i(once twice exactly at_least at_most).freeze
|
7
|
+
|
8
|
+
def on_send(node)
|
9
|
+
receiver, method_name, *args = *node
|
10
|
+
return nil unless method_name == :to
|
11
|
+
return nil if receiver.nil? || receiver.to_a[1] != :expect
|
12
|
+
|
13
|
+
methods_name = recursive_methods_name(nodes: args)
|
14
|
+
return nil unless methods_name.include? :receive
|
15
|
+
return nil unless (methods_name & RECEIVE_COUNTS_METHODS).empty?
|
16
|
+
|
17
|
+
add_offense(node, :expression, MESSAGE)
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def recursive_methods_name(nodes:)
|
23
|
+
methods_name = []
|
24
|
+
nodes.each do |node|
|
25
|
+
methods_name << node.children[1]
|
26
|
+
|
27
|
+
until node.children[0].nil?
|
28
|
+
node = node.children[0]
|
29
|
+
methods_name << node.children[1]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
methods_name
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module RuboCop
|
3
|
+
module Mirego
|
4
|
+
module Inject
|
5
|
+
DEFAULT_FILE = File.expand_path('../../../../config/default.yml', __FILE__).freeze
|
6
|
+
|
7
|
+
def self.defaults!
|
8
|
+
path = File.absolute_path(DEFAULT_FILE)
|
9
|
+
hash = ConfigLoader.send(:load_yaml_configuration, path)
|
10
|
+
config = Config.new(hash, path)
|
11
|
+
config = ConfigLoader.merge_with_default(config, path)
|
12
|
+
ConfigLoader.instance_variable_set(:@default_configuration, config)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rubocop/mirego/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'rubocop-mirego'
|
8
|
+
spec.version = RuboCop::Mirego::VERSION
|
9
|
+
spec.authors = ['Jean-François Chaput']
|
10
|
+
spec.email = ['jfchaput@mirego.com']
|
11
|
+
spec.description = 'Custom cops for Mirego.'
|
12
|
+
spec.summary = spec.description
|
13
|
+
spec.homepage = 'https://github.com/mirego/rubocop-mirego'
|
14
|
+
spec.license = 'BSD 3-Clause'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($RS)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_runtime_dependency 'rubocop', '0.39.0'
|
22
|
+
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
24
|
+
spec.add_development_dependency 'rspec', '~> 3.4'
|
25
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 1.4', '>= 1.4.1'
|
26
|
+
spec.add_development_dependency 'phare', '~> 0.7'
|
27
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RuboCop::Cop::Mirego::ExplicitReturnValue do
|
4
|
+
let(:cop) { RuboCop::Cop::Mirego::ExplicitReturnValue.new }
|
5
|
+
|
6
|
+
before { inspect_source(cop, source) }
|
7
|
+
|
8
|
+
describe 'with a return with a value' do
|
9
|
+
let(:source) { 'def test; return nil; end' }
|
10
|
+
|
11
|
+
it { expect(cop.offenses.size).to eql(0) }
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'with a return with a value with a conditional' do
|
15
|
+
let(:source) { 'def test; return nil unless bool; end' }
|
16
|
+
|
17
|
+
it { expect(cop.offenses.size).to eql(0) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'with a return missing a value' do
|
21
|
+
let(:source) { 'def test; return; end' }
|
22
|
+
|
23
|
+
specify do
|
24
|
+
expect(cop.offenses.size).to eql(1)
|
25
|
+
expect(cop.offenses.first.cop_name).to eql('Mirego/ExplicitReturnValue')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'with a return missing a value with a conditional' do
|
30
|
+
let(:source) { 'def test; return unless bool; end' }
|
31
|
+
|
32
|
+
specify do
|
33
|
+
expect(cop.offenses.size).to eql(1)
|
34
|
+
expect(cop.offenses.first.cop_name).to eql('Mirego/ExplicitReturnValue')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'with a implicit return' do
|
39
|
+
let(:source) { 'def test; test; end' }
|
40
|
+
|
41
|
+
it { expect(cop.offenses.size).to eql(0) }
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RuboCop::Cop::Mirego::ReceiveCounts do
|
4
|
+
let(:cop) { RuboCop::Cop::Mirego::ReceiveCounts.new }
|
5
|
+
|
6
|
+
before { inspect_source(cop, source) }
|
7
|
+
|
8
|
+
describe 'with a receive having a count' do
|
9
|
+
let(:source) { 'expect(object).to receive(:test).once' }
|
10
|
+
|
11
|
+
it { expect(cop.offenses.size).to eql(0) }
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'with an allow' do
|
15
|
+
let(:source) { 'allow(object).to receive(:test)' }
|
16
|
+
|
17
|
+
it { expect(cop.offenses.size).to eql(0) }
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'with a receive missing a count' do
|
21
|
+
let(:source) { 'expect(object).to receive(:test)' }
|
22
|
+
|
23
|
+
specify do
|
24
|
+
expect(cop.offenses.size).to eql(1)
|
25
|
+
expect(cop.offenses.first.cop_name).to eql('Mirego/ReceiveCounts')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubocop'
|
2
|
+
|
3
|
+
rubocop_path = Bundler.rubygems.find_name('rubocop').first.full_gem_path
|
4
|
+
require "#{rubocop_path}/spec/support/cop_helper"
|
5
|
+
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
7
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
8
|
+
require 'rubocop-mirego'
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
# Disable `should` syntax
|
12
|
+
config.expect_with :rspec do |c|
|
13
|
+
c.syntax = :expect
|
14
|
+
end
|
15
|
+
|
16
|
+
# Run specs in random order to surface order dependencies
|
17
|
+
config.order = 'random'
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubocop-mirego
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jean-François Chaput
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-05-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rubocop
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.39.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.39.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
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.4'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop-rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.4'
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 1.4.1
|
65
|
+
type: :development
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - "~>"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '1.4'
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.4.1
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: phare
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - "~>"
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0.7'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - "~>"
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0.7'
|
89
|
+
description: Custom cops for Mirego.
|
90
|
+
email:
|
91
|
+
- jfchaput@mirego.com
|
92
|
+
executables: []
|
93
|
+
extensions: []
|
94
|
+
extra_rdoc_files: []
|
95
|
+
files:
|
96
|
+
- ".rubocop.yml"
|
97
|
+
- ".travis.yml"
|
98
|
+
- Gemfile
|
99
|
+
- Gemfile.lock
|
100
|
+
- README.md
|
101
|
+
- config/default.yml
|
102
|
+
- lib/rubocop-mirego.rb
|
103
|
+
- lib/rubocop/cop/mirego/explicit_return_value.rb
|
104
|
+
- lib/rubocop/cop/mirego/receive_counts.rb
|
105
|
+
- lib/rubocop/mirego/inject.rb
|
106
|
+
- lib/rubocop/mirego/version.rb
|
107
|
+
- rubocop-mirego.gemspec
|
108
|
+
- spec/rubocop/cop/mirego/explicit_return_value_spec.rb
|
109
|
+
- spec/rubocop/cop/mirego/receive_counts_spec.rb
|
110
|
+
- spec/spec_helper.rb
|
111
|
+
homepage: https://github.com/mirego/rubocop-mirego
|
112
|
+
licenses:
|
113
|
+
- BSD 3-Clause
|
114
|
+
metadata: {}
|
115
|
+
post_install_message:
|
116
|
+
rdoc_options: []
|
117
|
+
require_paths:
|
118
|
+
- lib
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
requirements: []
|
130
|
+
rubyforge_project:
|
131
|
+
rubygems_version: 2.5.1
|
132
|
+
signing_key:
|
133
|
+
specification_version: 4
|
134
|
+
summary: Custom cops for Mirego.
|
135
|
+
test_files:
|
136
|
+
- spec/rubocop/cop/mirego/explicit_return_value_spec.rb
|
137
|
+
- spec/rubocop/cop/mirego/receive_counts_spec.rb
|
138
|
+
- spec/spec_helper.rb
|