lint_trap 0.0.15 → 0.0.16

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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -1
  3. data/lib/lint_trap/container/base.rb +1 -0
  4. data/lib/lint_trap/language/base.rb +8 -6
  5. data/lib/lint_trap/language/coffeescript.rb +0 -3
  6. data/lib/lint_trap/language/cpp.rb +0 -4
  7. data/lib/lint_trap/language/css.rb +0 -3
  8. data/lib/lint_trap/language/go.rb +0 -3
  9. data/lib/lint_trap/language/java.rb +0 -3
  10. data/lib/lint_trap/language/javascript.rb +0 -3
  11. data/lib/lint_trap/language/json.rb +0 -3
  12. data/lib/lint_trap/language/python.rb +0 -3
  13. data/lib/lint_trap/language/ruby.rb +0 -3
  14. data/lib/lint_trap/language/scss.rb +0 -3
  15. data/lib/lint_trap/language/unknown.rb +1 -11
  16. data/lib/lint_trap/language.rb +6 -19
  17. data/lib/lint_trap/linter/base.rb +21 -19
  18. data/lib/lint_trap/linter/checkstyle.rb +0 -4
  19. data/lib/lint_trap/linter/coffeelint.rb +0 -4
  20. data/lib/lint_trap/linter/cppcheck.rb +0 -4
  21. data/lib/lint_trap/linter/csslint.rb +0 -8
  22. data/lib/lint_trap/linter/golint.rb +0 -8
  23. data/lib/lint_trap/linter/jshint.rb +0 -4
  24. data/lib/lint_trap/linter/jsonlint.rb +0 -4
  25. data/lib/lint_trap/linter/pylint.rb +0 -4
  26. data/lib/lint_trap/linter/rubocop.rb +0 -4
  27. data/lib/lint_trap/linter/scsslint.rb +0 -4
  28. data/lib/lint_trap/linter/unknown.rb +2 -9
  29. data/lib/lint_trap/linter.rb +20 -26
  30. data/lib/lint_trap/parser/base.rb +5 -9
  31. data/lib/lint_trap/parser/line.rb +6 -6
  32. data/lib/lint_trap/parser.rb +16 -0
  33. data/lib/lint_trap/registerable.rb +20 -0
  34. data/lib/lint_trap/registry.rb +29 -0
  35. data/lib/lint_trap/version.rb +2 -1
  36. data/lib/lint_trap.rb +1 -0
  37. data/lint_trap.gemspec +2 -2
  38. data/spec/integration/base_spec.rb +5 -1
  39. data/spec/integration/checkstyle_spec.rb +1 -1
  40. data/spec/integration/coffeelint_spec.rb +1 -1
  41. data/spec/integration/cppcheck_spec.rb +1 -1
  42. data/spec/integration/csslint_spec.rb +1 -1
  43. data/spec/integration/golint_spec.rb +1 -1
  44. data/spec/integration/jshint_spec.rb +1 -1
  45. data/spec/integration/jsonlint_spec.rb +1 -1
  46. data/spec/integration/pylint_spec.rb +1 -1
  47. data/spec/integration/rubocop_spec.rb +1 -1
  48. data/spec/integration/scsslint_spec.rb +1 -1
  49. data/spec/language/coffeescript_spec.rb +1 -2
  50. data/spec/language/cpp_spec.rb +1 -2
  51. data/spec/language/css_spec.rb +1 -2
  52. data/spec/language/go_spec.rb +1 -2
  53. data/spec/language/java_spec.rb +1 -2
  54. data/spec/language/javascript_spec.rb +1 -2
  55. data/spec/language/json_spec.rb +1 -2
  56. data/spec/language/python_spec.rb +1 -2
  57. data/spec/language/ruby_spec.rb +1 -2
  58. data/spec/language/scss_spec.rb +1 -2
  59. data/spec/language/unknown_spec.rb +1 -11
  60. data/spec/language_spec.rb +21 -2
  61. data/spec/linter/checkstyle_spec.rb +1 -1
  62. data/spec/linter/coffeelint_spec.rb +1 -1
  63. data/spec/linter/cppcheck_spec.rb +1 -1
  64. data/spec/linter/csslint_spec.rb +1 -1
  65. data/spec/linter/golint_spec.rb +1 -1
  66. data/spec/linter/jshint_spec.rb +1 -1
  67. data/spec/linter/jsonlint_spec.rb +1 -1
  68. data/spec/linter/pylint_spec.rb +1 -1
  69. data/spec/linter/rubocop_spec.rb +1 -1
  70. data/spec/linter/scsslint_spec.rb +1 -1
  71. data/spec/linter/unknown_spec.rb +1 -0
  72. data/spec/linter_spec.rb +1 -1
  73. data/spec/parser/base_spec.rb +3 -2
  74. data/spec/parser/csslint_spec.rb +2 -2
  75. data/spec/parser/line_spec.rb +3 -2
  76. data/spec/parser/standard_spec.rb +2 -2
  77. data/spec/parser/vim_quickfix_spec.rb +2 -2
  78. data/spec/registry_spec.rb +52 -0
  79. data/spec/support/examples/linter.rb +2 -1
  80. metadata +7 -2
@@ -0,0 +1,29 @@
1
+ module LintTrap
2
+ # Allow registration and discovery of plugins
3
+ class Registry
4
+ def initialize
5
+ @registry = {}
6
+ end
7
+
8
+ def default(thing_class)
9
+ @registry.default = thing_class.new
10
+ end
11
+
12
+ def register(thing_class)
13
+ thing = thing_class.new
14
+ registry[thing.name] = thing
15
+ end
16
+
17
+ def find(name)
18
+ registry[name]
19
+ end
20
+
21
+ def all
22
+ registry.values
23
+ end
24
+
25
+ protected
26
+
27
+ attr_reader :registry
28
+ end
29
+ end
@@ -1,3 +1,4 @@
1
+ # Gem to detect and lint files
1
2
  module LintTrap
2
- VERSION = '0.0.15'
3
+ VERSION = '0.0.16'
3
4
  end
data/lib/lint_trap.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require_relative 'lint_trap/version'
2
2
  require_relative 'lint_trap/language'
3
+ require_relative 'lint_trap/parser'
3
4
  require_relative 'lint_trap/linter'
4
5
  require_relative 'lint_trap/container/docker'
5
6
  require_relative 'lint_trap/container/fake'
data/lint_trap.gemspec CHANGED
@@ -14,8 +14,8 @@ Gem::Specification.new do |spec|
14
14
  spec.license = 'MIT'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}){|f| File.basename(f)}
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.executables = spec.files.grep(/^bin\//){|f| File.basename(f)}
18
+ spec.test_files = spec.files.grep(/^(test|spec|features)\//)
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_runtime_dependency 'github-linguist', '~> 4.2'
@@ -13,6 +13,10 @@ describe LintTrap::Linter::Base do
13
13
  def flags(_container, _options)
14
14
  []
15
15
  end
16
+
17
+ def parser
18
+ LintTrap::Parser.find('Standard')
19
+ end
16
20
  end.new
17
21
  end
18
22
 
@@ -22,7 +26,7 @@ describe LintTrap::Linter::Base do
22
26
 
23
27
  it 'raises an error with console output' do
24
28
  expect{|b| linter.lint([file], container, options, &b)}.to raise_error(
25
- LintTrap::Linter::LintError,
29
+ described_class::LintError,
26
30
  start_with(
27
31
  'An error occurred while running `docker run'
28
32
  )
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::CheckStyle do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('CheckStyle')}
7
7
 
8
8
  describe '#lint' do
9
9
  context 'when linting a bad file' do
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::CoffeeLint do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('CoffeeLint')}
7
7
 
8
8
  describe '#version' do
9
9
  subject(:dockerfile){Dockerfile.new(linter.name)}
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::CPPCheck do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('CPPCheck')}
7
7
 
8
8
  describe '#version' do
9
9
  subject(:dockerfile){Dockerfile.new(linter.name)}
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::CSSLint do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('CSSLint')}
7
7
 
8
8
  describe '#version' do
9
9
  subject(:dockerfile){Dockerfile.new(linter.name)}
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::GoLint do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('GoLint')}
7
7
 
8
8
  describe '#lint' do
9
9
  context 'when linting a bad file' do
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::JSHint do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('JSHint')}
7
7
 
8
8
  describe '#version' do
9
9
  subject(:dockerfile){Dockerfile.new(linter.name)}
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::JSONLint do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('JSONLint')}
7
7
 
8
8
  describe '#version' do
9
9
  subject(:dockerfile){Dockerfile.new(linter.name)}
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::PyLint do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('PyLint')}
7
7
 
8
8
  describe '#version' do
9
9
  subject(:dockerfile){Dockerfile.new(linter.name)}
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::RuboCop do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('RuboCop')}
7
7
 
8
8
  describe '#version' do
9
9
  subject(:dockerfile){Dockerfile.new(linter.name)}
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe LintTrap::Linter::SCSSLint do
4
4
  let(:container){LintTrap::Container::Docker.new(linter.image_version, fixture_path, remove_container: ENV['CI'].nil?)}
5
5
  let(:options){{}}
6
- subject(:linter){described_class.new}
6
+ subject(:linter){LintTrap::Linter.find('SCSSLint')}
7
7
 
8
8
  describe '#version' do
9
9
  subject(:dockerfile){Dockerfile.new(linter.name)}
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::CoffeeScript do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('CoffeeScript')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('CoffeeScript')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::CoffeeLint.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::CPP do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('C++')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('C++')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::CPPCheck.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::CSS do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('CSS')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('CSS')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::CSSLint.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::Go do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('Go')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('Go')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::GoLint.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::Java do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('Java')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('Java')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::CheckStyle.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::JavaScript do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('JavaScript')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('JavaScript')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::JSHint.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::JSON do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('JSON')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('JSON')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::JSONLint.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::Python do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('Python')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('Python')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::PyLint.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::Ruby do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('Ruby')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('Ruby')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::RuboCop.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -1,11 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language::SCSS do
4
- subject(:language){described_class.new}
4
+ subject(:language){LintTrap::Language.find('SCSS')}
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
8
  its(:name){is_expected.to eq('SCSS')}
9
9
  its(:linters){is_expected.to eq([LintTrap::Linter::SCSSLint.new])}
10
- it{is_expected.to be_known}
11
10
  end
@@ -5,16 +5,6 @@ describe LintTrap::Language::Unknown do
5
5
 
6
6
  it_behaves_like 'language'
7
7
 
8
- context 'when no name is passed' do
9
- its(:name){is_expected.to eq('Unknown')}
10
- end
11
-
12
- context 'when a name is passed' do
13
- subject(:language){described_class.new('Huh')}
14
-
15
- its(:name){is_expected.to eq('Huh')}
16
- end
17
-
8
+ its(:name){is_expected.to eq('Unknown')}
18
9
  its(:linters){is_expected.to eq([LintTrap::Linter::Unknown.new])}
19
- it{is_expected.to_not be_known}
20
10
  end
@@ -1,6 +1,25 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe LintTrap::Language do
4
+ describe '.all' do
5
+ subject(:languages){described_class.all}
6
+
7
+ it do
8
+ is_expected.to match([
9
+ be_a(described_class::CoffeeScript),
10
+ be_a(described_class::CPP),
11
+ be_a(described_class::CSS),
12
+ be_a(described_class::Go),
13
+ be_a(described_class::Java),
14
+ be_a(described_class::JavaScript),
15
+ be_a(described_class::JSON),
16
+ be_a(described_class::Python),
17
+ be_a(described_class::Ruby),
18
+ be_a(described_class::SCSS)
19
+ ])
20
+ end
21
+ end
22
+
4
23
  describe '.detect' do
5
24
  subject(:language){described_class.detect(file)}
6
25
 
@@ -67,7 +86,7 @@ describe LintTrap::Language do
67
86
  context 'when given an unknown language file' do
68
87
  let(:file){fixture_path('lint.txt')}
69
88
 
70
- it{is_expected.to eq(described_class::Unknown.new('Text'))}
89
+ it{is_expected.to eq(described_class::Unknown.new)}
71
90
  end
72
91
 
73
92
  context 'when given a known language file that is empty' do
@@ -144,7 +163,7 @@ describe LintTrap::Language do
144
163
  context 'when given an invalid language' do
145
164
  let(:language_name){'invalid language'}
146
165
 
147
- it{is_expected.to eq(described_class::Unknown.new(language_name))}
166
+ it{is_expected.to eq(described_class::Unknown.new)}
148
167
  end
149
168
  end
150
169
  end
@@ -5,7 +5,7 @@ describe LintTrap::Linter::CheckStyle do
5
5
  let(:options){{}}
6
6
  let(:files){%w(Good.java bad.java)}
7
7
  let(:command){instance_double(LintTrap::Command)}
8
- subject(:linter){described_class.new}
8
+ subject(:linter){LintTrap::Linter.find('CheckStyle')}
9
9
 
10
10
  it_behaves_like 'linter'
11
11
 
@@ -4,7 +4,7 @@ describe LintTrap::Linter::CoffeeLint do
4
4
  let(:container){LintTrap::Container::Fake.new}
5
5
  let(:options){{}}
6
6
  let(:files){%w(good.coffee bad.coffee)}
7
- subject(:linter){described_class.new}
7
+ subject(:linter){LintTrap::Linter.find('CoffeeLint')}
8
8
  let(:command){instance_double(LintTrap::Command)}
9
9
 
10
10
  it_behaves_like 'linter'
@@ -4,7 +4,7 @@ describe LintTrap::Linter::CPPCheck do
4
4
  let(:container){LintTrap::Container::Fake.new}
5
5
  let(:options){{}}
6
6
  let(:files){%w(good.cpp bad.cpp)}
7
- subject(:linter){described_class.new}
7
+ subject(:linter){LintTrap::Linter.find('CPPCheck')}
8
8
  let(:command){instance_double(LintTrap::Command)}
9
9
 
10
10
  it_behaves_like 'linter'
@@ -4,7 +4,7 @@ describe LintTrap::Linter::CSSLint do
4
4
  let(:container){LintTrap::Container::Fake.new}
5
5
  let(:options){{}}
6
6
  let(:files){%w(good.css bad.css)}
7
- subject(:linter){described_class.new}
7
+ subject(:linter){LintTrap::Linter.find('CSSLint')}
8
8
  let(:command){instance_double(LintTrap::Command)}
9
9
 
10
10
  it_behaves_like 'linter'
@@ -4,7 +4,7 @@ describe LintTrap::Linter::GoLint do
4
4
  let(:container){LintTrap::Container::Fake.new}
5
5
  let(:options){{}}
6
6
  let(:files){%w(good.go bad.go)}
7
- subject(:linter){described_class.new}
7
+ subject(:linter){LintTrap::Linter.find('GoLint')}
8
8
  let(:command){instance_double(LintTrap::Command)}
9
9
 
10
10
  it_behaves_like 'linter'
@@ -4,7 +4,7 @@ describe LintTrap::Linter::JSHint do
4
4
  let(:container){LintTrap::Container::Fake.new}
5
5
  let(:options){{}}
6
6
  let(:files){%w(good.js bad.js)}
7
- subject(:linter){described_class.new}
7
+ subject(:linter){LintTrap::Linter.find('JSHint')}
8
8
  let(:command){instance_double(LintTrap::Command)}
9
9
 
10
10
  it_behaves_like 'linter'
@@ -4,7 +4,7 @@ describe LintTrap::Linter::JSONLint do
4
4
  let(:container){LintTrap::Container::Fake.new}
5
5
  let(:options){{}}
6
6
  let(:files){%w(good.go bad.go)}
7
- subject(:linter){described_class.new}
7
+ subject(:linter){LintTrap::Linter.find('JSONLint')}
8
8
  let(:command){instance_double(LintTrap::Command)}
9
9
 
10
10
  it_behaves_like 'linter'
@@ -4,7 +4,7 @@ describe LintTrap::Linter::PyLint do
4
4
  let(:container){LintTrap::Container::Fake.new}
5
5
  let(:options){{}}
6
6
  let(:files){%w(good.py bad.py)}
7
- subject(:linter){described_class.new}
7
+ subject(:linter){LintTrap::Linter.find('PyLint')}
8
8
  let(:command){instance_double(LintTrap::Command)}
9
9
 
10
10
  it_behaves_like 'linter'
@@ -4,7 +4,7 @@ describe LintTrap::Linter::RuboCop do
4
4
  let(:container){LintTrap::Container::Fake.new}
5
5
  let(:options){{}}
6
6
  let(:files){%w(good.rb bad.rb)}
7
- subject(:linter){described_class.new}
7
+ subject(:linter){LintTrap::Linter.find('RuboCop')}
8
8
  let(:command){instance_double(LintTrap::Command)}
9
9
 
10
10
  it_behaves_like 'linter'
@@ -4,7 +4,7 @@ describe LintTrap::Linter::SCSSLint do
4
4
  let(:container){LintTrap::Container::Fake.new}
5
5
  let(:options){{}}
6
6
  let(:files){%w(good.scss bad.scss)}
7
- subject(:linter){described_class.new}
7
+ subject(:linter){LintTrap::Linter.find('SCSSLint')}
8
8
  let(:command){instance_double(LintTrap::Command)}
9
9
 
10
10
  it_behaves_like 'linter'
@@ -9,6 +9,7 @@ describe LintTrap::Linter::Unknown do
9
9
 
10
10
  it_behaves_like 'linter'
11
11
 
12
+ its(:name){is_expected.to eq('Unknown')}
12
13
  its(:languages){is_expected.to eq([LintTrap::Language::Unknown.new])}
13
14
  its(:version){is_expected.to eq(LintTrap::VERSION)}
14
15
  its(:image){is_expected.to eq('lintci/unknown')}
data/spec/linter_spec.rb CHANGED
@@ -86,7 +86,7 @@ describe LintTrap::Linter do
86
86
  context 'when given an unknown linter' do
87
87
  let(:linter_name){'taco cheese'}
88
88
 
89
- it{is_expected.to eq(described_class::Unknown.new(linter_name))}
89
+ it{is_expected.to eq(described_class::Unknown.new)}
90
90
  end
91
91
  end
92
92
  end
@@ -3,11 +3,12 @@ require 'spec_helper'
3
3
  describe LintTrap::Parser::Base do
4
4
  let(:image){LintTrap::Linter::RuboCop.new.image_version}
5
5
  let(:container){LintTrap::Container::Docker.new(image, fixture_path, remove_container: ENV['CI'].nil?)}
6
- subject(:parser){Class.new(described_class).new(StringIO.new, container)}
6
+ let(:io){StringIO.new}
7
+ subject(:parser){Class.new(described_class).new}
7
8
 
8
9
  describe '#parse' do
9
10
  it 'raises an error if not overriden' do
10
- expect{parser.parse}.to raise_error(NotImplementedError, 'Must implement parse.')
11
+ expect{parser.parse(io, container)}.to raise_error(NotImplementedError, 'Must implement parse.')
11
12
  end
12
13
  end
13
14
  end
@@ -7,11 +7,11 @@ describe LintTrap::Parser::CSSLint do
7
7
  end
8
8
  let(:io){StringIO.new(parser_output)}
9
9
  let(:container){LintTrap::Container::Fake.new}
10
- subject(:parser){described_class.new(io, container)}
10
+ subject(:parser){described_class.new}
11
11
 
12
12
  describe '.parse' do
13
13
  it 'parses violations from io' do
14
- expect{|b| @result = parser.parse(&b)}.to yield_successive_args(
14
+ expect{|b| @result = parser.parse(io, container, &b)}.to yield_successive_args(
15
15
  file: 'bad.css',
16
16
  line: '2',
17
17
  column: '5',
@@ -3,11 +3,12 @@ require 'spec_helper'
3
3
  describe LintTrap::Parser::Line do
4
4
  let(:image){LintTrap::Linter::RuboCop.new.image_version}
5
5
  let(:container){LintTrap::Container::Docker.new(image, fixture_path, remove_container: ENV['CI'].nil?)}
6
- subject(:parser){Class.new(described_class).new(StringIO.new('violation'), container)}
6
+ let(:io){StringIO.new('violation')}
7
+ subject(:parser){Class.new(described_class).new}
7
8
 
8
9
  describe '#parse' do
9
10
  it 'raises an error if #violation_regex not overriden' do
10
- expect{parser.parse}.to raise_error(NotImplementedError, 'Must implement violation_regex.')
11
+ expect{parser.parse(io, container)}.to raise_error(NotImplementedError, 'Must implement violation_regex.')
11
12
  end
12
13
  end
13
14
  end
@@ -12,11 +12,11 @@ describe LintTrap::Parser::Standard do
12
12
  end
13
13
  let(:io){StringIO.new(parser_output)}
14
14
  let(:container){LintTrap::Container::Fake.new}
15
- subject(:parser){described_class.new(io, container)}
15
+ subject(:parser){described_class.new}
16
16
 
17
17
  describe '.parse' do
18
18
  it 'parses violations from io' do
19
- expect{|b| @result = parser.parse(&b)}.to yield_successive_args(
19
+ expect{|b| @result = parser.parse(io, container, &b)}.to yield_successive_args(
20
20
  {
21
21
  file: 'bad.java',
22
22
  line: '1',
@@ -6,11 +6,11 @@ describe LintTrap::Parser::VimQuickfix do
6
6
  end
7
7
  let(:io){StringIO.new(parser_output)}
8
8
  let(:container){LintTrap::Container::Fake.new}
9
- subject(:parser){described_class.new(io, container)}
9
+ subject(:parser){described_class.new}
10
10
 
11
11
  describe '#parse' do
12
12
  it 'parses violations from io' do
13
- expect{|b| @result = parser.parse(&b)}.to yield_successive_args(
13
+ expect{|b| @result = parser.parse(io, container, &b)}.to yield_successive_args(
14
14
  file: 'bad.go',
15
15
  line: '5',
16
16
  column: '1',
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe LintTrap::Registry do
4
+ let(:a) do
5
+ Class.new do
6
+ def name
7
+ 'a'
8
+ end
9
+ end
10
+ end
11
+ let(:b) do
12
+ Class.new do
13
+ def name
14
+ 'b'
15
+ end
16
+ end
17
+ end
18
+
19
+ subject(:registry){described_class.new}
20
+
21
+ before(:each) do
22
+ registry.register(a)
23
+ registry.register(b)
24
+ registry.default(b)
25
+ end
26
+
27
+ describe '#all' do
28
+ subject(:all){registry.all}
29
+
30
+ it{is_expected.to match([be_a(a), be_a(b)])}
31
+ end
32
+
33
+ describe '#find' do
34
+ context 'when searching for a' do
35
+ it 'finds an a' do
36
+ expect(registry.find('a')).to be_a(a)
37
+ end
38
+ end
39
+
40
+ context 'when searching for b' do
41
+ it 'finds a b' do
42
+ expect(registry.find('b')).to be_a(b)
43
+ end
44
+ end
45
+
46
+ context 'when searching for an unregistered value' do
47
+ it 'finds the default' do
48
+ expect(registry.find('c')).to be_a(b)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -4,7 +4,8 @@ shared_examples_for 'linter' do
4
4
  describe '#languages' do
5
5
  it 'returns a list of languages which reference this linter' do
6
6
  linter.languages.each do |language|
7
- expect(language.linters).to include(linter), "expected #{language.name} to reference #{linter.name} as one of it's linters"
7
+ expect(language.linters).to include(linter),
8
+ "expected #{language.name} to reference #{linter.name} as one of it's linters"
8
9
  end
9
10
  end
10
11
  end