immosquare-cleaner 1.2.3 → 1.2.4

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: 53d2dc2a160c411d3acbeb2dc03692343ef60b598468fe288bfca2ec85667e87
4
- data.tar.gz: 802af16e18bb055b0f6a6a77b2e9ec47d2a1dab3d7a624ee848cd4f813f27e48
3
+ metadata.gz: f62bc1ef91591ce4508aab72115cb5acfe1f5e67cf2ca33aff2c4adaf50666c0
4
+ data.tar.gz: 63a788a487d902e7ca031dbe0df8586f58f44894534a3bcc2262f04a4b76b9e6
5
5
  SHA512:
6
- metadata.gz: c75021c32ffb683d464ef3834eb0e40bec740645f7be9afc045942b99093b160ad6e9867798858d37b030e34227a2f1b31df72895e9e376cd704f82af4e522a4
7
- data.tar.gz: d4023816cebb368e5bff4bbc5ac7b824135532b2d738b74a0df0c530923a375bef4ee627a77f31d09ffd22d1e44bcc94f3e77d241963eb83ca142d8d039f98d8
6
+ metadata.gz: 8574bb58dc4ffc54d776a0345cf2028f7de7640ff5314ac0701c5e79a968111a7cd2809207c235c2b3b74f5fe438bf6325c6f8a3d77d4e0ee217525b7e1cffc6
7
+ data.tar.gz: a00acfbfdf8e625c2c43abc74fa2a2d12e931dc710d1c54809c5dbd9c723f74ebf8001a88e8d62a6d8a856f65e331bb8d7ee9709b8cdadc9a496f1bf8e6e4891
@@ -2,16 +2,19 @@ module ImmosquareCleaner
2
2
  class Configuration
3
3
 
4
4
  attr_accessor(:rubocop_options, :htmlbeautifier_options, :erblint_options, :exclude_files)
5
+ attr_reader :ruby_target_version
5
6
 
6
7
  def initialize
7
8
  @rubocop_options = nil
9
+ @ruby_target_version = nil
8
10
  @htmlbeautifier_options = nil
9
11
  @erblint_options = nil
10
12
  @exclude_files = []
11
13
  end
12
14
 
13
-
14
-
15
+ def ruby_target_version=(version)
16
+ @ruby_target_version = version.nil? ? nil : RubyTarget.normalize(version)
17
+ end
15
18
 
16
19
  end
17
20
  end
@@ -22,14 +22,14 @@ module ImmosquareCleaner
22
22
  ## rubocop-X.Y.Z.yml)
23
23
  ## --autocorrect : apply autocorrectable offenses in place
24
24
  ##============================================================##
25
- config_path = "#{ImmosquareCleaner.gem_root}/linters/erb-lint-#{RUBY_VERSION}.yml"
25
+ config_path = ImmosquareCleaner.linter_config_path("erb-lint", origin_path)
26
26
  htmlbeautifier_options = ImmosquareCleaner.configuration.htmlbeautifier_options || "--keep-blank-lines 4"
27
27
  erblint_options = ImmosquareCleaner.configuration.erblint_options || "--autocorrect"
28
28
  escaped_file = Shellwords.escape(file_path)
29
29
 
30
30
  cmds = [
31
31
  "bundle exec htmlbeautifier #{escaped_file} #{htmlbeautifier_options}",
32
- "bundle exec erb_lint --config #{config_path} #{escaped_file} #{erblint_options}"
32
+ "bundle exec erb_lint --config #{Shellwords.escape(config_path)} #{escaped_file} #{erblint_options}"
33
33
  ]
34
34
 
35
35
  launch_cmds(cmds)
@@ -70,9 +70,9 @@ module ImmosquareCleaner
70
70
  ## HTML-context linters off the host string literals.
71
71
  ##============================================================##
72
72
  config_basename = file_path.downcase.end_with?(*JS_ERB_EXTENSIONS) ? "js-erb-lint" : "erb-lint"
73
- erblint_config = "#{ImmosquareCleaner.gem_root}/linters/#{config_basename}-#{RUBY_VERSION}.yml"
73
+ erblint_config = ImmosquareCleaner.linter_config_path(config_basename, origin_path)
74
74
  erblint_options = ImmosquareCleaner.configuration.erblint_options || "--autocorrect"
75
- cmds << "bundle exec erb_lint --config #{erblint_config} #{escaped_temp} #{erblint_options}"
75
+ cmds << "bundle exec erb_lint --config #{Shellwords.escape(erblint_config)} #{escaped_temp} #{erblint_options}"
76
76
  else
77
77
  cmds << "bun #{ImmosquareCleaner.gem_root}/linters/normalize-comments.mjs #{escaped_temp}"
78
78
  end
@@ -47,9 +47,9 @@ module ImmosquareCleaner
47
47
  ## overhead and breaks custom cop loading
48
48
  ##============================================================##
49
49
  rubocop_options = ImmosquareCleaner.configuration.rubocop_options || "--autocorrect-all --no-parallel"
50
- config_path = "#{ImmosquareCleaner.gem_root}/linters/rubocop-#{RUBY_VERSION}.yml"
50
+ config_path = ImmosquareCleaner.linter_config_path("rubocop", origin_path)
51
51
 
52
- cmds = ["bundle exec rubocop -c #{config_path} #{Shellwords.escape(file_path)} #{rubocop_options}"]
52
+ cmds = ["bundle exec rubocop -c #{Shellwords.escape(config_path)} #{Shellwords.escape(file_path)} #{rubocop_options}"]
53
53
  launch_cmds(cmds)
54
54
  normalize_last_line
55
55
  end
@@ -0,0 +1,109 @@
1
+ module ImmosquareCleaner
2
+ class RubyTarget
3
+
4
+ MUTEX = Mutex.new
5
+ GEMSPEC_REQUIREMENT_REGEX = /required_ruby_version\s*=\s*(?:Gem::Requirement\.new\()?\s*(\[[^\]]*\]|"[^"]*"|'[^']*')/
6
+ RUBY_VERSION_FILE_REGEX = /\A(?:ruby-)?(\d+\.\d+)/
7
+ LOWER_BOUND_OPERATORS = [">=", ">", "~>", "="].freeze
8
+ PROJECT_MARKERS = ["Gemfile", ".git"].freeze
9
+
10
+ class << self
11
+
12
+ ##============================================================##
13
+ ## RuboCop targets Ruby releases rather than patch versions.
14
+ ## Explicit targets must be supported by the installed RuboCop.
15
+ ##============================================================##
16
+ def normalize(version)
17
+ value = version.to_s
18
+ raise(ArgumentError, "ruby_target_version must be a Ruby version such as 3.2 or 3.2.6") if !value.match?(/\A\d+\.\d+(?:\.\d+)?\z/)
19
+
20
+ target = release(value)
21
+ validate!(target)
22
+ target
23
+ end
24
+
25
+ def release(version)
26
+ Gem::Version.new(version).segments.first(2).join(".")
27
+ end
28
+
29
+ ##============================================================##
30
+ ## Target of the project that owns the file: the gemspec minimum
31
+ ## (a gem must keep working on the oldest Ruby it accepts), then
32
+ ## .ruby-version, then the running Ruby. The lookup stops at the
33
+ ## project root so a parent folder's .ruby-version never applies.
34
+ ## Autocorrect with a newer target can introduce syntax that the
35
+ ## project's Ruby rejects (`_1` rewritten to `it`, Ruby 3.4+).
36
+ ##============================================================##
37
+ def detect(path)
38
+ directory = File.dirname(File.expand_path(path))
39
+ MUTEX.synchronize do
40
+ @detected ||= {}
41
+ @detected[directory] ||= supported_target(declared_version(directory)) || release(RUBY_VERSION)
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def declared_version(directory)
48
+ loop do
49
+ gemspecs = Dir.glob("*.gemspec", :base => directory).sort
50
+ version = gemspec_minimum(directory, gemspecs) || ruby_version_file(directory)
51
+ return release(version) if version
52
+ return nil if gemspecs.any? || PROJECT_MARKERS.any? {|marker| File.exist?(File.join(directory, marker)) }
53
+
54
+ parent = File.dirname(directory)
55
+ return nil if parent == directory
56
+
57
+ directory = parent
58
+ end
59
+ end
60
+
61
+ def gemspec_minimum(directory, gemspecs)
62
+ gemspecs.each do |name|
63
+ declaration = File.read(File.join(directory, name))[GEMSPEC_REQUIREMENT_REGEX, 1]
64
+ next if declaration.nil?
65
+
66
+ requirement = Gem::Requirement.new(*declaration.scan(/["']([^"']+)["']/).flatten)
67
+ bounds = requirement.requirements.filter_map {|operator, version| version if LOWER_BOUND_OPERATORS.include?(operator) }
68
+ return bounds.max.to_s if bounds.any?
69
+ rescue Gem::Requirement::BadRequirementError
70
+ next
71
+ end
72
+ nil
73
+ end
74
+
75
+ def ruby_version_file(directory)
76
+ path = File.join(directory, ".ruby-version")
77
+ File.file?(path) ? File.read(path).strip[RUBY_VERSION_FILE_REGEX, 1] : nil
78
+ end
79
+
80
+ ##============================================================##
81
+ ## A declared version the installed RuboCop cannot target falls
82
+ ## back to the running Ruby: cleaning must never stop on it.
83
+ ##============================================================##
84
+ def supported_target(target)
85
+ return nil if target.nil?
86
+ return target if target == release(RUBY_VERSION)
87
+
88
+ validate!(target)
89
+ target
90
+ rescue ArgumentError => e
91
+ warn("immosquare-cleaner: #{e.message}; using Ruby #{release(RUBY_VERSION)}")
92
+ nil
93
+ end
94
+
95
+ def validate!(target)
96
+ require "rubocop"
97
+
98
+ config = RuboCop::Config.new({"AllCops" => {"TargetRubyVersion" => target}}, __FILE__)
99
+ raise(ArgumentError, "ruby_target_version #{target.inspect} does not match RuboCop's effective target #{config.target_ruby_version}") if config.target_ruby_version.to_s != target
100
+
101
+ config.validate_after_resolution
102
+ rescue RuboCop::ValidationError => e
103
+ raise(ArgumentError, "Invalid ruby_target_version #{target.inspect}: #{e.message}")
104
+ end
105
+
106
+ end
107
+
108
+ end
109
+ end
@@ -1,3 +1,3 @@
1
1
  module ImmosquareCleaner
2
- VERSION = "1.2.3".freeze
2
+ VERSION = "1.2.4".freeze
3
3
  end
@@ -4,6 +4,8 @@ require "json"
4
4
  require "immosquare-yaml"
5
5
  require "immosquare-extensions"
6
6
  require "fileutils"
7
+ require "digest"
8
+ require_relative "immosquare-cleaner/ruby_target"
7
9
  require_relative "immosquare-cleaner/configuration"
8
10
  require_relative "immosquare-cleaner/markdown"
9
11
  require_relative "immosquare-cleaner/directory_cleaner"
@@ -39,6 +41,9 @@ require_relative "immosquare-cleaner/processors/prettier"
39
41
  ## See: https://github.com/Shopify/erb_lint/blob/main/lib/erb_lint/linter_registry.rb#L7
40
42
  ##============================================================##
41
43
  module ImmosquareCleaner
44
+ LINTER_CONFIG_MUTEX = Mutex.new
45
+ LINTER_CONFIG_NAMES = ["rubocop", "erb-lint", "js-erb-lint"].freeze
46
+
42
47
  class << self
43
48
 
44
49
  ##============================================================##
@@ -66,11 +71,6 @@ module ImmosquareCleaner
66
71
  end
67
72
 
68
73
  def clean(file_path, origin_path = nil)
69
- ##============================================================##
70
- ## Ensure linter configurations are ready
71
- ##============================================================##
72
- setup_linter_configs!
73
-
74
74
  ##============================================================##
75
75
  ## Return if the file is in the exclusion list or is a generator
76
76
  ## template. With `-p`, file_path is a /tmp copy: the template
@@ -101,6 +101,17 @@ module ImmosquareCleaner
101
101
  File.expand_path("..", __dir__)
102
102
  end
103
103
 
104
+ ##============================================================##
105
+ ## path : the file's location in its project (origin_path), which
106
+ ## decides the Ruby target unless ruby_target_version is set
107
+ ##============================================================##
108
+ def linter_config_path(name, path)
109
+ raise(ArgumentError, "Unknown Ruby linter configuration") if !LINTER_CONFIG_NAMES.include?(name)
110
+
111
+ target = configuration.ruby_target_version || RubyTarget.detect(path)
112
+ setup_linter_configs!(target).fetch(name)
113
+ end
114
+
104
115
  ##============================================================##
105
116
  ## Processor registry — order matters.
106
117
  ##
@@ -136,36 +147,43 @@ module ImmosquareCleaner
136
147
  end
137
148
 
138
149
  ##============================================================##
139
- ## Setup linter with the correct ruby version
140
- ## This is run once to avoid redundant file operations.
150
+ ## Configs are shared by target Ruby and template fingerprint.
151
+ ## Atomic writes and a mutex prevent partially generated YAML
152
+ ## during parallel cleaning; template edits invalidate the cache.
141
153
  ##============================================================##
142
- def setup_linter_configs!
143
- @setup_linter_configs ||= begin
144
- rubocop_config_with_version_path = "#{gem_root}/linters/rubocop-#{RUBY_VERSION}.yml"
145
-
146
- if !File.exist?(rubocop_config_with_version_path)
147
- rubocop_config = YAML.load_file("#{gem_root}/linters/rubocop.yml")
148
- rubocop_config["AllCops"]["TargetRubyVersion"] = RUBY_VERSION
149
- rubocop_config["AllCops"]["ParserEngine"] = RUBY_VERSION >= "3.3" ? "parser_prism" : "parser_whitequark"
150
- File.write(rubocop_config_with_version_path, rubocop_config.to_yaml)
154
+ def setup_linter_configs!(target)
155
+ templates = LINTER_CONFIG_NAMES.to_h {|name| [name, File.join(gem_root, "linters", "#{name}.yml")] }
156
+ signature = templates.values.map {|path| [File.mtime(path), File.size(path)] }
157
+ LINTER_CONFIG_MUTEX.synchronize do
158
+ @linter_configs ||= {}
159
+ key = [target, signature]
160
+ return @linter_configs[key] if @linter_configs.key?(key)
161
+
162
+ sources = templates.transform_values {|path| File.read(path) }
163
+ fingerprint = Digest::SHA256.hexdigest(sources.values.join("\n")).slice(0, 16)
164
+ paths = LINTER_CONFIG_NAMES.to_h {|name| [name, File.join(gem_root, "linters", "#{name}-#{target}-#{fingerprint}.yml")] }
165
+ rubocop_config = YAML.safe_load(sources.fetch("rubocop"))
166
+ rubocop_config["AllCops"]["TargetRubyVersion"] = target
167
+ rubocop_config["AllCops"]["ParserEngine"] = Gem::Version.new(target) >= Gem::Version.new("3.3") ? "parser_prism" : "parser_whitequark"
168
+ write_linter_config(paths.fetch("rubocop"), rubocop_config)
169
+
170
+ ["erb-lint", "js-erb-lint"].each do |name|
171
+ config = YAML.safe_load(sources.fetch(name))
172
+ config["linters"]["Rubocop"]["rubocop_config"]["inherit_from"] = ["linters/#{File.basename(paths.fetch("rubocop"))}"]
173
+ write_linter_config(paths.fetch(name), config)
151
174
  end
175
+ @linter_configs[key] = paths.freeze
176
+ end
177
+ end
152
178
 
153
- ##============================================================##
154
- ## erb_lint configs that inherit the versioned rubocop config.
155
- ## - erb-lint : default config for .html.erb
156
- ## - js-erb-lint : JS-specific config for .js.erb / .ts.erb / etc.
157
- ##============================================================##
158
- ["erb-lint", "js-erb-lint"].each do |basename|
159
- versioned_path = "#{gem_root}/linters/#{basename}-#{RUBY_VERSION}.yml"
160
- next if File.exist?(versioned_path)
161
-
162
- config = YAML.load_file("#{gem_root}/linters/#{basename}.yml")
163
- config["linters"]["Rubocop"]["rubocop_config"]["inherit_from"] = ["linters/rubocop-#{RUBY_VERSION}.yml"]
164
- File.write(versioned_path, config.to_yaml)
165
- end
179
+ def write_linter_config(path, config)
180
+ return if File.file?(path)
166
181
 
167
- true
168
- end
182
+ temporary = "#{path}.#{Process.pid}.#{Thread.current.object_id}.tmp"
183
+ File.write(temporary, config.to_yaml)
184
+ File.rename(temporary, path)
185
+ ensure
186
+ File.delete(temporary) if temporary && File.file?(temporary)
169
187
  end
170
188
 
171
189
  end
data/linters/rubocop.yml CHANGED
@@ -127,6 +127,10 @@ Style/RescueModifier:
127
127
  Enabled: false # Allow inline rescue modifier (some_method rescue SomeException)
128
128
  Style/ArrayIntersect:
129
129
  Enabled: false # The cop assumes the receiver of `include?` is a collection, so `MARKERS.any? { |m| some_string.include?(m) }` (searching several markers in one string) is rewritten as `MARKERS.intersect?(some_string)`. `Array#intersect?` only takes an Array, so the corrected code raises `TypeError: no implicit conversion of String into Array` — at runtime, not on save. The correction is unsafe, hence applied by our `--autocorrect-all`. Fixed upstream in rubocop/rubocop#15439 but unreleased as of 1.88.2; re-enable once a release ships it. To match several markers in a string, use `some_string.match?(Regexp.union(*MARKERS))`.
130
+ Style/HashSlice:
131
+ AutoCorrect: false # The cop assumes the receiver of `select {|key, _value| LIST.include?(key) }` is a Hash and rewrites it as `.slice(*LIST)`. On an Array of pairs (e.g. `Gem::Requirement#requirements`) the corrected code raises `TypeError: no implicit conversion of String into Integer` at runtime. The correction is unsafe, hence applied by our `--autocorrect-all`. Keep the warning, drop the rewrite.
132
+ Style/HashExcept:
133
+ AutoCorrect: false # Same receiver guess as Style/HashSlice: `reject {|key, _value| LIST.include?(key) }` on an Array of pairs becomes `.except(*LIST)`, which Array does not define (NoMethodError at runtime). Keep the warning, drop the rewrite.
130
134
  Style/NestedParenthesizedCalls:
131
135
  Enabled: false # Redundant with Style/MethodCallWithArgsParentheses (require_parentheses) — both flag `outer(inner arg)`. RuboCop dedupes the inserted `(` but not the matching `)`, and erb_lint's integration ships both corrections independently → output gets an extra `)` (e.g. `j(render :partial => "x")` becomes `j(render(:partial => "x")))`, breaking the ERB at render time).
132
136
 
@@ -261,4 +265,4 @@ CustomCops/Style/KwargPriorityOrder:
261
265
  Gemspec/RequireMFA:
262
266
  Enabled: false # Don't require MFA to push a gem
263
267
  Gemspec/RequiredRubyVersion:
264
- Enabled: false # TargetRubyVersion is always set to the Ruby running the cleaner, so it never matches the minimum a gemspec declares (`>= 3.2.6` vs 4.0.x): the cop would flag every gemspec.
268
+ Enabled: false # Not autocorrectable, and TargetRubyVersion can come from ruby_target_version or .ruby-version rather than the gemspec: the cop would only report noise.
data/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  "@typescript-eslint/eslint-plugin": "^8.71.2",
13
13
  "@typescript-eslint/parser": "^8.71.2",
14
14
  "@typescript/native": "npm:typescript@^7.0.2",
15
- "eslint": "^10.12.0",
15
+ "eslint": "^10.13.0",
16
16
  "eslint-plugin-align-import": "^1.0.0",
17
17
  "eslint-plugin-erb": "^2.1.1",
18
18
  "eslint-plugin-prefer-arrow": "^1.2.3",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immosquare-cleaner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - immosquare
@@ -181,9 +181,8 @@ files:
181
181
  - lib/immosquare-cleaner/processors/shell.rb
182
182
  - lib/immosquare-cleaner/processors/toml.rb
183
183
  - lib/immosquare-cleaner/processors/yaml.rb
184
+ - lib/immosquare-cleaner/ruby_target.rb
184
185
  - lib/immosquare-cleaner/version.rb
185
- - linters/erb-lint-4.0.6.yml
186
- - linters/erb-lint-4.0.7.yml
187
186
  - linters/erb-lint.yml
188
187
  - linters/erb_lint/custom_align_consecutive_calls.rb
189
188
  - linters/erb_lint/custom_html_to_content_tag.rb
@@ -191,13 +190,9 @@ files:
191
190
  - linters/eslint-plugins/align-assignments.mjs
192
191
  - linters/eslint-plugins/eslint10-compat.mjs
193
192
  - linters/eslint.config.mjs
194
- - linters/js-erb-lint-4.0.6.yml
195
- - linters/js-erb-lint-4.0.7.yml
196
193
  - linters/js-erb-lint.yml
197
194
  - linters/normalize-comments.mjs
198
195
  - linters/prettier.yml
199
- - linters/rubocop-4.0.6.yml
200
- - linters/rubocop-4.0.7.yml
201
196
  - linters/rubocop.yml
202
197
  - linters/rubocop/cop/custom_cops/style/align_assignments.rb
203
198
  - linters/rubocop/cop/custom_cops/style/comment_normalization.rb
@@ -228,7 +223,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
223
  - !ruby/object:Gem::Version
229
224
  version: '0'
230
225
  requirements: []
231
- rubygems_version: 4.0.22
226
+ rubygems_version: 4.0.23
232
227
  specification_version: 4
233
228
  summary: One command to format every file of a repository, built to run as an AI agent
234
229
  hook.
@@ -1,22 +0,0 @@
1
- ---
2
- EnableDefaultLinters: true
3
- linters:
4
- NoJavascriptTagHelper:
5
- enabled: false
6
- SpaceInHtmlTag:
7
- enabled: false
8
- CustomSingleLineIfModifier:
9
- enabled: true
10
- CustomHtmlToContentTag:
11
- enabled: true
12
- CustomAlignConsecutiveCalls:
13
- enabled: true
14
- methods:
15
- - link_to
16
- Rubocop:
17
- enabled: true
18
- rubocop_config:
19
- inherit_from:
20
- - linters/rubocop-4.0.6.yml
21
- Layout/TrailingWhitespace:
22
- Enabled: false
@@ -1,27 +0,0 @@
1
- ---
2
- EnableDefaultLinters: true
3
- linters:
4
- NoJavascriptTagHelper:
5
- enabled: false
6
- SpaceInHtmlTag:
7
- enabled: false
8
- AllowedScriptType:
9
- enabled: true
10
- allowed_types:
11
- - text/javascript
12
- - module
13
- CustomSingleLineIfModifier:
14
- enabled: true
15
- CustomHtmlToContentTag:
16
- enabled: true
17
- CustomAlignConsecutiveCalls:
18
- enabled: true
19
- methods:
20
- - link_to
21
- Rubocop:
22
- enabled: true
23
- rubocop_config:
24
- inherit_from:
25
- - linters/rubocop-4.0.7.yml
26
- Layout/TrailingWhitespace:
27
- Enabled: false
@@ -1,26 +0,0 @@
1
- ---
2
- EnableDefaultLinters: true
3
- linters:
4
- NoJavascriptTagHelper:
5
- enabled: false
6
- SpaceInHtmlTag:
7
- enabled: false
8
- SelfClosingTag:
9
- enabled: false
10
- RequireInputAutocomplete:
11
- enabled: false
12
- DeprecatedClassesInline:
13
- enabled: false
14
- HardCodedString:
15
- enabled: false
16
- CustomHtmlToContentTag:
17
- enabled: false
18
- CustomSingleLineIfModifier:
19
- enabled: true
20
- Rubocop:
21
- enabled: true
22
- rubocop_config:
23
- inherit_from:
24
- - linters/rubocop-4.0.6.yml
25
- Layout/TrailingWhitespace:
26
- Enabled: false
@@ -1,26 +0,0 @@
1
- ---
2
- EnableDefaultLinters: true
3
- linters:
4
- NoJavascriptTagHelper:
5
- enabled: false
6
- SpaceInHtmlTag:
7
- enabled: false
8
- SelfClosingTag:
9
- enabled: false
10
- RequireInputAutocomplete:
11
- enabled: false
12
- DeprecatedClassesInline:
13
- enabled: false
14
- HardCodedString:
15
- enabled: false
16
- CustomHtmlToContentTag:
17
- enabled: false
18
- CustomSingleLineIfModifier:
19
- enabled: true
20
- Rubocop:
21
- enabled: true
22
- rubocop_config:
23
- inherit_from:
24
- - linters/rubocop-4.0.7.yml
25
- Layout/TrailingWhitespace:
26
- Enabled: false
@@ -1,219 +0,0 @@
1
- ---
2
- require:
3
- - rubocop/cop/style/method_call_with_args_parentheses_override
4
- - rubocop/cop/custom_cops/style/comment_normalization
5
- - rubocop/cop/custom_cops/style/font_awesome_normalization
6
- - rubocop/cop/custom_cops/style/align_assignments
7
- - rubocop/cop/custom_cops/style/inline_multiline_calls
8
- - rubocop/cop/custom_cops/style/kwarg_priority_order
9
- AllCops:
10
- NewCops: enable
11
- EnabledByDefault: false
12
- UseCache: true
13
- SuggestExtensions: false
14
- ActiveSupportExtensionsEnabled: true
15
- TargetRubyVersion: 4.0.6
16
- ParserEngine: parser_prism
17
- Metrics:
18
- Enabled: false
19
- Lint/UselessAssignment:
20
- Enabled: false
21
- Lint/RescueException:
22
- Enabled: false
23
- Lint/UnusedMethodArgument:
24
- Enabled: false
25
- Lint/UselessOr:
26
- Enabled: false
27
- Lint/InterpolationCheck:
28
- AutoCorrect: false
29
- Naming/VariableNumber:
30
- Enabled: false
31
- Naming/FileName:
32
- Enabled: false
33
- Naming/MethodParameterName:
34
- MinNameLength: 1
35
- Layout/LeadingEmptyLines:
36
- Enabled: false
37
- Layout/InitialIndentation:
38
- Enabled: false
39
- Layout/TrailingEmptyLines:
40
- Enabled: false
41
- Layout/ExtraSpacing:
42
- Enabled: false
43
- Layout/LineLength:
44
- Enabled: false
45
- Layout/TrailingWhitespace:
46
- Enabled: true
47
- Layout/EmptyLines:
48
- Enabled: false
49
- Layout/LeadingCommentSpace:
50
- Enabled: false
51
- Layout/SpaceInsideBlockBraces:
52
- SpaceBeforeBlockParameters: false
53
- Layout/EmptyLinesAroundClassBody:
54
- EnforcedStyle: empty_lines
55
- Layout/FirstHashElementIndentation:
56
- EnforcedStyle: consistent
57
- Layout/ArgumentAlignment:
58
- EnforcedStyle: with_fixed_indentation
59
- Layout/HashAlignment:
60
- EnforcedHashRocketStyle: table
61
- Layout/MultilineAssignmentLayout:
62
- EnforcedStyle: same_line
63
- Layout/SpaceInsideHashLiteralBraces:
64
- EnforcedStyle: no_space
65
- Layout/MultilineMethodCallIndentation:
66
- EnforcedStyle: indented
67
- Style/CombinableLoops:
68
- Enabled: false
69
- Style/SingleArgumentDig:
70
- Enabled: false
71
- Style/RedundantBegin:
72
- Enabled: false
73
- Style/MultilineTernaryOperator:
74
- Enabled: false
75
- Style/NestedTernaryOperator:
76
- Enabled: false
77
- Style/MultilineIfModifier:
78
- Enabled: false
79
- Style/FrozenStringLiteralComment:
80
- Enabled: false
81
- Style/Next:
82
- Enabled: false
83
- Style/Documentation:
84
- Enabled: false
85
- Style/IfUnlessModifierOfIfUnless:
86
- Enabled: false
87
- Style/NegatedIf:
88
- Enabled: false
89
- Style/FormatStringToken:
90
- EnforcedStyle: template
91
- Style/NumericPredicate:
92
- EnforcedStyle: comparison
93
- Style/StringLiterals:
94
- EnforcedStyle: double_quotes
95
- Style/StringLiteralsInInterpolation:
96
- EnforcedStyle: double_quotes
97
- Style/HashSyntax:
98
- EnforcedStyle: hash_rockets
99
- Style/WordArray:
100
- EnforcedStyle: brackets
101
- Style/SymbolArray:
102
- EnforcedStyle: brackets
103
- Style/RescueModifier:
104
- Enabled: false
105
- Style/ArrayIntersect:
106
- Enabled: false
107
- Style/NestedParenthesizedCalls:
108
- Enabled: false
109
- Style/MethodCallWithArgsParentheses:
110
- Enabled: true
111
- EnforcedStyle: require_parentheses
112
- IgnoreMacros: false
113
- AllowedMethods:
114
- - require
115
- - require_relative
116
- - include
117
- - extend
118
- - prepend
119
- - raise
120
- - fail
121
- - yield
122
- - attr_accessor
123
- - attr_reader
124
- - attr_writer
125
- - run
126
- - exec
127
- - load
128
- - gem
129
- - group
130
- - source
131
- - ruby
132
- - install_plugin
133
- - desc
134
- - task
135
- - namespace
136
- - before_action
137
- - after_action
138
- - around_action
139
- - skip_before_action
140
- - prepend_before_action
141
- - append_before_action
142
- - helper_method
143
- - layout
144
- - rescue_from
145
- - belongs_to
146
- - has_many
147
- - has_one
148
- - has_and_belongs_to_many
149
- - validates
150
- - validate
151
- - validates_presence_of
152
- - validates_uniqueness_of
153
- - validates_length_of
154
- - validates_format_of
155
- - validates_numericality_of
156
- - validates_inclusion_of
157
- - validates_exclusion_of
158
- - validates_confirmation_of
159
- - validates_acceptance_of
160
- - validates_absence_of
161
- - validates_associated
162
- - validates_each
163
- - validates_with
164
- - after_initialize
165
- - after_find
166
- - before_validation
167
- - after_validation
168
- - before_save
169
- - after_save
170
- - around_save
171
- - before_create
172
- - after_create
173
- - around_create
174
- - before_update
175
- - after_update
176
- - around_update
177
- - before_destroy
178
- - after_destroy
179
- - around_destroy
180
- - after_touch
181
- - after_commit
182
- - after_rollback
183
- - delegate
184
- - enum
185
- - get
186
- - post
187
- - put
188
- - patch
189
- - delete
190
- - options
191
- - head
192
- - match
193
- - root
194
- - rake
195
- - every
196
- - command
197
- - set
198
- - append
199
- - server
200
- - after
201
- CustomCops/Style/CommentNormalization:
202
- Enabled: true
203
- CustomCops/Style/FontAwesomeNormalization:
204
- Enabled: true
205
- CustomCops/Style/AlignAssignments:
206
- Enabled: false
207
- CustomCops/Style/InlineMultilineCalls:
208
- Enabled: true
209
- Methods:
210
- - link_to
211
- CustomCops/Style/KwargPriorityOrder:
212
- Enabled: true
213
- Methods:
214
- - link_to
215
- PriorityKeys:
216
- - remote
217
- - method
218
- Gemspec/RequireMFA:
219
- Enabled: false
@@ -1,234 +0,0 @@
1
- ---
2
- require:
3
- - rubocop/cop/style/method_call_with_args_parentheses_override
4
- - rubocop/cop/custom_cops/style/comment_normalization
5
- - rubocop/cop/custom_cops/style/font_awesome_normalization
6
- - rubocop/cop/custom_cops/style/align_assignments
7
- - rubocop/cop/custom_cops/style/inline_multiline_calls
8
- - rubocop/cop/custom_cops/style/kwarg_priority_order
9
- AllCops:
10
- NewCops: enable
11
- EnabledByDefault: false
12
- UseCache: true
13
- SuggestExtensions: false
14
- ActiveSupportExtensionsEnabled: true
15
- TargetRubyVersion: 4.0.7
16
- ParserEngine: parser_prism
17
- Metrics:
18
- Enabled: false
19
- Lint/UselessAssignment:
20
- Enabled: false
21
- Lint/RescueException:
22
- Enabled: false
23
- Lint/UnusedMethodArgument:
24
- Enabled: false
25
- Lint/UselessOr:
26
- Enabled: false
27
- Lint/InterpolationCheck:
28
- AutoCorrect: false
29
- Naming/VariableNumber:
30
- Enabled: false
31
- Naming/FileName:
32
- Enabled: false
33
- Naming/MethodParameterName:
34
- MinNameLength: 1
35
- Naming/PredicateMethod:
36
- AllowedMethods:
37
- - call
38
- - move_to_cache
39
- - move_to_store
40
- - save
41
- - check_health
42
- - elastic_import_with_progressbar
43
- Layout/LeadingEmptyLines:
44
- Enabled: false
45
- Layout/InitialIndentation:
46
- Enabled: false
47
- Layout/TrailingEmptyLines:
48
- Enabled: false
49
- Layout/ExtraSpacing:
50
- Enabled: false
51
- Layout/LineLength:
52
- Enabled: false
53
- Layout/TrailingWhitespace:
54
- Enabled: true
55
- Layout/EmptyLines:
56
- Enabled: false
57
- Layout/LeadingCommentSpace:
58
- Enabled: false
59
- Layout/SpaceInsideBlockBraces:
60
- SpaceBeforeBlockParameters: false
61
- Layout/EmptyLinesAroundClassBody:
62
- EnforcedStyle: empty_lines
63
- Layout/FirstHashElementIndentation:
64
- EnforcedStyle: consistent
65
- Layout/ArgumentAlignment:
66
- EnforcedStyle: with_fixed_indentation
67
- Layout/HashAlignment:
68
- EnforcedHashRocketStyle: table
69
- Layout/MultilineAssignmentLayout:
70
- EnforcedStyle: same_line
71
- Layout/SpaceInsideHashLiteralBraces:
72
- EnforcedStyle: no_space
73
- Layout/MultilineMethodCallIndentation:
74
- EnforcedStyle: indented
75
- Style/CombinableLoops:
76
- Enabled: false
77
- Style/SingleArgumentDig:
78
- Enabled: false
79
- Style/RedundantBegin:
80
- Enabled: false
81
- Style/MultilineTernaryOperator:
82
- Enabled: false
83
- Style/NestedTernaryOperator:
84
- Enabled: false
85
- Style/MultilineIfModifier:
86
- Enabled: false
87
- Style/FrozenStringLiteralComment:
88
- Enabled: false
89
- Style/Next:
90
- Enabled: false
91
- Style/Documentation:
92
- Enabled: false
93
- Style/IfUnlessModifierOfIfUnless:
94
- Enabled: false
95
- Style/NegatedIf:
96
- Enabled: false
97
- Style/FormatStringToken:
98
- EnforcedStyle: template
99
- Mode: conservative
100
- Style/OptionalBooleanParameter:
101
- AllowedMethods:
102
- - respond_to_missing?
103
- - perform
104
- Style/NumericPredicate:
105
- EnforcedStyle: comparison
106
- Style/StringLiterals:
107
- EnforcedStyle: double_quotes
108
- Style/StringLiteralsInInterpolation:
109
- EnforcedStyle: double_quotes
110
- Style/HashSyntax:
111
- EnforcedStyle: hash_rockets
112
- Style/WordArray:
113
- EnforcedStyle: brackets
114
- Style/SymbolArray:
115
- EnforcedStyle: brackets
116
- Style/RescueModifier:
117
- Enabled: false
118
- Style/ArrayIntersect:
119
- Enabled: false
120
- Style/NestedParenthesizedCalls:
121
- Enabled: false
122
- Style/MethodCallWithArgsParentheses:
123
- Enabled: true
124
- EnforcedStyle: require_parentheses
125
- IgnoreMacros: false
126
- AllowedMethods:
127
- - require
128
- - require_relative
129
- - include
130
- - extend
131
- - prepend
132
- - raise
133
- - fail
134
- - yield
135
- - attr_accessor
136
- - attr_reader
137
- - attr_writer
138
- - run
139
- - exec
140
- - load
141
- - gem
142
- - group
143
- - source
144
- - ruby
145
- - install_plugin
146
- - desc
147
- - task
148
- - namespace
149
- - before_action
150
- - after_action
151
- - around_action
152
- - skip_before_action
153
- - prepend_before_action
154
- - append_before_action
155
- - helper_method
156
- - layout
157
- - rescue_from
158
- - belongs_to
159
- - has_many
160
- - has_one
161
- - has_and_belongs_to_many
162
- - validates
163
- - validate
164
- - validates_presence_of
165
- - validates_uniqueness_of
166
- - validates_length_of
167
- - validates_format_of
168
- - validates_numericality_of
169
- - validates_inclusion_of
170
- - validates_exclusion_of
171
- - validates_confirmation_of
172
- - validates_acceptance_of
173
- - validates_absence_of
174
- - validates_associated
175
- - validates_each
176
- - validates_with
177
- - after_initialize
178
- - after_find
179
- - before_validation
180
- - after_validation
181
- - before_save
182
- - after_save
183
- - around_save
184
- - before_create
185
- - after_create
186
- - around_create
187
- - before_update
188
- - after_update
189
- - around_update
190
- - before_destroy
191
- - after_destroy
192
- - around_destroy
193
- - after_touch
194
- - after_commit
195
- - after_rollback
196
- - delegate
197
- - enum
198
- - get
199
- - post
200
- - put
201
- - patch
202
- - delete
203
- - options
204
- - head
205
- - match
206
- - root
207
- - rake
208
- - every
209
- - command
210
- - set
211
- - append
212
- - server
213
- - after
214
- CustomCops/Style/CommentNormalization:
215
- Enabled: true
216
- CustomCops/Style/FontAwesomeNormalization:
217
- Enabled: true
218
- CustomCops/Style/AlignAssignments:
219
- Enabled: false
220
- CustomCops/Style/InlineMultilineCalls:
221
- Enabled: true
222
- Methods:
223
- - link_to
224
- CustomCops/Style/KwargPriorityOrder:
225
- Enabled: true
226
- Methods:
227
- - link_to
228
- PriorityKeys:
229
- - remote
230
- - method
231
- Gemspec/RequireMFA:
232
- Enabled: false
233
- Gemspec/RequiredRubyVersion:
234
- Enabled: false