erb_lint 0.0.29 → 0.0.34

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: e4a94b402b5b0e78c8597154a55807ab0cdab042b02aa105f8a84e7a800d1f78
4
- data.tar.gz: 211323032036eee8cdc61c866d3d3049a80d8ddcf16c2e00795e8955dd8b112e
3
+ metadata.gz: 65e35ea36e2654316241c7267aca2f9b581fa7eb5c858008a80dfc098c07a187
4
+ data.tar.gz: db35c2f60f85651728bec14a853fc8d7060e93e686c9cababa55bccb3dd46c49
5
5
  SHA512:
6
- metadata.gz: 7721c096adf5dc25e919a1f233292d393bfb005c14bd90e4271a191313fefc5ee6c6e64d625c3f5bac39fccb5eeba42d6fd1cb64c99c069a03cf7c2a64d7fe1b
7
- data.tar.gz: b7e7f1f7fbfab896f3ade2708cf873a19c05011b76be978df594326b47d999d27692a0afaeb9d296395a2dc09678ee4008fbf06abed8cad2c4901dad1a071152
6
+ metadata.gz: dbe12716e085e0baa6beef5c1395bf86874f442db6087c2d1312315cb4d60704cca5a007a3843738197d58fa0025d35b993bbbed5606ca9a3c71b81928d365e2
7
+ data.tar.gz: 7bb3506036e3a098cb9c688c20373a80bc413a6528fcb05b951e16996dd62eea358c01658f5b2aceb4d4b1b4bc63afa7ad53d852478b2b49d549a13f3da6ed1c
@@ -17,10 +17,11 @@ module ERBLint
17
17
  class ExitWithSuccess < RuntimeError; end
18
18
 
19
19
  class Stats
20
- attr_accessor :found, :corrected
20
+ attr_accessor :found, :corrected, :exceptions
21
21
  def initialize
22
22
  @found = 0
23
23
  @corrected = 0
24
+ @exceptions = 0
24
25
  end
25
26
  end
26
27
 
@@ -32,15 +33,16 @@ module ERBLint
32
33
  end
33
34
 
34
35
  def run(args = ARGV)
35
- load_options(args)
36
- @files = args.dup
36
+ dupped_args = args.dup
37
+ load_options(dupped_args)
38
+ @files = dupped_args
37
39
 
38
40
  load_config
39
41
 
40
42
  if !@files.empty? && lint_files.empty?
41
- success!("no files found...\n")
43
+ failure!("no files found...\n")
42
44
  elsif lint_files.empty?
43
- success!("no files given...\n#{option_parser}")
45
+ failure!("no files found or given, specify files or config...\n#{option_parser}")
44
46
  end
45
47
 
46
48
  ensure_files_exist(lint_files)
@@ -53,11 +55,17 @@ module ERBLint
53
55
  "#{enabled_linter_classes.size} #{'autocorrectable ' if autocorrect?}linters..."
54
56
  puts
55
57
 
58
+ runner = ERBLint::Runner.new(file_loader, @config)
59
+
56
60
  lint_files.each do |filename|
61
+ runner.clear_offenses
57
62
  begin
58
- run_with_corrections(filename)
63
+ run_with_corrections(runner, filename)
59
64
  rescue => e
65
+ @stats.exceptions += 1
60
66
  puts "Exception occured when processing: #{relative_filename(filename)}"
67
+ puts "If this file cannot be processed by erb-lint, "\
68
+ "you can exclude it in your configuration file."
61
69
  puts e.message
62
70
  puts Rainbow(e.backtrace.join("\n")).red
63
71
  puts
@@ -79,7 +87,7 @@ module ERBLint
79
87
  puts Rainbow("No errors were found in ERB files").green
80
88
  end
81
89
 
82
- @stats.found == 0
90
+ @stats.found == 0 && @stats.exceptions == 0
83
91
  rescue OptionParser::InvalidOption, OptionParser::InvalidArgument, ExitWithFailure => e
84
92
  warn(Rainbow(e.message).red)
85
93
  false
@@ -97,10 +105,8 @@ module ERBLint
97
105
  @options[:autocorrect]
98
106
  end
99
107
 
100
- def run_with_corrections(filename)
101
- file_content = File.read(filename)
102
-
103
- runner = ERBLint::Runner.new(file_loader, @config)
108
+ def run_with_corrections(runner, filename)
109
+ file_content = File.read(filename, encoding: Encoding::UTF_8)
104
110
 
105
111
  7.times do
106
112
  processed_source = ERBLint::ProcessedSource.new(filename, file_content)
@@ -144,14 +150,15 @@ module ERBLint
144
150
  def load_config
145
151
  if File.exist?(config_filename)
146
152
  config = RunnerConfig.new(file_loader.yaml(config_filename), file_loader)
147
- @config = RunnerConfig.default.merge(config)
153
+ @config = RunnerConfig.default_for(config)
148
154
  else
149
155
  warn(Rainbow("#{config_filename} not found: using default config").yellow)
150
156
  @config = RunnerConfig.default
151
157
  end
152
- @config.merge!(runner_config_override)
153
158
  rescue Psych::SyntaxError => e
154
159
  failure!("error parsing config: #{e.message}")
160
+ ensure
161
+ @config.merge!(runner_config_override)
155
162
  end
156
163
 
157
164
  def file_loader
@@ -163,17 +170,22 @@ module ERBLint
163
170
  end
164
171
 
165
172
  def lint_files
166
- if @options[:lint_all]
167
- pattern = File.expand_path(DEFAULT_LINT_ALL_GLOB, Dir.pwd)
168
- Dir[pattern].select { |filename| !excluded?(filename) }
169
- else
170
- @files
171
- .map { |f| Dir.exist?(f) ? Dir[File.join(f, DEFAULT_LINT_ALL_GLOB)] : f }
172
- .map { |f| f.include?('*') ? Dir[f] : f }
173
- .flatten
174
- .map { |f| File.expand_path(f, Dir.pwd) }
175
- .select { |filename| !excluded?(filename) }
176
- end
173
+ @lint_files ||=
174
+ if @options[:lint_all]
175
+ pattern = File.expand_path(glob, Dir.pwd)
176
+ Dir[pattern].select { |filename| !excluded?(filename) }
177
+ else
178
+ @files
179
+ .map { |f| Dir.exist?(f) ? Dir[File.join(f, glob)] : f }
180
+ .map { |f| f.include?('*') ? Dir[f] : f }
181
+ .flatten
182
+ .map { |f| File.expand_path(f, Dir.pwd) }
183
+ .select { |filename| !excluded?(filename) }
184
+ end
185
+ end
186
+
187
+ def glob
188
+ @config.to_hash["glob"] || DEFAULT_LINT_ALL_GLOB
177
189
  end
178
190
 
179
191
  def excluded?(filename)
@@ -246,7 +258,7 @@ module ERBLint
246
258
  end
247
259
  end
248
260
 
249
- opts.on("--lint-all", "Lint all files matching #{DEFAULT_LINT_ALL_GLOB}") do |config|
261
+ opts.on("--lint-all", "Lint all files matching configured glob [default: #{DEFAULT_LINT_ALL_GLOB}]") do |config|
250
262
  @options[:lint_all] = config
251
263
  end
252
264
 
@@ -264,7 +276,7 @@ module ERBLint
264
276
  @options[:enabled_linters] = linters
265
277
  end
266
278
 
267
- opts.on("--autocorrect", "Correct offenses that can be corrected automatically (default: false)") do |config|
279
+ opts.on("-a", "--autocorrect", "Correct offenses automatically if possible (default: false)") do |config|
268
280
  @options[:autocorrect] = config
269
281
  end
270
282
 
@@ -9,8 +9,14 @@ module ERBLint
9
9
  @base_path = base_path
10
10
  end
11
11
 
12
- def yaml(filename)
13
- YAML.safe_load(read_content(filename), [Regexp, Symbol], [], false, filename) || {}
12
+ if RUBY_VERSION >= "2.6"
13
+ def yaml(filename)
14
+ YAML.safe_load(read_content(filename), permitted_classes: [Regexp, Symbol], filename: filename) || {}
15
+ end
16
+ else
17
+ def yaml(filename)
18
+ YAML.safe_load(read_content(filename), [Regexp, Symbol], [], false, filename) || {}
19
+ end
14
20
  end
15
21
 
16
22
  private
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'better_html'
3
4
  require 'better_html/ast/node'
4
5
  require 'better_html/test_helper/ruby_node'
5
6
  require 'erb_lint/utils/block_map'
@@ -108,10 +108,8 @@ module ERBLint
108
108
  if @only_cops.present?
109
109
  selected_cops = RuboCop::Cop::Cop.all.select { |cop| cop.match?(@only_cops) }
110
110
  RuboCop::Cop::Registry.new(selected_cops)
111
- elsif @rubocop_config['Rails']['Enabled']
112
- RuboCop::Cop::Registry.new(RuboCop::Cop::Cop.all)
113
111
  else
114
- RuboCop::Cop::Cop.non_rails
112
+ RuboCop::Cop::Registry.new(RuboCop::Cop::Cop.all)
115
113
  end
116
114
  end
117
115
 
@@ -45,24 +45,30 @@ module ERBLint
45
45
  end
46
46
 
47
47
  class << self
48
- def default
48
+ def default(default_enabled: nil)
49
+ default_enabled = default_enabled.nil? ? true : default_enabled
49
50
  new(
50
51
  linters: {
51
- AllowedScriptType: { enabled: true },
52
- ClosingErbTagIndent: { enabled: true },
53
- ExtraNewline: { enabled: true },
54
- FinalNewline: { enabled: true },
55
- NoJavascriptTagHelper: { enabled: true },
56
- ParserErrors: { enabled: true },
57
- RightTrim: { enabled: true },
58
- SelfClosingTag: { enabled: true },
59
- SpaceAroundErbTag: { enabled: true },
60
- SpaceIndentation: { enabled: true },
61
- SpaceInHtmlTag: { enabled: true },
62
- TrailingWhitespace: { enabled: true },
52
+ AllowedScriptType: { enabled: default_enabled },
53
+ ClosingErbTagIndent: { enabled: default_enabled },
54
+ ExtraNewline: { enabled: default_enabled },
55
+ FinalNewline: { enabled: default_enabled },
56
+ NoJavascriptTagHelper: { enabled: default_enabled },
57
+ ParserErrors: { enabled: default_enabled },
58
+ RightTrim: { enabled: default_enabled },
59
+ SelfClosingTag: { enabled: default_enabled },
60
+ SpaceAroundErbTag: { enabled: default_enabled },
61
+ SpaceIndentation: { enabled: default_enabled },
62
+ SpaceInHtmlTag: { enabled: default_enabled },
63
+ TrailingWhitespace: { enabled: default_enabled },
63
64
  },
64
65
  )
65
66
  end
67
+
68
+ def default_for(config)
69
+ default_linters_enabled = config.to_hash.dig("EnableDefaultLinters")
70
+ default(default_enabled: default_linters_enabled).merge(config)
71
+ end
66
72
  end
67
73
 
68
74
  private
@@ -38,7 +38,9 @@ module ERBLint
38
38
  @corrector.remove_trailing(range_with_offset(range), size)
39
39
  end
40
40
 
41
- def range_with_offset(range)
41
+ def range_with_offset(node_or_range)
42
+ range = to_range(node_or_range)
43
+
42
44
  @processed_source.to_source_range(
43
45
  bound(@offset + range.begin_pos)..bound(@offset + (range.end_pos - 1))
44
46
  )
@@ -50,6 +52,21 @@ module ERBLint
50
52
  @bound_range.max,
51
53
  ].min
52
54
  end
55
+
56
+ private
57
+
58
+ def to_range(node_or_range)
59
+ case node_or_range
60
+ when ::RuboCop::AST::Node, ::Parser::Source::Comment
61
+ node_or_range.loc.expression
62
+ when ::Parser::Source::Range
63
+ node_or_range
64
+ else
65
+ raise TypeError,
66
+ 'Expected a Parser::Source::Range, Comment or ' \
67
+ "Rubocop::AST::Node, got #{node_or_range.class}"
68
+ end
69
+ end
53
70
  end
54
71
  end
55
72
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ERBLint
4
- VERSION = '0.0.29'
4
+ VERSION = '0.0.34'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: erb_lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.29
4
+ version: 0.0.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - Justin Chan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-03 00:00:00.000000000 Z
11
+ date: 2020-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: better_html
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.51'
47
+ version: '0.79'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.51'
54
+ version: '0.79'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: activesupport
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -167,7 +167,8 @@ files:
167
167
  homepage: https://github.com/Shopify/erb-lint
168
168
  licenses:
169
169
  - MIT
170
- metadata: {}
170
+ metadata:
171
+ allowed_push_host: https://rubygems.org
171
172
  post_install_message:
172
173
  rdoc_options: []
173
174
  require_paths:
@@ -176,15 +177,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
177
  requirements:
177
178
  - - ">="
178
179
  - !ruby/object:Gem::Version
179
- version: 2.3.0
180
+ version: 2.4.0
180
181
  required_rubygems_version: !ruby/object:Gem::Requirement
181
182
  requirements:
182
183
  - - ">="
183
184
  - !ruby/object:Gem::Version
184
185
  version: '0'
185
186
  requirements: []
186
- rubyforge_project:
187
- rubygems_version: 2.7.6
187
+ rubygems_version: 3.0.3
188
188
  signing_key:
189
189
  specification_version: 4
190
190
  summary: ERB lint tool