haml_lint 0.21.0 → 0.22.0

Sign up to get free protection for your applications and to get access to all the features.
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