From d0559944f377403e28aab330ae41ac4f04eee20b Mon Sep 17 00:00:00 2001 From: Mu-An Chiou Date: Fri, 1 Feb 2019 18:41:32 -0500 Subject: [PATCH] Allow passing custom erb linter directory path --- README.md | 1 + lib/erb_lint/linter_registry.rb | 3 ++- lib/erb_lint/runner.rb | 3 +-- spec/erb_lint/runner_spec.rb | 15 +++++++++++++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ca9b63c2..e99555a1 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Create a `.erb-lint.yml` file in your project, with the following structure: ```yaml --- +custom_linters_directory: '.custom-erb-linters' linters: ErbSafety: enabled: true diff --git a/lib/erb_lint/linter_registry.rb b/lib/erb_lint/linter_registry.rb index da24df7d..a1aa29d3 100644 --- a/lib/erb_lint/linter_registry.rb +++ b/lib/erb_lint/linter_registry.rb @@ -17,7 +17,8 @@ def find_by_name(name) linters.detect { |linter| linter.simple_name == name } end - def load_custom_linters(directory = CUSTOM_LINTERS_DIR) + def load_custom_linters(directory) + directory ||= CUSTOM_LINTERS_DIR ruby_files = Dir.glob(File.expand_path(File.join(directory, '**', '*.rb'))) ruby_files.each { |file| require file } end diff --git a/lib/erb_lint/runner.rb b/lib/erb_lint/runner.rb index deb5408f..3ca89e21 100644 --- a/lib/erb_lint/runner.rb +++ b/lib/erb_lint/runner.rb @@ -9,8 +9,7 @@ def initialize(file_loader, config) @file_loader = file_loader @config = config || RunnerConfig.default raise ArgumentError, 'expect `config` to be a RunnerConfig instance' unless @config.is_a?(RunnerConfig) - - LinterRegistry.load_custom_linters + LinterRegistry.load_custom_linters(@config.to_hash['custom_linters_directory']) linter_classes = LinterRegistry.linters.select { |klass| @config.for_linter(klass).enabled? } @linters = linter_classes.map do |linter_class| linter_class.new(@file_loader, @config.for_linter(linter_class)) diff --git a/spec/erb_lint/runner_spec.rb b/spec/erb_lint/runner_spec.rb index b732a8a5..4b1d9acf 100644 --- a/spec/erb_lint/runner_spec.rb +++ b/spec/erb_lint/runner_spec.rb @@ -24,6 +24,21 @@ class FakeLinter2 < FakeLinter1; end end end + describe '#new' do + context 'with custom linters in custom directory' do + let(:custom_linters_directory) { File.expand_path('../fixtures/linters', __FILE__) } + let(:config) { ERBLint::RunnerConfig.new({ + custom_linters_directory: custom_linters_directory + })} + + it 'loads custom linters' do + expect(ERBLint::LinterRegistry).to receive(:require) + .with(File.join(custom_linters_directory, 'custom_linter.rb')).once + described_class.new(file_loader, config) + end + end + end + describe '#run' do let(:file) { 'DummyFileContent' } let(:filename) { 'somefolder/otherfolder/dummyfile.html.erb' }