haml_lint 0.27.0 → 0.28.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
- SHA1:
3
- metadata.gz: 63d9c83c6270872c9610d48ba7991a6abfab6136
4
- data.tar.gz: 4872ffed9f0136ef62050079f44afc0071991ae2
2
+ SHA256:
3
+ metadata.gz: de1778be09762f2f6e9205045f63a6bfbc1966f1bc848e57c5bc22a52a8c0488
4
+ data.tar.gz: ecb4cc40e34424ba773dec9b252ef7618f60b9a14e63d7afba68164f41d49681
5
5
  SHA512:
6
- metadata.gz: 22cd935ac273c2fbba890698ef0f472107fdbf65c33e6ba1cf7369ff58a31d73cf3380b14e5307669d3ac8bd7ee72a8d922afe64a15e30a0666a0d79e688282b
7
- data.tar.gz: 119c20bece39c162f7e1c17c17dfcee007892003cb6b0eb0cf38b2637008a571015d3f5973e12f463c44524d1d79b33b39717b6ee5d310ad83b18ebc67e6063f
6
+ metadata.gz: 7cdf82866d301aa55ba5891d364030f6657dcd492118be4bc06933a3158c88bb45d088fcdc6a0e60e72a983271781f5c1ab515aef5e9eff2b2a82ea23ef16cc1
7
+ data.tar.gz: 68ae9a3bd3c9d7c2d3514577aae4513b755479b4c63c7fc08bfd5f45a8cbb1dd5495e4d2dd7f071988e3d8b84bb44959577786860b2f4c2eb5118f2e6257bd8b
data/lib/haml_lint/cli.rb CHANGED
@@ -21,8 +21,8 @@ module HamlLint
21
21
  def run(args)
22
22
  options = HamlLint::Options.new.parse(args)
23
23
  act_on_options(options)
24
- rescue StandardError => ex
25
- handle_exception(ex)
24
+ rescue StandardError => exception
25
+ handle_exception(exception)
26
26
  end
27
27
 
28
28
  private
@@ -62,23 +62,23 @@ module HamlLint
62
62
 
63
63
  # Outputs a message and returns an appropriate error code for the specified
64
64
  # exception.
65
- def handle_exception(ex)
66
- case ex
65
+ def handle_exception(exception)
66
+ case exception
67
67
  when HamlLint::Exceptions::ConfigurationError
68
- log.error ex.message
68
+ log.error exception.message
69
69
  Sysexits::EX_CONFIG
70
70
  when HamlLint::Exceptions::InvalidCLIOption
71
- log.error ex.message
71
+ log.error exception.message
72
72
  log.log "Run `#{APP_NAME}` --help for usage documentation"
73
73
  Sysexits::EX_USAGE
74
74
  when HamlLint::Exceptions::InvalidFilePath
75
- log.error ex.message
75
+ log.error exception.message
76
76
  Sysexits::EX_NOINPUT
77
77
  when HamlLint::Exceptions::NoLintersError
78
- log.error ex.message
78
+ log.error exception.message
79
79
  Sysexits::EX_NOINPUT
80
80
  else
81
- print_unexpected_exception(ex)
81
+ print_unexpected_exception(exception)
82
82
  Sysexits::EX_SOFTWARE
83
83
  end
84
84
  end
@@ -148,9 +148,9 @@ module HamlLint
148
148
 
149
149
  # Outputs the backtrace of an exception with instructions on how to report
150
150
  # the issue.
151
- def print_unexpected_exception(ex) # rubocop:disable Metrics/AbcSize
152
- log.bold_error ex.message
153
- log.error ex.backtrace.join("\n")
151
+ def print_unexpected_exception(exception) # rubocop:disable Metrics/AbcSize
152
+ log.bold_error exception.message
153
+ log.error exception.backtrace.join("\n")
154
154
  log.warning 'Report this bug at ', false
155
155
  log.info HamlLint::BUG_REPORT_URL
156
156
  log.newline
@@ -12,8 +12,10 @@ module HamlLint
12
12
  # Creates a configuration from the given options hash.
13
13
  #
14
14
  # @param options [Hash]
15
- def initialize(options)
15
+ def initialize(options, file = nil)
16
16
  @hash = options
17
+ @config_dir = file ? File.dirname(file) : nil
18
+ resolve_requires
17
19
  validate
18
20
  end
19
21
 
@@ -75,6 +77,19 @@ module HamlLint
75
77
  end
76
78
  end
77
79
 
80
+ # Requires any extra linters / files specified in the configuration.
81
+ # String starting with a . are treated as relative paths
82
+ def resolve_requires
83
+ relative_require_dir = @config_dir || Dir.pwd
84
+ Array(@hash['require']).each do |r|
85
+ if r.start_with?('.')
86
+ require File.join(relative_require_dir, r)
87
+ else
88
+ require r
89
+ end
90
+ end
91
+ end
92
+
78
93
  # Validates the configuration for any invalid options, normalizing it where
79
94
  # possible.
80
95
  def validate
@@ -26,7 +26,7 @@ module HamlLint
26
26
 
27
27
  # Loads the built-in default configuration.
28
28
  def default_configuration
29
- @default_config ||= load_from_file(DEFAULT_CONFIG_PATH)
29
+ @default_configuration ||= load_from_file(DEFAULT_CONFIG_PATH)
30
30
  end
31
31
 
32
32
  # Loads a configuration, ensuring it extends the default configuration.
@@ -76,7 +76,7 @@ module HamlLint
76
76
  hash['inherits_from'].concat(Array(hash.delete('inherit_from')))
77
77
  end
78
78
 
79
- HamlLint::Configuration.new(hash)
79
+ HamlLint::Configuration.new(hash, file)
80
80
  end
81
81
 
82
82
  # Returns a list of possible configuration files given the context of the
@@ -29,9 +29,13 @@ module HamlLint
29
29
 
30
30
  private
31
31
 
32
+ def surrounded_by_braces?(code)
33
+ code.start_with?('{') && code.end_with?('}')
34
+ end
35
+
32
36
  def contains_class_attribute?(attributes_sources)
33
37
  attributes_sources.each do |code|
34
- ast_root = parse_ruby(code.start_with?('{') ? code : "{#{code}}")
38
+ ast_root = parse_ruby(surrounded_by_braces?(code) ? code : "{#{code}}")
35
39
  next unless ast_root # RuboCop linter will report syntax errors
36
40
 
37
41
  ast_root.children.each do |pair|
@@ -43,7 +47,9 @@ module HamlLint
43
47
  end
44
48
 
45
49
  def static_class_attribute_value?(pair)
46
- key, value = pair.children
50
+ return false if (children = pair.children).empty?
51
+
52
+ key, value = children
47
53
 
48
54
  STATIC_TYPES.include?(key.type) &&
49
55
  key.children.first.to_sym == :class &&
@@ -1,7 +1,6 @@
1
1
  module HamlLint::Tree
2
2
  # Represents a tag node in a HAML document.
3
- # rubocop:disable ClassLength
4
- class TagNode < Node
3
+ class TagNode < Node # rubocop:disable ClassLength
5
4
  # Computed set of attribute hashes code.
6
5
  #
7
6
  # This is a combination of all dynamically calculated attributes from the
@@ -97,7 +96,7 @@ module HamlLint::Tree
97
96
  #
98
97
  # @return [Hash]
99
98
  def attributes_source
100
- @attr_source ||=
99
+ @attributes_source ||=
101
100
  begin
102
101
  _explicit_tag, static_attrs, rest =
103
102
  source_code.scan(/\A\s*(%[-:\w]+)?([-:\w\.\#]*)(.*)/m)[0]
@@ -217,11 +216,9 @@ module HamlLint::Tree
217
216
  # Whether this node had a `>` after it signifying that outer whitespace
218
217
  # should be removed.
219
218
  #
220
- # rubocop:disable Style/DoubleNegation
221
- #
222
219
  # @return [true,false]
223
220
  def remove_outer_whitespace?
224
- !!@value[:nuke_outer_whitespace]
221
+ !!@value[:nuke_outer_whitespace] # rubocop:disable Style/DoubleNegation
225
222
  end
226
223
 
227
224
  # Returns the script source that will be evaluated to produce this tag's
@@ -1,3 +1,5 @@
1
+ require 'pathname'
2
+
1
3
  module HamlLint
2
4
  # A miscellaneous set of utility functions.
3
5
  module Utils
@@ -13,10 +15,31 @@ module HamlLint
13
15
  # @param file [String]
14
16
  # @return [Boolean]
15
17
  def any_glob_matches?(globs_or_glob, file)
16
- Array(globs_or_glob).any? do |glob|
17
- ::File.fnmatch?(glob, file,
18
- ::File::FNM_PATHNAME | # Wildcards don't match path separators
19
- ::File::FNM_DOTMATCH) # `*` wildcard matches dotfiles
18
+ get_abs_and_rel_path(file).any? do |path|
19
+ Array(globs_or_glob).any? do |glob|
20
+ ::File.fnmatch?(glob, path,
21
+ ::File::FNM_PATHNAME | # Wildcards don't match path separators
22
+ ::File::FNM_DOTMATCH) # `*` wildcard matches dotfiles
23
+ end
24
+ end
25
+ end
26
+
27
+ # Returns an array of two items, the first being the absolute path, the second
28
+ # the relative path.
29
+ #
30
+ # The relative path is relative to the current working dir. The path passed can
31
+ # be either relative or absolute.
32
+ #
33
+ # @param path [String] Path to get absolute and relative path of
34
+ # @return [Array<String>] Absolute and relative path
35
+ def get_abs_and_rel_path(path)
36
+ original_path = Pathname.new(path)
37
+ root_dir_path = Pathname.new(File.expand_path(Dir.pwd))
38
+
39
+ if original_path.absolute?
40
+ [path, original_path.relative_path_from(root_dir_path)]
41
+ else
42
+ [root_dir_path + original_path, path]
20
43
  end
21
44
  end
22
45
 
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Defines the gem version.
4
4
  module HamlLint
5
- VERSION = '0.27.0'.freeze
5
+ VERSION = '0.28.0'.freeze
6
6
  end
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.27.0
4
+ version: 0.28.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brigade Engineering
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-26 00:00:00.000000000 Z
12
+ date: 2018-06-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: haml
@@ -96,7 +96,7 @@ dependencies:
96
96
  description: Configurable tool for writing clean and consistent HAML
97
97
  email:
98
98
  - eng@brigade.com
99
- - shane.dasilva@brigade.com
99
+ - shane@dasilva.io
100
100
  executables:
101
101
  - haml-lint
102
102
  extensions: []
@@ -197,7 +197,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
197
197
  requirements:
198
198
  - - ">="
199
199
  - !ruby/object:Gem::Version
200
- version: 2.1.0
200
+ version: 2.2.0
201
201
  required_rubygems_version: !ruby/object:Gem::Requirement
202
202
  requirements:
203
203
  - - ">="
@@ -205,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
205
  version: '0'
206
206
  requirements: []
207
207
  rubyforge_project:
208
- rubygems_version: 2.6.14
208
+ rubygems_version: 2.7.6
209
209
  signing_key:
210
210
  specification_version: 4
211
211
  summary: HAML lint tool