ridecharge-rubocop 0.0.1
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 +7 -0
- data/.gitignore +22 -0
- data/.rspec +1 -0
- data/.travis.yml +14 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +35 -0
- data/Rakefile +22 -0
- data/bin/ridecharge-rubocop +49 -0
- data/config/0default.yml +8 -0
- data/config/fleet-magic-todo.yml +380 -0
- data/config/rc-todo.yml +190 -0
- data/config/ridecharge-rubocop_todo.yml +73 -0
- data/config/rubocop/default.yml +308 -0
- data/config/rubocop/disabled.yml +9 -0
- data/config/rubocop/enabled.yml +648 -0
- data/config/standard-todo.yml +24 -0
- data/config/tabs.yml +15 -0
- data/config/vehicle-todo.yml +195 -0
- data/lib/ridecharge/rubocop.rb +2 -0
- data/lib/ridecharge/rubocop/version.rb +5 -0
- data/lib/rubocop/config_loader_monkeypatch.rb +117 -0
- data/lib/rubocop/ridecharge.rb +1 -0
- data/ridecharge-rubocop.gemspec +25 -0
- data/spec/isolated_environment_spec.rb +24 -0
- data/spec/project_spec.rb +118 -0
- data/spec/rubocop/cli_spec.rb +1385 -0
- data/spec/rubocop/config_loader_spec.rb +328 -0
- data/spec/rubocop/config_spec.rb +179 -0
- data/spec/rubocop/config_store_spec.rb +53 -0
- data/spec/rubocop/cop/commissioner_spec.rb +83 -0
- data/spec/rubocop/cop/cop_spec.rb +114 -0
- data/spec/rubocop/cop/corrector_spec.rb +59 -0
- data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +113 -0
- data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +35 -0
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +107 -0
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +411 -0
- data/spec/rubocop/cop/lint/condition_position_spec.rb +49 -0
- data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
- data/spec/rubocop/cop/lint/else_layout_spec.rb +65 -0
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +27 -0
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +136 -0
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +29 -0
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +39 -0
- data/spec/rubocop/cop/lint/eval_spec.rb +35 -0
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +30 -0
- data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +33 -0
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +63 -0
- data/spec/rubocop/cop/lint/loop_spec.rb +27 -0
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +57 -0
- data/spec/rubocop/cop/lint/require_parentheses_spec.rb +82 -0
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +131 -0
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +237 -0
- data/spec/rubocop/cop/lint/syntax_spec.rb +34 -0
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +63 -0
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1570 -0
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +30 -0
- data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +48 -0
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +149 -0
- data/spec/rubocop/cop/lint/void_spec.rb +57 -0
- data/spec/rubocop/cop/offence_spec.rb +133 -0
- data/spec/rubocop/cop/rails/default_scope_spec.rb +37 -0
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +13 -0
- data/spec/rubocop/cop/rails/output_spec.rb +41 -0
- data/spec/rubocop/cop/rails/read_attribute_spec.rb +13 -0
- data/spec/rubocop/cop/rails/validation_spec.rb +21 -0
- data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +361 -0
- data/spec/rubocop/cop/style/accessor_method_name_spec.rb +81 -0
- data/spec/rubocop/cop/style/alias_spec.rb +59 -0
- data/spec/rubocop/cop/style/align_array_spec.rb +75 -0
- data/spec/rubocop/cop/style/align_hash_spec.rb +310 -0
- data/spec/rubocop/cop/style/align_parameters_spec.rb +222 -0
- data/spec/rubocop/cop/style/and_or_spec.rb +57 -0
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +22 -0
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +36 -0
- data/spec/rubocop/cop/style/attr_spec.rb +19 -0
- data/spec/rubocop/cop/style/begin_block_spec.rb +13 -0
- data/spec/rubocop/cop/style/block_comments_spec.rb +21 -0
- data/spec/rubocop/cop/style/block_nesting_spec.rb +156 -0
- data/spec/rubocop/cop/style/blocks_spec.rb +99 -0
- data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +284 -0
- data/spec/rubocop/cop/style/case_equality_spec.rb +12 -0
- data/spec/rubocop/cop/style/case_indentation_spec.rb +289 -0
- data/spec/rubocop/cop/style/character_literal_spec.rb +37 -0
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +40 -0
- data/spec/rubocop/cop/style/class_length_spec.rb +131 -0
- data/spec/rubocop/cop/style/class_methods_spec.rb +45 -0
- data/spec/rubocop/cop/style/class_vars_spec.rb +19 -0
- data/spec/rubocop/cop/style/collection_methods_spec.rb +48 -0
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +60 -0
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +86 -0
- data/spec/rubocop/cop/style/constant_name_spec.rb +65 -0
- data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +204 -0
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +39 -0
- data/spec/rubocop/cop/style/documentation_spec.rb +123 -0
- data/spec/rubocop/cop/style/dot_position_spec.rb +94 -0
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +127 -0
- data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +56 -0
- data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +131 -0
- data/spec/rubocop/cop/style/empty_lines_spec.rb +40 -0
- data/spec/rubocop/cop/style/empty_literal_spec.rb +100 -0
- data/spec/rubocop/cop/style/encoding_spec.rb +56 -0
- data/spec/rubocop/cop/style/end_block_spec.rb +13 -0
- data/spec/rubocop/cop/style/end_of_line_spec.rb +47 -0
- data/spec/rubocop/cop/style/even_odd_spec.rb +75 -0
- data/spec/rubocop/cop/style/favor_join_spec.rb +31 -0
- data/spec/rubocop/cop/style/favor_sprintf_spec.rb +47 -0
- data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +76 -0
- data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +41 -0
- data/spec/rubocop/cop/style/final_newline_spec.rb +30 -0
- data/spec/rubocop/cop/style/flip_flop_spec.rb +23 -0
- data/spec/rubocop/cop/style/for_spec.rb +105 -0
- data/spec/rubocop/cop/style/global_vars_spec.rb +34 -0
- data/spec/rubocop/cop/style/hash_methods_spec.rb +45 -0
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +131 -0
- data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +128 -0
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +19 -0
- data/spec/rubocop/cop/style/indentation_consistency_spec.rb +490 -0
- data/spec/rubocop/cop/style/indentation_width_spec.rb +470 -0
- data/spec/rubocop/cop/style/lambda_call_spec.rb +65 -0
- data/spec/rubocop/cop/style/lambda_spec.rb +41 -0
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +64 -0
- data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +34 -0
- data/spec/rubocop/cop/style/line_length_spec.rb +20 -0
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +59 -0
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
- data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +106 -0
- data/spec/rubocop/cop/style/method_length_spec.rb +147 -0
- data/spec/rubocop/cop/style/method_name_spec.rb +125 -0
- data/spec/rubocop/cop/style/module_function_spec.rb +24 -0
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +78 -0
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +107 -0
- data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +18 -0
- data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +21 -0
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +30 -0
- data/spec/rubocop/cop/style/not_spec.rb +22 -0
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +64 -0
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +13 -0
- data/spec/rubocop/cop/style/op_method_spec.rb +74 -0
- data/spec/rubocop/cop/style/parameter_lists_spec.rb +44 -0
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +122 -0
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +17 -0
- data/spec/rubocop/cop/style/predicate_name_spec.rb +25 -0
- data/spec/rubocop/cop/style/proc_spec.rb +27 -0
- data/spec/rubocop/cop/style/raise_args_spec.rb +82 -0
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +57 -0
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
- data/spec/rubocop/cop/style/redundant_return_spec.rb +171 -0
- data/spec/rubocop/cop/style/redundant_self_spec.rb +142 -0
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +83 -0
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +116 -0
- data/spec/rubocop/cop/style/semicolon_spec.rb +100 -0
- data/spec/rubocop/cop/style/signal_exception_spec.rb +266 -0
- data/spec/rubocop/cop/style/single_line_block_params_spec.rb +68 -0
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +52 -0
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +38 -0
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +30 -0
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +84 -0
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +70 -0
- data/spec/rubocop/cop/style/space_after_not_spec.rb +22 -0
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +23 -0
- data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +283 -0
- data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +33 -0
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +325 -0
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +70 -0
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +52 -0
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +138 -0
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +34 -0
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +56 -0
- data/spec/rubocop/cop/style/string_literals_spec.rb +212 -0
- data/spec/rubocop/cop/style/symbol_array_spec.rb +37 -0
- data/spec/rubocop/cop/style/tab_spec.rb +17 -0
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +43 -0
- data/spec/rubocop/cop/style/trailing_comma_spec.rb +230 -0
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +30 -0
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +415 -0
- data/spec/rubocop/cop/style/unless_else_spec.rb +25 -0
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +47 -0
- data/spec/rubocop/cop/style/variable_name_spec.rb +107 -0
- data/spec/rubocop/cop/style/when_then_spec.rb +41 -0
- data/spec/rubocop/cop/style/while_until_do_spec.rb +53 -0
- data/spec/rubocop/cop/style/while_until_modifier_spec.rb +75 -0
- data/spec/rubocop/cop/style/word_array_spec.rb +97 -0
- data/spec/rubocop/cop/team_spec.rb +156 -0
- data/spec/rubocop/cop/util_spec.rb +49 -0
- data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +213 -0
- data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +734 -0
- data/spec/rubocop/cop/variable_inspector/scope_spec.rb +184 -0
- data/spec/rubocop/cop/variable_inspector/variable_spec.rb +73 -0
- data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +269 -0
- data/spec/rubocop/cop/variable_inspector_spec.rb +29 -0
- data/spec/rubocop/file_inspector_spec.rb +78 -0
- data/spec/rubocop/formatter/base_formatter_spec.rb +191 -0
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +114 -0
- data/spec/rubocop/formatter/colorizable_spec.rb +107 -0
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +50 -0
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +62 -0
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +33 -0
- data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
- data/spec/rubocop/formatter/json_formatter_spec.rb +148 -0
- data/spec/rubocop/formatter/offence_count_formatter_spec.rb +52 -0
- data/spec/rubocop/formatter/progress_formatter_spec.rb +182 -0
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +123 -0
- data/spec/rubocop/options_spec.rb +145 -0
- data/spec/rubocop/path_util_spec.rb +42 -0
- data/spec/rubocop/processed_source_spec.rb +114 -0
- data/spec/rubocop/source_parser_spec.rb +139 -0
- data/spec/rubocop/target_finder_spec.rb +180 -0
- data/spec/rubocop/token_spec.rb +25 -0
- data/spec/spec_helper.rb +136 -0
- data/spec/support/ast_helper.rb +15 -0
- data/spec/support/file_helper.rb +21 -0
- data/spec/support/isolated_environment.rb +34 -0
- data/spec/support/mri_syntax_checker.rb +73 -0
- data/spec/support/shared_context.rb +22 -0
- data/spec/support/shared_examples.rb +33 -0
- data/spec/support/statement_modifier_helper.rb +41 -0
- metadata +511 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::PathUtil do
|
|
6
|
+
describe '#relative_path' do
|
|
7
|
+
pending 'builds paths relative to the current project by default'
|
|
8
|
+
it 'builds paths relative to PWD by default as a stop-gap' do
|
|
9
|
+
relative = File.join(Dir.pwd, 'relative')
|
|
10
|
+
expect(subject.relative_path(relative)).to eq('relative')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'supports custom base paths' do
|
|
14
|
+
expect(subject.relative_path('/foo/bar', '/foo')).to eq('bar')
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe '#match_path?' do
|
|
19
|
+
it 'matches strings to the basename' do
|
|
20
|
+
expect(subject.match_path?('file', '/dir/file')).to be_true
|
|
21
|
+
expect(subject.match_path?('file', '/dir/files')).to be_false
|
|
22
|
+
expect(subject.match_path?('dir', '/dir/file')).to be_false
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'matches strings to the full path' do
|
|
26
|
+
expect(subject.match_path?('/dir/file', '/dir/file')).to be_true
|
|
27
|
+
expect(subject.match_path?('/dir/file', '/dir/dir/file')).to be_false
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'matches glob expressions' do
|
|
31
|
+
expect(subject.match_path?('dir/*', 'dir/file')).to be_true
|
|
32
|
+
expect(subject.match_path?('dir/*', 'dir/sub/file')).to be_true
|
|
33
|
+
expect(subject.match_path?('dir/**/*', 'dir/sub/file')).to be_true
|
|
34
|
+
expect(subject.match_path?('sub/*', 'dir/sub/file')).to be_false
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'matches regexps' do
|
|
38
|
+
expect(subject.match_path?(/^d.*e$/, 'dir/file')).to be_true
|
|
39
|
+
expect(subject.match_path?(/^d.*e$/, 'dir/filez')).to be_false
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::ProcessedSource do
|
|
6
|
+
subject(:processed_source) do
|
|
7
|
+
described_class.new(
|
|
8
|
+
buffer,
|
|
9
|
+
double('ast'),
|
|
10
|
+
double('comments'),
|
|
11
|
+
double('tokens'),
|
|
12
|
+
diagnostics
|
|
13
|
+
)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
let(:diagnostics) { double('diagnostics') }
|
|
17
|
+
|
|
18
|
+
let(:source) do
|
|
19
|
+
[
|
|
20
|
+
'def some_method',
|
|
21
|
+
" puts 'foo'",
|
|
22
|
+
'end',
|
|
23
|
+
'some_method'
|
|
24
|
+
].join("\n")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
let(:buffer) do
|
|
28
|
+
buffer = Parser::Source::Buffer.new('(string)', 1)
|
|
29
|
+
buffer.source = source
|
|
30
|
+
buffer
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe '#lines' do
|
|
34
|
+
it 'is an array' do
|
|
35
|
+
expect(processed_source.lines).to be_a(Array)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'has same number of elements as line count' do
|
|
39
|
+
expect(processed_source.lines.size).to eq(4)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'contains lines as string without linefeed' do
|
|
43
|
+
first_line = processed_source.lines.first
|
|
44
|
+
expect(first_line).to eq('def some_method')
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe '#[]' do
|
|
49
|
+
context 'when an index is passed' do
|
|
50
|
+
it 'returns the line' do
|
|
51
|
+
expect(processed_source[2]).to eq('end')
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context 'when a range is passed' do
|
|
56
|
+
it 'returns the array of lines' do
|
|
57
|
+
expect(processed_source[2..3]).to eq(%w(end some_method))
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'when start index and length are passed' do
|
|
62
|
+
it 'returns the array of lines' do
|
|
63
|
+
expect(processed_source[2, 2]).to eq(%w(end some_method))
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
describe 'valid_syntax?' do
|
|
69
|
+
def create_diagnostics(level)
|
|
70
|
+
Parser::Diagnostic.new(level, :odd_hash, [], double('location'))
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
let(:diagnostics) do
|
|
74
|
+
[create_diagnostics(level)]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
context 'when the source has diagnostic with error level' do
|
|
78
|
+
let(:level) { :error }
|
|
79
|
+
|
|
80
|
+
it 'returns false' do
|
|
81
|
+
expect(processed_source.valid_syntax?).to be_false
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context 'when the source has diagnostic with fatal level' do
|
|
86
|
+
let(:level) { :fatal }
|
|
87
|
+
|
|
88
|
+
it 'returns false' do
|
|
89
|
+
expect(processed_source.valid_syntax?).to be_false
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
context 'when the source has diagnostic with warning level' do
|
|
94
|
+
let(:level) { :warning }
|
|
95
|
+
|
|
96
|
+
it 'returns true' do
|
|
97
|
+
expect(processed_source.valid_syntax?).to be_true
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
context 'when the source has diagnostics with error and warning level' do
|
|
102
|
+
let(:diagnostics) do
|
|
103
|
+
[
|
|
104
|
+
create_diagnostics(:error),
|
|
105
|
+
create_diagnostics(:warning)
|
|
106
|
+
]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'returns false' do
|
|
110
|
+
expect(processed_source.valid_syntax?).to be_false
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::SourceParser, :isolated_environment do
|
|
6
|
+
include FileHelper
|
|
7
|
+
|
|
8
|
+
describe '.parse_file' do
|
|
9
|
+
let(:file) { 'example.rb' }
|
|
10
|
+
|
|
11
|
+
let(:source) do
|
|
12
|
+
[
|
|
13
|
+
'# encoding: utf-8',
|
|
14
|
+
'',
|
|
15
|
+
'def some_method',
|
|
16
|
+
" puts 'foo'",
|
|
17
|
+
'end',
|
|
18
|
+
'',
|
|
19
|
+
'some_method'
|
|
20
|
+
]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
before do
|
|
24
|
+
create_file(file, source)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
let(:processed_source) do
|
|
28
|
+
described_class.parse_file(file)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'returns ProcessedSource' do
|
|
32
|
+
expect(processed_source).to be_a(Rubocop::ProcessedSource)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
describe 'the returned processed source' do
|
|
36
|
+
it 'has the root node of AST' do
|
|
37
|
+
expect(processed_source.ast).to be_a(Parser::AST::Node)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'has an array of comments' do
|
|
41
|
+
expect(processed_source.comments).to be_a(Array)
|
|
42
|
+
expect(processed_source.comments.first)
|
|
43
|
+
.to be_a(Parser::Source::Comment)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'has an array of tokens' do
|
|
47
|
+
expect(processed_source.tokens).to be_a(Array)
|
|
48
|
+
expect(processed_source.tokens.first).to be_a(Rubocop::Token)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'has a source buffer' do
|
|
52
|
+
expect(processed_source.buffer).to be_a(Parser::Source::Buffer)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
context 'when the source is valid' do
|
|
56
|
+
it 'does not have diagnostics' do
|
|
57
|
+
expect(processed_source.diagnostics).to be_a(Array)
|
|
58
|
+
expect(processed_source.diagnostics).to be_empty
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context 'when the source has invalid syntax' do
|
|
63
|
+
let(:source) do
|
|
64
|
+
[
|
|
65
|
+
'# encoding: utf-8',
|
|
66
|
+
'',
|
|
67
|
+
'def some_method',
|
|
68
|
+
" puts 'foo'",
|
|
69
|
+
'end',
|
|
70
|
+
'',
|
|
71
|
+
'some_method',
|
|
72
|
+
'',
|
|
73
|
+
'?invalid_syntax'
|
|
74
|
+
]
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it 'has an array of diagnostics' do
|
|
78
|
+
expect(processed_source.diagnostics).to be_a(Array)
|
|
79
|
+
expect(processed_source.diagnostics.first)
|
|
80
|
+
.to be_a(Parser::Diagnostic)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe '.cop_disabled_lines_in' do
|
|
87
|
+
let(:source) do
|
|
88
|
+
[
|
|
89
|
+
'# encoding: utf-8',
|
|
90
|
+
'',
|
|
91
|
+
'# rubocop:disable MethodLength',
|
|
92
|
+
'def some_method',
|
|
93
|
+
" puts 'foo'",
|
|
94
|
+
'end',
|
|
95
|
+
'# rubocop:enable MethodLength',
|
|
96
|
+
'',
|
|
97
|
+
'# rubocop:disable all',
|
|
98
|
+
'some_method',
|
|
99
|
+
'# rubocop:enable all',
|
|
100
|
+
'',
|
|
101
|
+
"code = 'This is evil.'",
|
|
102
|
+
'eval(code) # rubocop:disable Eval',
|
|
103
|
+
"puts 'This is not evil.'"
|
|
104
|
+
]
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
let(:disabled_lines) { described_class.cop_disabled_lines_in(source) }
|
|
108
|
+
|
|
109
|
+
it 'has keys for disabled cops' do
|
|
110
|
+
expect(disabled_lines).to have_key('MethodLength')
|
|
111
|
+
expect(disabled_lines).to have_key('Eval')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'supports disabling multiple lines with a pair of directive' do
|
|
115
|
+
method_length_disabled_lines = disabled_lines['MethodLength']
|
|
116
|
+
expected_part = (3..6).to_a
|
|
117
|
+
expect(method_length_disabled_lines & expected_part)
|
|
118
|
+
.to eq(expected_part)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'supports disabling single line with a direcive at end of line' do
|
|
122
|
+
eval_disabled_lines = disabled_lines['Eval']
|
|
123
|
+
expect(eval_disabled_lines).to include(14)
|
|
124
|
+
expect(eval_disabled_lines).not_to include(15)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'supports disabling all cops with keyword all' do
|
|
128
|
+
all_cop_names = Rubocop::Cop::Cop.all.map(&:cop_name).sort
|
|
129
|
+
expect(disabled_lines.keys.sort).to eq(all_cop_names)
|
|
130
|
+
|
|
131
|
+
expected_part = (9..10).to_a
|
|
132
|
+
|
|
133
|
+
disabled_lines.each_value do |each_cop_disabled_lines|
|
|
134
|
+
expect(each_cop_disabled_lines & expected_part)
|
|
135
|
+
.to eq(expected_part)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::TargetFinder, :isolated_environment do
|
|
6
|
+
include FileHelper
|
|
7
|
+
|
|
8
|
+
subject(:target_finder) { described_class.new(config_store, debug) }
|
|
9
|
+
let(:config_store) { Rubocop::ConfigStore.new }
|
|
10
|
+
let(:debug) { false }
|
|
11
|
+
|
|
12
|
+
before do
|
|
13
|
+
create_file('dir1/ruby1.rb', '# encoding: utf-8')
|
|
14
|
+
create_file('dir1/ruby2.rb', '# encoding: utf-8')
|
|
15
|
+
create_file('dir1/file.txt', '# encoding: utf-8')
|
|
16
|
+
create_file('dir1/file', '# encoding: utf-8')
|
|
17
|
+
create_file('dir1/executable', '#!/usr/bin/env ruby')
|
|
18
|
+
create_file('dir2/ruby3.rb', '# encoding: utf-8')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#find' do
|
|
22
|
+
let(:found_files) { target_finder.find(args) }
|
|
23
|
+
let(:found_basenames) { found_files.map { |f| File.basename(f) } }
|
|
24
|
+
let(:args) { [] }
|
|
25
|
+
|
|
26
|
+
it 'returns absolute paths' do
|
|
27
|
+
expect(found_files).not_to be_empty
|
|
28
|
+
found_files.each do |file|
|
|
29
|
+
expect(file).to start_with('/')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context 'when no argument is passed' do
|
|
34
|
+
let(:args) { [] }
|
|
35
|
+
|
|
36
|
+
it 'finds files under the current directory' do
|
|
37
|
+
Dir.chdir('dir1') do
|
|
38
|
+
expect(found_files).not_to be_empty
|
|
39
|
+
found_files.each do |file|
|
|
40
|
+
expect(file).to include('/dir1/')
|
|
41
|
+
expect(file).not_to include('/dir2/')
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context 'when a directory path is passed' do
|
|
48
|
+
let(:args) { ['../dir2'] }
|
|
49
|
+
|
|
50
|
+
it 'finds files under the specified directory' do
|
|
51
|
+
Dir.chdir('dir1') do
|
|
52
|
+
expect(found_files).not_to be_empty
|
|
53
|
+
found_files.each do |file|
|
|
54
|
+
expect(file).to include('/dir2/')
|
|
55
|
+
expect(file).not_to include('/dir1/')
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'when a file is passed' do
|
|
62
|
+
let(:args) { ['dir2/file'] }
|
|
63
|
+
|
|
64
|
+
it 'picks the file' do
|
|
65
|
+
expect(found_basenames).to eq(['file'])
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
context 'when a pattern is passed' do
|
|
70
|
+
let(:args) { ['dir1/*2.rb'] }
|
|
71
|
+
|
|
72
|
+
it 'finds files which match the pattern' do
|
|
73
|
+
expect(found_basenames).to eq(['ruby2.rb'])
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
context 'when same paths are passed' do
|
|
78
|
+
let(:args) { %w(dir1 dir1) }
|
|
79
|
+
|
|
80
|
+
it 'does not return duplicated file paths' do
|
|
81
|
+
count = found_basenames.count { |f| f == 'ruby1.rb' }
|
|
82
|
+
expect(count).to eq(1)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
describe '#target_files_in_dir' do
|
|
88
|
+
let(:found_files) { target_finder.target_files_in_dir(base_dir) }
|
|
89
|
+
let(:found_basenames) { found_files.map { |f| File.basename(f) } }
|
|
90
|
+
let(:base_dir) { '.' }
|
|
91
|
+
|
|
92
|
+
it 'picks files with extension .rb' do
|
|
93
|
+
rb_file_count = found_files.count { |f| f.end_with?('.rb') }
|
|
94
|
+
expect(rb_file_count).to eq(3)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'picks ruby executable files with no extension' do
|
|
98
|
+
expect(found_basenames).to include('executable')
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'does not pick files with no extension and no ruby shebang' do
|
|
102
|
+
expect(found_basenames).not_to include('file')
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'picks ruby executable files with no extension' do
|
|
106
|
+
expect(found_basenames).to include('executable')
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it 'does not pick directories' do
|
|
110
|
+
found_basenames = found_files.map { |f| File.basename(f) }
|
|
111
|
+
expect(found_basenames).not_to include('dir1')
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
it 'picks files specified to be included in config' do
|
|
115
|
+
config = double('config')
|
|
116
|
+
allow(config).to receive(:file_to_include?) do |file|
|
|
117
|
+
File.basename(file) == 'file'
|
|
118
|
+
end
|
|
119
|
+
allow(config).to receive(:file_to_exclude?).and_return(false)
|
|
120
|
+
allow(config_store).to receive(:for).and_return(config)
|
|
121
|
+
|
|
122
|
+
expect(found_basenames).to include('file')
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
it 'does not pick files specified to be excluded in config' do
|
|
126
|
+
config = double('config').as_null_object
|
|
127
|
+
allow(config).to receive(:file_to_include?).and_return(false)
|
|
128
|
+
allow(config).to receive(:file_to_exclude?) do |file|
|
|
129
|
+
File.basename(file) == 'ruby2.rb'
|
|
130
|
+
end
|
|
131
|
+
allow(config_store).to receive(:for).and_return(config)
|
|
132
|
+
|
|
133
|
+
expect(found_basenames).not_to include('ruby2.rb')
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it 'does not return duplicated paths' do
|
|
137
|
+
config = double('config').as_null_object
|
|
138
|
+
allow(config).to receive(:file_to_include?).and_return(true)
|
|
139
|
+
allow(config).to receive(:file_to_exclude?).and_return(false)
|
|
140
|
+
allow(config_store).to receive(:for).and_return(config)
|
|
141
|
+
|
|
142
|
+
count = found_basenames.count { |f| f == 'ruby1.rb' }
|
|
143
|
+
expect(count).to eq(1)
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
context 'when an exception is raised while reading file' do
|
|
147
|
+
around do |example|
|
|
148
|
+
original_stderr = $stderr
|
|
149
|
+
$stderr = StringIO.new
|
|
150
|
+
begin
|
|
151
|
+
example.run
|
|
152
|
+
ensure
|
|
153
|
+
$stderr = original_stderr
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
before do
|
|
158
|
+
allow_any_instance_of(File).to receive(:readline).and_raise(EOFError)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
context 'and debug mode is enabled' do
|
|
162
|
+
let(:debug) { true }
|
|
163
|
+
|
|
164
|
+
it 'outputs error message' do
|
|
165
|
+
found_files
|
|
166
|
+
expect($stderr.string).to include('Unprocessable file')
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
context 'and debug mode is disabled' do
|
|
171
|
+
let(:debug) { false }
|
|
172
|
+
|
|
173
|
+
it 'outputs nothing' do
|
|
174
|
+
found_files
|
|
175
|
+
expect($stderr.string).to be_empty
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|