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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/config/default.yml +18 -0
  3. data/lib/haml_lint/adapter/haml_4.rb +40 -0
  4. data/lib/haml_lint/adapter/haml_5.rb +46 -0
  5. data/lib/haml_lint/adapter.rb +36 -0
  6. data/lib/haml_lint/cli.rb +12 -9
  7. data/lib/haml_lint/comment_configuration.rb +39 -0
  8. data/lib/haml_lint/directive.rb +128 -0
  9. data/lib/haml_lint/document.rb +3 -1
  10. data/lib/haml_lint/exceptions.rb +6 -0
  11. data/lib/haml_lint/haml_visitor.rb +4 -2
  12. data/lib/haml_lint/lint.rb +2 -2
  13. data/lib/haml_lint/linter/alignment_tabs.rb +12 -0
  14. data/lib/haml_lint/linter/consecutive_comments.rb +19 -2
  15. data/lib/haml_lint/linter/consecutive_silent_scripts.rb +18 -2
  16. data/lib/haml_lint/linter/final_newline.rb +6 -5
  17. data/lib/haml_lint/linter/id_names.rb +28 -0
  18. data/lib/haml_lint/linter/indentation.rb +4 -2
  19. data/lib/haml_lint/linter/instance_variables.rb +77 -0
  20. data/lib/haml_lint/linter/line_length.rb +5 -3
  21. data/lib/haml_lint/linter/repeated_id.rb +34 -0
  22. data/lib/haml_lint/linter/syntax.rb +6 -0
  23. data/lib/haml_lint/linter/trailing_whitespace.rb +5 -4
  24. data/lib/haml_lint/linter.rb +1 -1
  25. data/lib/haml_lint/logger.rb +7 -1
  26. data/lib/haml_lint/options.rb +20 -4
  27. data/lib/haml_lint/parsed_ruby.rb +22 -0
  28. data/lib/haml_lint/rake_task.rb +16 -2
  29. data/lib/haml_lint/report.rb +46 -2
  30. data/lib/haml_lint/reporter/default_reporter.rb +7 -29
  31. data/lib/haml_lint/reporter/hash_reporter.rb +51 -0
  32. data/lib/haml_lint/reporter/hooks.rb +25 -0
  33. data/lib/haml_lint/reporter/json_reporter.rb +2 -45
  34. data/lib/haml_lint/reporter/progress_reporter.rb +47 -0
  35. data/lib/haml_lint/reporter/utils.rb +101 -0
  36. data/lib/haml_lint/reporter.rb +4 -0
  37. data/lib/haml_lint/runner.rb +70 -10
  38. data/lib/haml_lint/severity.rb +95 -0
  39. data/lib/haml_lint/tree/haml_comment_node.rb +18 -0
  40. data/lib/haml_lint/tree/node.rb +116 -16
  41. data/lib/haml_lint/tree/null_node.rb +15 -0
  42. data/lib/haml_lint/tree/root_node.rb +16 -0
  43. data/lib/haml_lint/tree/script_node.rb +9 -0
  44. data/lib/haml_lint/tree/silent_script_node.rb +7 -0
  45. data/lib/haml_lint/tree/tag_node.rb +24 -5
  46. data/lib/haml_lint/version.rb +1 -1
  47. data/lib/haml_lint.rb +1 -0
  48. metadata +41 -4
@@ -10,22 +10,47 @@ module HamlLint
10
10
  # @option options :excluded_files [Array<String>]
11
11
  # @option options :included_linters [Array<String>]
12
12
  # @option options :excluded_linters [Array<String>]
13
+ # @option options :fail_fast [true, false] flag for failing after first failure
14
+ # @option options :fail_level
15
+ # @option options :reporter [HamlLint::Reporter]
13
16
  # @return [HamlLint::Report] a summary of all lints found
14
17
  def run(options = {})
15
- config = load_applicable_config(options)
16
- files = extract_applicable_files(config, options)
18
+ @config = load_applicable_config(options)
19
+ @files = extract_applicable_files(config, options)
20
+ @linter_selector = HamlLint::LinterSelector.new(config, options)
21
+ @fail_fast = options.fetch(:fail_fast, false)
17
22
 
18
- linter_selector = HamlLint::LinterSelector.new(config, options)
19
-
20
- lints = files.map do |file|
21
- collect_lints(file, linter_selector, config)
22
- end.flatten
23
-
24
- HamlLint::Report.new(lints, files)
23
+ report(options)
25
24
  end
26
25
 
27
26
  private
28
27
 
28
+ # The {HamlLint::Configuration} that should be used for this run.
29
+ #
30
+ # @return [HamlLint::Configuration]
31
+ attr_reader :config
32
+
33
+ # A flag for whether to fail after the first failure.
34
+ #
35
+ # @return [true, false]
36
+ attr_reader :fail_fast
37
+
38
+ # !@method fail_fast?
39
+ # Checks whether to fail after the first failure.
40
+ #
41
+ # @return [true, false]
42
+ alias fail_fast? fail_fast
43
+
44
+ # The list of files to lint during this run.
45
+ #
46
+ # @return [Array<String>]
47
+ attr_reader :files
48
+
49
+ # The selector for which linters to run during this run.
50
+ #
51
+ # @return [HamlLint::LinterSelector]
52
+ attr_reader :linter_selector
53
+
29
54
  # Returns the {HamlLint::Configuration} that should be used given the
30
55
  # specified options.
31
56
  #
@@ -51,7 +76,8 @@ module HamlLint
51
76
  begin
52
77
  document = HamlLint::Document.new(File.read(file), file: file, config: config)
53
78
  rescue HamlLint::Exceptions::ParseError => ex
54
- return [HamlLint::Lint.new(nil, file, ex.line, ex.to_s, :error)]
79
+ return [HamlLint::Lint.new(HamlLint::Linter::Syntax.new(config), file,
80
+ ex.line, ex.to_s, :error)]
55
81
  end
56
82
 
57
83
  linter_selector.linters_for_file(file).map do |linter|
@@ -72,5 +98,39 @@ module HamlLint
72
98
 
73
99
  HamlLint::FileFinder.new(config).find(included_patterns, excluded_patterns)
74
100
  end
101
+
102
+ # Process the files and add them to the given report.
103
+ #
104
+ # @param report [HamlLint::Report]
105
+ # @return [void]
106
+ def process_files(report)
107
+ files.each do |file|
108
+ process_file(file, report)
109
+ break if report.failed? && fail_fast?
110
+ end
111
+ end
112
+
113
+ # Process a file and add it to the given report.
114
+ #
115
+ # @param file [String] the name of the file to process
116
+ # @param report [HamlLint::Report]
117
+ # @return [void]
118
+ def process_file(file, report)
119
+ lints = collect_lints(file, linter_selector, config)
120
+ lints.each { |lint| report.add_lint(lint) }
121
+ report.finish_file(file, lints)
122
+ end
123
+
124
+ # Generates a report based on the given options.
125
+ #
126
+ # @param options [Hash]
127
+ # @option options :reporter [HamlLint::Reporter] the reporter to report with
128
+ # @return [HamlLint::Report]
129
+ def report(options)
130
+ report = HamlLint::Report.new(reporter: options[:reporter])
131
+ report.start(@files)
132
+ process_files(report)
133
+ report
134
+ end
75
135
  end
76
136
  end
@@ -0,0 +1,95 @@
1
+ require 'delegate'
2
+
3
+ module HamlLint
4
+ # Models the severity of a lint
5
+ class Severity < SimpleDelegator
6
+ include Comparable
7
+
8
+ SEVERITY_ERROR = :error
9
+ SEVERITY_WARNING = :warning
10
+
11
+ COLORS = { error: :red, warning: :yellow }.freeze
12
+ MARKS = { error: 'E', warning: 'W' }.freeze
13
+ NAMES = [SEVERITY_WARNING, SEVERITY_ERROR].freeze
14
+
15
+ # Creates a new severity for a lint
16
+ #
17
+ # @example
18
+ # HamlLint::Severity.new(:warning)
19
+ #
20
+ # @api public
21
+ # @param name [Symbol] the name of the severity level
22
+ def initialize(name)
23
+ name = name.name if name.is_a?(Severity)
24
+ name ||= :warning
25
+ fail Exceptions::UnknownSeverity, "Unknown severity: #{name}" unless NAMES.include?(name)
26
+ super
27
+ end
28
+
29
+ # The color of the mark in reporters.
30
+ #
31
+ # @return [Symbol]
32
+ def color
33
+ COLORS[__getobj__]
34
+ end
35
+
36
+ # Checks whether the severity is an error
37
+ #
38
+ # @example
39
+ # HamlLint::Severity.new(:error).error? #=> true
40
+ #
41
+ # @api public
42
+ # @return [Boolean]
43
+ def error?
44
+ __getobj__ == :error
45
+ end
46
+
47
+ # The level of severity for the lint
48
+ #
49
+ # @api public
50
+ # @return [Integer]
51
+ def level
52
+ NAMES.index(__getobj__) + 1
53
+ end
54
+
55
+ # The symbol to use in a {HamlLint::Reporter::ProgressReporter}.
56
+ #
57
+ # @returns [String]
58
+ def mark
59
+ MARKS[__getobj__]
60
+ end
61
+
62
+ # The colorized symbol to use in a reporter.
63
+ #
64
+ # @returns [String]
65
+ def mark_with_color
66
+ Rainbow.global.wrap(mark).public_send(color)
67
+ end
68
+
69
+ # The name of the severity.
70
+ #
71
+ # @returns [Symbol]
72
+ def name
73
+ __getobj__
74
+ end
75
+
76
+ # Checks whether the severity is a warning
77
+ #
78
+ # @example
79
+ # HamlLint::Severity.new(:warning).warning? #=> true
80
+ #
81
+ # @api public
82
+ # @return [Boolean]
83
+ def warning?
84
+ __getobj__ == :warning
85
+ end
86
+
87
+ # Compares the severity to another severity or a symbol
88
+ #
89
+ # @return [Integer]
90
+ def <=>(other)
91
+ other = Severity.new(other) unless other.respond_to?(:level)
92
+ level <=> other.level
93
+ end
94
+ end
95
+ end
@@ -1,6 +1,14 @@
1
+ require 'haml_lint/directive'
2
+
1
3
  module HamlLint::Tree
2
4
  # Represents a HAML comment node.
3
5
  class HamlCommentNode < Node
6
+ def directives
7
+ directives = super
8
+ directives << contained_directives
9
+ directives.flatten
10
+ end
11
+
4
12
  # Returns the full text content of this comment, including newlines if a
5
13
  # single comment spans multiple lines.
6
14
  #
@@ -14,5 +22,15 @@ module HamlLint::Tree
14
22
  .gsub(/^ /, '')
15
23
  .rstrip
16
24
  end
25
+
26
+ private
27
+
28
+ def contained_directives
29
+ text
30
+ .split("\n")
31
+ .each_with_index
32
+ .map { |source, offset| HamlLint::Directive.from_line(source, line + offset) }
33
+ .reject { |directive| directive.is_a?(HamlLint::Directive::Null) }
34
+ end
17
35
  end
18
36
  end
@@ -1,3 +1,5 @@
1
+ require 'haml_lint/comment_configuration'
2
+
1
3
  module HamlLint::Tree
2
4
  # Decorator class that provides a convenient set of helpers for HAML's
3
5
  # {Haml::Parser::ParseNode} struct.
@@ -9,6 +11,8 @@ module HamlLint::Tree
9
11
  #
10
12
  # @abstract
11
13
  class Node
14
+ include Enumerable
15
+
12
16
  attr_accessor :children, :parent
13
17
  attr_reader :line, :type
14
18
 
@@ -23,24 +27,42 @@ module HamlLint::Tree
23
27
  @type = parse_node.type
24
28
  end
25
29
 
26
- # Returns the first node found under the subtree which matches the given
27
- # block.
30
+ # Holds any configuration that is created from Haml comments.
28
31
  #
29
- # Returns nil if no node matching the given block was found.
32
+ # @return [HamlLint::CommentConfiguration]
33
+ def comment_configuration
34
+ @comment_configuration ||= HamlLint::CommentConfiguration.new(self)
35
+ end
36
+
37
+ # Checks whether a visitor is disabled due to comment configuration.
30
38
  #
31
- # @yieldparam [HamlLint::Tree::Node] node
32
- # @yieldreturn [Boolean] whether the node matches
33
- # @return [HamlLint::Tree::Node,nil]
34
- def find(&block)
35
- return self if yield(self)
39
+ # @param [HamlLint::HamlVisitor]
40
+ # @return [true, false]
41
+ def disabled?(visitor)
42
+ visitor.is_a?(HamlLint::Linter) &&
43
+ comment_configuration.disabled?(visitor.name)
44
+ end
36
45
 
37
- children.each do |child|
38
- if result = child.find(&block)
39
- return result
40
- end
46
+ # Implements the Enumerable interface to walk through an entire tree.
47
+ #
48
+ # @return [Enumerator, HamlLint::Tree::Node]
49
+ def each
50
+ return to_enum(__callee__) unless block_given?
51
+
52
+ node = self
53
+ loop do
54
+ yield node
55
+ break unless (node = node.next_node)
41
56
  end
57
+ end
42
58
 
43
- nil # Otherwise no matching node was found
59
+ # The comment directives to apply to the node.
60
+ #
61
+ # @return [Array<HamlLint::Directive>]
62
+ def directives
63
+ directives = []
64
+ directives << predecessor.directives if predecessor
65
+ directives.flatten
44
66
  end
45
67
 
46
68
  # Source code of all lines this node spans (excluding children).
@@ -63,6 +85,13 @@ module HamlLint::Tree
63
85
  "#<#{self.class.name}>"
64
86
  end
65
87
 
88
+ # The previous node to be traversed in the tree.
89
+ #
90
+ # @return [HamlLint::Tree::Node, nil]
91
+ def predecessor
92
+ siblings.previous(self) || parent
93
+ end
94
+
66
95
  # Returns the node that follows this node, whether it be a sibling or an
67
96
  # ancestor's child, but not a child of this node.
68
97
  #
@@ -72,9 +101,7 @@ module HamlLint::Tree
72
101
  #
73
102
  # @return [HamlLint::Tree::Node,nil]
74
103
  def successor
75
- siblings = parent ? parent.children : [self]
76
-
77
- next_sibling = siblings[siblings.index(self) + 1] if siblings.count > 1
104
+ next_sibling = siblings.next(self)
78
105
  return next_sibling if next_sibling
79
106
 
80
107
  parent.successor if parent
@@ -89,11 +116,84 @@ module HamlLint::Tree
89
116
  children.first || successor
90
117
  end
91
118
 
119
+ # The sibling nodes that come after this node in the tree.
120
+ #
121
+ # @return [Array<HamlLint::Tree::Node>]
122
+ def subsequents
123
+ siblings.subsequents(self)
124
+ end
125
+
92
126
  # Returns the text content of this node.
93
127
  #
94
128
  # @return [String]
95
129
  def text
96
130
  @value[:text].to_s
97
131
  end
132
+
133
+ private
134
+
135
+ # The siblings of this node within the tree.
136
+ #
137
+ # @api private
138
+ # @return [Array<HamlLint::Tree::Node>]
139
+ def siblings
140
+ @siblings ||= Siblings.new(parent ? parent.children : [self])
141
+ end
142
+
143
+ # Finds the node's siblings within the tree and makes them queryable.
144
+ class Siblings < SimpleDelegator
145
+ # Finds the next sibling in the tree for a given node.
146
+ #
147
+ # @param node [HamlLint::Tree::Node]
148
+ # @return [HamlLint::Tree::Node, nil]
149
+ def next(node)
150
+ subsequents(node).first
151
+ end
152
+
153
+ # Finds the previous sibling in the tree for a given node.
154
+ #
155
+ # @param node [HamlLint::Tree::Node]
156
+ # @return [HamlLint::Tree::Node, nil]
157
+ def previous(node)
158
+ priors(node).last
159
+ end
160
+
161
+ # Finds all sibling notes that appear before a node in the tree.
162
+ #
163
+ # @param node [HamlLint::Tree::Node]
164
+ # @return [Array<HamlLint::Tree::Node>]
165
+ def priors(node)
166
+ position = position(node)
167
+ if position.zero?
168
+ []
169
+ else
170
+ siblings[0..(position - 1)]
171
+ end
172
+ end
173
+
174
+ # Finds all sibling notes that appear after a node in the tree.
175
+ #
176
+ # @param node [HamlLint::Tree::Node]
177
+ # @return [Array<HamlLint::Tree::Node>]
178
+ def subsequents(node)
179
+ siblings[(position(node) + 1)..-1]
180
+ end
181
+
182
+ private
183
+
184
+ # The set of siblings within the tree.
185
+ #
186
+ # @api private
187
+ # @return [Array<HamlLint::Tree::Node>]
188
+ alias siblings __getobj__
189
+
190
+ # Finds the position of a node within a set of siblings.
191
+ #
192
+ # @api private
193
+ # @return [Integer, nil]
194
+ def position(node)
195
+ siblings.index(node)
196
+ end
197
+ end
98
198
  end
99
199
  end
@@ -0,0 +1,15 @@
1
+ module HamlLint::Tree
2
+ # A null object version of a node that can be used as a safe default.
3
+ class NullNode < Node
4
+ # Instantiates a new {HamlLint::Tree::NullNode}, ignoring all input.
5
+ def initialize(*_args); end
6
+
7
+ # Overrides the disabled check to always say the linter is enabled.
8
+ #
9
+ # @param _linter [HamlLint::Linter] the linter to check
10
+ # @return [false]
11
+ def disabled?(_linter)
12
+ false
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,21 @@
1
+ require 'haml_lint/tree/null_node'
2
+
1
3
  module HamlLint::Tree
2
4
  # Represents the root node of a HAML document that contains all other nodes.
3
5
  class RootNode < Node
6
+ # The name fo the file parsed to build this tree.
7
+ #
8
+ # @return [String] a file name
9
+ def file
10
+ @document.file
11
+ end
12
+
13
+ # Gets the node of the syntax tree for a given line number.
14
+ #
15
+ # @param line [Integer] the line number of the node
16
+ # @return [HamlLint::Node]
17
+ def node_for_line(line)
18
+ find(HamlLint::Tree::NullNode) { |node| node.line == line }
19
+ end
4
20
  end
5
21
  end
@@ -1,6 +1,15 @@
1
+ require 'haml_lint/parsed_ruby'
2
+
1
3
  module HamlLint::Tree
2
4
  # Represents a node which produces output based on Ruby code.
3
5
  class ScriptNode < Node
6
+ # The Ruby script contents parsed into a syntax tree.
7
+ #
8
+ # @return [ParsedRuby] syntax tree in the form returned by Parser gem
9
+ def parsed_script
10
+ HamlLint::ParsedRuby.new(HamlLint::RubyParser.new.parse(script))
11
+ end
12
+
4
13
  # Returns the source for the script following the `-` marker.
5
14
  #
6
15
  # @return [String]
@@ -2,6 +2,13 @@ module HamlLint::Tree
2
2
  # Represents a HAML silent script node (`- some_expression`) which executes
3
3
  # code without producing output.
4
4
  class SilentScriptNode < Node
5
+ # The Ruby script contents parsed into a syntax tree.
6
+ #
7
+ # @return [ParsedRuby] syntax tree in the form returned by Parser gem
8
+ def parsed_script
9
+ HamlLint::ParsedRuby.new(HamlLint::RubyParser.new.parse(script))
10
+ end
11
+
5
12
  # Returns the source for the script following the `-` marker.
6
13
  #
7
14
  # @return [String]
@@ -148,6 +148,13 @@ module HamlLint::Tree
148
148
  dynamic_attributes_source[:html][/\A\((.*)\)\z/, 1] if html_attributes?
149
149
  end
150
150
 
151
+ # ID of the HTML tag.
152
+ #
153
+ # @return [String]
154
+ def tag_id
155
+ @value[:attributes]['id']
156
+ end
157
+
151
158
  # Name of the HTML tag.
152
159
  #
153
160
  # @return [String]
@@ -173,6 +180,20 @@ module HamlLint::Tree
173
180
  @value[:object_ref][/\A\[(.*)\]\z/, 1] if object_reference?
174
181
  end
175
182
 
183
+ # The attributes given to the tag parsed into a Ruby syntax tree.
184
+ #
185
+ # @return [ParsedRuby] syntax tree in the form returned by Parser gem
186
+ def parsed_attributes
187
+ HamlLint::ParsedRuby.new(HamlLint::RubyParser.new.parse(hash_attributes_source || ''))
188
+ end
189
+
190
+ # The Ruby script contents of a tag parsed into a syntax tree.
191
+ #
192
+ # @return [ParsedRuby] syntax tree in the form returned by Parser gem
193
+ def parsed_script
194
+ HamlLint::ParsedRuby.new(HamlLint::RubyParser.new.parse(script || ''))
195
+ end
196
+
176
197
  # Whether this node had a `<` after it signifying that outer whitespace
177
198
  # should be removed.
178
199
  #
@@ -184,9 +205,11 @@ module HamlLint::Tree
184
205
  # Whether this node had a `>` after it signifying that outer whitespace
185
206
  # should be removed.
186
207
  #
208
+ # rubocop:disable Style/DoubleNegation
209
+ #
187
210
  # @return [true,false]
188
211
  def remove_outer_whitespace?
189
- @value[:nuke_outer_whitespace]
212
+ !!@value[:nuke_outer_whitespace]
190
213
  end
191
214
 
192
215
  # Returns the script source that will be evaluated to produce this tag's
@@ -199,10 +222,6 @@ module HamlLint::Tree
199
222
 
200
223
  private
201
224
 
202
- def parsed_attributes
203
- HamlLint::RubyParser.new.parse(hash_attributes_source)
204
- end
205
-
206
225
  def existing_attributes
207
226
  parsed_attributes.children.collect do |parsed_attribute|
208
227
  parsed_attribute.children.first.to_a.first
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Defines the gem version.
4
4
  module HamlLint
5
- VERSION = '0.21.0'.freeze
5
+ VERSION = '0.22.0'.freeze
6
6
  end
data/lib/haml_lint.rb CHANGED
@@ -19,6 +19,7 @@ require 'haml_lint/file_finder'
19
19
  require 'haml_lint/runner'
20
20
  require 'haml_lint/utils'
21
21
  require 'haml_lint/version'
22
+ require 'haml_lint/severity'
22
23
 
23
24
  # Load all parse tree node classes
24
25
  require 'haml_lint/tree/node'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml_lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 0.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brigade Engineering
@@ -9,22 +9,42 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-02-13 00:00:00.000000000 Z
12
+ date: 2017-03-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: haml
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - "~>"
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: '4.0'
21
+ - - "<"
22
+ - !ruby/object:Gem::Version
23
+ version: '5.1'
21
24
  type: :runtime
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
25
- - - "~>"
28
+ - - ">="
26
29
  - !ruby/object:Gem::Version
27
30
  version: '4.0'
31
+ - - "<"
32
+ - !ruby/object:Gem::Version
33
+ version: '5.1'
34
+ - !ruby/object:Gem::Dependency
35
+ name: rainbow
36
+ requirement: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ type: :runtime
42
+ prerelease: false
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
28
48
  - !ruby/object:Gem::Dependency
29
49
  name: rake
30
50
  requirement: !ruby/object:Gem::Requirement
@@ -85,16 +105,22 @@ files:
85
105
  - bin/haml-lint
86
106
  - config/default.yml
87
107
  - lib/haml_lint.rb
108
+ - lib/haml_lint/adapter.rb
109
+ - lib/haml_lint/adapter/haml_4.rb
110
+ - lib/haml_lint/adapter/haml_5.rb
88
111
  - lib/haml_lint/cli.rb
112
+ - lib/haml_lint/comment_configuration.rb
89
113
  - lib/haml_lint/configuration.rb
90
114
  - lib/haml_lint/configuration_loader.rb
91
115
  - lib/haml_lint/constants.rb
116
+ - lib/haml_lint/directive.rb
92
117
  - lib/haml_lint/document.rb
93
118
  - lib/haml_lint/exceptions.rb
94
119
  - lib/haml_lint/file_finder.rb
95
120
  - lib/haml_lint/haml_visitor.rb
96
121
  - lib/haml_lint/lint.rb
97
122
  - lib/haml_lint/linter.rb
123
+ - lib/haml_lint/linter/alignment_tabs.rb
98
124
  - lib/haml_lint/linter/alt_text.rb
99
125
  - lib/haml_lint/linter/class_attribute_with_static_value.rb
100
126
  - lib/haml_lint/linter/classes_before_ids.rb
@@ -104,17 +130,21 @@ files:
104
130
  - lib/haml_lint/linter/empty_script.rb
105
131
  - lib/haml_lint/linter/final_newline.rb
106
132
  - lib/haml_lint/linter/html_attributes.rb
133
+ - lib/haml_lint/linter/id_names.rb
107
134
  - lib/haml_lint/linter/implicit_div.rb
108
135
  - lib/haml_lint/linter/indentation.rb
136
+ - lib/haml_lint/linter/instance_variables.rb
109
137
  - lib/haml_lint/linter/leading_comment_space.rb
110
138
  - lib/haml_lint/linter/line_length.rb
111
139
  - lib/haml_lint/linter/multiline_pipe.rb
112
140
  - lib/haml_lint/linter/multiline_script.rb
113
141
  - lib/haml_lint/linter/object_reference_attributes.rb
142
+ - lib/haml_lint/linter/repeated_id.rb
114
143
  - lib/haml_lint/linter/rubocop.rb
115
144
  - lib/haml_lint/linter/ruby_comments.rb
116
145
  - lib/haml_lint/linter/space_before_script.rb
117
146
  - lib/haml_lint/linter/space_inside_hash_attributes.rb
147
+ - lib/haml_lint/linter/syntax.rb
118
148
  - lib/haml_lint/linter/tag_name.rb
119
149
  - lib/haml_lint/linter/trailing_whitespace.rb
120
150
  - lib/haml_lint/linter/unnecessary_interpolation.rb
@@ -124,20 +154,27 @@ files:
124
154
  - lib/haml_lint/logger.rb
125
155
  - lib/haml_lint/node_transformer.rb
126
156
  - lib/haml_lint/options.rb
157
+ - lib/haml_lint/parsed_ruby.rb
127
158
  - lib/haml_lint/rake_task.rb
128
159
  - lib/haml_lint/report.rb
129
160
  - lib/haml_lint/reporter.rb
130
161
  - lib/haml_lint/reporter/checkstyle_reporter.rb
131
162
  - lib/haml_lint/reporter/default_reporter.rb
163
+ - lib/haml_lint/reporter/hash_reporter.rb
164
+ - lib/haml_lint/reporter/hooks.rb
132
165
  - lib/haml_lint/reporter/json_reporter.rb
166
+ - lib/haml_lint/reporter/progress_reporter.rb
167
+ - lib/haml_lint/reporter/utils.rb
133
168
  - lib/haml_lint/ruby_extractor.rb
134
169
  - lib/haml_lint/ruby_parser.rb
135
170
  - lib/haml_lint/runner.rb
171
+ - lib/haml_lint/severity.rb
136
172
  - lib/haml_lint/tree/comment_node.rb
137
173
  - lib/haml_lint/tree/doctype_node.rb
138
174
  - lib/haml_lint/tree/filter_node.rb
139
175
  - lib/haml_lint/tree/haml_comment_node.rb
140
176
  - lib/haml_lint/tree/node.rb
177
+ - lib/haml_lint/tree/null_node.rb
141
178
  - lib/haml_lint/tree/plain_node.rb
142
179
  - lib/haml_lint/tree/root_node.rb
143
180
  - lib/haml_lint/tree/script_node.rb