erb_lint 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b98507494f8af2a33e0e6fcbf28c48a2d91c78f42273a3cc6c1206578f3a55b0
4
- data.tar.gz: c090a633a9d041a6d4d71bc292b1525b3a74dccd61311e0224bc1cbb0d8fea33
3
+ metadata.gz: f417b343f6b0b891bd095ba568b2d50e78bb7d619b637b3bf2d70f2607f990cc
4
+ data.tar.gz: 1c080ab44d8238ad32138babe65076626e82974a96a13a1f4041bf7b9568b6ec
5
5
  SHA512:
6
- metadata.gz: b2ac77d88b7be36010d69c072e3ee72c370edefa1fc3b68135593b5b494da8b0f9eac79e9b5408d10155a007d94948ae6a4b3b279de2541be66f0576abc964a8
7
- data.tar.gz: f0be6a75c5060b49a8b7c5e5a5d19adb3222fb580a11c2e2e488e5b83ada00db0c4daee25e99ba5538057c749f5937b80d25a96bda1ed967e6d1baeddf787965
6
+ metadata.gz: 407d4f4813eaef3b2247357e0af4373cf7511bd8162c5706bc951af05e8577a9584bd5d3dbd00d6dba98bb62aa9d5d58a36a2e484553f7e9ade6af3f95803881
7
+ data.tar.gz: 7e5fb9bdb8c0cd455279ef3a1c46df75704f6f53eea0ab2eb37b4ff2c5e8292a6ced137b0fbeb6e89c2382d5f1be3220d0e12c4889127cb6d430578f2dbe8945
data/lib/erb_lint/cli.rb CHANGED
@@ -35,7 +35,11 @@ module ERBLint
35
35
  load_config
36
36
 
37
37
  if !@files.empty? && lint_files.empty?
38
- failure!("no files found...\n")
38
+ if allow_no_files?
39
+ success!("no files found...\n")
40
+ else
41
+ failure!("no files found...\n")
42
+ end
39
43
  elsif lint_files.empty?
40
44
  failure!("no files found or given, specify files or config...\n#{option_parser}")
41
45
  end
@@ -50,6 +54,7 @@ module ERBLint
50
54
  @options[:fail_level] ||= severity_level_for_name(:refactor)
51
55
  @stats.files = lint_files.size
52
56
  @stats.linters = enabled_linter_classes.size
57
+ @stats.autocorrectable_linters = enabled_linter_classes.count(&:support_autocorrect?)
53
58
 
54
59
  reporter = Reporter.create_reporter(@options[:format], @stats, autocorrect?)
55
60
  reporter.preview
@@ -232,11 +237,7 @@ module ERBLint
232
237
 
233
238
  def enabled_linter_classes
234
239
  @enabled_linter_classes ||= ERBLint::LinterRegistry.linters
235
- .select { |klass| linter_can_run?(klass) && enabled_linter_names.include?(klass.simple_name.underscore) }
236
- end
237
-
238
- def linter_can_run?(klass)
239
- !autocorrect? || klass.support_autocorrect?
240
+ .select { |klass| enabled_linter_names.include?(klass.simple_name.underscore) }
240
241
  end
241
242
 
242
243
  def relative_filename(filename)
@@ -305,6 +306,10 @@ module ERBLint
305
306
  @options[:autocorrect] = config
306
307
  end
307
308
 
309
+ opts.on("--allow-no-files", "When no matching files found, exit successfully (default: false)") do |config|
310
+ @options[:allow_no_files] = config
311
+ end
312
+
308
313
  opts.on(
309
314
  "-sFILE",
310
315
  "--stdin FILE",
@@ -325,7 +330,7 @@ module ERBLint
325
330
 
326
331
  def format_options_help
327
332
  "Report offenses in the given format: "\
328
- "(#{Reporter.available_formats.join(", ")}) (default: multiline)"
333
+ "(#{Reporter.available_formats.join(", ")}) (default: multiline)"
329
334
  end
330
335
 
331
336
  def invalid_format_error_message(given_format)
@@ -336,5 +341,9 @@ module ERBLint
336
341
  def stdin?
337
342
  @options[:stdin].present?
338
343
  end
344
+
345
+ def allow_no_files?
346
+ @options[:allow_no_files]
347
+ end
339
348
  end
340
349
  end
@@ -12,7 +12,7 @@ module ERBLint
12
12
 
13
13
  def corrections
14
14
  @corrections ||= @offenses.map do |offense|
15
- offense.linter.autocorrect(@processed_source, offense)
15
+ offense.linter.autocorrect(@processed_source, offense) if offense.linter.class.support_autocorrect?
16
16
  end.compact
17
17
  end
18
18
 
@@ -46,7 +46,7 @@ module ERBLint
46
46
  end
47
47
 
48
48
  def excludes_file?(filename)
49
- @config.excludes_file?(filename)
49
+ @config.excludes_file?(filename, @file_loader.base_path)
50
50
  end
51
51
 
52
52
  def run(_processed_source)
@@ -29,6 +29,7 @@ module ERBLint
29
29
  if (extra_keys = given_keys - allowed_keys).any?
30
30
  raise Error, "Given key is not allowed: #{extra_keys.join(", ")}"
31
31
  end
32
+
32
33
  super(config)
33
34
  rescue SmartProperties::InitializationError => e
34
35
  raise Error, "The following properties are required to be set: #{e.properties}"
@@ -40,6 +41,7 @@ module ERBLint
40
41
  unless self.class.properties.key?(name)
41
42
  raise Error, "No such property: #{name}"
42
43
  end
44
+
43
45
  super
44
46
  end
45
47
 
@@ -51,9 +53,12 @@ module ERBLint
51
53
  end
52
54
  end
53
55
 
54
- def excludes_file?(filename)
56
+ def excludes_file?(absolute_filename, base_path)
55
57
  exclude.any? do |path|
56
- File.fnmatch?(path, filename)
58
+ return true if File.fnmatch?(path, absolute_filename)
59
+
60
+ relative_path = absolute_filename.delete_prefix("#{base_path}/")
61
+ File.fnmatch?(path, relative_path)
57
62
  end
58
63
  end
59
64
  end
@@ -31,7 +31,7 @@ module ERBLint
31
31
  add_offense(
32
32
  name_node.loc,
33
33
  "Avoid using inline `<script>` tags altogether. "\
34
- "Instead, move javascript code into a static file."
34
+ "Instead, move javascript code into a static file."
35
35
  )
36
36
  next
37
37
  end
@@ -50,8 +50,8 @@ module ERBLint
50
50
  add_offense(
51
51
  type_attribute.loc,
52
52
  "Avoid using #{type_attribute.value.inspect} as type for `<script>` tag. "\
53
- "Must be one of: #{@config.allowed_types.join(", ")}"\
54
- "#{" (or no type attribute)" if @config.allow_blank?}."
53
+ "Must be one of: #{@config.allowed_types.join(", ")}"\
54
+ "#{" (or no type attribute)" if @config.allow_blank?}."
55
55
  )
56
56
  end
57
57
  end
@@ -59,6 +59,7 @@ module ERBLint
59
59
 
60
60
  def autocorrect(_processed_source, offense)
61
61
  return unless offense.context
62
+
62
63
  lambda do |corrector|
63
64
  type_attribute, = *offense.context
64
65
  if type_attribute.nil?
@@ -59,6 +59,7 @@ module ERBLint
59
59
  tags(processed_source).each do |tag|
60
60
  class_value = tag.attributes["class"]&.value
61
61
  next unless class_value
62
+
62
63
  class_value.split(" ").each do |class_name|
63
64
  yielder.yield(class_name, tag.loc)
64
65
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "set"
3
4
  require "better_html/tree/tag"
4
5
  require "active_support/core_ext/string/inflections"
@@ -83,6 +84,7 @@ module ERBLint
83
84
  string = offense.source_range.source
84
85
  return unless (klass = load_corrector)
85
86
  return unless string.strip.length > 1
87
+
86
88
  node = ::RuboCop::AST::StrNode.new(:str, [string])
87
89
  corrector = klass.new(node, processed_source.filename, corrector_i18n_load_path, offense.source_range)
88
90
  corrector.autocorrect(tag_start: "<%= ", tag_end: " %>")
@@ -100,6 +102,7 @@ module ERBLint
100
102
  def load_corrector
101
103
  corrector_name = @config["corrector"].fetch("name") { raise MissingCorrector }
102
104
  raise ForbiddenCorrector unless ALLOWED_CORRECTORS.include?(corrector_name)
105
+
103
106
  require @config["corrector"].fetch("path") { raise MissingCorrector }
104
107
 
105
108
  corrector_name.safe_constantize
@@ -22,6 +22,7 @@ module ERBLint
22
22
  indicator_node, _, code_node, _ = *erb_node
23
23
  indicator = indicator_node&.loc&.source
24
24
  next if indicator == "#"
25
+
25
26
  source = code_node.loc.source
26
27
 
27
28
  ruby_node =
@@ -31,13 +32,14 @@ module ERBLint
31
32
  nil
32
33
  end
33
34
  next unless ruby_node
35
+
34
36
  send_node = ruby_node.descendants(:send).first
35
37
  next unless send_node&.method_name?(:javascript_tag)
36
38
 
37
39
  add_offense(
38
40
  erb_node.loc,
39
41
  "Avoid using 'javascript_tag do' as it confuses tests "\
40
- "that validate html, use inline <script> instead",
42
+ "that validate html, use inline <script> instead",
41
43
  [erb_node, send_node]
42
44
  )
43
45
  end
@@ -8,7 +8,7 @@ module ERBLint
8
8
 
9
9
  def run(processed_source)
10
10
  instance_variable_regex = /\s@\w+/
11
- return unless processed_source.filename.match?(/.*_.*.erb\z/) &&
11
+ return unless processed_source.filename.match?(%r{(\A|.*/)_[^/\s]*\.html\.erb\z}) &&
12
12
  processed_source.file_content.match?(instance_variable_regex)
13
13
 
14
14
  add_offense(
@@ -63,7 +63,7 @@ module ERBLint
63
63
  add_offense(
64
64
  tag_node.to_a[1].loc,
65
65
  "Input tag is missing an autocomplete attribute. If no "\
66
- "autocomplete behaviour is desired, use the value `off` or `nope`.",
66
+ "autocomplete behaviour is desired, use the value `off` or `nope`.",
67
67
  [autocomplete_attribute]
68
68
  )
69
69
  end
@@ -97,7 +97,7 @@ module ERBLint
97
97
  add_offense(
98
98
  erb_node.loc,
99
99
  "Input field helper is missing an autocomplete attribute. If no "\
100
- "autocomplete behaviour is desired, use the value `off` or `nope`.",
100
+ "autocomplete behaviour is desired, use the value `off` or `nope`.",
101
101
  [erb_node, send_node]
102
102
  )
103
103
  end
@@ -74,8 +74,8 @@ module ERBLint
74
74
 
75
75
  def tag_helper?(send_node)
76
76
  send_node&.method_name?(:javascript_tag) ||
77
- send_node&.method_name?(:javascript_include_tag) ||
78
- send_node&.method_name?(:javascript_pack_tag)
77
+ send_node&.method_name?(:javascript_include_tag) ||
78
+ send_node&.method_name?(:javascript_pack_tag)
79
79
  end
80
80
 
81
81
  def code_comment?(indicator_node)
@@ -13,6 +13,7 @@ module ERBLint
13
13
  class ConfigSchema < LinterConfig
14
14
  property :only, accepts: array_of?(String)
15
15
  property :rubocop_config, accepts: Hash, default: -> { {} }
16
+ property :config_file_path, accepts: String
16
17
  end
17
18
 
18
19
  self.config_schema = ConfigSchema
@@ -24,7 +25,8 @@ module ERBLint
24
25
  def initialize(file_loader, config)
25
26
  super
26
27
  @only_cops = @config.only
27
- custom_config = config_from_hash(@config.rubocop_config)
28
+ custom_config = config_from_path(@config.config_file_path) if @config.config_file_path
29
+ custom_config ||= config_from_hash(@config.rubocop_config)
28
30
  @rubocop_config = ::RuboCop::ConfigLoader.merge_with_default(custom_config, "")
29
31
  end
30
32
 
@@ -37,6 +39,7 @@ module ERBLint
37
39
  if ::RuboCop::Version::STRING.to_f >= 0.87
38
40
  def autocorrect(_processed_source, offense)
39
41
  return unless offense.context
42
+
40
43
  rubocop_correction = offense.context[:rubocop_correction]
41
44
  return unless rubocop_correction
42
45
 
@@ -150,40 +153,20 @@ module ERBLint
150
153
  @rubocop_config,
151
154
  extra_details: true,
152
155
  display_cop_names: true,
156
+ autocorrect: true,
153
157
  auto_correct: true,
154
158
  stdin: "",
155
159
  )
156
160
  end
157
161
 
158
162
  def config_from_hash(hash)
159
- inherit_from = hash&.delete("inherit_from")
160
- resolve_inheritance(hash, inherit_from)
161
-
162
163
  tempfile_from(".erblint-rubocop", hash.to_yaml) do |tempfile|
163
- ::RuboCop::ConfigLoader.load_file(tempfile.path)
164
+ config_from_path(tempfile.path)
164
165
  end
165
166
  end
166
167
 
167
- def resolve_inheritance(hash, inherit_from)
168
- base_configs(inherit_from)
169
- .reverse_each do |base_config|
170
- base_config.each do |k, v|
171
- hash[k] = hash.key?(k) ? ::RuboCop::ConfigLoader.merge(v, hash[k]) : v if v.is_a?(Hash)
172
- end
173
- end
174
- end
175
-
176
- def base_configs(inherit_from)
177
- regex = URI::DEFAULT_PARSER.make_regexp(["http", "https"])
178
- configs = Array(inherit_from).compact.map do |base_name|
179
- if base_name =~ /\A#{regex}\z/
180
- ::RuboCop::ConfigLoader.load_file(::RuboCop::RemoteConfig.new(base_name, Dir.pwd))
181
- else
182
- config_from_hash(@file_loader.yaml(base_name))
183
- end
184
- end
185
-
186
- configs.compact
168
+ def config_from_path(path)
169
+ ::RuboCop::ConfigLoader.load_file(path)
187
170
  end
188
171
 
189
172
  def add_offense(rubocop_offense, offense_range, correction, offset, bound_range)
@@ -10,6 +10,7 @@ module ERBLint
10
10
  class ConfigSchema < LinterConfig
11
11
  property :only, accepts: array_of?(String)
12
12
  property :rubocop_config, accepts: Hash
13
+ property :config_file_path, accepts: String
13
14
  end
14
15
 
15
16
  self.config_schema = ConfigSchema
@@ -37,6 +37,7 @@ module ERBLint
37
37
  end
38
38
 
39
39
  next unless @config.enforced_style == :never && tag.self_closing?
40
+
40
41
  end_solidus = tag_node.children.last
41
42
  add_offense(
42
43
  end_solidus.loc,
@@ -16,6 +16,7 @@ module ERBLint
16
16
  indicator_node, ltrim, code_node, rtrim = *erb_node
17
17
  indicator = indicator_node&.loc&.source
18
18
  next if indicator == "#" || indicator == "%"
19
+
19
20
  code = code_node.children.first
20
21
 
21
22
  start_spaces = code.match(START_SPACES)&.captures&.first || ""
@@ -23,7 +24,7 @@ module ERBLint
23
24
  add_offense(
24
25
  code_node.loc.resize(start_spaces.size),
25
26
  "Use 1 space after `<%#{indicator}#{ltrim&.loc&.source}` "\
26
- "instead of #{start_spaces.size} space#{"s" if start_spaces.size > 1}.",
27
+ "instead of #{start_spaces.size} space#{"s" if start_spaces.size > 1}.",
27
28
  " "
28
29
  )
29
30
  elsif start_spaces.count("\n") > 1
@@ -31,7 +32,7 @@ module ERBLint
31
32
  add_offense(
32
33
  code_node.loc.resize(start_spaces.size),
33
34
  "Use 1 newline after `<%#{indicator&.loc&.source}#{ltrim&.loc&.source}` "\
34
- "instead of #{start_spaces.count("\n")}.",
35
+ "instead of #{start_spaces.count("\n")}.",
35
36
  "#{lines.first}\n#{lines.last}"
36
37
  )
37
38
  end
@@ -41,7 +42,7 @@ module ERBLint
41
42
  add_offense(
42
43
  code_node.loc.end.adjust(begin_pos: -end_spaces.size),
43
44
  "Use 1 space before `#{rtrim&.loc&.source}%>` "\
44
- "instead of #{end_spaces.size} space#{"s" if start_spaces.size > 1}.",
45
+ "instead of #{end_spaces.size} space#{"s" if start_spaces.size > 1}.",
45
46
  " "
46
47
  )
47
48
  elsif end_spaces.count("\n") > 1
@@ -49,7 +50,7 @@ module ERBLint
49
50
  add_offense(
50
51
  code_node.loc.end.adjust(begin_pos: -end_spaces.size),
51
52
  "Use 1 newline before `#{rtrim&.loc&.source}%>` "\
52
- "instead of #{end_spaces.count("\n")}.",
53
+ "instead of #{end_spaces.count("\n")}.",
53
54
  "#{lines.first}\n#{lines.last}"
54
55
  )
55
56
  end
@@ -98,6 +98,7 @@ module ERBLint
98
98
  no_space(processed_source, equal.loc.end_pos...value.loc.begin_pos) if equal && value
99
99
 
100
100
  next if index >= attributes.children.size - 1
101
+
101
102
  next_attribute = attributes.children[index + 1]
102
103
 
103
104
  single_space_or_newline(
@@ -9,6 +9,7 @@ module ERBLint
9
9
  unless source_range.is_a?(Parser::Source::Range)
10
10
  raise ArgumentError, "expected Parser::Source::Range for arg 2"
11
11
  end
12
+
12
13
  @linter = linter
13
14
  @source_range = source_range
14
15
  @message = message
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "active_support/core_ext/class"
3
4
  require "active_support/core_ext/module/delegation"
4
5
 
@@ -34,6 +35,7 @@ module ERBLint
34
35
  private
35
36
 
36
37
  attr_reader :stats, :autocorrect
38
+
37
39
  delegate :processed_files, to: :stats
38
40
  end
39
41
  end
@@ -4,8 +4,7 @@ module ERBLint
4
4
  module Reporters
5
5
  class CompactReporter < Reporter
6
6
  def preview
7
- puts "Linting #{stats.files} files with "\
8
- "#{stats.linters} #{"autocorrectable " if autocorrect}linters..."
7
+ puts "#{linting} #{stats.files} files with #{linters}..."
9
8
  end
10
9
 
11
10
  def show
@@ -21,6 +20,14 @@ module ERBLint
21
20
 
22
21
  private
23
22
 
23
+ def linting
24
+ "Linting" + (autocorrect ? " and autocorrecting" : "")
25
+ end
26
+
27
+ def linters
28
+ "#{stats.linters} linters" + (autocorrect ? " (#{stats.autocorrectable_linters} autocorrectable)" : "")
29
+ end
30
+
24
31
  def format_offense(filename, offense)
25
32
  [
26
33
  "#{filename}:",
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative "compact_reporter"
3
4
 
4
5
  module ERBLint
@@ -28,6 +28,7 @@ module ERBLint
28
28
  end
29
29
  linter_klass = LinterRegistry.find_by_name(klass_name)
30
30
  raise Error, "#{klass_name}: linter not found (is it loaded?)" unless linter_klass
31
+
31
32
  linter_klass.config_schema.new(config_hash_for_linter(klass_name))
32
33
  end
33
34
 
@@ -28,6 +28,7 @@ module ERBLint
28
28
  base_configs(file_loader, inherited_files).reverse_each do |base_config|
29
29
  base_config.each do |k, v|
30
30
  next unless v.is_a?(Hash)
31
+
31
32
  v = v.deep_merge(hash[k]) if hash.key?(k)
32
33
  hash[k] = v
33
34
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module ERBLint
3
4
  class Stats
4
5
  attr_accessor :ignored,
@@ -6,6 +7,7 @@ module ERBLint
6
7
  :corrected,
7
8
  :exceptions,
8
9
  :linters,
10
+ :autocorrectable_linters,
9
11
  :files,
10
12
  :processed_files
11
13
 
@@ -15,6 +17,7 @@ module ERBLint
15
17
  corrected: 0,
16
18
  exceptions: 0,
17
19
  linters: 0,
20
+ autocorrectable_linters: 0,
18
21
  files: 0,
19
22
  processed_files: {}
20
23
  )
@@ -23,6 +26,7 @@ module ERBLint
23
26
  @corrected = corrected
24
27
  @exceptions = exceptions
25
28
  @linters = linters
29
+ @autocorrectable_linters = autocorrectable_linters
26
30
  @files = files
27
31
  @processed_files = processed_files
28
32
  end
@@ -194,6 +194,7 @@ module ERBLint
194
194
 
195
195
  def find_entry(range)
196
196
  return unless range
197
+
197
198
  @entries.find do |entry|
198
199
  entry.contains_ruby_range?(Range.new(range.begin_pos, range.end_pos))
199
200
  end
@@ -64,7 +64,7 @@ module ERBLint
64
64
  else
65
65
  raise TypeError,
66
66
  "Expected a Parser::Source::Range, Comment or " \
67
- "Rubocop::AST::Node, got #{node_or_range.class}"
67
+ "Rubocop::AST::Node, got #{node_or_range.class}"
68
68
  end
69
69
  end
70
70
  end
@@ -17,6 +17,7 @@ module ERBLint
17
17
 
18
18
  def ruby_to_erb(node, indicator = nil, &block)
19
19
  return node if node.nil? || node.is_a?(String)
20
+
20
21
  case node.type
21
22
  when :str, :sym
22
23
  s = node.children.first.to_s
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ERBLint
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
metadata CHANGED
@@ -1,31 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erb_lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Chan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-07-28 00:00:00.000000000 Z
11
+ date: 2022-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: better_html
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: 1.0.7
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: 1.0.7
27
- - !ruby/object:Gem::Dependency
28
- name: html_tokenizer
14
+ name: activesupport
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - ">="
@@ -39,19 +25,19 @@ dependencies:
39
25
  - !ruby/object:Gem::Version
40
26
  version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
- name: rubocop
28
+ name: better_html
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '0'
33
+ version: 2.0.1
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - ">="
53
39
  - !ruby/object:Gem::Version
54
- version: '0'
40
+ version: 2.0.1
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: parser
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +53,7 @@ dependencies:
67
53
  - !ruby/object:Gem::Version
68
54
  version: 2.7.1.4
69
55
  - !ruby/object:Gem::Dependency
70
- name: activesupport
56
+ name: rainbow
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ">="
@@ -81,7 +67,7 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: smart_properties
70
+ name: rubocop
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
@@ -95,7 +81,7 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: rainbow
84
+ name: smart_properties
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - ">="
@@ -215,14 +201,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
215
201
  requirements:
216
202
  - - ">="
217
203
  - !ruby/object:Gem::Version
218
- version: 2.5.0
204
+ version: 2.7.0
219
205
  required_rubygems_version: !ruby/object:Gem::Requirement
220
206
  requirements:
221
207
  - - ">="
222
208
  - !ruby/object:Gem::Version
223
209
  version: '0'
224
210
  requirements: []
225
- rubygems_version: 3.2.20
211
+ rubygems_version: 3.3.3
226
212
  signing_key:
227
213
  specification_version: 4
228
214
  summary: ERB lint tool