eslint-rails 1.0.2 → 1.1.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 +4 -4
- data/README.md +13 -5
- data/lib/eslint-rails/runner.rb +67 -8
- data/lib/eslint-rails/text_formatter.rb +2 -6
- data/lib/eslint-rails/version.rb +1 -1
- data/lib/eslint-rails/warning.rb +7 -2
- data/lib/tasks/eslint.rake +12 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a225cfc475435f30b32752520bc9d542e92d4734
|
4
|
+
data.tar.gz: 59b7cf5158a98e762febff32834c91f4b3e6a2fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3aeb4cd0968fa89ae1430d065f5de8fcb1f490d6f0f9e76e22f376331f7b1d49caee5717676fdd1c7eaef70a6cc1be91edd303f84f3352f30a878e8d6ce82307
|
7
|
+
data.tar.gz: 1df9381c4a7c723b0a111f744a36726dd897c571f7a4e8f680142d18c28ee1d384a2dca276cf08c3e8fbf39fc0b341112afbec12d3766cc23fe1f7f20f3bd534
|
data/README.md
CHANGED
@@ -36,17 +36,25 @@ in your browser. To force retrieval of the default conguration, use
|
|
36
36
|
|
37
37
|
![rake-eslint-rails-run][]
|
38
38
|
|
39
|
+
This will analyze all of the javascript files in the project:
|
40
|
+
|
41
|
+
```sh
|
42
|
+
rake eslint:run_all
|
43
|
+
```
|
44
|
+
|
45
|
+
Or you can run it on a single file. This will analyze `application.js`:
|
46
|
+
|
39
47
|
```sh
|
40
48
|
rake eslint:run
|
41
49
|
```
|
42
50
|
|
43
|
-
|
44
|
-
task. To analyze `components/woop.js` and `utilities.js.coffee.erb` you would
|
45
|
-
run (respectively):
|
51
|
+
Or, you can supply a filename to the task, using several different formats, and it will lint just that file. For example, to analyze `app/assets/javascripts/components/utilities.js`, you can run any of the following:
|
46
52
|
|
47
53
|
```sh
|
48
|
-
rake eslint:run[components/
|
49
|
-
rake eslint:run[utilities]
|
54
|
+
rake eslint:run[components/utilities]
|
55
|
+
rake eslint:run[components/utilities.js]
|
56
|
+
rake eslint:run[app/assets/javascripts/components/utilities]
|
57
|
+
rake eslint:run[app/assets/javascripts/components/utilities.js]
|
50
58
|
```
|
51
59
|
|
52
60
|
### Web interface
|
data/lib/eslint-rails/runner.rb
CHANGED
@@ -1,24 +1,83 @@
|
|
1
|
+
require 'colorize'
|
2
|
+
|
1
3
|
module ESLintRails
|
2
4
|
class Runner
|
3
5
|
include ActionView::Helpers::JavaScriptHelper
|
4
6
|
|
5
|
-
def initialize(
|
6
|
-
@
|
7
|
+
def initialize(file)
|
8
|
+
@file = normalize_infile(file)
|
7
9
|
end
|
8
10
|
|
9
11
|
def run
|
10
|
-
|
11
|
-
|
12
|
-
|
12
|
+
warnings = assets.map do |asset|
|
13
|
+
generate_warnings(asset).tap { |warnings| output_progress(warnings) }
|
14
|
+
end
|
15
|
+
|
16
|
+
puts
|
17
|
+
|
18
|
+
warnings.flatten
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def normalize_infile(file)
|
24
|
+
file = file.to_s.gsub(/^app\/assets\/javascripts\//, '') # Remove beginning of asset path
|
25
|
+
file = Pathname.new("#{Dir.pwd}/app/assets/javascripts/#{file}") # Ensure path is absolute
|
26
|
+
file = Pathname.new("#{file}.js") if !file.directory? && file.extname.empty? # Make sure it has an extension
|
27
|
+
file
|
28
|
+
end
|
29
|
+
|
30
|
+
def assets
|
31
|
+
all_js_assets = Rails.application.assets.each_file.to_a.select { |pn| pn.extname == '.js' }
|
32
|
+
|
33
|
+
assets = all_js_assets.select{|a| is_descendant?(@file, a)}
|
13
34
|
|
14
|
-
|
35
|
+
assets.reject{|a| a.to_s =~ /eslint.js|vendor|gems|min.js|editorial/ }
|
36
|
+
end
|
37
|
+
|
38
|
+
def eslint_js
|
39
|
+
@eslint_js ||= Rails.application.assets['eslint'].to_s
|
40
|
+
end
|
41
|
+
|
42
|
+
def warning_hashes(file_content)
|
43
|
+
ExecJS.eval <<-JS
|
15
44
|
function () {
|
16
45
|
window = this;
|
17
46
|
#{eslint_js};
|
18
|
-
return eslint.verify('#{escape_javascript
|
47
|
+
return eslint.verify('#{escape_javascript(file_content)}', #{Config.read});
|
19
48
|
}()
|
20
49
|
JS
|
21
|
-
|
50
|
+
end
|
51
|
+
|
52
|
+
def generate_warnings(asset)
|
53
|
+
relative_path = asset.relative_path_from(Pathname.new(Dir.pwd))
|
54
|
+
file_content = asset.read
|
55
|
+
|
56
|
+
warning_hashes(file_content).map do |hash|
|
57
|
+
ESLintRails::Warning.new(relative_path, hash)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def output_progress(warnings)
|
62
|
+
print case file_severity(warnings)
|
63
|
+
when :high
|
64
|
+
'H'.red
|
65
|
+
when :low
|
66
|
+
'L'.yellow
|
67
|
+
else
|
68
|
+
'.'.green
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def file_severity(warnings)
|
73
|
+
warnings.map(&:severity).uniq.sort.first
|
74
|
+
end
|
75
|
+
|
76
|
+
def is_descendant?(a, b)
|
77
|
+
a_list = a.to_s.split('/')
|
78
|
+
b_list = b.to_s.split('/')
|
79
|
+
|
80
|
+
b_list[0..a_list.size-1] == a_list
|
22
81
|
end
|
23
82
|
end
|
24
83
|
end
|
@@ -4,21 +4,17 @@ require 'colorize'
|
|
4
4
|
module ESLintRails
|
5
5
|
class TextFormatter
|
6
6
|
|
7
|
-
WARNING_TEMPLATE = <<-TEXT.strip_heredoc
|
8
|
-
<%= line %>,<%= column %> <%= severity %>! [<%= rule_id %>] <%= message %>
|
9
|
-
TEXT
|
10
|
-
|
11
7
|
def initialize(warnings)
|
12
8
|
@warnings = warnings
|
13
9
|
end
|
14
10
|
|
15
11
|
def format
|
16
|
-
max_line_column_length = @warnings.map { |warning|
|
12
|
+
max_line_column_length = @warnings.map { |warning| warning.location.size }.max
|
17
13
|
max_rule_id_length = @warnings.map { |warning| warning.rule_id.size }.max
|
18
14
|
max_message_length = @warnings.map { |warning| warning.message.size }.max
|
19
15
|
@warnings.each do |warning|
|
20
16
|
message = [
|
21
|
-
|
17
|
+
warning.location.ljust(max_line_column_length + 1),
|
22
18
|
warning.severity.to_s.ljust(6),
|
23
19
|
warning.rule_id.ljust(max_rule_id_length),
|
24
20
|
warning.message.ljust(max_message_length)
|
data/lib/eslint-rails/version.rb
CHANGED
data/lib/eslint-rails/warning.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
module ESLintRails
|
2
2
|
class Warning
|
3
|
-
attr_reader :rule_id, :message, :line, :column, :node_type
|
3
|
+
attr_reader :filename, :rule_id, :message, :line, :column, :node_type
|
4
4
|
|
5
5
|
SEVERITY = [ :low, :high ].freeze
|
6
6
|
private_constant :SEVERITY
|
7
7
|
|
8
|
-
def initialize(warning_hash)
|
8
|
+
def initialize(filename, warning_hash)
|
9
|
+
@filename = filename
|
9
10
|
@rule_id = warning_hash['ruleId'] || "unexpected error"
|
10
11
|
@severity = warning_hash['severity']
|
11
12
|
@message = warning_hash['message']
|
@@ -17,5 +18,9 @@ module ESLintRails
|
|
17
18
|
def severity
|
18
19
|
SEVERITY[@severity-1]
|
19
20
|
end
|
21
|
+
|
22
|
+
def location
|
23
|
+
"#{filename}:#{line}:#{column}"
|
24
|
+
end
|
20
25
|
end
|
21
26
|
end
|
data/lib/tasks/eslint.rake
CHANGED
@@ -3,10 +3,8 @@ ENV['EXECJS_RUNTIME'] = 'RubyRacer'
|
|
3
3
|
require 'eslint-rails'
|
4
4
|
|
5
5
|
namespace :eslint do
|
6
|
-
|
7
|
-
|
8
|
-
task :run, [:filename] => :environment do |_, args|
|
9
|
-
warnings = ESLintRails::Runner.new(args[:filename]).run
|
6
|
+
def run_and_print_results(file)
|
7
|
+
warnings = ESLintRails::Runner.new(file).run
|
10
8
|
|
11
9
|
if warnings.empty?
|
12
10
|
puts 'All good! :)'.green
|
@@ -18,6 +16,16 @@ namespace :eslint do
|
|
18
16
|
end
|
19
17
|
end
|
20
18
|
|
19
|
+
desc %{Run ESLint against the specified JavaScript file and report warnings (default is 'application')}
|
20
|
+
task :run, [:filename] => :environment do |_, args|
|
21
|
+
run_and_print_results(args[:filename] || 'application')
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Run ESLint against all project javascript files and report warnings'
|
25
|
+
task run_all: :environment do |_, args|
|
26
|
+
run_and_print_results(nil) # Run all
|
27
|
+
end
|
28
|
+
|
21
29
|
desc 'Print the current configuration file (Uses local config/eslint.json if it exists; uses default config/eslint.json if it does not; optionally force default by passing a parameter)'
|
22
30
|
task :print_config, [:force_default] => :environment do |_, args|
|
23
31
|
puts ESLintRails::Config.read(force_default: args[:force_default])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eslint-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justin Force
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-09-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|