phare 0.7.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/LICENSE.md +1 -1
- data/README.md +1 -1
- data/lib/phare.rb +2 -3
- data/lib/phare/check/eslint.rb +59 -0
- data/lib/phare/check/stylelint.rb +59 -0
- data/lib/phare/check_suite.rb +2 -3
- data/lib/phare/version.rb +1 -1
- data/spec/phare/check/{jshint_spec.rb → eslint_spec.rb} +38 -32
- data/spec/phare/check/{scss_lint_spec.rb → stylelint_spec.rb} +37 -24
- data/spec/phare/check_suite_spec.rb +7 -7
- metadata +9 -12
- data/lib/phare/check/jscs.rb +0 -54
- data/lib/phare/check/jshint.rb +0 -52
- data/lib/phare/check/scss_lint.rb +0 -46
- data/spec/phare/check/jscs_spec.rb +0 -107
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 32cfbf8d6a2dd16df575bfa14e2428449808a1b7
|
4
|
+
data.tar.gz: dc0e226459f1b14eece856393b4a8d66c6ebc06b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f462e483cf50a306ced260ba16750d871af4a7b99662b51ae4301e89314f01a6d337a9acdca5430aebf9c3f441c341b795097c24739c8e2417ce8064c61502a5
|
7
|
+
data.tar.gz: 2390db0d20b16ffc98c3d33dc4bfb0912699881015f7e024da7e7876088d2dd65c6ffa3f7a0ba8b53669be9d82e039e744c2362cf17ef5a6efe03f9f0b153d43
|
data/.travis.yml
CHANGED
data/LICENSE.md
CHANGED
data/README.md
CHANGED
@@ -122,7 +122,7 @@ skip:
|
|
122
122
|
|
123
123
|
## License
|
124
124
|
|
125
|
-
`Phare` is © 2014 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/phare/blob/master/LICENSE.md) file.
|
125
|
+
`Phare` is © 2014-2015 [Mirego](http://www.mirego.com) and may be freely distributed under the [New BSD license](http://opensource.org/licenses/BSD-3-Clause). See the [`LICENSE.md`](https://github.com/mirego/phare/blob/master/LICENSE.md) file.
|
126
126
|
|
127
127
|
The lighthouse logo is based on [this lovely icon](http://thenounproject.com/term/lighthouse/11608/) by [Nick Lacke](http://thenounproject.com/nicklacke), from The Noun Project.
|
128
128
|
|
data/lib/phare.rb
CHANGED
@@ -8,9 +8,8 @@ require 'phare/git'
|
|
8
8
|
|
9
9
|
require 'phare/check'
|
10
10
|
require 'phare/check/rubocop'
|
11
|
-
require 'phare/check/
|
12
|
-
require 'phare/check/
|
13
|
-
require 'phare/check/jscs'
|
11
|
+
require 'phare/check/stylelint'
|
12
|
+
require 'phare/check/eslint'
|
14
13
|
|
15
14
|
require 'phare/check_suite'
|
16
15
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Phare
|
3
|
+
class Check
|
4
|
+
class Eslint < Check
|
5
|
+
GLOBAL_BINARY = 'eslint'.freeze
|
6
|
+
LOCAL_BINARY = 'node_modules/.bin/eslint'.freeze
|
7
|
+
|
8
|
+
attr_reader :config, :path
|
9
|
+
|
10
|
+
def initialize(directory, options = {})
|
11
|
+
@directory = directory
|
12
|
+
@config = File.expand_path("#{directory}.eslintrc", __FILE__)
|
13
|
+
@path = File.expand_path("#{directory}app/assets/javascripts", __FILE__)
|
14
|
+
@extensions = %w(.js)
|
15
|
+
@options = options
|
16
|
+
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def command
|
21
|
+
"#{binary} #{input}"
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def configuration_exists?
|
27
|
+
File.exist?(@config)
|
28
|
+
end
|
29
|
+
|
30
|
+
def binary
|
31
|
+
local_binary_exists? ? @directory + LOCAL_BINARY : GLOBAL_BINARY
|
32
|
+
end
|
33
|
+
|
34
|
+
def binary_exists?
|
35
|
+
local_binary_exists? || global_binary_exists?
|
36
|
+
end
|
37
|
+
|
38
|
+
def local_binary_exists?
|
39
|
+
!Phare.system_output("which #{@directory}#{LOCAL_BINARY}").empty?
|
40
|
+
end
|
41
|
+
|
42
|
+
def global_binary_exists?
|
43
|
+
!Phare.system_output("which #{GLOBAL_BINARY}").empty?
|
44
|
+
end
|
45
|
+
|
46
|
+
def input
|
47
|
+
@tree.changed? ? files_to_check.join(' ') : "'#{@path}/**/*#{@extensions.first}'"
|
48
|
+
end
|
49
|
+
|
50
|
+
def arguments_exists?
|
51
|
+
@tree.changed? || Dir.exist?(@path)
|
52
|
+
end
|
53
|
+
|
54
|
+
def print_banner
|
55
|
+
Phare.banner 'Running ESLint to check for JavaScript style…'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Phare
|
3
|
+
class Check
|
4
|
+
class Stylelint < Check
|
5
|
+
GLOBAL_BINARY = 'stylelint'.freeze
|
6
|
+
LOCAL_BINARY = 'node_modules/.bin/stylelint'.freeze
|
7
|
+
|
8
|
+
attr_reader :config, :path
|
9
|
+
|
10
|
+
def initialize(directory, options = {})
|
11
|
+
@directory = directory
|
12
|
+
@config = File.expand_path("#{directory}.stylelintrc", __FILE__)
|
13
|
+
@path = File.expand_path("#{directory}app/assets/stylesheets", __FILE__)
|
14
|
+
@extensions = %w(.scss)
|
15
|
+
@options = options
|
16
|
+
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def command
|
21
|
+
"#{binary} #{input}"
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def configuration_exists?
|
27
|
+
File.exist?(@config)
|
28
|
+
end
|
29
|
+
|
30
|
+
def binary
|
31
|
+
local_binary_exists? ? @directory + LOCAL_BINARY : GLOBAL_BINARY
|
32
|
+
end
|
33
|
+
|
34
|
+
def binary_exists?
|
35
|
+
local_binary_exists? || global_binary_exists?
|
36
|
+
end
|
37
|
+
|
38
|
+
def local_binary_exists?
|
39
|
+
!Phare.system_output("which #{@directory}#{LOCAL_BINARY}").empty?
|
40
|
+
end
|
41
|
+
|
42
|
+
def global_binary_exists?
|
43
|
+
!Phare.system_output("which #{GLOBAL_BINARY}").empty?
|
44
|
+
end
|
45
|
+
|
46
|
+
def input
|
47
|
+
@tree.changed? ? files_to_check.join(' ') : "'#{@path}/**/*#{@extensions.first}'"
|
48
|
+
end
|
49
|
+
|
50
|
+
def arguments_exists?
|
51
|
+
@tree.changed? || Dir.exist?(@path)
|
52
|
+
end
|
53
|
+
|
54
|
+
def print_banner
|
55
|
+
Phare.banner 'Running Stylelint to check for SCSS style…'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/phare/check_suite.rb
CHANGED
data/lib/phare/version.rb
CHANGED
@@ -1,23 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Phare::Check::
|
4
|
-
let(:described_class) { Phare::Check::
|
3
|
+
describe Phare::Check::Eslint do
|
4
|
+
let(:described_class) { Phare::Check::Eslint }
|
5
5
|
|
6
6
|
describe :should_run? do
|
7
7
|
let(:check) { described_class.new('.') }
|
8
|
+
let(:config_exists?) { true }
|
9
|
+
let(:path_exists?) { true }
|
10
|
+
let(:local_which_output) { '' }
|
11
|
+
let(:global_which_output) { '' }
|
8
12
|
before do
|
9
|
-
|
13
|
+
allow(Phare).to receive(:system_output).with('which eslint').and_return(global_which_output)
|
14
|
+
allow(Phare).to receive(:system_output).with('which .node_modules/.bin/eslint').and_return(local_which_output)
|
10
15
|
allow(File).to receive(:exist?).with(check.config).and_return(config_exists?)
|
11
16
|
allow(Dir).to receive(:exist?).with(check.path).and_return(path_exists?)
|
12
17
|
end
|
13
18
|
|
14
|
-
context 'with found
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
+
context 'with found eslint command' do
|
20
|
+
context 'for a local eslint' do
|
21
|
+
let(:local_which_output) { 'node_modules/.bin/eslint' }
|
22
|
+
it { expect(check).to be_able_to_run }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'for a global eslint' do
|
26
|
+
let(:global_which_output) { 'eslint' }
|
27
|
+
it { expect(check).to be_able_to_run }
|
28
|
+
end
|
19
29
|
|
20
30
|
context 'with only excluded files and the --diff option' do
|
31
|
+
let(:global_which_output) { 'eslint' }
|
21
32
|
let(:check) { described_class.new('.', diff: true) }
|
22
33
|
let(:files) { ['foo.js'] }
|
23
34
|
|
@@ -30,8 +41,7 @@ describe Phare::Check::JSHint do
|
|
30
41
|
end
|
31
42
|
end
|
32
43
|
|
33
|
-
context 'with unfound
|
34
|
-
let(:which_output) { '' }
|
44
|
+
context 'with unfound eslint command' do
|
35
45
|
let(:config_exists?) { false }
|
36
46
|
let(:path_exists?) { false }
|
37
47
|
it { expect(check).to_not be_able_to_run }
|
@@ -42,62 +52,58 @@ describe Phare::Check::JSHint do
|
|
42
52
|
let(:check) { described_class.new('.') }
|
43
53
|
let(:run!) { check.run }
|
44
54
|
|
45
|
-
context 'with available
|
55
|
+
context 'with available Eslint' do
|
46
56
|
let(:command) { check.command }
|
47
|
-
let(:directory) { '.' }
|
48
|
-
let(:expanded_path) { '.jshintrc' }
|
49
57
|
|
50
58
|
before do
|
51
|
-
expect(File).to receive(:expand_path).with("#{directory}app/assets/javascripts", anything).once.and_call_original
|
52
|
-
expect(File).to receive(:expand_path).with("#{directory}.jshintrc", anything).once.and_return(expanded_path)
|
53
59
|
expect(check).to receive(:should_run?).and_return(true)
|
54
60
|
expect(Phare).to receive(:system).with(command)
|
55
|
-
expect(Phare).to receive(:last_exit_status).and_return(
|
61
|
+
expect(Phare).to receive(:last_exit_status).and_return(eslint_exit_status)
|
56
62
|
expect(check).to receive(:print_banner)
|
57
63
|
end
|
58
64
|
|
59
|
-
context '
|
60
|
-
let(:
|
65
|
+
context 'without check errors' do
|
66
|
+
let(:eslint_exit_status) { 0 }
|
61
67
|
before { expect(Phare).to receive(:puts).with('Everything looks good from here!') }
|
62
|
-
it { expect { run! }.to change { check.status }.to(
|
68
|
+
it { expect { run! }.to change { check.status }.to(eslint_exit_status) }
|
63
69
|
end
|
64
70
|
|
65
|
-
context '
|
66
|
-
let(:
|
67
|
-
before { expect(Phare).to receive(:puts).with("Something went wrong. Program exited with #{
|
68
|
-
it { expect { run! }.to change { check.status }.to(
|
71
|
+
context 'with check errors' do
|
72
|
+
let(:eslint_exit_status) { 1 }
|
73
|
+
before { expect(Phare).to receive(:puts).with("Something went wrong. Program exited with #{eslint_exit_status}.") }
|
74
|
+
it { expect { run! }.to change { check.status }.to(eslint_exit_status) }
|
69
75
|
end
|
70
76
|
|
71
77
|
context 'with --diff option' do
|
72
|
-
let(:check) { described_class.new(
|
73
|
-
let(:files) { ['
|
74
|
-
let(:
|
78
|
+
let(:check) { described_class.new('.', diff: true) }
|
79
|
+
let(:files) { ['foo.rb', 'bar.rb'] }
|
80
|
+
let(:eslint_exit_status) { 0 }
|
75
81
|
|
76
82
|
context 'without exclusions' do
|
77
|
-
let(:command) { "
|
83
|
+
let(:command) { "eslint #{files.join(' ')}" }
|
78
84
|
|
79
85
|
before do
|
80
86
|
expect(check.tree).to receive(:changes).and_return(files).at_least(:once)
|
81
87
|
expect(check).to receive(:excluded_files).and_return([]).once
|
82
88
|
end
|
83
89
|
|
84
|
-
it { expect { run! }.to change { check.status }.to(
|
90
|
+
it { expect { run! }.to change { check.status }.to(eslint_exit_status) }
|
85
91
|
end
|
86
92
|
|
87
93
|
context 'with exclusions' do
|
88
|
-
let(:command) {
|
94
|
+
let(:command) { 'eslint bar.rb' }
|
89
95
|
|
90
96
|
before do
|
91
|
-
expect(check).to receive(:excluded_files).and_return(['
|
97
|
+
expect(check).to receive(:excluded_files).and_return(['foo.rb']).once
|
92
98
|
expect(check.tree).to receive(:changes).and_return(files).at_least(:once)
|
93
99
|
end
|
94
100
|
|
95
|
-
it { expect { run! }.to change { check.status }.to(
|
101
|
+
it { expect { run! }.to change { check.status }.to(eslint_exit_status) }
|
96
102
|
end
|
97
103
|
end
|
98
104
|
end
|
99
105
|
|
100
|
-
context 'with unavailable
|
106
|
+
context 'with unavailable Eslint' do
|
101
107
|
before do
|
102
108
|
expect(check).to receive(:should_run?).and_return(false)
|
103
109
|
expect(Phare).to_not receive(:system).with(check.command)
|
@@ -1,21 +1,34 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Phare::Check::
|
4
|
-
let(:described_class) { Phare::Check::
|
3
|
+
describe Phare::Check::Stylelint do
|
4
|
+
let(:described_class) { Phare::Check::Stylelint }
|
5
5
|
|
6
6
|
describe :should_run? do
|
7
7
|
let(:check) { described_class.new('.') }
|
8
|
+
let(:config_exists?) { true }
|
9
|
+
let(:path_exists?) { true }
|
10
|
+
let(:local_which_output) { '' }
|
11
|
+
let(:global_which_output) { '' }
|
8
12
|
before do
|
9
|
-
|
13
|
+
allow(Phare).to receive(:system_output).with('which stylelint').and_return(global_which_output)
|
14
|
+
allow(Phare).to receive(:system_output).with('which .node_modules/.bin/stylelint').and_return(local_which_output)
|
15
|
+
allow(File).to receive(:exist?).with(check.config).and_return(config_exists?)
|
10
16
|
allow(Dir).to receive(:exist?).with(check.path).and_return(path_exists?)
|
11
17
|
end
|
12
18
|
|
13
|
-
context 'with found
|
14
|
-
|
15
|
-
|
16
|
-
|
19
|
+
context 'with found stylelint command' do
|
20
|
+
context 'for a local stylelint' do
|
21
|
+
let(:local_which_output) { 'node_modules/.bin/stylelint' }
|
22
|
+
it { expect(check).to be_able_to_run }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'for a global stylelint' do
|
26
|
+
let(:global_which_output) { 'stylelint' }
|
27
|
+
it { expect(check).to be_able_to_run }
|
28
|
+
end
|
17
29
|
|
18
30
|
context 'with only excluded files and the --diff option' do
|
31
|
+
let(:global_which_output) { 'stylelint' }
|
19
32
|
let(:check) { described_class.new('.', diff: true) }
|
20
33
|
let(:files) { ['foo.scss'] }
|
21
34
|
|
@@ -28,8 +41,8 @@ describe Phare::Check::ScssLint do
|
|
28
41
|
end
|
29
42
|
end
|
30
43
|
|
31
|
-
context 'with unfound
|
32
|
-
let(:
|
44
|
+
context 'with unfound stylelint command' do
|
45
|
+
let(:config_exists?) { false }
|
33
46
|
let(:path_exists?) { false }
|
34
47
|
it { expect(check).to_not be_able_to_run }
|
35
48
|
end
|
@@ -39,58 +52,58 @@ describe Phare::Check::ScssLint do
|
|
39
52
|
let(:check) { described_class.new('.') }
|
40
53
|
let(:run!) { check.run }
|
41
54
|
|
42
|
-
context 'with available
|
55
|
+
context 'with available Stylelint' do
|
43
56
|
let(:command) { check.command }
|
44
57
|
|
45
58
|
before do
|
46
59
|
expect(check).to receive(:should_run?).and_return(true)
|
47
60
|
expect(Phare).to receive(:system).with(command)
|
48
|
-
expect(Phare).to receive(:last_exit_status).and_return(
|
61
|
+
expect(Phare).to receive(:last_exit_status).and_return(stylelint_exit_status)
|
49
62
|
expect(check).to receive(:print_banner)
|
50
63
|
end
|
51
64
|
|
52
|
-
context '
|
53
|
-
let(:
|
65
|
+
context 'without check errors' do
|
66
|
+
let(:stylelint_exit_status) { 0 }
|
54
67
|
before { expect(Phare).to receive(:puts).with('Everything looks good from here!') }
|
55
|
-
it { expect { run! }.to change { check.status }.to(
|
68
|
+
it { expect { run! }.to change { check.status }.to(stylelint_exit_status) }
|
56
69
|
end
|
57
70
|
|
58
|
-
context '
|
59
|
-
let(:
|
60
|
-
before { expect(Phare).to receive(:puts).with("Something went wrong. Program exited with #{
|
61
|
-
it { expect { run! }.to change { check.status }.to(
|
71
|
+
context 'with check errors' do
|
72
|
+
let(:stylelint_exit_status) { 1 }
|
73
|
+
before { expect(Phare).to receive(:puts).with("Something went wrong. Program exited with #{stylelint_exit_status}.") }
|
74
|
+
it { expect { run! }.to change { check.status }.to(stylelint_exit_status) }
|
62
75
|
end
|
63
76
|
|
64
77
|
context 'with --diff option' do
|
65
78
|
let(:check) { described_class.new('.', diff: true) }
|
66
79
|
let(:files) { ['foo.rb', 'bar.rb'] }
|
67
|
-
let(:
|
80
|
+
let(:stylelint_exit_status) { 0 }
|
68
81
|
|
69
82
|
context 'without exclusions' do
|
70
|
-
let(:command) { "
|
83
|
+
let(:command) { "stylelint #{files.join(' ')}" }
|
71
84
|
|
72
85
|
before do
|
73
86
|
expect(check.tree).to receive(:changes).and_return(files).at_least(:once)
|
74
87
|
expect(check).to receive(:excluded_files).and_return([]).once
|
75
88
|
end
|
76
89
|
|
77
|
-
it { expect { run! }.to change { check.status }.to(
|
90
|
+
it { expect { run! }.to change { check.status }.to(stylelint_exit_status) }
|
78
91
|
end
|
79
92
|
|
80
93
|
context 'with exclusions' do
|
81
|
-
let(:command) { '
|
94
|
+
let(:command) { 'stylelint bar.rb' }
|
82
95
|
|
83
96
|
before do
|
84
97
|
expect(check).to receive(:excluded_files).and_return(['foo.rb']).once
|
85
98
|
expect(check.tree).to receive(:changes).and_return(files).at_least(:once)
|
86
99
|
end
|
87
100
|
|
88
|
-
it { expect { run! }.to change { check.status }.to(
|
101
|
+
it { expect { run! }.to change { check.status }.to(stylelint_exit_status) }
|
89
102
|
end
|
90
103
|
end
|
91
104
|
end
|
92
105
|
|
93
|
-
context 'with unavailable
|
106
|
+
context 'with unavailable Stylelint' do
|
94
107
|
before do
|
95
108
|
expect(check).to receive(:should_run?).and_return(false)
|
96
109
|
expect(Phare).to_not receive(:system).with(check.command)
|
@@ -45,19 +45,19 @@ describe Phare::CheckSuite do
|
|
45
45
|
let(:only) { [] }
|
46
46
|
|
47
47
|
context 'with "only" option' do
|
48
|
-
let(:only) { [:rubocop, :foo, :
|
49
|
-
it { expect(suite.checks).to eql [:rubocop, :
|
48
|
+
let(:only) { [:rubocop, :foo, :eslint] }
|
49
|
+
it { expect(suite.checks).to eql [:rubocop, :eslint] }
|
50
50
|
end
|
51
51
|
|
52
52
|
context 'with "skip" option' do
|
53
|
-
let(:skip) { [:
|
54
|
-
it { expect(suite.checks).to eql [:rubocop, :
|
53
|
+
let(:skip) { [:stylelint, :foo] }
|
54
|
+
it { expect(suite.checks).to eql [:rubocop, :eslint] }
|
55
55
|
end
|
56
56
|
|
57
57
|
context 'with both "only" and "skip" option' do
|
58
|
-
let(:skip) { [:
|
59
|
-
let(:only) { [:
|
60
|
-
it { expect(suite.checks).to eql [:
|
58
|
+
let(:skip) { [:stylelint, :rubocop] }
|
59
|
+
let(:only) { [:stylelint, :foo, :eslint] }
|
60
|
+
it { expect(suite.checks).to eql [:stylelint, :eslint] }
|
61
61
|
end
|
62
62
|
|
63
63
|
context 'with both "only" and "skip" option' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phare
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rémi Prévost
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,19 +86,17 @@ files:
|
|
86
86
|
- bin/phare
|
87
87
|
- lib/phare.rb
|
88
88
|
- lib/phare/check.rb
|
89
|
-
- lib/phare/check/
|
90
|
-
- lib/phare/check/jshint.rb
|
89
|
+
- lib/phare/check/eslint.rb
|
91
90
|
- lib/phare/check/rubocop.rb
|
92
|
-
- lib/phare/check/
|
91
|
+
- lib/phare/check/stylelint.rb
|
93
92
|
- lib/phare/check_suite.rb
|
94
93
|
- lib/phare/cli.rb
|
95
94
|
- lib/phare/git.rb
|
96
95
|
- lib/phare/version.rb
|
97
96
|
- phare.gemspec
|
98
|
-
- spec/phare/check/
|
99
|
-
- spec/phare/check/jshint_spec.rb
|
97
|
+
- spec/phare/check/eslint_spec.rb
|
100
98
|
- spec/phare/check/rubocop_spec.rb
|
101
|
-
- spec/phare/check/
|
99
|
+
- spec/phare/check/stylelint_spec.rb
|
102
100
|
- spec/phare/check_suite_spec.rb
|
103
101
|
- spec/phare/cli_spec.rb
|
104
102
|
- spec/phare/git_spec.rb
|
@@ -123,16 +121,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
121
|
version: '0'
|
124
122
|
requirements: []
|
125
123
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.
|
124
|
+
rubygems_version: 2.5.1
|
127
125
|
signing_key:
|
128
126
|
specification_version: 4
|
129
127
|
summary: Phare looks into your files and check for (Ruby, JavaScript and SCSS) coding
|
130
128
|
style errors.
|
131
129
|
test_files:
|
132
|
-
- spec/phare/check/
|
133
|
-
- spec/phare/check/jshint_spec.rb
|
130
|
+
- spec/phare/check/eslint_spec.rb
|
134
131
|
- spec/phare/check/rubocop_spec.rb
|
135
|
-
- spec/phare/check/
|
132
|
+
- spec/phare/check/stylelint_spec.rb
|
136
133
|
- spec/phare/check_suite_spec.rb
|
137
134
|
- spec/phare/cli_spec.rb
|
138
135
|
- spec/phare/git_spec.rb
|
data/lib/phare/check/jscs.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
module Phare
|
6
|
-
class Check
|
7
|
-
class JSCS < Check
|
8
|
-
attr_reader :config, :path
|
9
|
-
|
10
|
-
def initialize(directory, options = {})
|
11
|
-
@config = File.expand_path("#{directory}.jscs.json", __FILE__)
|
12
|
-
@path = File.expand_path("#{directory}app/assets", __FILE__)
|
13
|
-
@extensions = %w(.js)
|
14
|
-
@options = options
|
15
|
-
|
16
|
-
super
|
17
|
-
end
|
18
|
-
|
19
|
-
def command
|
20
|
-
if @tree.changed?
|
21
|
-
"jscs #{files_to_check.join(' ')}"
|
22
|
-
else
|
23
|
-
"jscs #{@path}"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
protected
|
28
|
-
|
29
|
-
def excluded_list
|
30
|
-
configuration_file['excludeFiles']
|
31
|
-
end
|
32
|
-
|
33
|
-
def configuration_file
|
34
|
-
@configuration_file ||= File.exist?('.jscs.json') ? JSON.parse(File.read('.jscs.json')) : {}
|
35
|
-
end
|
36
|
-
|
37
|
-
def binary_exists?
|
38
|
-
!Phare.system_output('which jscs').empty?
|
39
|
-
end
|
40
|
-
|
41
|
-
def configuration_exists?
|
42
|
-
File.exist?(@config)
|
43
|
-
end
|
44
|
-
|
45
|
-
def argument_exists?
|
46
|
-
@tree.changed? || Dir.exist?(@path)
|
47
|
-
end
|
48
|
-
|
49
|
-
def print_banner
|
50
|
-
Phare.banner 'Running JSCS to check for JavaScript style…'
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
data/lib/phare/check/jshint.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Phare
|
3
|
-
class Check
|
4
|
-
class JSHint < Check
|
5
|
-
attr_reader :config, :path
|
6
|
-
|
7
|
-
def initialize(directory, options = {})
|
8
|
-
@config = File.expand_path("#{directory}.jshintrc", __FILE__)
|
9
|
-
@path = File.expand_path("#{directory}app/assets/javascripts", __FILE__)
|
10
|
-
@glob = File.join(@path, '**/*')
|
11
|
-
@extensions = %w(.js .es6)
|
12
|
-
@options = options
|
13
|
-
|
14
|
-
super
|
15
|
-
end
|
16
|
-
|
17
|
-
def command
|
18
|
-
if @tree.changed?
|
19
|
-
"jshint --config #{@config} --extra-ext #{@extensions.join(',')} #{files_to_check.join(' ')}"
|
20
|
-
else
|
21
|
-
"jshint --config #{@config} --extra-ext #{@extensions.join(',')} #{@glob}"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
|
27
|
-
def excluded_list
|
28
|
-
configuration_file.split("\n") if configuration_file
|
29
|
-
end
|
30
|
-
|
31
|
-
def configuration_file
|
32
|
-
@configuration_file ||= File.exist?('.jshintignore') ? File.read('.jshintignore') : false
|
33
|
-
end
|
34
|
-
|
35
|
-
def binary_exists?
|
36
|
-
!Phare.system_output('which jshint').empty?
|
37
|
-
end
|
38
|
-
|
39
|
-
def configuration_exists?
|
40
|
-
File.exist?(@config)
|
41
|
-
end
|
42
|
-
|
43
|
-
def arguments_exists?
|
44
|
-
@tree.changed? || Dir.exist?(@path)
|
45
|
-
end
|
46
|
-
|
47
|
-
def print_banner
|
48
|
-
Phare.banner 'Running JSHint to check for JavaScript style…'
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Phare
|
3
|
-
class Check
|
4
|
-
class ScssLint < Check
|
5
|
-
attr_reader :path
|
6
|
-
|
7
|
-
def initialize(directory, options = {})
|
8
|
-
@path = File.expand_path("#{directory}app/assets/stylesheets", __FILE__)
|
9
|
-
@extensions = %w(.scss)
|
10
|
-
@options = options
|
11
|
-
|
12
|
-
super
|
13
|
-
end
|
14
|
-
|
15
|
-
def command
|
16
|
-
if @tree.changed?
|
17
|
-
"scss-lint #{files_to_check.join(' ')}"
|
18
|
-
else
|
19
|
-
"scss-lint #{@path}"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
protected
|
24
|
-
|
25
|
-
def excluded_list
|
26
|
-
configuration_file['exclude']
|
27
|
-
end
|
28
|
-
|
29
|
-
def configuration_file
|
30
|
-
@configuration_file ||= File.exist?('.scss-lint.yml') ? YAML::load(File.open('.scss-lint.yml')) : {}
|
31
|
-
end
|
32
|
-
|
33
|
-
def binary_exists?
|
34
|
-
!Phare.system_output('which scss-lint').empty?
|
35
|
-
end
|
36
|
-
|
37
|
-
def arguments_exists?
|
38
|
-
@tree.changed? || Dir.exist?(@path)
|
39
|
-
end
|
40
|
-
|
41
|
-
def print_banner
|
42
|
-
Phare.banner 'Running SCSS-Lint to check for SCSS style…'
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,107 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Phare::Check::JSCS do
|
4
|
-
let(:described_class) { Phare::Check::JSCS }
|
5
|
-
|
6
|
-
describe :should_run? do
|
7
|
-
let(:check) { described_class.new('.') }
|
8
|
-
|
9
|
-
before do
|
10
|
-
expect(Phare).to receive(:system_output).with('which jscs').and_return(which_output)
|
11
|
-
allow(File).to receive(:exist?).with(check.config).and_return(config_exists?)
|
12
|
-
allow(Dir).to receive(:exist?).with(check.path).and_return(path_exists?)
|
13
|
-
end
|
14
|
-
|
15
|
-
context 'with found jscs command' do
|
16
|
-
let(:which_output) { 'jscs' }
|
17
|
-
let(:config_exists?) { true }
|
18
|
-
let(:path_exists?) { true }
|
19
|
-
|
20
|
-
it { expect(check).to be_able_to_run }
|
21
|
-
|
22
|
-
context 'with only excluded files and the --diff option' do
|
23
|
-
let(:check) { described_class.new('.', diff: true) }
|
24
|
-
let(:files) { ['foo.js'] }
|
25
|
-
|
26
|
-
before do
|
27
|
-
expect(check).to receive(:excluded_files).and_return(files).once
|
28
|
-
expect(check.tree).to receive(:changes).and_return(files).at_least(:once)
|
29
|
-
end
|
30
|
-
|
31
|
-
it { expect(check.should_run?).to be_falsey }
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'with unfound jscs command' do
|
36
|
-
let(:which_output) { '' }
|
37
|
-
let(:config_exists?) { false }
|
38
|
-
let(:path_exists?) { false }
|
39
|
-
it { expect(check).to_not be_able_to_run }
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe :run do
|
44
|
-
let(:check) { described_class.new('.') }
|
45
|
-
let(:run!) { check.run }
|
46
|
-
|
47
|
-
context 'with available JSCS' do
|
48
|
-
let(:command) { check.command }
|
49
|
-
|
50
|
-
before do
|
51
|
-
expect(check).to receive(:should_run?).and_return(true)
|
52
|
-
expect(Phare).to receive(:system).with(command)
|
53
|
-
expect(Phare).to receive(:last_exit_status).and_return(jscs_exit_status)
|
54
|
-
expect(check).to receive(:print_banner)
|
55
|
-
end
|
56
|
-
|
57
|
-
context 'with check errors' do
|
58
|
-
let(:jscs_exit_status) { 0 }
|
59
|
-
it { expect { run! }.to change { check.status }.to(jscs_exit_status) }
|
60
|
-
end
|
61
|
-
|
62
|
-
context 'without check errors' do
|
63
|
-
let(:jscs_exit_status) { 1337 }
|
64
|
-
before { expect(Phare).to receive(:puts).with("Something went wrong. Program exited with #{jscs_exit_status}.") }
|
65
|
-
it { expect { run! }.to change { check.status }.to(jscs_exit_status) }
|
66
|
-
end
|
67
|
-
|
68
|
-
context 'with --diff option' do
|
69
|
-
let(:check) { described_class.new('.', diff: true) }
|
70
|
-
let(:files) { ['app/foo.js', 'bar.js'] }
|
71
|
-
let(:jscs_exit_status) { 1337 }
|
72
|
-
|
73
|
-
context 'without exclusions' do
|
74
|
-
let(:command) { "jscs #{files.join(' ')}" }
|
75
|
-
|
76
|
-
before do
|
77
|
-
expect(check.tree).to receive(:changes).and_return(files).at_least(:once)
|
78
|
-
expect(check).to receive(:excluded_files).and_return([]).once
|
79
|
-
end
|
80
|
-
|
81
|
-
it { expect { run! }.to change { check.status }.to(jscs_exit_status) }
|
82
|
-
end
|
83
|
-
|
84
|
-
context 'with exclusions' do
|
85
|
-
let(:command) { 'jscs bar.js' }
|
86
|
-
|
87
|
-
before do
|
88
|
-
expect(check).to receive(:excluded_files).and_return(['app/foo.js']).once
|
89
|
-
expect(check.tree).to receive(:changes).and_return(files).at_least(:once)
|
90
|
-
end
|
91
|
-
|
92
|
-
it { expect { run! }.to change { check.status }.to(jscs_exit_status) }
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
context 'with unavailable JSCS' do
|
98
|
-
before do
|
99
|
-
expect(check).to receive(:should_run?).and_return(false)
|
100
|
-
expect(Phare).to_not receive(:system).with(check.command)
|
101
|
-
expect(check).to_not receive(:print_banner)
|
102
|
-
end
|
103
|
-
|
104
|
-
it { expect { run! }.to change { check.status }.to(0) }
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|