roger_eslint 1.0.1 → 1.2.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
2
  SHA1:
3
- metadata.gz: 147aa12ad5cdcde7af013082566d33aa3e497597
4
- data.tar.gz: dc97130bb05546b487d4bedd3459703cb27eff37
3
+ metadata.gz: c8e887ef2a6fc0f33e0402f5a8dd6019bd2423c3
4
+ data.tar.gz: c553c89bc35b5eda0000d2ad550c5b0fd3d6a249
5
5
  SHA512:
6
- metadata.gz: 0dce1b94ecbfed10fedccf4c96b0fb7bcb70837e03dae9dd9a4bfa11d4a736eda58b8ce37cc62c2d5ee3253feb5a2d8f5964a5744fd1b7ee578e87c2e5184d08
7
- data.tar.gz: 74970d9a1f0fb43916e8eba4d06ec9ec6764d46598c137c047c3c37e36854fd7315f9eabadd210a21216010c2d6ad9a96f7eb5983f5167ec0552cb2da6eca04b
6
+ metadata.gz: 7e0b0a41bec1718f8ce7e1be4a9cf08984b07c21352084fd085595cd89f1c2da3b7556d1b24af52dd6c031ef800a29e2958de8db0de2087d523984368c5e85f8
7
+ data.tar.gz: d6e0c8788b0a9731dc45629fed1fde498db61893f4f7c203dccac4d7ff49224c8883ff2357bfec40ed4e8d8a0e0f7ae594620b8b298592700b1f8acaa46aef2f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## Version 1.2.0
4
+ * Make eslinting much faster
5
+ * Readme fixes
6
+
3
7
  ## Version 1.0.1
4
8
  * Prefer to load eslint from local node_modules. This makes it much easier to in combination with eslint configs from other NPM.
5
9
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roger_eslint (1.0.0)
4
+ roger_eslint (1.0.1)
5
5
  roger (~> 1.5, >= 1.0.0)
6
6
 
7
7
  GEM
@@ -10,18 +10,18 @@ GEM
10
10
  ast (2.2.0)
11
11
  hpricot (0.8.4)
12
12
  metaclass (0.0.4)
13
- mime-types (2.99)
13
+ mime-types (2.99.2)
14
14
  mocha (1.1.0)
15
15
  metaclass (~> 0.0.1)
16
16
  parser (2.3.0.1)
17
17
  ast (~> 2.2)
18
18
  power_assert (0.2.7)
19
19
  powerpack (0.1.1)
20
- rack (1.6.4)
20
+ rack (2.0.1)
21
21
  rainbow (2.0.0)
22
22
  rake (10.5.0)
23
23
  redcarpet (3.3.4)
24
- roger (1.5.0)
24
+ roger (1.6.1)
25
25
  hpricot (= 0.8.4)
26
26
  mime-types (~> 2.2)
27
27
  rack (>= 1.0.0)
@@ -39,7 +39,7 @@ GEM
39
39
  power_assert
40
40
  test_construct (2.0.1)
41
41
  thor (0.19.1)
42
- tilt (2.0.2)
42
+ tilt (2.0.5)
43
43
 
44
44
  PLATFORMS
45
45
  ruby
@@ -53,4 +53,4 @@ DEPENDENCIES
53
53
  thor (~> 0)
54
54
 
55
55
  BUNDLED WITH
56
- 1.10.6
56
+ 1.12.5
data/README.md CHANGED
@@ -4,12 +4,12 @@ Roger ESLint
4
4
  [![Build Status](https://travis-ci.org/DigitPaint/roger_eslint.svg)](https://travis-ci.org/DigitPaint/roger_eslint)
5
5
 
6
6
 
7
- Lint JavaScript files from within Roger. This plugin uses [eslint](http://eslint.org/). If present, .eslintrc in your project will be used. If not, jshint will walk the directory tree upwards until a .eslintrc file is found.
7
+ Lint JavaScript files from within Roger. This plugin uses [eslint](http://eslint.org/). If present, .eslintrc in your project will be used. If not, eslint will walk the directory tree upwards until a .eslintrc file is found.
8
8
 
9
9
  ## Installation
10
- * Install jshint using npm: ```npm install eslint -g```
10
+ * Install eslint using npm: ```npm install eslint -g```
11
11
 
12
- * Add ```gem 'roger_esliint'``` to your Gemfile
12
+ * Add ```gem 'roger_eslint'``` to your Gemfile
13
13
 
14
14
  * Add this to your Mockupfile:
15
15
  ```
@@ -1,4 +1,5 @@
1
1
  require "shellwords"
2
+ require "pathname"
2
3
  require "json"
3
4
  require "roger/test"
4
5
 
@@ -31,32 +32,12 @@ module RogerEslint
31
32
  @options.update(options) if options
32
33
  end
33
34
 
34
- def lint(test, file_path)
35
- output = `#{eslint_command(file_path)}`
36
- file_lints = JSON.parse(output).first
35
+ # @return [Array] failed files
36
+ def lint(test, file_paths)
37
+ output = `#{eslint_command(file_paths)}`
38
+ file_lints = JSON.parse(output)
37
39
 
38
- unless file_lints
39
- test.warn(self, "No files linted")
40
- return true
41
- end
42
-
43
- success = file_lints["errorCount"] <= 0
44
- success &&= file_lints["warningCount"] <= 0 if @_call_options[:fail_on_warning]
45
-
46
- fixables = []
47
-
48
- if success
49
- test.log(self, "#{file_path}: OK")
50
- else
51
- file_lints["messages"].each do |message|
52
- fixables << message if message["fix"]
53
- report_message(test, file_path, message)
54
- end
55
- end
56
-
57
- report_fixables(test, file_path, fixables)
58
-
59
- success
40
+ process_lint_results(test, file_lints)
60
41
  end
61
42
 
62
43
  # @param [Hash] options The options
@@ -69,16 +50,44 @@ module RogerEslint
69
50
 
70
51
  test.log(self, "ESLinting files")
71
52
 
72
- failures = test.get_files(@_call_options[:match], @_call_options[:skip]).select do |file_path|
73
- !lint(test, file_path)
74
- end
75
- failures.empty?
53
+ files = test.get_files(@_call_options[:match], @_call_options[:skip])
54
+
55
+ lint(test, files).empty?
76
56
  ensure
77
57
  @_call_options = {}
78
58
  end
79
59
 
80
60
  private
81
61
 
62
+ def process_lint_results(test, file_lints)
63
+ if file_lints.empty?
64
+ test.warn(self, "No files linted")
65
+ return []
66
+ end
67
+
68
+ file_lints.select do |file_lint|
69
+ path = file_lint["filePath"]
70
+
71
+ success = file_lint["errorCount"] <= 0
72
+ success &&= file_lint["warningCount"] <= 0 if @_call_options[:fail_on_warning]
73
+
74
+ fixables = []
75
+
76
+ if success
77
+ test.log(self, "#{normalize_path(test, path)}: OK")
78
+ else
79
+ file_lint["messages"].each do |message|
80
+ fixables << message if message["fix"]
81
+ report_message(test, path, message)
82
+ end
83
+ end
84
+
85
+ report_fixables(test, path, fixables)
86
+
87
+ !success
88
+ end
89
+ end
90
+
82
91
  def eslint_command(file_path, extras = [])
83
92
  command = [
84
93
  @_call_options[:eslint],
@@ -88,17 +97,19 @@ module RogerEslint
88
97
  command += @_call_options[:eslint_options] if @_call_options[:eslint_options]
89
98
 
90
99
  command += extras
91
- command << file_path
100
+ if file_path.is_a? Array
101
+ command += file_path
102
+ else
103
+ command << file_path
104
+ end
92
105
 
93
106
  Shellwords.join(command)
94
107
  end
95
108
 
96
109
  def report_message(test, file_path, message)
97
- output = "#{file_path}: "
98
- output << message["line"].to_s
99
- output << ":"
100
- output << message["column"].to_s
101
- output << " ["
110
+ output = "#{normalize_path(test, file_path)}: "
111
+ output << "#{message['line']}:#{message['column']} "
112
+ output << "["
102
113
  output << ESLINT_SEVERITIES[message["severity"]]
103
114
  output << " (Fixable)" if message["fix"]
104
115
  output << "] "
@@ -111,7 +122,7 @@ module RogerEslint
111
122
  def report_fixables(test, file_path, fixables)
112
123
  if fixables.any?
113
124
  test.log(self, "#{fixables.size} problems can be fixed automatically. Run:")
114
- test.log(self, " #{eslint_command(file_path, ['--fix'])}")
125
+ test.log(self, " #{eslint_command(normalize_path(test, file_path), ['--fix'])}")
115
126
  end
116
127
  end
117
128
 
@@ -139,6 +150,12 @@ module RogerEslint
139
150
  fail ArgumentError, err
140
151
  end
141
152
  end
153
+
154
+ # Will make path relative to project dir
155
+ # @return [String] relative path
156
+ def normalize_path(test, path)
157
+ Pathname.new(path).relative_path_from(test.project.path.realpath).to_s
158
+ end
142
159
  end
143
160
  end
144
161
 
@@ -1,4 +1,5 @@
1
+ # frozen_string_literal: true
1
2
  # Roger main namespace
2
3
  module RogerEslint
3
- VERSION = "1.0.1".freeze
4
+ VERSION = "1.2.0".freeze
4
5
  end
data/test/lint_test.rb CHANGED
@@ -41,48 +41,60 @@ class LintTest < Test::Unit::TestCase
41
41
 
42
42
  def test_detect_eslint
43
43
  assert_nothing_raised do
44
- lint_file "test.js"
44
+ lint_files "test.js"
45
45
  end
46
46
 
47
47
  assert_raise(ArgumentError) do
48
- lint_file "test.js", eslint: "eslint-blabla"
48
+ lint_files "test.js", eslint: "eslint-blabla"
49
49
  end
50
50
  end
51
51
 
52
52
  def test_lint_nonexisting_file
53
- success, messages = lint_file("test/data/does_not_exist.js")
53
+ success, messages = lint_files("test/data/does_not_exist.js")
54
54
 
55
55
  assert success
56
56
  assert_equal "No files linted", messages[0]
57
57
  end
58
58
 
59
+ def test_lint_multiple_files
60
+ success, messages = lint_files(
61
+ ["test/data/error.js", "test/data/fixable.js"],
62
+ eslint_options: ["--no-eslintrc", "--rule", "semi: 2"]
63
+ )
64
+
65
+ assert !success
66
+
67
+ assert_equal("test/data/error.js: OK", messages[0])
68
+ assert_equal("test/data/fixable.js: 1:15 [Error (Fixable)] Missing semicolon.", messages[1])
69
+ end
70
+
59
71
  def test_lint_with_default_eslintrc
60
72
  eslintrc_file = ".eslintrc.js"
61
73
  assert !File.exist?(eslintrc_file), ".eslintrc.js file already exists."
62
74
  FileUtils.cp("./test/data/.eslintrc-no-undef.js", eslintrc_file)
63
75
 
64
76
  file = "test/data/error.js"
65
- success, messages = lint_file(file)
77
+ success, messages = lint_files(file)
66
78
 
67
79
  assert !success
68
80
 
69
- assert_equal("#{file}: 1:1 [Error] \"x\" is not defined.", messages[0])
70
- assert_equal("#{file}: 2:1 [Error] \"alert\" is not defined.", messages[2])
71
- assert_equal("#{file}: 2:7 [Error] \"x\" is not defined.", messages[4])
81
+ assert_equal("#{file}: 1:1 [Error] 'x' is not defined.", messages[0])
82
+ assert_equal("#{file}: 2:1 [Error] 'alert' is not defined.", messages[2])
83
+ assert_equal("#{file}: 2:7 [Error] 'x' is not defined.", messages[4])
72
84
  ensure
73
85
  File.unlink eslintrc_file
74
86
  end
75
87
 
76
88
  def test_lint_pass_eslint_options
77
89
  file = "test/data/globals.js"
78
- success, messages = lint_file(file, eslint_options: ["--no-eslintrc", "--global", "my_global"])
90
+ success, messages = lint_files(file, eslint_options: ["--no-eslintrc", "--global", "my_global"])
79
91
  assert success
80
92
  assert_equal "#{file}: OK", messages[0]
81
93
  end
82
94
 
83
95
  def test_lint_fixable_errors
84
96
  file = "test/data/fixable.js"
85
- success, messages = lint_file(file, eslint_options: ["--no-eslintrc", "--rule", "semi: 2"])
97
+ success, messages = lint_files(file, eslint_options: ["--no-eslintrc", "--rule", "semi: 2"])
86
98
  assert !success
87
99
  assert_equal "#{file}: 1:15 [Error (Fixable)] Missing semicolon.", messages[0]
88
100
  assert_equal "1 problems can be fixed automatically. Run:", messages[2]
@@ -90,9 +102,9 @@ class LintTest < Test::Unit::TestCase
90
102
 
91
103
  protected
92
104
 
93
- def lint_file(file, options = {})
105
+ def lint_files(files, options = {})
94
106
  faketester = TesterStub.new
95
- faketester.files = [file]
107
+ faketester.files = files.is_a?(Array) ? files : [files]
96
108
 
97
109
  linter = RogerEslint::Lint.new options
98
110
  success = linter.call(faketester, {})
metadata CHANGED
@@ -1,103 +1,103 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roger_eslint
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Flurin Egger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-13 00:00:00.000000000 Z
11
+ date: 2016-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: roger
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.5'
20
- - - '>='
20
+ - - ">="
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.5'
30
- - - '>='
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rubocop
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - '>='
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - '>='
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - '>='
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - '>='
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: test-unit
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - '>='
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - '>='
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: thor
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ~>
79
+ - - "~>"
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ~>
86
+ - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: mocha
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - ~>
93
+ - - "~>"
94
94
  - !ruby/object:Gem::Version
95
95
  version: 1.1.0
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - ~>
100
+ - - "~>"
101
101
  - !ruby/object:Gem::Version
102
102
  version: 1.1.0
103
103
  description: |2
@@ -110,7 +110,7 @@ executables: []
110
110
  extensions: []
111
111
  extra_rdoc_files: []
112
112
  files:
113
- - .rubocop.yml
113
+ - ".rubocop.yml"
114
114
  - CHANGELOG.md
115
115
  - Gemfile
116
116
  - Gemfile.lock
@@ -136,17 +136,17 @@ require_paths:
136
136
  - lib
137
137
  required_ruby_version: !ruby/object:Gem::Requirement
138
138
  requirements:
139
- - - '>='
139
+ - - ">="
140
140
  - !ruby/object:Gem::Version
141
141
  version: '0'
142
142
  required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - '>='
144
+ - - ">="
145
145
  - !ruby/object:Gem::Version
146
146
  version: '0'
147
147
  requirements: []
148
148
  rubyforge_project:
149
- rubygems_version: 2.2.2
149
+ rubygems_version: 2.5.1
150
150
  signing_key:
151
151
  specification_version: 4
152
152
  summary: Lint JavaScript files with ESLint within Roger