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 +4 -4
- data/lib/erb_lint/cli.rb +16 -7
- data/lib/erb_lint/corrector.rb +1 -1
- data/lib/erb_lint/linter.rb +1 -1
- data/lib/erb_lint/linter_config.rb +7 -2
- data/lib/erb_lint/linters/allowed_script_type.rb +4 -3
- data/lib/erb_lint/linters/deprecated_classes.rb +1 -0
- data/lib/erb_lint/linters/hard_coded_string.rb +3 -0
- data/lib/erb_lint/linters/no_javascript_tag_helper.rb +3 -1
- data/lib/erb_lint/linters/partial_instance_variable.rb +1 -1
- data/lib/erb_lint/linters/require_input_autocomplete.rb +2 -2
- data/lib/erb_lint/linters/require_script_nonce.rb +2 -2
- data/lib/erb_lint/linters/rubocop.rb +8 -25
- data/lib/erb_lint/linters/rubocop_text.rb +1 -0
- data/lib/erb_lint/linters/self_closing_tag.rb +1 -0
- data/lib/erb_lint/linters/space_around_erb_tag.rb +5 -4
- data/lib/erb_lint/linters/space_in_html_tag.rb +1 -0
- data/lib/erb_lint/offense.rb +1 -0
- data/lib/erb_lint/reporter.rb +2 -0
- data/lib/erb_lint/reporters/compact_reporter.rb +9 -2
- data/lib/erb_lint/reporters/multiline_reporter.rb +1 -0
- data/lib/erb_lint/runner_config.rb +1 -0
- data/lib/erb_lint/runner_config_resolver.rb +1 -0
- data/lib/erb_lint/stats.rb +4 -0
- data/lib/erb_lint/utils/block_map.rb +1 -0
- data/lib/erb_lint/utils/offset_corrector.rb +1 -1
- data/lib/erb_lint/utils/ruby_to_erb.rb +1 -0
- data/lib/erb_lint/version.rb +1 -1
- metadata +11 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f417b343f6b0b891bd095ba568b2d50e78bb7d619b637b3bf2d70f2607f990cc
|
4
|
+
data.tar.gz: 1c080ab44d8238ad32138babe65076626e82974a96a13a1f4041bf7b9568b6ec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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|
|
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
|
-
|
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
|
data/lib/erb_lint/corrector.rb
CHANGED
@@ -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
|
|
data/lib/erb_lint/linter.rb
CHANGED
@@ -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?(
|
56
|
+
def excludes_file?(absolute_filename, base_path)
|
55
57
|
exclude.any? do |path|
|
56
|
-
File.fnmatch?(path,
|
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
|
-
|
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
|
-
|
54
|
-
|
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?
|
@@ -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
|
-
|
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?(
|
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
|
-
|
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
|
-
|
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
|
-
|
78
|
-
|
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 =
|
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
|
-
|
164
|
+
config_from_path(tempfile.path)
|
164
165
|
end
|
165
166
|
end
|
166
167
|
|
167
|
-
def
|
168
|
-
|
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)
|
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
53
|
+
"instead of #{end_spaces.count("\n")}.",
|
53
54
|
"#{lines.first}\n#{lines.last}"
|
54
55
|
)
|
55
56
|
end
|
data/lib/erb_lint/offense.rb
CHANGED
data/lib/erb_lint/reporter.rb
CHANGED
@@ -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 "
|
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}:",
|
data/lib/erb_lint/stats.rb
CHANGED
@@ -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
|
data/lib/erb_lint/version.rb
CHANGED
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.
|
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:
|
11
|
+
date: 2022-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
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:
|
28
|
+
name: better_html
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - ">="
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
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:
|
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:
|
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:
|
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:
|
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.
|
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.
|
211
|
+
rubygems_version: 3.3.3
|
226
212
|
signing_key:
|
227
213
|
specification_version: 4
|
228
214
|
summary: ERB lint tool
|