haml_lint 0.27.0 → 0.28.0

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