erb_lint 0.1.3 → 0.9.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/exe/erb_lint +10 -0
- data/exe/erblint +5 -4
- data/lib/erb_lint/all.rb +2 -0
- data/lib/erb_lint/cache.rb +88 -0
- data/lib/erb_lint/cached_offense.rb +58 -0
- data/lib/erb_lint/cli.rb +117 -22
- data/lib/erb_lint/corrector.rb +6 -17
- data/lib/erb_lint/file_loader.rb +2 -8
- data/lib/erb_lint/linter.rb +28 -2
- data/lib/erb_lint/linter_registry.rb +11 -1
- data/lib/erb_lint/linters/allowed_script_type.rb +8 -7
- data/lib/erb_lint/linters/closing_erb_tag_indent.rb +3 -3
- data/lib/erb_lint/linters/comment_syntax.rb +52 -0
- data/lib/erb_lint/linters/deprecated_classes.rb +2 -2
- data/lib/erb_lint/linters/erb_safety.rb +1 -1
- data/lib/erb_lint/linters/extra_newline.rb +1 -1
- data/lib/erb_lint/linters/final_newline.rb +4 -4
- data/lib/erb_lint/linters/hard_coded_string.rb +7 -4
- data/lib/erb_lint/linters/no_javascript_tag_helper.rb +6 -4
- data/lib/erb_lint/linters/no_unused_disable.rb +47 -0
- data/lib/erb_lint/linters/parser_errors.rb +1 -1
- data/lib/erb_lint/linters/partial_instance_variable.rb +2 -2
- data/lib/erb_lint/linters/require_input_autocomplete.rb +4 -4
- data/lib/erb_lint/linters/require_script_nonce.rb +2 -2
- data/lib/erb_lint/linters/right_trim.rb +1 -1
- data/lib/erb_lint/linters/rubocop.rb +32 -83
- data/lib/erb_lint/linters/rubocop_text.rb +2 -1
- data/lib/erb_lint/linters/self_closing_tag.rb +22 -5
- data/lib/erb_lint/linters/space_around_erb_tag.rb +8 -8
- data/lib/erb_lint/linters/space_in_html_tag.rb +7 -7
- data/lib/erb_lint/linters/space_indentation.rb +1 -1
- data/lib/erb_lint/linters/strict_locals.rb +50 -0
- data/lib/erb_lint/linters/trailing_whitespace.rb +1 -1
- data/lib/erb_lint/offense.rb +30 -3
- data/lib/erb_lint/processed_source.rb +1 -1
- data/lib/erb_lint/reporter.rb +3 -2
- data/lib/erb_lint/reporters/compact_reporter.rb +3 -2
- data/lib/erb_lint/reporters/gitlab_reporter.rb +55 -0
- data/lib/erb_lint/reporters/json_reporter.rb +4 -4
- data/lib/erb_lint/reporters/junit_reporter.rb +63 -0
- data/lib/erb_lint/reporters/multiline_reporter.rb +6 -1
- data/lib/erb_lint/runner.rb +36 -3
- data/lib/erb_lint/runner_config.rb +2 -1
- data/lib/erb_lint/runner_config_resolver.rb +1 -1
- data/lib/erb_lint/utils/block_map.rb +4 -4
- data/lib/erb_lint/utils/inline_configs.rb +15 -0
- data/lib/erb_lint/utils/severity_levels.rb +8 -2
- data/lib/erb_lint/version.rb +1 -1
- metadata +21 -28
- data/lib/erb_lint/utils/offset_corrector.rb +0 -72
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ERBLint
|
4
|
+
module Linters
|
5
|
+
# Enforces the use of strict locals in Rails view partial templates.
|
6
|
+
class StrictLocals < Linter
|
7
|
+
include LinterRegistry
|
8
|
+
|
9
|
+
STRICT_LOCALS_REGEX = /\s+locals:\s+\((.*)\)/
|
10
|
+
|
11
|
+
def initialize(file_loader, config)
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def run(processed_source)
|
16
|
+
return unless processed_source.filename.match?(%r{(\A|.*/)_[^/\s]*\.html\.erb\z})
|
17
|
+
|
18
|
+
file_content = processed_source.file_content
|
19
|
+
return if file_content.empty?
|
20
|
+
|
21
|
+
strict_locals_node = processed_source.ast.descendants(:erb).find do |erb_node|
|
22
|
+
indicator_node, _, code_node, _ = *erb_node
|
23
|
+
|
24
|
+
indicator_node_str = indicator_node&.deconstruct&.last
|
25
|
+
next unless indicator_node_str == "#"
|
26
|
+
|
27
|
+
code_node_str = code_node&.deconstruct&.last
|
28
|
+
|
29
|
+
code_node_str.match(STRICT_LOCALS_REGEX)
|
30
|
+
end
|
31
|
+
|
32
|
+
unless strict_locals_node
|
33
|
+
add_offense(
|
34
|
+
processed_source.to_source_range(0...processed_source.file_content.size),
|
35
|
+
<<~EOF.chomp,
|
36
|
+
Missing strict locals declaration.
|
37
|
+
Add <%# locals: () %> at the top of the file to enforce strict locals.
|
38
|
+
EOF
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def autocorrect(_processed_source, offense)
|
44
|
+
lambda do |corrector|
|
45
|
+
corrector.insert_before(offense.source_range, "<%# locals: () %>\n")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/erb_lint/offense.rb
CHANGED
@@ -15,12 +15,17 @@ module ERBLint
|
|
15
15
|
@message = message
|
16
16
|
@context = context
|
17
17
|
@severity = severity
|
18
|
+
@disabled = false
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_cached_offense_hash
|
22
|
+
ERBLint::CachedOffense.new_from_offense(self).to_h
|
18
23
|
end
|
19
24
|
|
20
25
|
def inspect
|
21
|
-
"#<#{self.class.name} linter=#{linter.class.name} "\
|
22
|
-
"source_range=#{source_range.begin_pos}...#{source_range.end_pos} "\
|
23
|
-
"message=#{message}> "\
|
26
|
+
"#<#{self.class.name} linter=#{linter.class.name} " \
|
27
|
+
"source_range=#{source_range.begin_pos}...#{source_range.end_pos} " \
|
28
|
+
"message=#{message}> " \
|
24
29
|
"severity=#{severity}"
|
25
30
|
end
|
26
31
|
|
@@ -40,8 +45,30 @@ module ERBLint
|
|
40
45
|
line_range.begin
|
41
46
|
end
|
42
47
|
|
48
|
+
attr_writer :disabled
|
49
|
+
|
50
|
+
def disabled?
|
51
|
+
@disabled
|
52
|
+
end
|
53
|
+
|
43
54
|
def column
|
44
55
|
source_range.column
|
45
56
|
end
|
57
|
+
|
58
|
+
def simple_name
|
59
|
+
linter.class.simple_name
|
60
|
+
end
|
61
|
+
|
62
|
+
def last_line
|
63
|
+
source_range.last_line
|
64
|
+
end
|
65
|
+
|
66
|
+
def last_column
|
67
|
+
source_range.last_column
|
68
|
+
end
|
69
|
+
|
70
|
+
def length
|
71
|
+
source_range.length
|
72
|
+
end
|
46
73
|
end
|
47
74
|
end
|
data/lib/erb_lint/reporter.rb
CHANGED
@@ -23,9 +23,10 @@ module ERBLint
|
|
23
23
|
.sort
|
24
24
|
end
|
25
25
|
|
26
|
-
def initialize(stats, autocorrect)
|
26
|
+
def initialize(stats, autocorrect, show_linter_names = false)
|
27
27
|
@stats = stats
|
28
28
|
@autocorrect = autocorrect
|
29
|
+
@show_linter_names = show_linter_names
|
29
30
|
end
|
30
31
|
|
31
32
|
def preview; end
|
@@ -34,7 +35,7 @@ module ERBLint
|
|
34
35
|
|
35
36
|
private
|
36
37
|
|
37
|
-
attr_reader :stats, :autocorrect
|
38
|
+
attr_reader :stats, :autocorrect, :show_linter_names
|
38
39
|
|
39
40
|
delegate :processed_files, to: :stats
|
40
41
|
end
|
@@ -33,8 +33,9 @@ module ERBLint
|
|
33
33
|
"#{filename}:",
|
34
34
|
"#{offense.line_number}:",
|
35
35
|
"#{offense.column}: ",
|
36
|
+
("[#{offense.simple_name}] " if show_linter_names),
|
36
37
|
offense.message.to_s,
|
37
|
-
].join
|
38
|
+
].compact.join
|
38
39
|
end
|
39
40
|
|
40
41
|
def footer; end
|
@@ -60,7 +61,7 @@ module ERBLint
|
|
60
61
|
|
61
62
|
if corrected_found_diff > 0
|
62
63
|
message = Rainbow(
|
63
|
-
"#{stats.corrected} error(s) corrected and #{corrected_found_diff} error(s) remaining in ERB files"
|
64
|
+
"#{stats.corrected} error(s) corrected and #{corrected_found_diff} error(s) remaining in ERB files",
|
64
65
|
).red
|
65
66
|
|
66
67
|
warn(message)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
module ERBLint
|
6
|
+
module Reporters
|
7
|
+
class GitlabReporter < Reporter
|
8
|
+
def preview; end
|
9
|
+
|
10
|
+
def show
|
11
|
+
puts formatted_data
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def formatted_data
|
17
|
+
formatted_files.to_json
|
18
|
+
end
|
19
|
+
|
20
|
+
def formatted_files
|
21
|
+
processed_files.flat_map do |filename, offenses|
|
22
|
+
formatted_offenses(filename, offenses)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def formatted_offenses(filename, offenses)
|
27
|
+
offenses.map do |offense|
|
28
|
+
format_offense(filename, offense)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def format_offense(filename, offense)
|
33
|
+
{
|
34
|
+
description: offense.message,
|
35
|
+
check_name: offense.simple_name,
|
36
|
+
fingerprint: generate_fingerprint(filename, offense),
|
37
|
+
severity: offense.severity,
|
38
|
+
location: {
|
39
|
+
path: filename,
|
40
|
+
lines: {
|
41
|
+
begin: offense.line_number,
|
42
|
+
end: offense.last_line,
|
43
|
+
},
|
44
|
+
},
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def generate_fingerprint(filename, offense)
|
49
|
+
Digest::MD5.hexdigest(
|
50
|
+
"#{offense.simple_name}@#{filename}:#{offense.line_number}:#{offense.last_line}",
|
51
|
+
)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -56,14 +56,14 @@ module ERBLint
|
|
56
56
|
|
57
57
|
def format_offense(offense)
|
58
58
|
{
|
59
|
-
linter: offense.
|
59
|
+
linter: offense.simple_name,
|
60
60
|
message: offense.message.to_s,
|
61
61
|
location: {
|
62
62
|
start_line: offense.line_number,
|
63
63
|
start_column: offense.column,
|
64
|
-
last_line: offense.
|
65
|
-
last_column: offense.
|
66
|
-
length: offense.
|
64
|
+
last_line: offense.last_line,
|
65
|
+
last_column: offense.last_column,
|
66
|
+
length: offense.length,
|
67
67
|
},
|
68
68
|
}
|
69
69
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ERBLint
|
4
|
+
module Reporters
|
5
|
+
class JunitReporter < Reporter
|
6
|
+
ESCAPE_MAP = {
|
7
|
+
'"' => """,
|
8
|
+
"'" => "'",
|
9
|
+
"<" => "<",
|
10
|
+
">" => ">",
|
11
|
+
"&" => "&",
|
12
|
+
}.freeze
|
13
|
+
|
14
|
+
PROPERTIES = [
|
15
|
+
["erb_lint_version", ERBLint::VERSION],
|
16
|
+
["ruby_engine", RUBY_ENGINE],
|
17
|
+
["ruby_version", RUBY_VERSION],
|
18
|
+
["ruby_patchlevel", RUBY_PATCHLEVEL.to_s],
|
19
|
+
["ruby_platform", RUBY_PLATFORM],
|
20
|
+
].freeze
|
21
|
+
|
22
|
+
def preview; end
|
23
|
+
|
24
|
+
def show
|
25
|
+
puts %(<?xml version="1.0" encoding="UTF-8"?>)
|
26
|
+
puts %(<testsuite name="erblint" tests="#{@stats.processed_files.size}" failures="#{@stats.found}">)
|
27
|
+
|
28
|
+
puts %( <properties>)
|
29
|
+
PROPERTIES.each do |key, value|
|
30
|
+
puts %( <property name="#{xml_escape(key)}" value="#{xml_escape(value)}"/>)
|
31
|
+
end
|
32
|
+
puts %( </properties>)
|
33
|
+
|
34
|
+
processed_files.each do |filename, offenses|
|
35
|
+
filename_escaped = xml_escape(filename)
|
36
|
+
if offenses.empty?
|
37
|
+
puts %( <testcase name="#{filename_escaped}" file="#{filename_escaped}"/>)
|
38
|
+
else
|
39
|
+
offenses.each do |offense|
|
40
|
+
type = offense.simple_name
|
41
|
+
message = "#{type}: #{offense.message}"
|
42
|
+
body = "#{message} at #{filename}:#{offense.line_number}:#{offense.column}"
|
43
|
+
|
44
|
+
puts %( <testcase name="#{filename_escaped}" file="#{filename_escaped}" lineno="#{offense.line_number}">)
|
45
|
+
puts %( <failure message="#{xml_escape(message)}" type="#{xml_escape(type)}">)
|
46
|
+
puts %( #{xml_escape(body)})
|
47
|
+
puts %( </failure>)
|
48
|
+
puts %( </testcase>)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
puts %(</testsuite>)
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def xml_escape(string)
|
59
|
+
string.gsub(Regexp.union(ESCAPE_MAP.keys), ESCAPE_MAP)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -8,9 +8,14 @@ module ERBLint
|
|
8
8
|
private
|
9
9
|
|
10
10
|
def format_offense(filename, offense)
|
11
|
+
details = "#{offense.message}#{Rainbow(" (not autocorrected)").red if autocorrect}"
|
12
|
+
if show_linter_names
|
13
|
+
details = "[#{offense.simple_name}] " + details
|
14
|
+
end
|
15
|
+
|
11
16
|
<<~EOF
|
12
17
|
|
13
|
-
#{
|
18
|
+
#{details}
|
14
19
|
In file: #{filename}:#{offense.line_number}
|
15
20
|
EOF
|
16
21
|
end
|
data/lib/erb_lint/runner.rb
CHANGED
@@ -5,15 +5,19 @@ module ERBLint
|
|
5
5
|
class Runner
|
6
6
|
attr_reader :offenses
|
7
7
|
|
8
|
-
def initialize(file_loader, config)
|
8
|
+
def initialize(file_loader, config, disable_inline_configs = false)
|
9
9
|
@file_loader = file_loader
|
10
10
|
@config = config || RunnerConfig.default
|
11
11
|
raise ArgumentError, "expect `config` to be a RunnerConfig instance" unless @config.is_a?(RunnerConfig)
|
12
12
|
|
13
|
-
linter_classes = LinterRegistry.linters.select
|
13
|
+
linter_classes = LinterRegistry.linters.select do |klass|
|
14
|
+
@config.for_linter(klass).enabled? && klass != ERBLint::Linters::NoUnusedDisable
|
15
|
+
end
|
14
16
|
@linters = linter_classes.map do |linter_class|
|
15
17
|
linter_class.new(@file_loader, @config.for_linter(linter_class))
|
16
18
|
end
|
19
|
+
@no_unused_disable = nil
|
20
|
+
@disable_inline_configs = disable_inline_configs
|
17
21
|
@offenses = []
|
18
22
|
end
|
19
23
|
|
@@ -21,14 +25,43 @@ module ERBLint
|
|
21
25
|
@linters
|
22
26
|
.reject { |linter| linter.excludes_file?(processed_source.filename) }
|
23
27
|
.each do |linter|
|
24
|
-
linter.
|
28
|
+
linter.run_and_update_offense_status(processed_source, enable_inline_configs?)
|
25
29
|
@offenses.concat(linter.offenses)
|
26
30
|
end
|
31
|
+
report_unused_disable(processed_source)
|
32
|
+
@offenses = @offenses.reject(&:disabled?)
|
27
33
|
end
|
28
34
|
|
29
35
|
def clear_offenses
|
30
36
|
@offenses = []
|
31
37
|
@linters.each(&:clear_offenses)
|
38
|
+
@no_unused_disable&.clear_offenses
|
39
|
+
end
|
40
|
+
|
41
|
+
def restore_offenses(offenses)
|
42
|
+
@offenses.concat(offenses)
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def enable_inline_configs?
|
48
|
+
!@disable_inline_configs
|
49
|
+
end
|
50
|
+
|
51
|
+
def no_unused_disable_enabled?
|
52
|
+
LinterRegistry.linters.include?(ERBLint::Linters::NoUnusedDisable) &&
|
53
|
+
@config.for_linter(ERBLint::Linters::NoUnusedDisable).enabled?
|
54
|
+
end
|
55
|
+
|
56
|
+
def report_unused_disable(processed_source)
|
57
|
+
if no_unused_disable_enabled? && enable_inline_configs?
|
58
|
+
@no_unused_disable = ERBLint::Linters::NoUnusedDisable.new(
|
59
|
+
@file_loader,
|
60
|
+
@config.for_linter(ERBLint::Linters::NoUnusedDisable),
|
61
|
+
)
|
62
|
+
@no_unused_disable.run(processed_source, @offenses)
|
63
|
+
@offenses.concat(@no_unused_disable.offenses)
|
64
|
+
end
|
32
65
|
end
|
33
66
|
end
|
34
67
|
end
|
@@ -63,6 +63,7 @@ module ERBLint
|
|
63
63
|
SpaceInHtmlTag: { enabled: default_enabled },
|
64
64
|
TrailingWhitespace: { enabled: default_enabled },
|
65
65
|
RequireInputAutocomplete: { enabled: default_enabled },
|
66
|
+
CommentSyntax: { enabled: default_enabled },
|
66
67
|
},
|
67
68
|
)
|
68
69
|
end
|
@@ -82,7 +83,7 @@ module ERBLint
|
|
82
83
|
def config_hash_for_linter(klass_name)
|
83
84
|
config_hash = linters_config[klass_name] || {}
|
84
85
|
config_hash["exclude"] ||= []
|
85
|
-
config_hash["exclude"].concat(global_exclude) if config_hash["exclude"].is_a?(Array)
|
86
|
+
config_hash["exclude"].concat(global_exclude).uniq! if config_hash["exclude"].is_a?(Array)
|
86
87
|
config_hash
|
87
88
|
end
|
88
89
|
|
@@ -37,7 +37,7 @@ module ERBLint
|
|
37
37
|
|
38
38
|
def resolve_inheritance_from_gems(hash, gems)
|
39
39
|
(gems || {}).each_pair do |gem_name, config_path|
|
40
|
-
raise(ArgumentError, "can't inherit configuration from the
|
40
|
+
raise(ArgumentError, "can't inherit configuration from the erb_lint gem") if gem_name == "erb_lint"
|
41
41
|
|
42
42
|
hash["inherit_from"] = Array(hash["inherit_from"])
|
43
43
|
Array(config_path).reverse_each do |path|
|
@@ -60,7 +60,7 @@ module ERBLint
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def inspect
|
63
|
-
"
|
63
|
+
"#<#{self.class.name} type=#{type.inspect} nodes=#{nodes.inspect}>"
|
64
64
|
end
|
65
65
|
|
66
66
|
def &(other)
|
@@ -102,7 +102,7 @@ module ERBLint
|
|
102
102
|
node.type,
|
103
103
|
extract_map_locations(node)
|
104
104
|
.map { |loc| find_entry(loc) }
|
105
|
-
.compact.map(&:node)
|
105
|
+
.compact.map(&:node),
|
106
106
|
)
|
107
107
|
end
|
108
108
|
|
@@ -111,7 +111,7 @@ module ERBLint
|
|
111
111
|
:begin,
|
112
112
|
(extract_map_locations(node) + rescue_locations(node))
|
113
113
|
.map { |loc| find_entry(loc) }
|
114
|
-
.compact.map(&:node)
|
114
|
+
.compact.map(&:node),
|
115
115
|
)
|
116
116
|
end
|
117
117
|
|
@@ -120,7 +120,7 @@ module ERBLint
|
|
120
120
|
node.type,
|
121
121
|
(extract_map_locations(node) + when_locations(node))
|
122
122
|
.map { |loc| find_entry(loc) }
|
123
|
-
.compact.map(&:node)
|
123
|
+
.compact.map(&:node),
|
124
124
|
)
|
125
125
|
end
|
126
126
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ERBLint
|
4
|
+
module Utils
|
5
|
+
class InlineConfigs
|
6
|
+
def self.rule_disable_comment_for_lines?(rule, lines)
|
7
|
+
lines.match?(/# erb_?lint:disable (?<rules>.*#{rule}).*/)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.disabled_rules(line)
|
11
|
+
line.match(/# erb_?lint:disable (?<rules>.*) %>/)&.named_captures&.fetch("rules")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -5,8 +5,14 @@ module ERBLint
|
|
5
5
|
module SeverityLevels
|
6
6
|
SEVERITY_NAMES = [:info, :refactor, :convention, :warning, :error, :fatal].freeze
|
7
7
|
|
8
|
-
SEVERITY_CODE_TABLE = {
|
9
|
-
|
8
|
+
SEVERITY_CODE_TABLE = {
|
9
|
+
I: :info,
|
10
|
+
R: :refactor,
|
11
|
+
C: :convention,
|
12
|
+
W: :warning,
|
13
|
+
E: :error,
|
14
|
+
F: :fatal,
|
15
|
+
}.freeze
|
10
16
|
|
11
17
|
def severity_level_for_name(name)
|
12
18
|
SEVERITY_NAMES.index(name || :error) + 1
|
data/lib/erb_lint/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erb_lint
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Chan
|
8
|
-
|
8
|
+
- Shopify Developers
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -26,32 +26,18 @@ dependencies:
|
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: better_html
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.0.7
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 1.0.7
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: html_tokenizer
|
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
|
@@ -86,14 +72,14 @@ dependencies:
|
|
86
72
|
requirements:
|
87
73
|
- - ">="
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
75
|
+
version: '1'
|
90
76
|
type: :runtime
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
80
|
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
82
|
+
version: '1'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: smart_properties
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -152,15 +138,19 @@ dependencies:
|
|
152
138
|
version: '0'
|
153
139
|
description: ERB Linter tool.
|
154
140
|
email:
|
155
|
-
-
|
141
|
+
- ruby@shopify.com
|
156
142
|
executables:
|
143
|
+
- erb_lint
|
157
144
|
- erblint
|
158
145
|
extensions: []
|
159
146
|
extra_rdoc_files: []
|
160
147
|
files:
|
148
|
+
- exe/erb_lint
|
161
149
|
- exe/erblint
|
162
150
|
- lib/erb_lint.rb
|
163
151
|
- lib/erb_lint/all.rb
|
152
|
+
- lib/erb_lint/cache.rb
|
153
|
+
- lib/erb_lint/cached_offense.rb
|
164
154
|
- lib/erb_lint/cli.rb
|
165
155
|
- lib/erb_lint/corrector.rb
|
166
156
|
- lib/erb_lint/file_loader.rb
|
@@ -169,12 +159,14 @@ files:
|
|
169
159
|
- lib/erb_lint/linter_registry.rb
|
170
160
|
- lib/erb_lint/linters/allowed_script_type.rb
|
171
161
|
- lib/erb_lint/linters/closing_erb_tag_indent.rb
|
162
|
+
- lib/erb_lint/linters/comment_syntax.rb
|
172
163
|
- lib/erb_lint/linters/deprecated_classes.rb
|
173
164
|
- lib/erb_lint/linters/erb_safety.rb
|
174
165
|
- lib/erb_lint/linters/extra_newline.rb
|
175
166
|
- lib/erb_lint/linters/final_newline.rb
|
176
167
|
- lib/erb_lint/linters/hard_coded_string.rb
|
177
168
|
- lib/erb_lint/linters/no_javascript_tag_helper.rb
|
169
|
+
- lib/erb_lint/linters/no_unused_disable.rb
|
178
170
|
- lib/erb_lint/linters/parser_errors.rb
|
179
171
|
- lib/erb_lint/linters/partial_instance_variable.rb
|
180
172
|
- lib/erb_lint/linters/require_input_autocomplete.rb
|
@@ -186,28 +178,30 @@ files:
|
|
186
178
|
- lib/erb_lint/linters/space_around_erb_tag.rb
|
187
179
|
- lib/erb_lint/linters/space_in_html_tag.rb
|
188
180
|
- lib/erb_lint/linters/space_indentation.rb
|
181
|
+
- lib/erb_lint/linters/strict_locals.rb
|
189
182
|
- lib/erb_lint/linters/trailing_whitespace.rb
|
190
183
|
- lib/erb_lint/offense.rb
|
191
184
|
- lib/erb_lint/processed_source.rb
|
192
185
|
- lib/erb_lint/reporter.rb
|
193
186
|
- lib/erb_lint/reporters/compact_reporter.rb
|
187
|
+
- lib/erb_lint/reporters/gitlab_reporter.rb
|
194
188
|
- lib/erb_lint/reporters/json_reporter.rb
|
189
|
+
- lib/erb_lint/reporters/junit_reporter.rb
|
195
190
|
- lib/erb_lint/reporters/multiline_reporter.rb
|
196
191
|
- lib/erb_lint/runner.rb
|
197
192
|
- lib/erb_lint/runner_config.rb
|
198
193
|
- lib/erb_lint/runner_config_resolver.rb
|
199
194
|
- lib/erb_lint/stats.rb
|
200
195
|
- lib/erb_lint/utils/block_map.rb
|
201
|
-
- lib/erb_lint/utils/
|
196
|
+
- lib/erb_lint/utils/inline_configs.rb
|
202
197
|
- lib/erb_lint/utils/ruby_to_erb.rb
|
203
198
|
- lib/erb_lint/utils/severity_levels.rb
|
204
199
|
- lib/erb_lint/version.rb
|
205
|
-
homepage: https://github.com/Shopify/
|
200
|
+
homepage: https://github.com/Shopify/erb_lint
|
206
201
|
licenses:
|
207
202
|
- MIT
|
208
203
|
metadata:
|
209
204
|
allowed_push_host: https://rubygems.org
|
210
|
-
post_install_message:
|
211
205
|
rdoc_options: []
|
212
206
|
require_paths:
|
213
207
|
- lib
|
@@ -215,15 +209,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
215
209
|
requirements:
|
216
210
|
- - ">="
|
217
211
|
- !ruby/object:Gem::Version
|
218
|
-
version: 2.
|
212
|
+
version: 2.7.0
|
219
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
220
214
|
requirements:
|
221
215
|
- - ">="
|
222
216
|
- !ruby/object:Gem::Version
|
223
217
|
version: '0'
|
224
218
|
requirements: []
|
225
|
-
rubygems_version: 3.
|
226
|
-
signing_key:
|
219
|
+
rubygems_version: 3.6.2
|
227
220
|
specification_version: 4
|
228
221
|
summary: ERB lint tool
|
229
222
|
test_files: []
|