rubocop_challenger 2.0.0.pre4 → 2.0.0.pre5
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/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +1 -1
- data/Gemfile.lock +8 -6
- data/README.md +13 -10
- data/challenger.gemspec +2 -1
- data/lib/rubocop_challenger.rb +1 -0
- data/lib/rubocop_challenger/bundler/command.rb +7 -1
- data/lib/rubocop_challenger/cli.rb +19 -4
- data/lib/rubocop_challenger/go.rb +49 -15
- data/lib/rubocop_challenger/pull_request.rb +27 -11
- data/lib/rubocop_challenger/rubocop/command.rb +10 -2
- data/lib/rubocop_challenger/version.rb +1 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7d1fa4268fdf70c18f0d5e2f0529e40f44932af9722c8b5d3d602711255fcb6
|
4
|
+
data.tar.gz: 3b1fce68b3d66ccfc0c504eccc608f5f02b41d731f027abe97fb78e07c8563ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 229ca155ff15eabf0c94e00645a06ef3d443573952982e623fcb9dec475ace6353dddc0f328c2717d7f856762d942e4bb9225d4e9721647527c2c6365a68e834
|
7
|
+
data.tar.gz: abfb7b4136efe1f930fd3c87aaa9f08ad7f3cdeb7375def8d38e8c4571de9cf22584f486bcbe5f355a35adec37611499c3d58d28e5c04d736fa5bb7e0937a9c8
|
data/.rubocop.yml
CHANGED
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2019-06-
|
3
|
+
# on 2019-06-13 12:10:32 +0900 using RuboCop version 0.71.0.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rubocop_challenger (2.0.0.
|
5
|
-
pr_comet (~> 0.
|
4
|
+
rubocop_challenger (2.0.0.pre5)
|
5
|
+
pr_comet (~> 0.2.0)
|
6
|
+
rainbow
|
6
7
|
rubocop
|
7
8
|
rubocop-rspec
|
8
9
|
thor
|
@@ -17,7 +18,7 @@ GEM
|
|
17
18
|
byebug (11.0.1)
|
18
19
|
coderay (1.1.2)
|
19
20
|
diff-lcs (1.3)
|
20
|
-
docile (1.3.
|
21
|
+
docile (1.3.2)
|
21
22
|
faraday (0.15.4)
|
22
23
|
multipart-post (>= 1.2, < 3)
|
23
24
|
jaro_winkler (1.5.2)
|
@@ -29,8 +30,9 @@ GEM
|
|
29
30
|
parallel (1.17.0)
|
30
31
|
parser (2.6.3.0)
|
31
32
|
ast (~> 2.4.0)
|
32
|
-
pr_comet (0.
|
33
|
+
pr_comet (0.2.0)
|
33
34
|
octokit
|
35
|
+
rainbow
|
34
36
|
pry (0.12.2)
|
35
37
|
coderay (~> 1.1.0)
|
36
38
|
method_source (~> 0.9.0)
|
@@ -46,13 +48,13 @@ GEM
|
|
46
48
|
rspec-mocks (~> 3.8.0)
|
47
49
|
rspec-core (3.8.0)
|
48
50
|
rspec-support (~> 3.8.0)
|
49
|
-
rspec-expectations (3.8.
|
51
|
+
rspec-expectations (3.8.4)
|
50
52
|
diff-lcs (>= 1.2.0, < 2.0)
|
51
53
|
rspec-support (~> 3.8.0)
|
52
54
|
rspec-mocks (3.8.0)
|
53
55
|
diff-lcs (>= 1.2.0, < 2.0)
|
54
56
|
rspec-support (~> 3.8.0)
|
55
|
-
rspec-support (3.8.
|
57
|
+
rspec-support (3.8.2)
|
56
58
|
rspec_junit_formatter (0.4.1)
|
57
59
|
rspec-core (>= 2, < 4, != 2.12.0)
|
58
60
|
rubocop (0.71.0)
|
data/README.md
CHANGED
@@ -109,16 +109,19 @@ Usage:
|
|
109
109
|
rubocop_challenger go --email=EMAIL --name=NAME
|
110
110
|
|
111
111
|
Options:
|
112
|
-
--email=EMAIL
|
113
|
-
--name=NAME
|
114
|
-
f, [--file-path=FILE_PATH]
|
115
|
-
|
116
|
-
t, [--template=TEMPLATE]
|
117
|
-
[--mode=MODE]
|
118
|
-
|
119
|
-
l, [--labels=one two three]
|
120
|
-
|
121
|
-
[--no-create-pr]
|
112
|
+
--email=EMAIL # The Pull Request committer email
|
113
|
+
--name=NAME # The Pull Request committer name
|
114
|
+
f, [--file-path=FILE_PATH] # Set your ".rubocop_todo.yml" path
|
115
|
+
# Default: .rubocop_todo.yml
|
116
|
+
t, [--template=TEMPLATE] # A Pull Request template `erb` file path.You can use variable that `title`, `rubydoc_url`, `description` and `examples` into the erb file.
|
117
|
+
[--mode=MODE] # Mode to select deletion target. You can choice "most_occurrence", "least_occurrence", or "random"
|
118
|
+
# Default: most_occurrence
|
119
|
+
l, [--labels=one two three] # Label to give to Pull Request
|
120
|
+
# Default: ["rubocop challenge"]
|
121
|
+
[--no-create-pr] # No create a pull request (for testing)
|
122
|
+
[--exclude-limit=N] # For how many exclude properties when creating the .rubocop_todo.yml
|
123
|
+
[--auto-gen-timestamp], [--no-auto-gen-timestamp] # Include the date and time when creating the .rubocop_todo.yml
|
124
|
+
# Default: true
|
122
125
|
|
123
126
|
Run `$ rubocop --auto-correct` and create a PR to GitHub repo
|
124
127
|
```
|
data/challenger.gemspec
CHANGED
@@ -22,7 +22,8 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ['lib']
|
24
24
|
|
25
|
-
spec.add_runtime_dependency 'pr_comet', '~> 0.
|
25
|
+
spec.add_runtime_dependency 'pr_comet', '~> 0.2.0'
|
26
|
+
spec.add_runtime_dependency 'rainbow'
|
26
27
|
spec.add_runtime_dependency 'rubocop'
|
27
28
|
spec.add_runtime_dependency 'rubocop-rspec'
|
28
29
|
spec.add_runtime_dependency 'thor'
|
data/lib/rubocop_challenger.rb
CHANGED
@@ -6,10 +6,16 @@ module RubocopChallenger
|
|
6
6
|
class Command
|
7
7
|
include PrComet::CommandLine
|
8
8
|
|
9
|
+
# Executes `$ bundle update` which excludes not installed gems
|
10
|
+
#
|
11
|
+
# @param gem_names [Array<String>] The target gem names
|
9
12
|
def update(*gem_names)
|
10
|
-
run('update', *gem_names)
|
13
|
+
run('update', *gem_names.select(&method(:installed?)))
|
11
14
|
end
|
12
15
|
|
16
|
+
# Checks the gem is installed
|
17
|
+
#
|
18
|
+
# @return [Boolean] Returns true if installed
|
13
19
|
def installed?(gem_name)
|
14
20
|
!run('list', '|', 'grep', gem_name).empty?
|
15
21
|
end
|
@@ -5,8 +5,6 @@ require 'thor'
|
|
5
5
|
module RubocopChallenger
|
6
6
|
# To define CLI commands
|
7
7
|
class CLI < Thor
|
8
|
-
include PrComet::CommandLine
|
9
|
-
|
10
8
|
desc 'go', 'Run `$ rubocop --auto-correct` and create a PR to GitHub repo'
|
11
9
|
option :email,
|
12
10
|
required: true,
|
@@ -37,16 +35,33 @@ module RubocopChallenger
|
|
37
35
|
default: ['rubocop challenge'],
|
38
36
|
aliases: :l,
|
39
37
|
desc: 'Label to give to Pull Request'
|
38
|
+
option :project_column_name,
|
39
|
+
type: :string,
|
40
|
+
desc: 'A project column name. You can add the created PR to the ' \
|
41
|
+
'GitHub project'
|
42
|
+
option :project_id,
|
43
|
+
type: :numeric,
|
44
|
+
desc: 'A target project ID. If does not supplied, this method ' \
|
45
|
+
'will find a project which associated the repository. When ' \
|
46
|
+
'the repository has multiple projects, you should supply this.'
|
40
47
|
option :'no-create-pr',
|
41
48
|
type: :boolean,
|
42
49
|
default: false,
|
43
50
|
desc: 'No create a pull request (for testing)'
|
51
|
+
option :'exclude-limit',
|
52
|
+
type: :numeric,
|
53
|
+
desc: 'For how many exclude properties when creating the ' \
|
54
|
+
'.rubocop_todo.yml'
|
55
|
+
option :'auto-gen-timestamp',
|
56
|
+
type: :boolean,
|
57
|
+
default: true,
|
58
|
+
desc: 'Include the date and time when creating the .rubocop_todo.yml'
|
44
59
|
def go
|
45
60
|
Go.new(options).exec
|
46
61
|
rescue Errors::NoAutoCorrectableRule => e
|
47
|
-
|
62
|
+
puts Rainbow(e.message).yellow
|
48
63
|
rescue StandardError => e
|
49
|
-
|
64
|
+
puts Rainbow(e.message).red
|
50
65
|
exit_process!
|
51
66
|
end
|
52
67
|
|
@@ -3,17 +3,31 @@
|
|
3
3
|
module RubocopChallenger
|
4
4
|
# Executes Rubocop Challenge flow
|
5
5
|
class Go
|
6
|
-
|
7
|
-
|
8
|
-
# @
|
6
|
+
# @param options [Hash]
|
7
|
+
# Options for the rubocop challenge
|
8
|
+
# @option exclude-limit [Integer]
|
9
|
+
# For how many exclude properties when creating the ".rubocop_todo.yml"
|
10
|
+
# @option auto-gen-timestamp [Boolean]
|
11
|
+
# Include the date and time when creating the ".rubocop_todo.yml"
|
12
|
+
# @option name [String]
|
13
|
+
# The author name which use at the git commit
|
14
|
+
# @option email [String]
|
15
|
+
# The email address which use at the git commit
|
16
|
+
# @option labels [Array<String>]
|
17
|
+
# Will create a pull request with the labels
|
18
|
+
# @option no-create-pr [Boolean]
|
19
|
+
# Does not create a pull request when given `true`
|
20
|
+
# @option project_column_name [String]
|
21
|
+
# A project column name. You can add the created PR to the GitHub project
|
22
|
+
# @option project_id [Integer]
|
23
|
+
# A target project ID. If does not supplied, this method will find a
|
24
|
+
# project which associated the repository. When the repository has
|
25
|
+
# multiple projects, you should supply this.
|
9
26
|
def initialize(options)
|
10
27
|
@options = options
|
11
|
-
@
|
12
|
-
|
13
|
-
|
14
|
-
options[:labels],
|
15
|
-
options[:'no-create-pr']
|
16
|
-
)
|
28
|
+
@exclude_limit = options[:'exclude-limit']
|
29
|
+
@auto_gen_timestamp = options[:'auto-gen-timestamp']
|
30
|
+
@pull_request = PullRequest.new(extract_pull_request_options(options))
|
17
31
|
end
|
18
32
|
|
19
33
|
# Executes Rubocop Challenge flow
|
@@ -31,13 +45,31 @@ module RubocopChallenger
|
|
31
45
|
|
32
46
|
private
|
33
47
|
|
34
|
-
attr_reader :options, :pull_request
|
48
|
+
attr_reader :options, :pull_request, :exclude_limit, :auto_gen_timestamp
|
49
|
+
|
50
|
+
# Extracts options for the PullRequest class
|
51
|
+
#
|
52
|
+
# @param options [Hash] The target options
|
53
|
+
# @return [Hash] Options for the PullRequest class
|
54
|
+
def extract_pull_request_options(options)
|
55
|
+
{
|
56
|
+
user_name: options[:name],
|
57
|
+
user_email: options[:email],
|
58
|
+
labels: options[:labels],
|
59
|
+
dry_run: options[:'no-create-pr'],
|
60
|
+
project_column_name: options[:project_column_name],
|
61
|
+
project_id: options[:project_id]
|
62
|
+
}
|
63
|
+
end
|
35
64
|
|
65
|
+
# Executes `$ bundle update` for the rubocop and the associated gems
|
36
66
|
def update_rubocop!
|
37
67
|
bundler = Bundler::Command.new
|
38
68
|
pull_request.commit! ':police_car: $ bundle update rubocop' do
|
39
|
-
bundler.update 'rubocop'
|
40
|
-
|
69
|
+
bundler.update 'rubocop',
|
70
|
+
'rubocop-performance',
|
71
|
+
'rubocop-rails',
|
72
|
+
'rubocop-rspec'
|
41
73
|
end
|
42
74
|
end
|
43
75
|
|
@@ -49,7 +81,10 @@ module RubocopChallenger
|
|
49
81
|
def regenerate_rubocop_todo!
|
50
82
|
before_version = scan_rubocop_version_in_rubocop_todo_file
|
51
83
|
pull_request.commit! ':police_car: regenerate rubocop todo' do
|
52
|
-
Rubocop::Command.new.auto_gen_config
|
84
|
+
Rubocop::Command.new.auto_gen_config(
|
85
|
+
exclude_limit: exclude_limit,
|
86
|
+
auto_gen_timestamp: auto_gen_timestamp
|
87
|
+
)
|
53
88
|
end
|
54
89
|
after_version = scan_rubocop_version_in_rubocop_todo_file
|
55
90
|
|
@@ -126,8 +161,7 @@ module RubocopChallenger
|
|
126
161
|
config_editor.add_ignore(rule)
|
127
162
|
config_editor.save
|
128
163
|
end
|
129
|
-
|
130
|
-
PrComet::CommandLine::YELLOW
|
164
|
+
puts Rainbow(DESCRIPTION_THAT_CHALLENGE_IS_INCOMPLETE).yellow
|
131
165
|
end
|
132
166
|
|
133
167
|
# Checks the challenge result. If the challenge is successed, the rule
|
@@ -7,19 +7,29 @@ module RubocopChallenger
|
|
7
7
|
# The author name which use at the git commit
|
8
8
|
# @param user_email [String]
|
9
9
|
# The email address which use at the git commit
|
10
|
-
# @param
|
10
|
+
# @param options [Hash]
|
11
|
+
# Optional parameters
|
12
|
+
# @option labels [Array<String>]
|
11
13
|
# Will create a pull request with the labels
|
12
|
-
# @
|
14
|
+
# @option dry_run [Boolean]
|
13
15
|
# Does not create a pull request when given `true`
|
14
|
-
|
16
|
+
# @option project_column_name [String]
|
17
|
+
# A project column name. You can add the created PR to the GitHub project
|
18
|
+
# @option project_id [Integer]
|
19
|
+
# A target project ID. If does not supplied, this method will find a
|
20
|
+
# project which associated the repository. When the repository has
|
21
|
+
# multiple projects, you should supply this.
|
22
|
+
def initialize(user_name:, user_email:, **options)
|
15
23
|
@pr_comet = PrComet.new(
|
16
24
|
base: 'master',
|
17
25
|
branch: "rubocop-challenge/#{timestamp}",
|
18
26
|
user_name: user_name,
|
19
27
|
user_email: user_email
|
20
28
|
)
|
21
|
-
@labels = labels
|
22
|
-
@dry_run = dry_run
|
29
|
+
@labels = options[:labels]
|
30
|
+
@dry_run = options[:dry_run]
|
31
|
+
@project_column_name = options[:project_column_name]
|
32
|
+
@project_id = options[:project_id]
|
23
33
|
end
|
24
34
|
|
25
35
|
# Add and commit local files to the pull request
|
@@ -42,8 +52,7 @@ module RubocopChallenger
|
|
42
52
|
def create_rubocop_challenge_pr!(rule, template_file_path = nil)
|
43
53
|
create_pull_request!(
|
44
54
|
title: "#{rule.title}-#{timestamp}",
|
45
|
-
body: Github::PrTemplate.new(rule, template_file_path).generate
|
46
|
-
labels: labels
|
55
|
+
body: Github::PrTemplate.new(rule, template_file_path).generate
|
47
56
|
)
|
48
57
|
end
|
49
58
|
|
@@ -61,18 +70,25 @@ module RubocopChallenger
|
|
61
70
|
def create_regenerate_todo_pr!(before_version, after_version)
|
62
71
|
create_pull_request!(
|
63
72
|
title: "Re-generate .rubocop_todo.yml with RuboCop v#{after_version}",
|
64
|
-
body: generate_pull_request_body(before_version, after_version)
|
65
|
-
labels: labels
|
73
|
+
body: generate_pull_request_body(before_version, after_version)
|
66
74
|
)
|
67
75
|
end
|
68
76
|
|
69
77
|
private
|
70
78
|
|
71
|
-
attr_reader :pr_comet, :labels, :dry_run
|
79
|
+
attr_reader :pr_comet, :labels, :dry_run, :project_column_name, :project_id
|
72
80
|
|
73
81
|
# Create a PR with description of what modification were made.
|
82
|
+
#
|
83
|
+
# @params pr_comet_options [Hash]
|
74
84
|
def create_pull_request!(pr_comet_options)
|
75
|
-
|
85
|
+
options = {
|
86
|
+
labels: labels,
|
87
|
+
project_column_name: project_column_name,
|
88
|
+
project_id: project_id
|
89
|
+
}.merge(pr_comet_options)
|
90
|
+
|
91
|
+
pr_comet.create!(options) unless dry_run
|
76
92
|
end
|
77
93
|
|
78
94
|
# @param before_version [String]
|
@@ -6,12 +6,20 @@ module RubocopChallenger
|
|
6
6
|
class Command
|
7
7
|
include PrComet::CommandLine
|
8
8
|
|
9
|
+
# Executes auto correction
|
9
10
|
def auto_correct
|
10
11
|
run('--auto-correct')
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
-
|
14
|
+
# Generates `.rubocop_todo.yml`
|
15
|
+
#
|
16
|
+
# @param exclude_limit [Integer] default: nil
|
17
|
+
# @param auto_gen_timestamp [Boolean] default: true
|
18
|
+
def auto_gen_config(exclude_limit: nil, auto_gen_timestamp: true)
|
19
|
+
commands = ['--auto-gen-config']
|
20
|
+
commands << "--exclude-limit #{exclude_limit}" if exclude_limit
|
21
|
+
commands << '--no-auto-gen-timestamp' unless auto_gen_timestamp
|
22
|
+
run(*commands)
|
15
23
|
end
|
16
24
|
|
17
25
|
private
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop_challenger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.pre5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ryosuke_sato
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pr_comet
|
@@ -16,14 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.2.0
|
20
20
|
type: :runtime
|
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.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rainbow
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: rubocop
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|