rubocop-rake 0.2.0 → 0.3.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8abee9ef7094059a116c1dcb7ef0c36c9494351fd14f5ee57d064b5736318fa4
4
- data.tar.gz: 24e4b728616fb46f871d917712504961b36ee4aed7f993689af1d20812f54e37
3
+ metadata.gz: 43a2bfee062536e5b93f61f3e3be4a2189ab8b694b4511c5b5be945229940607
4
+ data.tar.gz: 041a6a8562c844204db1757bf2503e33b641fa53eda3555cb7befe384dfe7845
5
5
  SHA512:
6
- metadata.gz: 0a47d61558777d3a42b5fc9e1dcc0ed5e12565cbf99fbadeef9a67eb9a9c604797986f52a1897c16c5eed1f7874590e56f916ebc8a0d44831d9c11d53bb1a310
7
- data.tar.gz: eb65d73cbb79e4f1ab59bad336b7e23f236c221ff03cb46dd4418062f91c44fe0341a052334766dc382c195bfc678c6efdaa9a402175018160eb654020d0bba1
6
+ metadata.gz: b4f7183c42528b767447731b7de87b025ba1f7f15f225658b162e00d204c3d5499c612a01d32ad06e41574daf0e6a8412da92f784de032635a412e171fdb3337
7
+ data.tar.gz: 8499dcd7ab87b21c251af73afde006f61832402277fb842eb05f55a5d5bff8a055f0c81c7963b63628ad60a53df442cd03fdf532c0b3707c1fd1bc03433d2ce7
@@ -0,0 +1,41 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ require:
4
+ - rubocop-rake
5
+ - rubocop-rspec
6
+
7
+ AllCops:
8
+ TargetRubyVersion: 2.4
9
+
10
+ Metrics:
11
+ Enabled: false
12
+
13
+ Style/StringLiterals:
14
+ Enabled: false
15
+
16
+ Style/AccessModifierDeclarations:
17
+ EnforcedStyle: inline
18
+
19
+ Style/NumericPredicate:
20
+ Enabled: false
21
+
22
+ Style/UnneededPercentQ:
23
+ Exclude:
24
+ - '*.gemspec'
25
+
26
+ Style/ModuleFunction:
27
+ Enabled: false
28
+
29
+ Style/Documentation:
30
+ Enabled: false
31
+
32
+ Style/PercentLiteralDelimiters:
33
+ Exclude:
34
+ - '*.gemspec'
35
+
36
+ RSpec/ExampleLength:
37
+ Enabled: false
38
+
39
+ Naming/FileName:
40
+ Exclude:
41
+ - 'lib/rubocop-rake.rb'
@@ -0,0 +1,7 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2019-09-18 21:43:54 +0900 using RuboCop version 0.74.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
@@ -12,11 +12,21 @@
12
12
 
13
13
  -->
14
14
 
15
+ ## 0.3.0 (2019-09-25)
16
+
17
+ ### New features
18
+
19
+ * [#6](https://github.com/rubocop-hq/rubocop-rake/issues/6): Add `Rake/ClassDefinitionInTask` cop. ([@pocke][])
20
+
21
+ ### Bug fixes
22
+
23
+ * [#8](https://github.com/rubocop-hq/rubocop-rake/issues/8): Make Rake/Desc to not require description for the default task. ([@pocke][])
24
+
15
25
  ## 0.2.0 (2019-09-17)
16
26
 
17
27
  ### New features
18
28
 
19
- * [#5](https://github.com/pocke/rubocop-rake): Add `Rake/MethodDefinitionInTask`. ([@pocke][])
29
+ * [#5](https://github.com/rubocop-hq/rubocop-rake/pull/5): Add `Rake/MethodDefinitionInTask`. ([@pocke][])
20
30
 
21
31
  ## 0.1.0 (2019-09-04)
22
32
 
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  # Specify your gem's dependencies in rubocop-rake.gemspec
@@ -5,3 +7,4 @@ gemspec
5
7
 
6
8
  gem "rake", "~> 12.0"
7
9
  gem 'rspec'
10
+ gem 'rubocop-rspec'
data/README.md CHANGED
@@ -34,5 +34,5 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
34
34
 
35
35
  ## Contributing
36
36
 
37
- Bug reports and pull requests are welcome on GitHub at https://github.com/pocke/rubocop-rake.
37
+ Bug reports and pull requests are welcome on GitHub at https://github.com/rubocop-hq/rubocop-rake.
38
38
 
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
- task :default => :spec
4
+ task default: %i[rubocop spec]
3
5
 
4
6
  require 'rspec/core/rake_task'
5
7
 
@@ -28,3 +30,8 @@ task :new_cop, [:cop] do |_task, args|
28
30
 
29
31
  puts generator.todo
30
32
  end
33
+
34
+ desc 'Run rubocop'
35
+ task :rubocop do
36
+ sh 'rubocop'
37
+ end
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "bundler/setup"
4
5
  require "rubocop/rake"
@@ -1,3 +1,8 @@
1
+ Rake/ClassDefinitionInTask:
2
+ Description: 'Do not define a class or module in rake task, because it will be defined to the top level.'
3
+ Enabled: true
4
+ VersionAdded: '0.3.0'
5
+
1
6
  Rake/Desc:
2
7
  Description: 'Describe the task with `desc` method.'
3
8
  Enabled: true
@@ -8,4 +8,6 @@ require_relative 'rubocop/rake/inject'
8
8
 
9
9
  RuboCop::Rake::Inject.defaults!
10
10
 
11
+ require_relative 'rubocop/cop/rake/helper/class_definition'
12
+ require_relative 'rubocop/cop/rake/helper/task_definition'
11
13
  require_relative 'rubocop/cop/rake_cops'
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Rake
6
+ # This cop detects class or module definition in a task or namespace,
7
+ # because it is defined to the top level.
8
+ # It is confusing because the scope looks in the task or namespace,
9
+ # but actually it is defined to the top level.
10
+ #
11
+ # @example
12
+ # # bad
13
+ # task :foo do
14
+ # class C
15
+ # end
16
+ # end
17
+ #
18
+ # # bad
19
+ # namespace :foo do
20
+ # module M
21
+ # end
22
+ # end
23
+ #
24
+ # # good - It is also defined to the top level,
25
+ # # but it looks expected behavior.
26
+ # class C
27
+ # end
28
+ # task :foo do
29
+ # end
30
+ #
31
+ class ClassDefinitionInTask < Cop
32
+ MSG = 'Do not define a %<type>s in rake task, because it will be defined to the top level.'
33
+
34
+ def on_class(node)
35
+ return if Helper::ClassDefinition.in_class_definition?(node)
36
+ return unless Helper::TaskDefinition.in_task_or_namespace?(node)
37
+
38
+ add_offense(node)
39
+ end
40
+
41
+ def message(node)
42
+ format(MSG, type: node.type)
43
+ end
44
+
45
+ alias on_module on_class
46
+ end
47
+ end
48
+ end
49
+ end
@@ -7,6 +7,9 @@ module RuboCop
7
7
  # It is useful as a documentation of task. And Rake does not display
8
8
  # task that does not have `desc` by `rake -T`.
9
9
  #
10
+ # Note: This cop does not require description for the default task,
11
+ # because the default task is executed with `rake` without command.
12
+ #
10
13
  # @example
11
14
  # # bad
12
15
  # task :do_something
@@ -25,7 +28,7 @@ module RuboCop
25
28
  # end
26
29
  #
27
30
  class Desc < Cop
28
- MSG = 'Describe the task with `desc` method.'.freeze
31
+ MSG = 'Describe the task with `desc` method.'
29
32
 
30
33
  def_node_matcher :task?, <<~PATTERN
31
34
  (send nil? :task ...)
@@ -34,6 +37,7 @@ module RuboCop
34
37
  def on_send(node)
35
38
  return unless task?(node)
36
39
  return if task_with_desc?(node)
40
+ return if task_name(node) == :default
37
41
 
38
42
  add_offense(node)
39
43
  end
@@ -49,11 +53,29 @@ module RuboCop
49
53
  desc_candidate.send_type? && desc_candidate.method_name == :desc
50
54
  end
51
55
 
56
+ private def task_name(node)
57
+ first_arg = node.arguments[0]
58
+ case first_arg&.type
59
+ when :sym, :str
60
+ return first_arg.value.to_sym
61
+ when :hash
62
+ return nil if first_arg.children.size != 1
63
+
64
+ pair = first_arg.children.first
65
+ key = pair.children.first
66
+ case key.type
67
+ when :sym, :str
68
+ key.value.to_sym
69
+ end
70
+ end
71
+ end
72
+
52
73
  private def parent_and_task(task_node)
53
74
  parent = task_node.parent
54
75
  return nil, task_node unless parent
55
76
  return parent, task_node unless parent.block_type?
56
77
 
78
+ # rubocop:disable Style/GuardClause
57
79
  if parent.children.find_index(task_node) == 0
58
80
  # when task {}
59
81
  return parent.parent, parent
@@ -61,6 +83,7 @@ module RuboCop
61
83
  # when something { task }
62
84
  return parent, task_node
63
85
  end
86
+ # rubocop:enable Style/GuardClause
64
87
  end
65
88
  end
66
89
  end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Rake
6
+ module Helper
7
+ module ClassDefinition
8
+ extend NodePattern::Macros
9
+ extend self
10
+
11
+ def_node_matcher :class_definition?, <<~PATTERN
12
+ {
13
+ class module sclass
14
+ (block
15
+ (send (const {nil? cbase} {:Class :Module}) :new)
16
+ args
17
+ _
18
+ )
19
+ }
20
+ PATTERN
21
+
22
+ def in_class_definition?(node)
23
+ node.each_ancestor(:class, :module, :sclass, :block).any? do |a|
24
+ class_definition?(a)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Rake
6
+ module Helper
7
+ module TaskDefinition
8
+ extend NodePattern::Macros
9
+ extend self
10
+
11
+ def_node_matcher :task_or_namespace?, <<-PATTERN
12
+ (block
13
+ (send _ {:task :namespace} ...)
14
+ args
15
+ _
16
+ )
17
+ PATTERN
18
+
19
+ def in_task_or_namespace?(node)
20
+ node.each_ancestor(:block).any? do |a|
21
+ task_or_namespace?(a)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -31,51 +31,16 @@ module RuboCop
31
31
  # end
32
32
  #
33
33
  class MethodDefinitionInTask < Cop
34
- MSG = 'Do not define a method in rake task, because it will be defined to the top level.'.freeze
35
-
36
- def_node_matcher :bad_method?, <<~PATTERN
37
- (send nil? :bad_method ...)
38
- PATTERN
39
-
40
- def_node_matcher :class_definition?, <<~PATTERN
41
- {
42
- class module sclass
43
- (block
44
- (send (const {nil? cbase} {:Class :Module}) :new)
45
- args
46
- _
47
- )
48
- }
49
- PATTERN
50
-
51
- def_node_matcher :task_or_namespace?, <<-PATTERN
52
- (block
53
- (send _ {:task :namespace} ...)
54
- args
55
- _
56
- )
57
- PATTERN
34
+ MSG = 'Do not define a method in rake task, because it will be defined to the top level.'
58
35
 
59
36
  def on_def(node)
60
- return if in_class_definition?(node)
61
- return unless in_task_or_namespace?(node)
37
+ return if Helper::ClassDefinition.in_class_definition?(node)
38
+ return unless Helper::TaskDefinition.in_task_or_namespace?(node)
62
39
 
63
40
  add_offense(node)
64
41
  end
65
42
 
66
43
  alias on_defs on_def
67
-
68
- private def in_class_definition?(node)
69
- node.each_ancestor(:class, :module, :sclass, :block).any? do |a|
70
- class_definition?(a)
71
- end
72
- end
73
-
74
- private def in_task_or_namespace?(node)
75
- node.each_ancestor(:block).any? do |a|
76
- task_or_namespace?(a)
77
- end
78
- end
79
44
  end
80
45
  end
81
46
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'rake/class_definition_in_task'
3
4
  require_relative 'rake/desc'
4
5
  require_relative 'rake/method_definition_in_task'
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rubocop/rake/version"
2
4
 
3
5
  module RuboCop
6
+ # :nodoc:
4
7
  module Rake
5
8
  class Error < StandardError; end
6
9
 
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RuboCop
2
4
  module Rake
3
- VERSION = "0.2.0"
5
+ VERSION = "0.3.0"
4
6
  end
5
7
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'lib/rubocop/rake/version'
2
4
 
3
5
  Gem::Specification.new do |spec|
@@ -8,7 +10,7 @@ Gem::Specification.new do |spec|
8
10
 
9
11
  spec.summary = %q{A RuboCop plugin for Rake}
10
12
  spec.description = %q{A RuboCop plugin for Rake}
11
- spec.homepage = "https://github.com/pocke/rubocop-rake"
13
+ spec.homepage = "https://github.com/rubocop-hq/rubocop-rake"
12
14
  spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
13
15
  spec.licenses = ['MIT']
14
16
 
@@ -16,11 +18,11 @@ Gem::Specification.new do |spec|
16
18
 
17
19
  spec.metadata["homepage_uri"] = spec.homepage
18
20
  spec.metadata["source_code_uri"] = spec.homepage
19
- spec.metadata["changelog_uri"] = "https://github.com/pocke/rubocop-rake/blob/master/CHANGELOG.md"
21
+ spec.metadata["changelog_uri"] = "https://github.com/rubocop-hq/rubocop-rake/blob/master/CHANGELOG.md"
20
22
 
21
23
  # Specify which files should be added to the gem when it is released.
22
24
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
25
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
26
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
27
  end
26
28
  spec.bindir = "exe"
@@ -29,4 +31,3 @@ Gem::Specification.new do |spec|
29
31
 
30
32
  spec.add_runtime_dependency 'rubocop'
31
33
  end
32
-
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-rake
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masataka Pocke Kuwabara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-17 00:00:00.000000000 Z
11
+ date: 2019-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -33,6 +33,8 @@ extra_rdoc_files: []
33
33
  files:
34
34
  - ".gitignore"
35
35
  - ".rspec"
36
+ - ".rubocop.yml"
37
+ - ".rubocop_todo.yml"
36
38
  - ".travis.yml"
37
39
  - CHANGELOG.md
38
40
  - Gemfile
@@ -43,21 +45,24 @@ files:
43
45
  - bin/setup
44
46
  - config/default.yml
45
47
  - lib/rubocop-rake.rb
48
+ - lib/rubocop/cop/rake/class_definition_in_task.rb
46
49
  - lib/rubocop/cop/rake/desc.rb
50
+ - lib/rubocop/cop/rake/helper/class_definition.rb
51
+ - lib/rubocop/cop/rake/helper/task_definition.rb
47
52
  - lib/rubocop/cop/rake/method_definition_in_task.rb
48
53
  - lib/rubocop/cop/rake_cops.rb
49
54
  - lib/rubocop/rake.rb
50
55
  - lib/rubocop/rake/inject.rb
51
56
  - lib/rubocop/rake/version.rb
52
57
  - rubocop-rake.gemspec
53
- homepage: https://github.com/pocke/rubocop-rake
58
+ homepage: https://github.com/rubocop-hq/rubocop-rake
54
59
  licenses:
55
60
  - MIT
56
61
  metadata:
57
62
  allowed_push_host: https://rubygems.org
58
- homepage_uri: https://github.com/pocke/rubocop-rake
59
- source_code_uri: https://github.com/pocke/rubocop-rake
60
- changelog_uri: https://github.com/pocke/rubocop-rake/blob/master/CHANGELOG.md
63
+ homepage_uri: https://github.com/rubocop-hq/rubocop-rake
64
+ source_code_uri: https://github.com/rubocop-hq/rubocop-rake
65
+ changelog_uri: https://github.com/rubocop-hq/rubocop-rake/blob/master/CHANGELOG.md
61
66
  post_install_message:
62
67
  rdoc_options: []
63
68
  require_paths: