erb_lint 0.1.1 → 0.2.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: 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