haml_lint 0.37.1 → 0.40.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: 8863f65bfdd024cd8dcb34e0c0f76401798afc1ba86e3f68a1bf128fad4d7a0e
4
- data.tar.gz: c659429275e92bbc87200848bd616c73cf1a9a418ea8c5bc042425cbb0c34dae
3
+ metadata.gz: 8ef9ca7cc6bbd3b5f9663a2bda75669062b25efeb53af9e32cf152fd7f5aee6c
4
+ data.tar.gz: 35e34d39d55e13910ec90f9ee7ece9a4baa2d6bc44f2f6962b230f6387519174
5
5
  SHA512:
6
- metadata.gz: 9281eed257dc6972cbe29fe8e9d1f00affd6f1d8bb6880ae4e10a6252722e65feaac262a148b94ed25ebfd401e4ec17403169ea5a0613a0fa56921cbcb34585f
7
- data.tar.gz: 8bd38dfe3c05da8ce82d7a021c22eba361af40d53d07a38b55c2b4452e05fcc3efce99f556f7725a51b21f66b9f36993f77ebc3596cd7bd367e89054b4fafd06
6
+ metadata.gz: 376df9f9c0de3c0949bd2187bb1ba9f3bc5e381644a93c827ca085125ac2922f59f98d048d8bf548b379ebe5def5180f9b182628030f4e66454f3edf71478f9f
7
+ data.tar.gz: fa1a9ad202224e1059dd7802b1aea08db8b9d11570feca891a31650dc3b10f0b991b2585ad27faa4425bc2165a2b23e799075c944250a43568e1d17c7f83f8b1
data/lib/haml_lint/cli.rb CHANGED
@@ -94,7 +94,7 @@ module HamlLint
94
94
  # @return [HamlLint::Reporter]
95
95
  def reporter_from_options(options)
96
96
  if options[:auto_gen_config]
97
- HamlLint::Reporter::DisabledConfigReporter.new(log, limit: options[:auto_gen_exclude_limit] || 15) # rubocop:disable Layout/LineLength
97
+ HamlLint::Reporter::DisabledConfigReporter.new(log, limit: options[:auto_gen_exclude_limit] || 15)
98
98
  else
99
99
  options.fetch(:reporter, HamlLint::Reporter::DefaultReporter).new(log)
100
100
  end
@@ -97,7 +97,7 @@ module HamlLint
97
97
  def validate
98
98
  ensure_exclude_option_array_exists
99
99
  ensure_linter_section_exists
100
- ensure_linter_include_exclude_arrays_exist
100
+ ensure_linter_include_exclude_arrays_valid
101
101
  ensure_linter_severity_valid
102
102
  end
103
103
 
@@ -113,11 +113,11 @@ module HamlLint
113
113
 
114
114
  # Ensure `include` and `exclude` options for linters are arrays
115
115
  # (since users can specify a single string glob pattern for convenience)
116
- def ensure_linter_include_exclude_arrays_exist
116
+ def ensure_linter_include_exclude_arrays_valid
117
117
  @hash['linters'].each_key do |linter_name|
118
118
  %w[include exclude].each do |option|
119
119
  linter_config = @hash['linters'][linter_name]
120
- linter_config[option] = Array(linter_config[option])
120
+ linter_config[option] = Array(linter_config[option]) if linter_config[option]
121
121
  end
122
122
  end
123
123
  end
@@ -27,8 +27,6 @@ module HamlLint
27
27
  find_lints(extracted_source.source, extracted_source.source_map)
28
28
  end
29
29
 
30
- private
31
-
32
30
  # A single CLI instance is shared between files to avoid RuboCop
33
31
  # having to repeatedly reload .rubocop.yml.
34
32
  def self.rubocop_cli
@@ -37,6 +35,8 @@ module HamlLint
37
35
  @rubocop_cli ||= ::RuboCop::CLI.new
38
36
  end
39
37
 
38
+ private
39
+
40
40
  # Executes RuboCop against the given Ruby code and records the offenses as
41
41
  # lints.
42
42
  #
@@ -9,7 +9,7 @@ module HamlLint
9
9
 
10
10
  ALLOWED_SEPARATORS = [' ', '#'].freeze
11
11
 
12
- def visit_tag(node) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
12
+ def visit_tag(node) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
13
13
  # If this tag has inline script
14
14
  return unless node.contains_script?
15
15
 
@@ -9,15 +9,15 @@ module HamlLint
9
9
  STYLE = {
10
10
  'no_space' => {
11
11
  start_regex: /\A\{[^ ]/,
12
- end_regex: /[^ ]\}\z/,
12
+ end_regex: /(?:^\s*\}|[^ ]\})\z/,
13
13
  start_message: 'Hash attribute should start with no space after the opening brace',
14
- end_message: 'Hash attribute should end with no space before the closing brace'
14
+ end_message: 'Hash attribute should end with no space before the closing brace or be on its own line'
15
15
  },
16
16
  'space' => {
17
- start_regex: /\A\{ [^ ]/,
18
- end_regex: /[^ ] \}\z/,
17
+ start_regex: /\A\{(?: [^ ]|$)/,
18
+ end_regex: /(?:^\s*\}|[^ ] \})\z/,
19
19
  start_message: 'Hash attribute should start with one space after the opening brace',
20
- end_message: 'Hash attribute should end with one space before the closing brace'
20
+ end_message: 'Hash attribute should end with one space before the closing brace or be on its own line'
21
21
  }
22
22
  }.freeze
23
23
 
@@ -64,7 +64,7 @@ module HamlLint
64
64
  def run_linter_on_file?(config, linter, file)
65
65
  linter_config = config.for_linter(linter)
66
66
 
67
- if linter_config['include'].any? &&
67
+ if linter_config['include'] &&
68
68
  !HamlLint::Utils.any_glob_matches?(linter_config['include'], file)
69
69
  return false
70
70
  end
@@ -38,7 +38,7 @@ module HamlLint
38
38
  end
39
39
 
40
40
  parser.on('--auto-gen-exclude-limit limit', Integer,
41
- 'Number of failures to allow in the TODO list before the entire rule is excluded') do |limit| # rubocop:disable Layout/LineLength
41
+ 'Number of failures to allow in the TODO list before the entire rule is excluded') do |limit|
42
42
  @options[:auto_gen_exclude_limit] = limit
43
43
  end
44
44
 
@@ -62,7 +62,7 @@ module HamlLint
62
62
  parser.on('-r', '--reporter reporter', String,
63
63
  'Specify which reporter you want to use to generate the output. One of:',
64
64
  *reporters.map { |name| " - #{name}" }) do |reporter|
65
- @options[:reporter] = load_reporter_class(reporter.capitalize)
65
+ @options[:reporter] = load_reporter_class(reporter.split('-').map(&:capitalize).join)
66
66
  end
67
67
 
68
68
  parser.on('--fail-fast', 'Fail after the first file with lint at or above the fail level') do
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: false
2
+
3
+ module HamlLint
4
+ # Outputs the a list of lints with a count of how many of each were found.
5
+ # Ordered by descending count
6
+ class Reporter::OffenseCountReporter < Reporter
7
+ def display_report(report)
8
+ lints = report.lints
9
+ total_count = lints.count
10
+ return if total_count.zero?
11
+
12
+ lints.group_by { |l| lint_type_group(l) }
13
+ .map { |linter, lints_for_this_linter| [linter, lints_for_this_linter.size] }.to_h
14
+ .sort_by { |_linter, lint_count| -lint_count }
15
+ .each do |linter, lint_count|
16
+ log.log "#{lint_count.to_s.ljust(total_count.to_s.length + 2)} #{linter}"
17
+ end
18
+
19
+ log.log '--'
20
+ log.log "#{total_count} Total"
21
+ end
22
+
23
+ private
24
+
25
+ def lint_type_group(lint)
26
+ "#{lint.linter.name}#{offense_type(lint)}"
27
+ end
28
+
29
+ def offense_type(lint)
30
+ ": #{lint.message.to_s.split(':')[0]}" if lint.linter.name == 'RuboCop'
31
+ end
32
+ end
33
+ end
@@ -32,7 +32,13 @@ module HamlLint
32
32
  #
33
33
  # @return [String]
34
34
  def self.cli_name
35
- name.split('::').last.sub(/Reporter$/, '').downcase
35
+ name
36
+ .split('::')
37
+ .last
38
+ .sub(/Reporter$/, '')
39
+ .gsub(/([A-Z]+)([A-Z][a-z])/, '\1-\2')
40
+ .gsub(/([a-z\d])([A-Z])/, '\1-\2')
41
+ .downcase
36
42
  end
37
43
 
38
44
  # Creates the reporter that will display the given report.
@@ -52,7 +52,7 @@ module HamlLint
52
52
  # the text.
53
53
  # @yieldparam interpolated_code [String] code that was interpolated
54
54
  # @yieldparam line [Integer] line number code appears on in text
55
- def extract_interpolated_values(text) # rubocop:disable Metrics/AbcSize
55
+ def extract_interpolated_values(text)
56
56
  dumped_text = text.dump
57
57
  newline_positions = extract_substring_positions(dumped_text, '\\\n')
58
58
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Defines the gem version.
4
4
  module HamlLint
5
- VERSION = '0.37.1'
5
+ VERSION = '0.40.0'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml_lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.37.1
4
+ version: 0.40.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane da Silva
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-22 00:00:00.000000000 Z
11
+ date: 2022-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: haml
@@ -158,6 +158,7 @@ files:
158
158
  - lib/haml_lint/reporter/hash_reporter.rb
159
159
  - lib/haml_lint/reporter/hooks.rb
160
160
  - lib/haml_lint/reporter/json_reporter.rb
161
+ - lib/haml_lint/reporter/offense_count_reporter.rb
161
162
  - lib/haml_lint/reporter/progress_reporter.rb
162
163
  - lib/haml_lint/reporter/utils.rb
163
164
  - lib/haml_lint/ruby_extractor.rb
@@ -185,7 +186,7 @@ homepage: https://github.com/sds/haml-lint
185
186
  licenses:
186
187
  - MIT
187
188
  metadata: {}
188
- post_install_message:
189
+ post_install_message:
189
190
  rdoc_options: []
190
191
  require_paths:
191
192
  - lib
@@ -200,8 +201,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
201
  - !ruby/object:Gem::Version
201
202
  version: '0'
202
203
  requirements: []
203
- rubygems_version: 3.1.4
204
- signing_key:
204
+ rubygems_version: 3.1.6
205
+ signing_key:
205
206
  specification_version: 4
206
207
  summary: HAML lint tool
207
208
  test_files: []