haml_lint 0.21.0 → 0.22.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/config/default.yml +18 -0
- data/lib/haml_lint/adapter/haml_4.rb +40 -0
- data/lib/haml_lint/adapter/haml_5.rb +46 -0
- data/lib/haml_lint/adapter.rb +36 -0
- data/lib/haml_lint/cli.rb +12 -9
- data/lib/haml_lint/comment_configuration.rb +39 -0
- data/lib/haml_lint/directive.rb +128 -0
- data/lib/haml_lint/document.rb +3 -1
- data/lib/haml_lint/exceptions.rb +6 -0
- data/lib/haml_lint/haml_visitor.rb +4 -2
- data/lib/haml_lint/lint.rb +2 -2
- data/lib/haml_lint/linter/alignment_tabs.rb +12 -0
- data/lib/haml_lint/linter/consecutive_comments.rb +19 -2
- data/lib/haml_lint/linter/consecutive_silent_scripts.rb +18 -2
- data/lib/haml_lint/linter/final_newline.rb +6 -5
- data/lib/haml_lint/linter/id_names.rb +28 -0
- data/lib/haml_lint/linter/indentation.rb +4 -2
- data/lib/haml_lint/linter/instance_variables.rb +77 -0
- data/lib/haml_lint/linter/line_length.rb +5 -3
- data/lib/haml_lint/linter/repeated_id.rb +34 -0
- data/lib/haml_lint/linter/syntax.rb +6 -0
- data/lib/haml_lint/linter/trailing_whitespace.rb +5 -4
- data/lib/haml_lint/linter.rb +1 -1
- data/lib/haml_lint/logger.rb +7 -1
- data/lib/haml_lint/options.rb +20 -4
- data/lib/haml_lint/parsed_ruby.rb +22 -0
- data/lib/haml_lint/rake_task.rb +16 -2
- data/lib/haml_lint/report.rb +46 -2
- data/lib/haml_lint/reporter/default_reporter.rb +7 -29
- data/lib/haml_lint/reporter/hash_reporter.rb +51 -0
- data/lib/haml_lint/reporter/hooks.rb +25 -0
- data/lib/haml_lint/reporter/json_reporter.rb +2 -45
- data/lib/haml_lint/reporter/progress_reporter.rb +47 -0
- data/lib/haml_lint/reporter/utils.rb +101 -0
- data/lib/haml_lint/reporter.rb +4 -0
- data/lib/haml_lint/runner.rb +70 -10
- data/lib/haml_lint/severity.rb +95 -0
- data/lib/haml_lint/tree/haml_comment_node.rb +18 -0
- data/lib/haml_lint/tree/node.rb +116 -16
- data/lib/haml_lint/tree/null_node.rb +15 -0
- data/lib/haml_lint/tree/root_node.rb +16 -0
- data/lib/haml_lint/tree/script_node.rb +9 -0
- data/lib/haml_lint/tree/silent_script_node.rb +7 -0
- data/lib/haml_lint/tree/tag_node.rb +24 -5
- data/lib/haml_lint/version.rb +1 -1
- data/lib/haml_lint.rb +1 -0
- metadata +41 -4
@@ -7,14 +7,16 @@ module HamlLint
|
|
7
7
|
|
8
8
|
MSG = 'Line is too long. [%d/%d]'.freeze
|
9
9
|
|
10
|
-
def visit_root(
|
10
|
+
def visit_root(root)
|
11
11
|
max_length = config['max']
|
12
|
-
dummy_node = Struct.new(:line)
|
13
12
|
|
14
13
|
document.source_lines.each_with_index do |line, index|
|
15
14
|
next if line.length <= max_length
|
16
15
|
|
17
|
-
|
16
|
+
node = root.node_for_line(index + 1)
|
17
|
+
unless node.disabled?(self)
|
18
|
+
record_lint(node, format(MSG, line.length, max_length))
|
19
|
+
end
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module HamlLint
|
2
|
+
# Detects repeated instances of an element ID in a file
|
3
|
+
class Linter::RepeatedId < Linter
|
4
|
+
include LinterRegistry
|
5
|
+
|
6
|
+
MESSAGE_FORMAT = %{Do not repeat id "#%s" on the page}.freeze
|
7
|
+
|
8
|
+
def visit_tag(node)
|
9
|
+
id = node.tag_id
|
10
|
+
return unless id && !id.empty?
|
11
|
+
|
12
|
+
nodes = (id_map[id] << node)
|
13
|
+
case nodes.size
|
14
|
+
when 1 then return
|
15
|
+
when 2 then add_lints_for_first_duplications(nodes)
|
16
|
+
else add_lint(node, id)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def add_lint(node, id)
|
23
|
+
record_lint(node, MESSAGE_FORMAT % id)
|
24
|
+
end
|
25
|
+
|
26
|
+
def add_lints_for_first_duplications(nodes)
|
27
|
+
nodes.each { |node| add_lint(node, node.tag_id) }
|
28
|
+
end
|
29
|
+
|
30
|
+
def id_map
|
31
|
+
@id_map ||= Hash.new { |hash, key| hash[key] = [] }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -3,13 +3,14 @@ module HamlLint
|
|
3
3
|
class Linter::TrailingWhitespace < Linter
|
4
4
|
include LinterRegistry
|
5
5
|
|
6
|
-
def visit_root(
|
7
|
-
dummy_node = Struct.new(:line)
|
8
|
-
|
6
|
+
def visit_root(root)
|
9
7
|
document.source_lines.each_with_index do |line, index|
|
10
8
|
next unless line =~ /\s+$/
|
11
9
|
|
12
|
-
|
10
|
+
node = root.node_for_line(index + 1)
|
11
|
+
unless node.disabled?(self)
|
12
|
+
record_lint node, 'Line contains trailing whitespace'
|
13
|
+
end
|
13
14
|
end
|
14
15
|
end
|
15
16
|
end
|
data/lib/haml_lint/linter.rb
CHANGED
data/lib/haml_lint/logger.rb
CHANGED
@@ -5,6 +5,10 @@ module HamlLint
|
|
5
5
|
# @return [true,false]
|
6
6
|
attr_accessor :color_enabled
|
7
7
|
|
8
|
+
# Whether to output a summary in the log for certain reporters.
|
9
|
+
# @return [true,false]
|
10
|
+
attr_accessor :summary_enabled
|
11
|
+
|
8
12
|
# Creates a logger which outputs nothing.
|
9
13
|
# @return [HamlLint::Logger]
|
10
14
|
def self.silent
|
@@ -14,8 +18,10 @@ module HamlLint
|
|
14
18
|
# Creates a new {HamlLint::Logger} instance.
|
15
19
|
#
|
16
20
|
# @param out [IO] the output destination.
|
17
|
-
|
21
|
+
# @param summary [true,false] whether to print summaries
|
22
|
+
def initialize(out, summary: true)
|
18
23
|
@out = out
|
24
|
+
@summary_enabled = summary
|
19
25
|
end
|
20
26
|
|
21
27
|
# Print the specified output.
|
data/lib/haml_lint/options.rb
CHANGED
@@ -15,6 +15,7 @@ module HamlLint
|
|
15
15
|
|
16
16
|
add_linter_options parser
|
17
17
|
add_file_options parser
|
18
|
+
add_logger_options parser
|
18
19
|
add_info_options parser
|
19
20
|
end.parse!(args)
|
20
21
|
|
@@ -45,6 +46,15 @@ module HamlLint
|
|
45
46
|
'Specify which reporter you want to use to generate the output') do |reporter|
|
46
47
|
@options[:reporter] = load_reporter_class(reporter.capitalize)
|
47
48
|
end
|
49
|
+
|
50
|
+
parser.on('--fail-fast', 'Fail after the first file with lint above the fail level') do
|
51
|
+
@options[:fail_fast] = true
|
52
|
+
end
|
53
|
+
|
54
|
+
parser.on('--fail-level fail_level', String,
|
55
|
+
'Specify which level you want the suite to fail') do |fail_level|
|
56
|
+
@options[:fail_level] = HamlLint::Severity.new(fail_level.to_sym)
|
57
|
+
end
|
48
58
|
end
|
49
59
|
|
50
60
|
# Returns the class of the specified Reporter.
|
@@ -80,10 +90,6 @@ module HamlLint
|
|
80
90
|
@options[:show_reporters] = true
|
81
91
|
end
|
82
92
|
|
83
|
-
parser.on('--[no-]color', 'Force output to be colorized') do |color|
|
84
|
-
@options[:color] = color
|
85
|
-
end
|
86
|
-
|
87
93
|
parser.on_tail('-h', '--help', 'Display help documentation') do
|
88
94
|
@options[:help] = parser.help
|
89
95
|
end
|
@@ -96,5 +102,15 @@ module HamlLint
|
|
96
102
|
@options[:verbose_version] = true
|
97
103
|
end
|
98
104
|
end
|
105
|
+
|
106
|
+
def add_logger_options(parser)
|
107
|
+
parser.on('--[no-]color', 'Force output to be colorized') do |color|
|
108
|
+
@options[:color] = color
|
109
|
+
end
|
110
|
+
|
111
|
+
parser.on('--[no-]summary', 'Print a summary of your linting report') do |summary|
|
112
|
+
@options[:summary] = summary
|
113
|
+
end
|
114
|
+
end
|
99
115
|
end
|
100
116
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
|
3
|
+
module HamlLint
|
4
|
+
# A thin wrapper around the syntax tree from the Parser gem.
|
5
|
+
class ParsedRuby < SimpleDelegator
|
6
|
+
# !@method syntax_tree
|
7
|
+
# Returns the bare syntax tree from the wrapper.
|
8
|
+
#
|
9
|
+
# @api semipublic
|
10
|
+
# @return [Array] syntax tree in the form returned by Parser gem
|
11
|
+
alias syntax_tree __getobj__
|
12
|
+
|
13
|
+
# Checks whether the syntax tree contains any instance variables.
|
14
|
+
#
|
15
|
+
# @return [true, false]
|
16
|
+
def contains_instance_variables?
|
17
|
+
return false unless syntax_tree
|
18
|
+
|
19
|
+
syntax_tree.ivar_type? || syntax_tree.each_descendant.any?(&:ivar_type?)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/haml_lint/rake_task.rb
CHANGED
@@ -51,6 +51,16 @@ module HamlLint
|
|
51
51
|
# @return [true,false]
|
52
52
|
attr_accessor :quiet
|
53
53
|
|
54
|
+
# The severity level above which we should fail the Rake task.
|
55
|
+
#
|
56
|
+
# @example
|
57
|
+
# HamlLint::RakeTask.new do |task|
|
58
|
+
# task.fail_level = 'error'
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# @return [String]
|
62
|
+
attr_accessor :fail_level
|
63
|
+
|
54
64
|
# Create the task so it exists in the current namespace.
|
55
65
|
#
|
56
66
|
# @param name [Symbol] task name
|
@@ -82,8 +92,7 @@ module HamlLint
|
|
82
92
|
#
|
83
93
|
# @param task_args [Rake::TaskArguments]
|
84
94
|
def run_cli(task_args)
|
85
|
-
cli_args =
|
86
|
-
|
95
|
+
cli_args = parse_args
|
87
96
|
logger = quiet ? HamlLint::Logger.silent : HamlLint::Logger.new(STDOUT)
|
88
97
|
result = HamlLint::CLI.new(logger).run(Array(cli_args) + files_to_lint(task_args))
|
89
98
|
|
@@ -118,5 +127,10 @@ module HamlLint
|
|
118
127
|
description += ' [files...]`'
|
119
128
|
description
|
120
129
|
end
|
130
|
+
|
131
|
+
def parse_args
|
132
|
+
cli_args = config ? ['--config', config] : []
|
133
|
+
cli_args.concat(['--fail-level', fail_level]) if fail_level
|
134
|
+
end
|
121
135
|
end
|
122
136
|
end
|
data/lib/haml_lint/report.rb
CHANGED
@@ -4,6 +4,9 @@ module HamlLint
|
|
4
4
|
# List of lints that were found.
|
5
5
|
attr_accessor :lints
|
6
6
|
|
7
|
+
# The level of lint to fail after detecting
|
8
|
+
attr_reader :fail_level
|
9
|
+
|
7
10
|
# List of files that were linted.
|
8
11
|
attr_reader :files
|
9
12
|
|
@@ -11,13 +14,54 @@ module HamlLint
|
|
11
14
|
#
|
12
15
|
# @param lints [Array<HamlLint::Lint>] lints that were found
|
13
16
|
# @param files [Array<String>] files that were linted
|
14
|
-
|
17
|
+
# @param fail_level [Symbol] the severity level to fail on
|
18
|
+
# @param reporter [HamlLint::Reporter] the reporter for the report
|
19
|
+
def initialize(lints = [], files = [], fail_level = :warning, reporter:)
|
15
20
|
@lints = lints.sort_by { |l| [l.filename, l.line] }
|
16
21
|
@files = files
|
22
|
+
@fail_level = Severity.new(fail_level)
|
23
|
+
@reporter = reporter
|
24
|
+
end
|
25
|
+
|
26
|
+
# Adds a lint to the report and notifies the reporter.
|
27
|
+
#
|
28
|
+
# @param lint [HamlLint::Lint] lint to add
|
29
|
+
# @return [void]
|
30
|
+
def add_lint(lint)
|
31
|
+
lints << lint
|
32
|
+
@reporter.added_lint(lint)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Displays the report via the configured reporter.
|
36
|
+
#
|
37
|
+
# @return [void]
|
38
|
+
def display
|
39
|
+
@reporter.display_report(self)
|
17
40
|
end
|
18
41
|
|
42
|
+
# Checks whether any lints were over the fail level
|
43
|
+
#
|
44
|
+
# @return [Boolean]
|
19
45
|
def failed?
|
20
|
-
@lints.any?
|
46
|
+
@lints.any? { |lint| lint.severity >= fail_level }
|
47
|
+
end
|
48
|
+
|
49
|
+
# Adds a file to the list of linted files and notifies the reporter.
|
50
|
+
#
|
51
|
+
# @param file [String] the name of the file that was finished
|
52
|
+
# @param lints [Array<HamlLint::Lint>] the lints for the finished file
|
53
|
+
# @return [void]
|
54
|
+
def finish_file(file, lints)
|
55
|
+
files << file
|
56
|
+
@reporter.finished_file(file, lints)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Notifies the reporter that the report has started.
|
60
|
+
#
|
61
|
+
# @param files [Array<String>] the files to lint
|
62
|
+
# @return [void]
|
63
|
+
def start(files)
|
64
|
+
@reporter.start(files)
|
21
65
|
end
|
22
66
|
end
|
23
67
|
end
|
@@ -1,39 +1,17 @@
|
|
1
|
+
require 'haml_lint/reporter/utils'
|
2
|
+
|
1
3
|
module HamlLint
|
2
4
|
# Outputs lints in a simple format with the filename, line number, and lint
|
3
5
|
# message.
|
4
6
|
class Reporter::DefaultReporter < Reporter
|
5
|
-
|
6
|
-
sorted_lints = report.lints.sort_by { |l| [l.filename, l.line] }
|
7
|
-
|
8
|
-
sorted_lints.each do |lint|
|
9
|
-
print_location(lint)
|
10
|
-
print_type(lint)
|
11
|
-
print_message(lint)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
7
|
+
include Reporter::Utils
|
16
8
|
|
17
|
-
def
|
18
|
-
|
19
|
-
log.log ':', false
|
20
|
-
log.bold lint.line, false
|
9
|
+
def added_lint(lint)
|
10
|
+
print_lint(lint)
|
21
11
|
end
|
22
12
|
|
23
|
-
def
|
24
|
-
|
25
|
-
log.error ' [E] ', false
|
26
|
-
else
|
27
|
-
log.warning ' [W] ', false
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def print_message(lint)
|
32
|
-
if lint.linter
|
33
|
-
log.success("#{lint.linter.name}: ", false)
|
34
|
-
end
|
35
|
-
|
36
|
-
log.log lint.message
|
13
|
+
def display_report(report)
|
14
|
+
print_summary(report)
|
37
15
|
end
|
38
16
|
end
|
39
17
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module HamlLint
|
2
|
+
# Outputs report as a Ruby Hash for easy use by other tools.
|
3
|
+
class Reporter::HashReporter < Reporter
|
4
|
+
def display_report(report)
|
5
|
+
lints = report.lints
|
6
|
+
grouped = lints.group_by(&:filename)
|
7
|
+
|
8
|
+
report_hash = {
|
9
|
+
metadata: metadata,
|
10
|
+
files: grouped.map { |l| map_file(l) },
|
11
|
+
summary: {
|
12
|
+
offense_count: lints.length,
|
13
|
+
target_file_count: grouped.length,
|
14
|
+
inspected_file_count: report.files.length,
|
15
|
+
},
|
16
|
+
}
|
17
|
+
|
18
|
+
report_hash
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def metadata
|
24
|
+
{
|
25
|
+
haml_lint_version: HamlLint::VERSION,
|
26
|
+
ruby_engine: RUBY_ENGINE,
|
27
|
+
ruby_patchlevel: RUBY_PATCHLEVEL.to_s,
|
28
|
+
ruby_platform: RUBY_PLATFORM,
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
def map_file(file)
|
33
|
+
{
|
34
|
+
path: file.first,
|
35
|
+
offenses: file.last.map { |o| map_offense(o) },
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def map_offense(offense)
|
40
|
+
{
|
41
|
+
severity: offense.severity,
|
42
|
+
message: offense.message,
|
43
|
+
location: {
|
44
|
+
line: offense.line,
|
45
|
+
},
|
46
|
+
}.tap do |h|
|
47
|
+
h[:linter_name] = offense.linter.name if offense.linter
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module HamlLint
|
2
|
+
class Reporter
|
3
|
+
# A collection of hook methods for incremental processing.
|
4
|
+
module Hooks
|
5
|
+
# A hook that is called for each lint as it is detected.
|
6
|
+
#
|
7
|
+
# @param _lint [HamlLint::Lint] the lint added to the report
|
8
|
+
# @return [void]
|
9
|
+
def added_lint(_lint); end
|
10
|
+
|
11
|
+
# A hook that is called for each file as it is finished processing.
|
12
|
+
#
|
13
|
+
# @param _file [String] the name of the file that just finished
|
14
|
+
# @param _lints [Array<HamlLint::Lint>] the lints added to the report
|
15
|
+
# @return [void]
|
16
|
+
def finished_file(_file, _lints); end
|
17
|
+
|
18
|
+
# A hook that is called when the processing starts.
|
19
|
+
#
|
20
|
+
# @param _files [Array<String>] the names of the files to be processed
|
21
|
+
# @return [void]
|
22
|
+
def start(_files); end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,51 +1,8 @@
|
|
1
1
|
module HamlLint
|
2
2
|
# Outputs report as a JSON document.
|
3
|
-
class Reporter::JsonReporter < Reporter
|
3
|
+
class Reporter::JsonReporter < Reporter::HashReporter
|
4
4
|
def display_report(report)
|
5
|
-
|
6
|
-
grouped = lints.group_by(&:filename)
|
7
|
-
|
8
|
-
report_hash = {
|
9
|
-
metadata: metadata,
|
10
|
-
files: grouped.map { |l| map_file(l) },
|
11
|
-
summary: {
|
12
|
-
offense_count: lints.length,
|
13
|
-
target_file_count: grouped.length,
|
14
|
-
inspected_file_count: report.files.length,
|
15
|
-
},
|
16
|
-
}
|
17
|
-
|
18
|
-
log.log report_hash.to_json
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def metadata
|
24
|
-
{
|
25
|
-
haml_lint_version: HamlLint::VERSION,
|
26
|
-
ruby_engine: RUBY_ENGINE,
|
27
|
-
ruby_patchlevel: RUBY_PATCHLEVEL.to_s,
|
28
|
-
ruby_platform: RUBY_PLATFORM,
|
29
|
-
}
|
30
|
-
end
|
31
|
-
|
32
|
-
def map_file(file)
|
33
|
-
{
|
34
|
-
path: file.first,
|
35
|
-
offenses: file.last.map { |o| map_offense(o) },
|
36
|
-
}
|
37
|
-
end
|
38
|
-
|
39
|
-
def map_offense(offense)
|
40
|
-
{
|
41
|
-
severity: offense.severity,
|
42
|
-
message: offense.message,
|
43
|
-
location: {
|
44
|
-
line: offense.line,
|
45
|
-
},
|
46
|
-
}.tap do |h|
|
47
|
-
h[:linter_name] = offense.linter.name if offense.linter
|
48
|
-
end
|
5
|
+
log.log super.to_json
|
49
6
|
end
|
50
7
|
end
|
51
8
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'rainbow'
|
2
|
+
require 'haml_lint/reporter/utils'
|
3
|
+
|
4
|
+
module HamlLint
|
5
|
+
# Outputs files as they are output as a simple symbol, then outputs
|
6
|
+
# a summary of each lint.
|
7
|
+
class Reporter::ProgressReporter < Reporter
|
8
|
+
include Reporter::Utils
|
9
|
+
|
10
|
+
DOT = '.'.freeze
|
11
|
+
|
12
|
+
def display_report(report)
|
13
|
+
lints = report.lints
|
14
|
+
|
15
|
+
log.log("\n\nOffenses:\n", true) if lints.any?
|
16
|
+
lints.each { |lint| print_lint(lint) }
|
17
|
+
|
18
|
+
print_summary(report)
|
19
|
+
end
|
20
|
+
|
21
|
+
def finished_file(_file, lints)
|
22
|
+
report_file_as_mark(lints)
|
23
|
+
end
|
24
|
+
|
25
|
+
def start(files)
|
26
|
+
log.log("Inspecting #{pluralize('file', count: files.size)}", true)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def dot
|
32
|
+
@dot ||= Rainbow(DOT).green
|
33
|
+
end
|
34
|
+
|
35
|
+
def report_file_as_mark(lints)
|
36
|
+
mark =
|
37
|
+
if lints.empty?
|
38
|
+
dot
|
39
|
+
else
|
40
|
+
worst_lint = lints.max_by(&:severity)
|
41
|
+
worst_lint.severity.mark_with_color
|
42
|
+
end
|
43
|
+
|
44
|
+
log.log(mark, false)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module HamlLint
|
2
|
+
class Reporter
|
3
|
+
# Formatting helpers for printing the default report format.
|
4
|
+
module Utils
|
5
|
+
# Pluralizes a word based on a count.
|
6
|
+
#
|
7
|
+
# @param word [String] the word to pluralize
|
8
|
+
# @param count [Integer] the count of items
|
9
|
+
# @return [String]
|
10
|
+
def pluralize(word, count: 1)
|
11
|
+
if count.zero? || count > 1
|
12
|
+
"#{count} #{word}s"
|
13
|
+
else
|
14
|
+
"#{count} #{word}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Prints the lint with its location and severity.
|
19
|
+
#
|
20
|
+
# @param lint [HamlLint::Lint] the lint to print
|
21
|
+
# @return [void]
|
22
|
+
def print_lint(lint)
|
23
|
+
print_location(lint)
|
24
|
+
print_type(lint)
|
25
|
+
print_message(lint)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Prints the location of a lint.
|
29
|
+
#
|
30
|
+
# @param lint [HamlLint::Lint] the lint to print
|
31
|
+
# @return [void]
|
32
|
+
def print_location(lint)
|
33
|
+
log.info lint.filename, false
|
34
|
+
log.log ':', false
|
35
|
+
log.bold lint.line, false
|
36
|
+
end
|
37
|
+
|
38
|
+
# Prints the severity of a lint.
|
39
|
+
#
|
40
|
+
# @param lint [HamlLint::Lint] the lint to print
|
41
|
+
# @return [void]
|
42
|
+
def print_type(lint)
|
43
|
+
message = " [#{lint.severity.mark}] "
|
44
|
+
|
45
|
+
if lint.error?
|
46
|
+
log.error message, false
|
47
|
+
else
|
48
|
+
log.warning message, false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Prints the description of a lint.
|
53
|
+
#
|
54
|
+
# @param lint [HamlLint::Lint] the lint to print
|
55
|
+
# @return [void]
|
56
|
+
def print_message(lint)
|
57
|
+
if lint.linter
|
58
|
+
log.success("#{lint.linter.name}: ", false)
|
59
|
+
end
|
60
|
+
|
61
|
+
log.log lint.message
|
62
|
+
end
|
63
|
+
|
64
|
+
# Prints a summary of a report when summaries are enabled.
|
65
|
+
#
|
66
|
+
# @param report [HamlLint::Report] the report to print
|
67
|
+
# @return [void]
|
68
|
+
def print_summary(report)
|
69
|
+
return unless log.summary_enabled
|
70
|
+
|
71
|
+
print_summary_files(report)
|
72
|
+
print_summary_lints(report)
|
73
|
+
|
74
|
+
log.log ' detected'
|
75
|
+
end
|
76
|
+
|
77
|
+
# Prints a summary of the number of files linted in a report.
|
78
|
+
#
|
79
|
+
# @param report [HamlLint::Report] the report to print
|
80
|
+
# @return [void]
|
81
|
+
def print_summary_files(report)
|
82
|
+
log.log "\n#{pluralize('file', count: report.files.count)} inspected, ", false
|
83
|
+
end
|
84
|
+
|
85
|
+
# Prints a summary of the number of lints found in a report.
|
86
|
+
#
|
87
|
+
# @param report [HamlLint::Report] the report to print
|
88
|
+
# @return [void]
|
89
|
+
def print_summary_lints(report)
|
90
|
+
lint_count = report.lints.size
|
91
|
+
lint_message = pluralize('lint', count: lint_count)
|
92
|
+
|
93
|
+
if lint_count == 0
|
94
|
+
log.log lint_message, false
|
95
|
+
else
|
96
|
+
log.error lint_message, false
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
data/lib/haml_lint/reporter.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
+
require 'haml_lint/reporter/hooks'
|
2
|
+
|
1
3
|
module HamlLint
|
2
4
|
# Abstract lint reporter. Subclass and override {#display_report} to
|
3
5
|
# implement a custom lint reporter.
|
4
6
|
#
|
5
7
|
# @abstract
|
6
8
|
class Reporter
|
9
|
+
include Reporter::Hooks
|
10
|
+
|
7
11
|
# Creates the reporter that will display the given report.
|
8
12
|
#
|
9
13
|
# @param logger [HamlLint::Logger]
|