lint_trap 0.0.2 → 0.0.3
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/.rubocop.yml +97 -0
- data/Dockerfile +222 -0
- data/Gemfile +2 -0
- data/Rakefile +45 -0
- data/circle.yml +22 -0
- data/config/checkstyle/checkstyle_logger-all.jar +0 -0
- data/config/checkstyle/sun_checks.xml +177 -0
- data/config/coffeelint/lint_trap.coffee +12 -0
- data/config/jshint/formatter.js +22 -0
- data/config/rubocop/formatter.rb +22 -0
- data/config/scsslint/scsslint +34 -0
- data/lib/lint_trap/command.rb +39 -0
- data/lib/lint_trap/container/base.rb +30 -0
- data/lib/lint_trap/container/docker.rb +46 -0
- data/lib/lint_trap/container/fake.rb +28 -0
- data/lib/lint_trap/language/base.rb +18 -0
- data/lib/lint_trap/language/coffeescript.rb +13 -0
- data/lib/lint_trap/language/cpp.rb +17 -0
- data/lib/lint_trap/language/css.rb +13 -0
- data/lib/lint_trap/language/go.rb +13 -0
- data/lib/lint_trap/language/java.rb +13 -0
- data/lib/lint_trap/language/javascript.rb +13 -0
- data/lib/lint_trap/language/json.rb +13 -0
- data/lib/lint_trap/language/python.rb +13 -0
- data/lib/lint_trap/language/ruby.rb +13 -0
- data/lib/lint_trap/language/scss.rb +13 -0
- data/lib/lint_trap/language.rb +50 -0
- data/lib/lint_trap/linter/base.rb +58 -0
- data/lib/lint_trap/linter/checkstyle.rb +24 -0
- data/lib/lint_trap/linter/coffeelint.rb +21 -0
- data/lib/lint_trap/linter/cppcheck.rb +18 -0
- data/lib/lint_trap/linter/csslint.rb +23 -0
- data/lib/lint_trap/linter/golint.rb +19 -0
- data/lib/lint_trap/linter/jshint.rb +20 -0
- data/lib/lint_trap/linter/jsonlint.rb +18 -0
- data/lib/lint_trap/linter/pylint.rb +19 -0
- data/lib/lint_trap/linter/rubocop.rb +22 -0
- data/lib/lint_trap/linter/scsslint.rb +22 -0
- data/lib/lint_trap/linter.rb +42 -0
- data/lib/lint_trap/{parsers/base_parser.rb → parser/base.rb} +8 -9
- data/lib/lint_trap/{parsers/csslint_parser.rb → parser/csslint.rb} +4 -5
- data/lib/lint_trap/{parsers/line_parser.rb → parser/line.rb} +14 -5
- data/lib/lint_trap/parser/standard.rb +22 -0
- data/lib/lint_trap/parser/vim_quickfix.rb +19 -0
- data/lib/lint_trap/version.rb +1 -1
- data/lib/lint_trap.rb +5 -14
- data/lint_trap.gemspec +3 -0
- data/spec/command_spec.rb +38 -0
- data/spec/container/docker_spec.rb +34 -0
- data/spec/container/fake_spec.rb +29 -0
- data/spec/fixtures/Good.java +6 -0
- data/spec/fixtures/bad.coffee +1 -0
- data/spec/fixtures/bad.cpp +5 -0
- data/spec/fixtures/bad.css +4 -0
- data/spec/fixtures/bad.go +7 -0
- data/spec/fixtures/bad.java +3 -0
- data/spec/fixtures/bad.js +3 -0
- data/spec/fixtures/bad.json +4 -0
- data/spec/fixtures/bad.py +2 -0
- data/spec/fixtures/bad.rb +4 -0
- data/spec/fixtures/bad.scss +3 -0
- data/spec/fixtures/good.coffee +1 -0
- data/spec/fixtures/good.cpp +4 -0
- data/spec/fixtures/good.css +3 -0
- data/spec/fixtures/good.go +7 -0
- data/spec/fixtures/good.js +5 -0
- data/spec/fixtures/good.json +4 -0
- data/spec/fixtures/good.py +6 -0
- data/spec/fixtures/good.rb +5 -0
- data/spec/fixtures/good.scss +3 -0
- data/spec/fixtures/lint.txt +1 -0
- data/spec/integration/checkstyle_spec.rb +52 -0
- data/spec/integration/coffeelint_spec.rb +44 -0
- data/spec/integration/cppcheck_spec.rb +60 -0
- data/spec/integration/csslint_spec.rb +44 -0
- data/spec/integration/golint_spec.rb +44 -0
- data/spec/integration/jshint_spec.rb +70 -0
- data/spec/integration/jsonlint_spec.rb +60 -0
- data/spec/integration/pylint_spec.rb +51 -0
- data/spec/integration/rubocop_spec.rb +52 -0
- data/spec/integration/scsslint_spec.rb +44 -0
- data/spec/language/coffeescript_spec.rb +8 -0
- data/spec/language/cpp_spec.rb +8 -0
- data/spec/language/css_spec.rb +8 -0
- data/spec/language/go_spec.rb +8 -0
- data/spec/language/java_spec.rb +8 -0
- data/spec/language/javascript_spec.rb +8 -0
- data/spec/language/json_spec.rb +8 -0
- data/spec/language/python_spec.rb +8 -0
- data/spec/language/ruby_spec.rb +8 -0
- data/spec/language/scss_spec.rb +8 -0
- data/spec/language_spec.rb +143 -0
- data/spec/lint_trap_spec.rb +0 -16
- data/spec/linter/checkstyle_spec.rb +45 -0
- data/spec/linter/coffeelint_spec.rb +46 -0
- data/spec/linter/cppcheck_spec.rb +26 -0
- data/spec/linter/csslint_spec.rb +44 -0
- data/spec/linter/golint_spec.rb +22 -0
- data/spec/linter/jshint_spec.rb +44 -0
- data/spec/linter/jsonlint_spec.rb +22 -0
- data/spec/linter/pylint_spec.rb +46 -0
- data/spec/linter/rubocop_spec.rb +48 -0
- data/spec/linter/scsslint_spec.rb +44 -0
- data/spec/linter_spec.rb +67 -0
- data/spec/parser/csslint_spec.rb +25 -0
- data/spec/{parsers/standard_parser_spec.rb → parser/standard_spec.rb} +4 -3
- data/spec/{parsers/vim_quickfix_parser_spec.rb → parser/vim_quickfix_spec.rb} +5 -4
- data/spec/spec_helper.rb +8 -0
- data/spec/support/fixture_file_helper.rb +8 -0
- metadata +193 -18
- data/lib/lint_trap/parser_factory.rb +0 -32
- data/lib/lint_trap/parsers/null_parser.rb +0 -11
- data/lib/lint_trap/parsers/standard_parser.rb +0 -23
- data/lib/lint_trap/parsers/vim_quickfix_parser.rb +0 -20
- data/spec/parser_factory_spec.rb +0 -17
- data/spec/parsers/csslint_parser_spec.rb +0 -26
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LintTrap::Linter::JSHint do
|
|
4
|
+
let(:container){LintTrap::Container::Fake.new}
|
|
5
|
+
subject(:linter){described_class.new(container: container)}
|
|
6
|
+
|
|
7
|
+
shared_examples '#lint' do
|
|
8
|
+
context 'when linting a bad file' do
|
|
9
|
+
let(:file){fixture_path('bad.js')}
|
|
10
|
+
|
|
11
|
+
it 'generates lint' do
|
|
12
|
+
expect{|b| linter.lint([file], &b)}.to yield_successive_args(
|
|
13
|
+
{
|
|
14
|
+
file: file,
|
|
15
|
+
line: '2',
|
|
16
|
+
column: '13',
|
|
17
|
+
length: nil,
|
|
18
|
+
rule: 'E031',
|
|
19
|
+
severity: 'error',
|
|
20
|
+
message: 'Bad assignment.'
|
|
21
|
+
}, {
|
|
22
|
+
file: file,
|
|
23
|
+
line: '2',
|
|
24
|
+
column: '13',
|
|
25
|
+
length: nil,
|
|
26
|
+
rule: 'W030',
|
|
27
|
+
severity: 'warning',
|
|
28
|
+
message:
|
|
29
|
+
'Expected an assignment or function call and instead saw an expression.'
|
|
30
|
+
}, {
|
|
31
|
+
file: file,
|
|
32
|
+
line: '2',
|
|
33
|
+
column: '14',
|
|
34
|
+
length: nil,
|
|
35
|
+
rule: 'W033',
|
|
36
|
+
severity: 'warning',
|
|
37
|
+
message: 'Missing semicolon.'
|
|
38
|
+
}, {
|
|
39
|
+
file: file,
|
|
40
|
+
line: '2',
|
|
41
|
+
column: '15',
|
|
42
|
+
length: nil,
|
|
43
|
+
rule: 'W030',
|
|
44
|
+
severity: 'warning',
|
|
45
|
+
message:
|
|
46
|
+
'Expected an assignment or function call and instead saw an expression.'
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context 'when linting a good file' do
|
|
53
|
+
let(:file){fixture_path('good.js')}
|
|
54
|
+
|
|
55
|
+
it 'generates no lint' do
|
|
56
|
+
expect{|b| linter.lint([file], &b)}.to_not yield_control
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'with docker container', if: !ENV['SKIP_DOCKER'] do
|
|
62
|
+
let(:container){LintTrap::Container::Docker.new('lintci/spin_cycle:latest', fixture_path)}
|
|
63
|
+
|
|
64
|
+
it_behaves_like '#lint'
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context 'without a docker container', if: ENV['SKIP_DOCKER'] do
|
|
68
|
+
it_behaves_like '#lint'
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LintTrap::Linter::JSONLint do
|
|
4
|
+
let(:container){LintTrap::Container::Fake.new}
|
|
5
|
+
subject(:linter){described_class.new(container: container)}
|
|
6
|
+
|
|
7
|
+
shared_examples '#lint' do
|
|
8
|
+
context 'when linting a bad file' do
|
|
9
|
+
let(:file){fixture_path('bad.json')}
|
|
10
|
+
|
|
11
|
+
it 'generates lint' do
|
|
12
|
+
expect{|b| linter.lint([file], &b)}.to yield_successive_args(
|
|
13
|
+
{
|
|
14
|
+
file: file,
|
|
15
|
+
line: '2',
|
|
16
|
+
column: '2',
|
|
17
|
+
length: nil,
|
|
18
|
+
rule: nil,
|
|
19
|
+
severity: 'error',
|
|
20
|
+
message: 'Json strings must use double quotes'
|
|
21
|
+
}, {
|
|
22
|
+
file: file,
|
|
23
|
+
line: '3',
|
|
24
|
+
column: '2',
|
|
25
|
+
length: nil,
|
|
26
|
+
rule: nil,
|
|
27
|
+
severity: 'error',
|
|
28
|
+
message: 'Keys must be double quoted in Json. Did you mean "not"?'
|
|
29
|
+
}, {
|
|
30
|
+
file: file,
|
|
31
|
+
line: '3',
|
|
32
|
+
column: '7',
|
|
33
|
+
length: nil,
|
|
34
|
+
rule: nil,
|
|
35
|
+
severity: 'error',
|
|
36
|
+
message: 'Invalid Json number'
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context 'when linting a good file' do
|
|
43
|
+
let(:file){fixture_path('good.json')}
|
|
44
|
+
|
|
45
|
+
it 'generates no lint' do
|
|
46
|
+
expect{|b| linter.lint([file], &b)}.to_not yield_control
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context 'with docker container', if: !ENV['SKIP_DOCKER'] do
|
|
52
|
+
let(:container){LintTrap::Container::Docker.new('lintci/spin_cycle:latest', fixture_path)}
|
|
53
|
+
|
|
54
|
+
it_behaves_like '#lint'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context 'without a docker container', if: ENV['SKIP_DOCKER'] do
|
|
58
|
+
it_behaves_like '#lint'
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LintTrap::Linter::PyLint do
|
|
4
|
+
let(:container){LintTrap::Container::Fake.new}
|
|
5
|
+
subject(:linter){described_class.new(container: container)}
|
|
6
|
+
|
|
7
|
+
shared_examples '#lint' do
|
|
8
|
+
context 'when linting a bad file' do
|
|
9
|
+
let(:file){fixture_path('bad.py')}
|
|
10
|
+
|
|
11
|
+
it 'generates lint' do
|
|
12
|
+
expect{|b| linter.lint([file], &b)}.to yield_successive_args(
|
|
13
|
+
{
|
|
14
|
+
file: file,
|
|
15
|
+
line: '1',
|
|
16
|
+
column: '0',
|
|
17
|
+
length: nil,
|
|
18
|
+
rule: 'missing-docstring',
|
|
19
|
+
severity: 'convention',
|
|
20
|
+
message: 'Missing module docstring'
|
|
21
|
+
}, {
|
|
22
|
+
file: file,
|
|
23
|
+
line: '1',
|
|
24
|
+
column: '0',
|
|
25
|
+
length: nil,
|
|
26
|
+
rule: 'missing-docstring',
|
|
27
|
+
severity: 'convention',
|
|
28
|
+
message: 'Missing function docstring'}
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context 'when linting a good file' do
|
|
34
|
+
let(:file){fixture_path('good.py')}
|
|
35
|
+
|
|
36
|
+
it 'generates no lint' do
|
|
37
|
+
expect{|b| linter.lint([file], &b)}.to_not yield_control
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context 'with docker container', if: !ENV['SKIP_DOCKER'] do
|
|
43
|
+
let(:container){LintTrap::Container::Docker.new('lintci/spin_cycle:latest', fixture_path)}
|
|
44
|
+
|
|
45
|
+
it_behaves_like '#lint'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
context 'without a docker container', if: ENV['SKIP_DOCKER'] do
|
|
49
|
+
it_behaves_like '#lint'
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LintTrap::Linter::RuboCop do
|
|
4
|
+
let(:container){LintTrap::Container::Fake.new}
|
|
5
|
+
subject(:linter){described_class.new(container: container)}
|
|
6
|
+
|
|
7
|
+
shared_examples '#lint' do
|
|
8
|
+
context 'when linting a bad file' do
|
|
9
|
+
let(:file){fixture_path('bad.rb')}
|
|
10
|
+
|
|
11
|
+
it 'generates lint' do
|
|
12
|
+
expect{|b| linter.lint([file], &b)}.to yield_successive_args(
|
|
13
|
+
{
|
|
14
|
+
file: file,
|
|
15
|
+
line: '1',
|
|
16
|
+
column: '1',
|
|
17
|
+
length: '5',
|
|
18
|
+
rule: 'Style/Documentation',
|
|
19
|
+
severity: 'convention',
|
|
20
|
+
message: 'Missing top-level class documentation comment.'
|
|
21
|
+
}, {
|
|
22
|
+
file: file,
|
|
23
|
+
line: '2',
|
|
24
|
+
column: '7',
|
|
25
|
+
length: '4',
|
|
26
|
+
rule: 'Style/MethodName',
|
|
27
|
+
severity: 'convention',
|
|
28
|
+
message: 'Use snake_case for method names.'
|
|
29
|
+
}
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context 'when linting a good file' do
|
|
35
|
+
let(:file){fixture_path('good.rb')}
|
|
36
|
+
|
|
37
|
+
it 'generates no lint' do
|
|
38
|
+
expect{|b| linter.lint([file], &b)}.to_not yield_control
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context 'with docker container', if: !ENV['SKIP_DOCKER'] do
|
|
44
|
+
let(:container){LintTrap::Container::Docker.new('lintci/spin_cycle:latest', fixture_path)}
|
|
45
|
+
|
|
46
|
+
it_behaves_like '#lint'
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context 'without a docker container', if: ENV['SKIP_DOCKER'] do
|
|
50
|
+
it_behaves_like '#lint'
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LintTrap::Linter::SCSSLint do
|
|
4
|
+
let(:container){LintTrap::Container::Fake.new}
|
|
5
|
+
subject(:linter){described_class.new(container: container)}
|
|
6
|
+
|
|
7
|
+
shared_examples '#lint' do
|
|
8
|
+
context 'when linting a bad file' do
|
|
9
|
+
let(:file){fixture_path('bad.scss')}
|
|
10
|
+
|
|
11
|
+
it 'generates lint' do
|
|
12
|
+
expect{|b| linter.lint([file], &b)}.to yield_successive_args(
|
|
13
|
+
{
|
|
14
|
+
file: file,
|
|
15
|
+
line: '2',
|
|
16
|
+
column: '3',
|
|
17
|
+
length: '12',
|
|
18
|
+
rule: 'BorderZero',
|
|
19
|
+
severity: 'warning',
|
|
20
|
+
message: '`border: 0;` is preferred over `border: none;`'
|
|
21
|
+
}
|
|
22
|
+
)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context 'when linting a good file' do
|
|
27
|
+
let(:file){fixture_path('good.scss')}
|
|
28
|
+
|
|
29
|
+
it 'generates no lint' do
|
|
30
|
+
expect{|b| linter.lint([file], &b)}.to_not yield_control
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
context 'with docker container', if: !ENV['SKIP_DOCKER'] do
|
|
36
|
+
let(:container){LintTrap::Container::Docker.new('lintci/spin_cycle:latest', fixture_path)}
|
|
37
|
+
|
|
38
|
+
it_behaves_like '#lint'
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context 'without a docker container', if: ENV['SKIP_DOCKER'] do
|
|
42
|
+
it_behaves_like '#lint'
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LintTrap::Language do
|
|
4
|
+
describe '.detect' do
|
|
5
|
+
subject(:language){described_class.detect(file)}
|
|
6
|
+
|
|
7
|
+
context 'when given a CoffeeScript file' do
|
|
8
|
+
let(:file){fixture_path('good.coffee')}
|
|
9
|
+
|
|
10
|
+
it{is_expected.to eq(described_class::CoffeeScript)}
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
context 'when given a C++ file' do
|
|
14
|
+
let(:file){fixture_path('good.cpp')}
|
|
15
|
+
|
|
16
|
+
it{is_expected.to eq(described_class::CPP)}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context 'when given a CSS file' do
|
|
20
|
+
let(:file){fixture_path('good.css')}
|
|
21
|
+
|
|
22
|
+
it{is_expected.to eq(described_class::CSS)}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'when given a Go file' do
|
|
26
|
+
let(:file){fixture_path('good.go')}
|
|
27
|
+
|
|
28
|
+
it{is_expected.to eq(described_class::Go)}
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context 'when given a Java file' do
|
|
32
|
+
let(:file){fixture_path('Good.java')}
|
|
33
|
+
|
|
34
|
+
it{is_expected.to eq(described_class::Java)}
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context 'when given a JavaScript file' do
|
|
38
|
+
let(:file){fixture_path('good.js')}
|
|
39
|
+
|
|
40
|
+
it{is_expected.to eq(described_class::JavaScript)}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
context 'when given a JSON file' do
|
|
44
|
+
let(:file){fixture_path('good.json')}
|
|
45
|
+
|
|
46
|
+
it{is_expected.to eq(described_class::JSON)}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
context 'when given a Python file' do
|
|
50
|
+
let(:file){fixture_path('good.py')}
|
|
51
|
+
|
|
52
|
+
it{is_expected.to eq(described_class::Python)}
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context 'when given a Ruby file' do
|
|
56
|
+
let(:file){fixture_path('good.rb')}
|
|
57
|
+
|
|
58
|
+
it{is_expected.to eq(described_class::Ruby)}
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'when given a SCSS file' do
|
|
62
|
+
let(:file){fixture_path('good.scss')}
|
|
63
|
+
|
|
64
|
+
it{is_expected.to eq(described_class::SCSS)}
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context 'when given an unknown language file' do
|
|
68
|
+
let(:file){fixture_path('lint.txt')}
|
|
69
|
+
|
|
70
|
+
it{is_expected.to eq(nil)}
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe '.find' do
|
|
75
|
+
subject(:language){described_class.find(language_name)}
|
|
76
|
+
|
|
77
|
+
context 'when given CoffeeScript' do
|
|
78
|
+
let(:language_name){'CoffeeScript'}
|
|
79
|
+
|
|
80
|
+
it{is_expected.to eq(described_class::CoffeeScript)}
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
context 'when given C++' do
|
|
84
|
+
let(:language_name){'C++'}
|
|
85
|
+
|
|
86
|
+
it{is_expected.to eq(described_class::CPP)}
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
context 'when given CSS' do
|
|
90
|
+
let(:language_name){'CSS'}
|
|
91
|
+
|
|
92
|
+
it{is_expected.to eq(described_class::CSS)}
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
context 'when given Go' do
|
|
96
|
+
let(:language_name){'Go'}
|
|
97
|
+
|
|
98
|
+
it{is_expected.to eq(described_class::Go)}
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
context 'when given Java' do
|
|
102
|
+
let(:language_name){'Java'}
|
|
103
|
+
|
|
104
|
+
it{is_expected.to eq(described_class::Java)}
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context 'when given JavaScript' do
|
|
108
|
+
let(:language_name){'JavaScript'}
|
|
109
|
+
|
|
110
|
+
it{is_expected.to eq(described_class::JavaScript)}
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
context 'when given JSON' do
|
|
114
|
+
let(:language_name){'JSON'}
|
|
115
|
+
|
|
116
|
+
it{is_expected.to eq(described_class::JSON)}
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
context 'when given Python' do
|
|
120
|
+
let(:language_name){'Python'}
|
|
121
|
+
|
|
122
|
+
it{is_expected.to eq(described_class::Python)}
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
context 'when given Ruby' do
|
|
126
|
+
let(:language_name){'Ruby'}
|
|
127
|
+
|
|
128
|
+
it{is_expected.to eq(described_class::Ruby)}
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
context 'when given SCSS' do
|
|
132
|
+
let(:language_name){'SCSS'}
|
|
133
|
+
|
|
134
|
+
it{is_expected.to eq(described_class::SCSS)}
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
context 'when given an invalid language' do
|
|
138
|
+
let(:language_name){'invalid language'}
|
|
139
|
+
|
|
140
|
+
it{is_expected.to eq(nil)}
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
data/spec/lint_trap_spec.rb
CHANGED
|
@@ -4,20 +4,4 @@ describe LintTrap do
|
|
|
4
4
|
it 'has a version number' do
|
|
5
5
|
expect(LintTrap::VERSION).not_to be nil
|
|
6
6
|
end
|
|
7
|
-
|
|
8
|
-
describe '.parse' do
|
|
9
|
-
let(:io){StringIO.new("bad.rb:2:7:4:Style/MethodName:convention:Use snake_case for methods.\n")}
|
|
10
|
-
|
|
11
|
-
it 'yields the expected violations' do
|
|
12
|
-
expect{|b| LintTrap.parse('rubocop', io, &b)}.to yield_successive_args({
|
|
13
|
-
file: 'bad.rb',
|
|
14
|
-
line: '2',
|
|
15
|
-
column: '7',
|
|
16
|
-
length: '4',
|
|
17
|
-
rule: 'Style/MethodName',
|
|
18
|
-
severity: 'convention',
|
|
19
|
-
message: 'Use snake_case for methods.'
|
|
20
|
-
})
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
7
|
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LintTrap::Linter::CheckStyle do
|
|
4
|
+
let(:container){LintTrap::Container::Fake.new}
|
|
5
|
+
let(:config){nil}
|
|
6
|
+
let(:files){%w(Good.java bad.java)}
|
|
7
|
+
subject(:linter){described_class.new(container: container, config: config)}
|
|
8
|
+
let(:command){instance_double(LintTrap::Command)}
|
|
9
|
+
|
|
10
|
+
describe '#lint' do
|
|
11
|
+
context 'when config is provided' do
|
|
12
|
+
let(:config){'checks.xml'}
|
|
13
|
+
|
|
14
|
+
it 'runs the lint command with the correct arguments' do
|
|
15
|
+
expect(LintTrap::Command).to receive(:new).with(
|
|
16
|
+
'java',
|
|
17
|
+
[
|
|
18
|
+
'-jar', container.config_path(described_class::JAR),
|
|
19
|
+
'-c', config
|
|
20
|
+
],
|
|
21
|
+
files
|
|
22
|
+
).and_return(command)
|
|
23
|
+
expect(command).to receive(:run).with(container)
|
|
24
|
+
|
|
25
|
+
linter.lint(files)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'when config is not provided' do
|
|
30
|
+
it 'runs the lint command with the correct arguments' do
|
|
31
|
+
expect(LintTrap::Command).to receive(:new).with(
|
|
32
|
+
'java',
|
|
33
|
+
[
|
|
34
|
+
'-jar', container.config_path(described_class::JAR),
|
|
35
|
+
'-c', container.config_path(described_class::CHECKS_XML)
|
|
36
|
+
],
|
|
37
|
+
files
|
|
38
|
+
).and_return(command)
|
|
39
|
+
expect(command).to receive(:run).with(container)
|
|
40
|
+
|
|
41
|
+
linter.lint(files)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LintTrap::Linter::CoffeeLint do
|
|
4
|
+
let(:container){LintTrap::Container::Fake.new}
|
|
5
|
+
let(:config){nil}
|
|
6
|
+
let(:files){%w(good.coffee bad.coffee)}
|
|
7
|
+
subject(:linter){described_class.new(container: container, config: config)}
|
|
8
|
+
let(:command){instance_double(LintTrap::Command)}
|
|
9
|
+
|
|
10
|
+
describe '#lint' do
|
|
11
|
+
context 'when config is provided' do
|
|
12
|
+
let(:config){'coffeelint.json'}
|
|
13
|
+
|
|
14
|
+
it 'runs the lint command with the correct arguments' do
|
|
15
|
+
expect(LintTrap::Command).to receive(:new).with(
|
|
16
|
+
'coffeelint',
|
|
17
|
+
[
|
|
18
|
+
"--reporter=#{container.config_path(described_class::REPORTER)}",
|
|
19
|
+
'--nocolor',
|
|
20
|
+
'--file=coffeelint.json'
|
|
21
|
+
],
|
|
22
|
+
files
|
|
23
|
+
).and_return(command)
|
|
24
|
+
expect(command).to receive(:run).with(container)
|
|
25
|
+
|
|
26
|
+
linter.lint(files)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context 'when config is not provided' do
|
|
31
|
+
it 'runs the lint command with the correct arguments' do
|
|
32
|
+
expect(LintTrap::Command).to receive(:new).with(
|
|
33
|
+
'coffeelint',
|
|
34
|
+
[
|
|
35
|
+
"--reporter=#{container.config_path(described_class::REPORTER)}",
|
|
36
|
+
'--nocolor'
|
|
37
|
+
],
|
|
38
|
+
files
|
|
39
|
+
).and_return(command)
|
|
40
|
+
expect(command).to receive(:run).with(container)
|
|
41
|
+
|
|
42
|
+
linter.lint(files)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe LintTrap::Linter::CPPCheck do
|
|
4
|
+
let(:container){LintTrap::Container::Fake.new}
|
|
5
|
+
let(:config){nil}
|
|
6
|
+
let(:files){%w(good.cpp bad.cpp)}
|
|
7
|
+
subject(:linter){described_class.new(container: container, config: config)}
|
|
8
|
+
let(:command){instance_double(LintTrap::Command)}
|
|
9
|
+
|
|
10
|
+
describe '#lint' do
|
|
11
|
+
it 'runs the lint command with the correct arguments' do
|
|
12
|
+
expect(LintTrap::Command).to receive(:new).with(
|
|
13
|
+
'cppcheck',
|
|
14
|
+
[
|
|
15
|
+
'--enable=all',
|
|
16
|
+
'--error-exitcode=1',
|
|
17
|
+
'--template="{file}:{line}:::{id}:{severity}:{message}"'
|
|
18
|
+
],
|
|
19
|
+
files
|
|
20
|
+
).and_return(command)
|
|
21
|
+
expect(command).to receive(:run).with(container)
|
|
22
|
+
|
|
23
|
+
linter.lint(files)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|