rubocop 0.13.1 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubocop might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +42 -0
- data/README.md +59 -54
- data/config/default.yml +124 -95
- data/config/disabled.yml +4 -0
- data/config/enabled.yml +286 -264
- data/lib/rubocop.rb +10 -3
- data/lib/rubocop/cli.rb +10 -171
- data/lib/rubocop/cop/cop.rb +14 -11
- data/lib/rubocop/cop/lint/debugger.rb +35 -0
- data/lib/rubocop/cop/lint/syntax.rb +34 -0
- data/lib/rubocop/cop/offence.rb +15 -23
- data/lib/rubocop/cop/style/align_array.rb +1 -10
- data/lib/rubocop/cop/style/align_hash.rb +14 -2
- data/lib/rubocop/cop/style/align_parameters.rb +1 -11
- data/lib/rubocop/cop/style/and_or.rb +13 -11
- data/lib/rubocop/cop/style/attr.rb +1 -1
- data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
- data/lib/rubocop/cop/style/blocks.rb +14 -6
- data/lib/rubocop/cop/style/character_literal.rb +1 -1
- data/lib/rubocop/cop/style/class_length.rb +38 -0
- data/lib/rubocop/cop/style/collection_methods.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
- data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +7 -3
- data/lib/rubocop/cop/style/hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
- data/lib/rubocop/cop/style/lambda_call.rb +36 -11
- data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
- data/lib/rubocop/cop/style/method_length.rb +2 -13
- data/lib/rubocop/cop/style/method_name.rb +42 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
- data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +60 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
- data/lib/rubocop/cop/style/redundant_return.rb +14 -5
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +13 -4
- data/lib/rubocop/cop/style/signal_exception.rb +63 -14
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/string_help.rb +4 -1
- data/lib/rubocop/cop/style/string_literals.rb +34 -11
- data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
- data/lib/rubocop/cop/style/tab.rb +1 -1
- data/lib/rubocop/cop/style/variable_name.rb +44 -0
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/while_until_do.rb +1 -1
- data/lib/rubocop/cop/team.rb +4 -7
- data/lib/rubocop/cop/util.rb +12 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
- data/lib/rubocop/formatter/json_formatter.rb +1 -0
- data/lib/rubocop/formatter/progress_formatter.rb +9 -13
- data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
- data/lib/rubocop/options.rb +184 -0
- data/lib/rubocop/processed_source.rb +4 -0
- data/lib/rubocop/version.rb +1 -1
- data/rubocop.gemspec +1 -1
- data/spec/rubocop/cli_spec.rb +870 -1001
- data/spec/rubocop/config_spec.rb +13 -13
- data/spec/rubocop/config_store_spec.rb +38 -37
- data/spec/rubocop/cop/commissioner_spec.rb +42 -46
- data/spec/rubocop/cop/cop_spec.rb +72 -77
- data/spec/rubocop/cop/corrector_spec.rb +51 -55
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
- data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
- data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
- data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
- data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
- data/spec/rubocop/cop/lint/void_spec.rb +50 -56
- data/spec/rubocop/cop/offence_spec.rb +101 -131
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
- data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
- data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
- data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
- data/spec/rubocop/cop/style/alias_spec.rb +30 -36
- data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
- data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
- data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
- data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
- data/spec/rubocop/cop/style/attr_spec.rb +11 -17
- data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
- data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
- data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
- data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
- data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
- data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
- data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
- data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
- data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
- data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
- data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
- data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
- data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
- data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
- data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
- data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
- data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
- data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
- data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
- data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
- data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
- data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
- data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
- data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
- data/spec/rubocop/cop/style/for_spec.rb +18 -24
- data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
- data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
- data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
- data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
- data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
- data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
- data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
- data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
- data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
- data/spec/rubocop/cop/style/not_spec.rb +13 -19
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
- data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
- data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
- data/spec/rubocop/cop/style/proc_spec.rb +13 -19
- data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
- data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
- data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
- data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
- data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
- data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
- data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
- data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
- data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
- data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
- data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
- data/spec/rubocop/cop/style/tab_spec.rb +9 -15
- data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
- data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
- data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
- data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
- data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
- data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
- data/spec/rubocop/cop/team_spec.rb +125 -127
- data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
- data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
- data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
- data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
- data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
- data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
- data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
- data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
- data/spec/rubocop/options_spec.rb +233 -0
- data/spec/rubocop/processed_source_spec.rb +85 -42
- data/spec/rubocop/source_parser_spec.rb +108 -110
- data/spec/rubocop/target_finder_spec.rb +125 -127
- data/spec/rubocop/token_spec.rb +15 -17
- metadata +32 -8
- data/lib/rubocop/backports/bsearch.rb +0 -39
- data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
- data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
data/spec/rubocop/config_spec.rb
CHANGED
@@ -7,13 +7,13 @@ DEFAULT_CONFIG = Rubocop::Config.load_file('config/default.yml')
|
|
7
7
|
describe Rubocop::Config do
|
8
8
|
include FileHelper
|
9
9
|
|
10
|
-
subject(:configuration) {
|
10
|
+
subject(:configuration) { described_class.new(hash, loaded_path) }
|
11
11
|
let(:hash) { {} }
|
12
12
|
let(:loaded_path) { 'example/.rubocop.yml' }
|
13
13
|
|
14
14
|
describe '.configuration_file_for', :isolated_environment do
|
15
15
|
subject(:configuration_file_for) do
|
16
|
-
|
16
|
+
described_class.configuration_file_for(dir_path)
|
17
17
|
end
|
18
18
|
|
19
19
|
context 'when no config file exists in ancestor directories' do
|
@@ -65,7 +65,7 @@ describe Rubocop::Config do
|
|
65
65
|
|
66
66
|
describe '.configuration_from_file', :isolated_environment do
|
67
67
|
subject(:configuration_from_file) do
|
68
|
-
|
68
|
+
described_class.configuration_from_file(file_path)
|
69
69
|
end
|
70
70
|
|
71
71
|
context 'with any config file' do
|
@@ -233,7 +233,7 @@ describe Rubocop::Config do
|
|
233
233
|
|
234
234
|
describe '.load_file', :isolated_environment do
|
235
235
|
subject(:load_file) do
|
236
|
-
|
236
|
+
described_class.load_file(configuration_path)
|
237
237
|
end
|
238
238
|
|
239
239
|
let(:configuration_path) { '.rubocop.yml' }
|
@@ -251,7 +251,7 @@ describe Rubocop::Config do
|
|
251
251
|
end
|
252
252
|
|
253
253
|
describe '.merge' do
|
254
|
-
subject(:merge) {
|
254
|
+
subject(:merge) { described_class.merge(base, derived) }
|
255
255
|
|
256
256
|
let(:base) do
|
257
257
|
{
|
@@ -281,7 +281,7 @@ describe Rubocop::Config do
|
|
281
281
|
after(:each) { $stdout = STDOUT }
|
282
282
|
|
283
283
|
subject(:configuration) do
|
284
|
-
|
284
|
+
described_class.load_file(configuration_path)
|
285
285
|
end
|
286
286
|
|
287
287
|
let(:configuration_path) { '.rubocop.yml' }
|
@@ -296,7 +296,7 @@ describe Rubocop::Config do
|
|
296
296
|
end
|
297
297
|
|
298
298
|
it 'raises validation error' do
|
299
|
-
e =
|
299
|
+
e = described_class::ValidationError
|
300
300
|
expect { configuration.validate }.to raise_error(e) do |error|
|
301
301
|
expect(error.message).to start_with('unrecognized cop LyneLenth')
|
302
302
|
end
|
@@ -313,7 +313,7 @@ describe Rubocop::Config do
|
|
313
313
|
end
|
314
314
|
|
315
315
|
it 'raises validation error' do
|
316
|
-
e =
|
316
|
+
e = described_class::ValidationError
|
317
317
|
expect { configuration.validate }.to raise_error(e) do |error|
|
318
318
|
expect(error.message).to
|
319
319
|
start_with('unrecognized parameter LineLength:Min')
|
@@ -376,7 +376,7 @@ describe Rubocop::Config do
|
|
376
376
|
|
377
377
|
describe '#patterns_to_include' do
|
378
378
|
subject(:patterns_to_include) do
|
379
|
-
configuration =
|
379
|
+
configuration = described_class.new(hash, loaded_path)
|
380
380
|
configuration.patterns_to_include
|
381
381
|
end
|
382
382
|
|
@@ -403,7 +403,7 @@ describe Rubocop::Config do
|
|
403
403
|
|
404
404
|
describe '#patterns_to_exclude' do
|
405
405
|
subject(:patterns_to_exclude) do
|
406
|
-
configuration =
|
406
|
+
configuration = described_class.new(hash, loaded_path)
|
407
407
|
configuration.patterns_to_exclude
|
408
408
|
end
|
409
409
|
|
@@ -427,8 +427,8 @@ describe Rubocop::Config do
|
|
427
427
|
|
428
428
|
describe 'configuration for SymbolArray', :isolated_environment do
|
429
429
|
let(:config) do
|
430
|
-
config_path =
|
431
|
-
|
430
|
+
config_path = described_class.configuration_file_for('.')
|
431
|
+
described_class.configuration_from_file(config_path)
|
432
432
|
end
|
433
433
|
|
434
434
|
context 'when no config file exists for the target file' do
|
@@ -461,7 +461,7 @@ describe Rubocop::Config do
|
|
461
461
|
describe 'configuration for SymbolName' do
|
462
462
|
describe 'AllowCamelCase' do
|
463
463
|
it 'is enabled by default' do
|
464
|
-
default_config =
|
464
|
+
default_config = described_class.default_configuration
|
465
465
|
symbol_name_config = default_config.for_cop('SymbolName')
|
466
466
|
expect(symbol_name_config['AllowCamelCase']).to be_true
|
467
467
|
end
|
@@ -2,49 +2,50 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
subject(:config_store) { ConfigStore.new }
|
5
|
+
describe Rubocop::ConfigStore do
|
6
|
+
subject(:config_store) { described_class.new }
|
8
7
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
8
|
+
before do
|
9
|
+
Rubocop::Config.stub(:configuration_file_for) do |arg|
|
10
|
+
# File tree:
|
11
|
+
# file1
|
12
|
+
# dir/.rubocop.yml
|
13
|
+
# dir/file2
|
14
|
+
# dir/subdir/file3
|
15
|
+
(arg =~ /dir/ ? 'dir' : '.') + '/.rubocop.yml'
|
16
|
+
end
|
17
|
+
Rubocop::Config.stub(:configuration_from_file) { |arg| arg }
|
18
|
+
Rubocop::Config.stub(:load_file) { |arg| "#{arg} loaded" }
|
19
|
+
Rubocop::Config.stub(:merge_with_default) do |config, file|
|
20
|
+
"merged #{config}"
|
21
21
|
end
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
describe '.for' do
|
25
|
+
it 'always uses config specified in command line' do
|
26
|
+
config_store.set_options_config(:options_config)
|
27
|
+
expect(config_store.for('file1')).to eq('merged options_config loaded')
|
28
|
+
end
|
28
29
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
30
|
+
context 'when no config specified in command line' do
|
31
|
+
it 'gets config path and config from cache if available' do
|
32
|
+
Rubocop::Config.should_receive(:configuration_file_for).once
|
33
|
+
.with('dir')
|
34
|
+
Rubocop::Config.should_receive(:configuration_file_for).once
|
35
|
+
.with('dir/subdir')
|
36
|
+
# The stub returns the same config path for dir and dir/subdir.
|
37
|
+
Rubocop::Config.should_receive(:configuration_from_file).once
|
38
|
+
.with('dir/.rubocop.yml')
|
37
39
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
40
|
+
config_store.for('dir/file2')
|
41
|
+
config_store.for('dir/file2')
|
42
|
+
config_store.for('dir/subdir/file3')
|
43
|
+
end
|
42
44
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
end
|
45
|
+
it 'searches for config path if not available in cache' do
|
46
|
+
Rubocop::Config.should_receive(:configuration_file_for).once
|
47
|
+
Rubocop::Config.should_receive(:configuration_from_file).once
|
48
|
+
config_store.for('file1')
|
48
49
|
end
|
49
50
|
end
|
50
51
|
end
|
@@ -3,68 +3,64 @@
|
|
3
3
|
|
4
4
|
require 'spec_helper'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
describe '#investigate' do
|
10
|
-
let(:cop) { double(Cop, offences: []).as_null_object }
|
6
|
+
describe Rubocop::Cop::Commissioner do
|
7
|
+
describe '#investigate' do
|
8
|
+
let(:cop) { double(Rubocop::Cop, offences: []).as_null_object }
|
11
9
|
|
12
|
-
|
13
|
-
|
10
|
+
it 'returns all offences found by the cops' do
|
11
|
+
cop.stub(:offences).and_return([1])
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
commissioner = described_class.new([cop])
|
14
|
+
source = []
|
15
|
+
processed_source = parse_source(source)
|
18
16
|
|
19
|
-
|
20
|
-
|
17
|
+
expect(commissioner.investigate(processed_source)).to eq [1]
|
18
|
+
end
|
21
19
|
|
22
|
-
|
23
|
-
|
20
|
+
it 'traverses the AST and invoke cops specific callbacks' do
|
21
|
+
cop.should_receive(:on_def)
|
24
22
|
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
commissioner = described_class.new([cop])
|
24
|
+
source = ['def method', '1', 'end']
|
25
|
+
processed_source = parse_source(source)
|
28
26
|
|
29
|
-
|
30
|
-
|
27
|
+
commissioner.investigate(processed_source)
|
28
|
+
end
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
30
|
+
it 'passes the input params to all cops that implement their own #investigate method' do
|
31
|
+
source = []
|
32
|
+
processed_source = parse_source(source)
|
33
|
+
cop.should_receive(:investigate).with(processed_source)
|
36
34
|
|
37
|
-
|
35
|
+
commissioner = described_class.new([cop])
|
38
36
|
|
39
|
-
|
40
|
-
|
37
|
+
commissioner.investigate(processed_source)
|
38
|
+
end
|
41
39
|
|
42
|
-
|
43
|
-
|
40
|
+
it 'stores all errors raised by the cops' do
|
41
|
+
cop.stub(:on_def) { fail RuntimeError }
|
44
42
|
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
commissioner = described_class.new([cop])
|
44
|
+
source = ['def method', '1', 'end']
|
45
|
+
processed_source = parse_source(source)
|
48
46
|
|
49
|
-
|
47
|
+
commissioner.investigate(processed_source)
|
50
48
|
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
expect(commissioner.errors[cop].size).to eq(1)
|
50
|
+
expect(commissioner.errors[cop][0]).to be_instance_of(RuntimeError)
|
51
|
+
end
|
54
52
|
|
55
|
-
|
56
|
-
|
57
|
-
|
53
|
+
context 'when passed :raise_error option' do
|
54
|
+
it 're-raises the exception received while processing' do
|
55
|
+
cop.stub(:on_def) { fail RuntimeError }
|
58
56
|
|
59
|
-
|
60
|
-
|
61
|
-
|
57
|
+
commissioner = described_class.new([cop], raise_error: true)
|
58
|
+
source = ['def method', '1', 'end']
|
59
|
+
processed_source = parse_source(source)
|
62
60
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|
61
|
+
expect do
|
62
|
+
commissioner.investigate(processed_source)
|
63
|
+
end.to raise_error(RuntimeError)
|
68
64
|
end
|
69
65
|
end
|
70
66
|
end
|
@@ -2,99 +2,94 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
Parser::Source::Range.new(source_buffer, 0, 1)
|
13
|
-
end
|
5
|
+
describe Rubocop::Cop::Cop do
|
6
|
+
subject(:cop) { described_class.new }
|
7
|
+
let(:location) do
|
8
|
+
source_buffer = Parser::Source::Buffer.new('test', 1)
|
9
|
+
source_buffer.source = "a\n"
|
10
|
+
Parser::Source::Range.new(source_buffer, 0, 1)
|
11
|
+
end
|
14
12
|
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
it 'initially has 0 offences' do
|
14
|
+
expect(cop.offences).to be_empty
|
15
|
+
end
|
18
16
|
|
19
|
-
|
20
|
-
|
17
|
+
it 'keeps track of offences' do
|
18
|
+
cop.convention(nil, location, 'message')
|
21
19
|
|
22
|
-
|
23
|
-
|
20
|
+
expect(cop.offences.size).to eq(1)
|
21
|
+
end
|
24
22
|
|
25
|
-
|
26
|
-
|
23
|
+
it 'will report registered offences' do
|
24
|
+
cop.convention(nil, location, 'message')
|
27
25
|
|
28
|
-
|
29
|
-
|
26
|
+
expect(cop.offences).not_to be_empty
|
27
|
+
end
|
30
28
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
29
|
+
it 'registers offence with its name' do
|
30
|
+
cop = Rubocop::Cop::Style::For.new
|
31
|
+
cop.convention(nil, location, 'message')
|
32
|
+
expect(cop.offences.first.cop_name).to eq('For')
|
33
|
+
end
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
context 'with no submodule' do
|
36
|
+
subject(:cop) { described_class }
|
37
|
+
it('has right name') { expect(cop.cop_name).to eq('Cop') }
|
38
|
+
it('has right type') { expect(cop.cop_type).to eq(:cop) }
|
39
|
+
end
|
42
40
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
41
|
+
context 'with style cops' do
|
42
|
+
subject(:cop) { Rubocop::Cop::Style::For }
|
43
|
+
it('has right name') { expect(cop.cop_name).to eq('For') }
|
44
|
+
it('has right type') { expect(cop.cop_type).to eq(:style) }
|
45
|
+
end
|
48
46
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
47
|
+
context 'with lint cops' do
|
48
|
+
subject(:cop) { Rubocop::Cop::Lint::Loop }
|
49
|
+
it('has right name') { expect(cop.cop_name).to eq('Loop') }
|
50
|
+
it('has right type') { expect(cop.cop_type).to eq(:lint) }
|
51
|
+
end
|
54
52
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
53
|
+
context 'with rails cops' do
|
54
|
+
subject(:cop) { Rubocop::Cop::Rails::Validation }
|
55
|
+
it('has right name') { expect(cop.cop_name).to eq('Validation') }
|
56
|
+
it('has right type') { expect(cop.cop_type).to eq(:rails) }
|
57
|
+
end
|
60
58
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
59
|
+
describe 'CopStore' do
|
60
|
+
context '#types' do
|
61
|
+
subject { described_class.all.types }
|
62
|
+
it('has types') { expect(subject.length).not_to eq(0) }
|
63
|
+
it { should include :lint }
|
64
|
+
it do
|
65
|
+
pending 'Rails cops are usually removed after CLI start, ' +
|
66
|
+
'so CLI spec impacts this one'
|
67
|
+
should include :rails
|
68
|
+
end
|
69
|
+
it { should include :style }
|
70
|
+
it 'contains every value only once' do
|
71
|
+
expect(subject.length).to eq(subject.uniq.length)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
context '#with_type' do
|
75
|
+
let(:types) { described_class.all.types }
|
76
|
+
it 'has at least one cop per type' do
|
77
|
+
types.each do |c|
|
78
|
+
expect(described_class.all.with_type(c).length).to be > 0
|
75
79
|
end
|
76
|
-
|
77
|
-
let(:types) { Rubocop::Cop::Cop.all.types }
|
78
|
-
it 'has at least one cop per type' do
|
79
|
-
types.each do |c|
|
80
|
-
expect(Rubocop::Cop::Cop.all.with_type(c).length).to be > 0
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'has each cop in exactly one type' do
|
85
|
-
sum = 0
|
86
|
-
types.each do |c|
|
87
|
-
sum = sum + Rubocop::Cop::Cop.all.with_type(c).length
|
88
|
-
end
|
89
|
-
expect(sum).to be Rubocop::Cop::Cop.all.length
|
90
|
-
end
|
80
|
+
end
|
91
81
|
|
92
|
-
|
93
|
-
|
94
|
-
|
82
|
+
it 'has each cop in exactly one type' do
|
83
|
+
sum = 0
|
84
|
+
types.each do |c|
|
85
|
+
sum = sum + described_class.all.with_type(c).length
|
95
86
|
end
|
87
|
+
expect(sum).to be described_class.all.length
|
96
88
|
end
|
97
89
|
|
90
|
+
it 'returns 0 for an invalid type' do
|
91
|
+
expect(described_class.all.with_type('x').length).to be 0
|
92
|
+
end
|
98
93
|
end
|
99
94
|
end
|
100
95
|
end
|