rubocop-oneoff_codemod 0.0.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3b4ac58f9a620b41b258dbe693788c23ea56e3247fc5a0639af1eb39c33f2009
4
- data.tar.gz: dbc5255bf3aa411163ddd2401ad7628d025263da307d1cb8d08ca9e860b975e0
3
+ metadata.gz: 81bf98f0675cd046786de15ab60f0c0e9d9c9171dadca788e863e366b58c4327
4
+ data.tar.gz: b59a62f0da18ef1bd0d8caa57d9440fb0eadc7d44d5063ccea33ecfd9b31100e
5
5
  SHA512:
6
- metadata.gz: 28f7b9e3821fc2efdf61302f37e670370d360e5da558329f5ce8e8969cbbba3fe8225e7aac1a04b89c025e438376391698d97939562175c383cffe16464bb381
7
- data.tar.gz: d1f7475a57ecf270d1a1f6219d4eb8f4c7ded2ab520b9ee134d913a49f8f628b2fb4ba8c4dced29365d94a5a2b30fd3c4e70f86987cea693a0a49a13ebe09642
6
+ metadata.gz: b1dd632033a08bc9e9fef6b3f8d8b70c2df1f97ecae979b2f2518c5a7407426ab611869ff6532cd4fbf5a61a0ca0aca710f2f7ae48f4f7376fbc2361e410312e
7
+ data.tar.gz: 2c4b31f59f1f2d92d5800bd6577f95dd9e1c0e657c60fd9df242c94128541140629009b01a37f7314e83c7fc8536cd04d646aa6e9ab76b355c209e47d5697b9d
data/.rubocop.yml CHANGED
@@ -1,9 +1,22 @@
1
1
  AllCops:
2
2
  TargetRubyVersion: 3.1
3
3
  NewCops: enable
4
+ SuggestExtensions: false
4
5
 
5
6
  Style/StringLiterals:
6
7
  EnforcedStyle: double_quotes
7
8
 
8
9
  Style/StringLiteralsInInterpolation:
9
10
  EnforcedStyle: double_quotes
11
+
12
+ Metrics/AbcSize:
13
+ Enabled: false
14
+
15
+ Metrics/CyclomaticComplexity:
16
+ Enabled: false
17
+
18
+ Metrics/MethodLength:
19
+ Enabled: false
20
+
21
+ Metrics/PerceivedComplexity:
22
+ Enabled: false
@@ -0,0 +1 @@
1
+ # It's still empty for now
@@ -3,8 +3,8 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Codemod
6
- # Command
7
- class Command < Base
6
+ # KeepUnique
7
+ class KeepUnique < Base
8
8
  extend AutoCorrector
9
9
  include IgnoredNode
10
10
 
@@ -17,7 +17,7 @@ module RuboCop
17
17
 
18
18
  def on_new_investigation
19
19
  processed_source.comments.each do |comment|
20
- next unless comment.text =~ /@keep-unique/
20
+ next unless comment.text == "# @keep-unique"
21
21
 
22
22
  @commands[comment.location.line] = :keep_unique
23
23
 
@@ -28,16 +28,35 @@ module RuboCop
28
28
  end
29
29
 
30
30
  def on_array(node)
31
- # Parser::AST::Node.location.line で行番号が取れる
32
- if @commands[node.location.line - 1] == :keep_unique
33
- add_offense(node) do |corrector|
34
- next if part_of_ignored_node?(node)
35
-
36
- elements = node.values
37
- values = elements.map(&:source)
38
- uniq_values = values.uniq
39
- corrector.replace(node, "[#{uniq_values.join(", ")}]")
31
+ return unless @commands[node.location.line - 1] == :keep_unique
32
+ return unless node.loc.begin.source == "[" || node.loc.begin.source.start_with?("%w")
33
+
34
+ add_offense(node) do |corrector|
35
+ next if part_of_ignored_node?(node)
36
+
37
+ indent = " " * node.values.first.loc.column
38
+ if node.loc.begin.source == "["
39
+ separator = ", "
40
+ line_separator = ",\n#{indent}"
41
+ else
42
+ separator = " "
43
+ line_separator = "\n#{indent}"
40
44
  end
45
+
46
+ content = []
47
+ content << node.loc.begin.source
48
+ content << processed_source.raw_source[node.loc.begin.end_pos..(node.values.first.loc.expression.begin_pos - 1)] # rubocop:disable Layout/LineLength
49
+
50
+ acc = node.values.uniq(&:source).each_with_object([]) do |v_node, acc|
51
+ acc << [] if acc.last&.last&.loc&.line != v_node.loc.line # rubocop:disable Style/SafeNavigationChainLength
52
+ acc.last << v_node
53
+ end
54
+ content << acc.map { |a| a.map(&:source).join(separator) }.join(line_separator)
55
+
56
+ content << processed_source.raw_source[node.values.last.loc.expression.end_pos..(node.loc.end.begin_pos - 1)] # rubocop:disable Layout/LineLength
57
+ content << node.loc.end.source
58
+
59
+ corrector.replace(node, content)
41
60
  end
42
61
 
43
62
  ignore_node(node)
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "lint_roller"
4
+
5
+ module RuboCop
6
+ module OneoffCodemod
7
+ # A plugin that integrates RuboCop Oneoff Codemod with RuboCop's plugin system.
8
+ class Plugin < LintRoller::Plugin
9
+ def about
10
+ LintRoller::About.new(
11
+ name: "rubocop-oneoff_codemod",
12
+ version: RuboCop::OneoffCodemod::VERSION,
13
+ homepage: "https://github.com/kozy4324/rubocop-oneoff_codemod",
14
+ description: "A RuboCop plugin implementing comment-as-command for one-off codemod, inspired " \
15
+ "by eslint-plugin-command."
16
+ )
17
+ end
18
+
19
+ def supported?(context)
20
+ context.engine == :rubocop
21
+ end
22
+
23
+ def rules(_context)
24
+ project_root = Pathname.new(__dir__).join("../../../") # steep:ignore
25
+
26
+ LintRoller::Rules.new(type: :path, config_format: :rubocop, value: project_root.join("config", "default.yml"))
27
+ end
28
+ end
29
+ end
30
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Rubocop
4
4
  module OneoffCodemod
5
- VERSION = "0.0.1"
5
+ VERSION = "0.0.3"
6
6
  end
7
7
  end
@@ -3,5 +3,6 @@
3
3
  require "rubocop"
4
4
 
5
5
  require_relative "oneoff_codemod/version"
6
+ require_relative "oneoff_codemod/plugin"
6
7
 
7
8
  require_relative "oneoff_codemod/cops/keep_unique"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-oneoff_codemod
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koji NAKAMURA
@@ -9,20 +9,40 @@ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: lint_roller
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '1.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '1.1'
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: rubocop
14
28
  requirement: !ruby/object:Gem::Requirement
15
29
  requirements:
16
30
  - - ">="
17
31
  - !ruby/object:Gem::Version
18
- version: '0'
32
+ version: 1.72.1
33
+ - - "<"
34
+ - !ruby/object:Gem::Version
35
+ version: '2.0'
19
36
  type: :runtime
20
37
  prerelease: false
21
38
  version_requirements: !ruby/object:Gem::Requirement
22
39
  requirements:
23
40
  - - ">="
24
41
  - !ruby/object:Gem::Version
25
- version: '0'
42
+ version: 1.72.1
43
+ - - "<"
44
+ - !ruby/object:Gem::Version
45
+ version: '2.0'
26
46
  description: A RuboCop plugin implementing comment-as-command for one-off codemod,
27
47
  inspired by eslint-plugin-command.
28
48
  email:
@@ -38,8 +58,10 @@ files:
38
58
  - LICENSE.txt
39
59
  - README.md
40
60
  - Rakefile
61
+ - config/default.yml
41
62
  - lib/rubocop/oneoff_codemod.rb
42
63
  - lib/rubocop/oneoff_codemod/cops/keep_unique.rb
64
+ - lib/rubocop/oneoff_codemod/plugin.rb
43
65
  - lib/rubocop/oneoff_codemod/version.rb
44
66
  - sig/rubocop/oneoff_codemod.rbs
45
67
  homepage: https://github.com/kozy4324/rubocop-oneoff_codemod
@@ -50,6 +72,7 @@ metadata:
50
72
  homepage_uri: https://github.com/kozy4324/rubocop-oneoff_codemod
51
73
  source_code_uri: https://github.com/kozy4324/rubocop-oneoff_codemod
52
74
  changelog_uri: https://github.com/kozy4324/rubocop-oneoff_codemod/releases
75
+ default_lint_roller_plugin: RuboCop::OneoffCodemod::Plugin
53
76
  rdoc_options: []
54
77
  require_paths:
55
78
  - lib