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.

Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +42 -0
  4. data/README.md +59 -54
  5. data/config/default.yml +124 -95
  6. data/config/disabled.yml +4 -0
  7. data/config/enabled.yml +286 -264
  8. data/lib/rubocop.rb +10 -3
  9. data/lib/rubocop/cli.rb +10 -171
  10. data/lib/rubocop/cop/cop.rb +14 -11
  11. data/lib/rubocop/cop/lint/debugger.rb +35 -0
  12. data/lib/rubocop/cop/lint/syntax.rb +34 -0
  13. data/lib/rubocop/cop/offence.rb +15 -23
  14. data/lib/rubocop/cop/style/align_array.rb +1 -10
  15. data/lib/rubocop/cop/style/align_hash.rb +14 -2
  16. data/lib/rubocop/cop/style/align_parameters.rb +1 -11
  17. data/lib/rubocop/cop/style/and_or.rb +13 -11
  18. data/lib/rubocop/cop/style/attr.rb +1 -1
  19. data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
  20. data/lib/rubocop/cop/style/blocks.rb +14 -6
  21. data/lib/rubocop/cop/style/character_literal.rb +1 -1
  22. data/lib/rubocop/cop/style/class_length.rb +38 -0
  23. data/lib/rubocop/cop/style/collection_methods.rb +1 -1
  24. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  25. data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
  26. data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
  27. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  28. data/lib/rubocop/cop/style/even_odd.rb +7 -3
  29. data/lib/rubocop/cop/style/hash_methods.rb +1 -1
  30. data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
  31. data/lib/rubocop/cop/style/lambda_call.rb +36 -11
  32. data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
  33. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
  34. data/lib/rubocop/cop/style/method_length.rb +2 -13
  35. data/lib/rubocop/cop/style/method_name.rb +42 -0
  36. data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
  37. data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
  38. data/lib/rubocop/cop/style/raise_args.rb +60 -0
  39. data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
  40. data/lib/rubocop/cop/style/redundant_return.rb +14 -5
  41. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  42. data/lib/rubocop/cop/style/semicolon.rb +13 -4
  43. data/lib/rubocop/cop/style/signal_exception.rb +63 -14
  44. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  45. data/lib/rubocop/cop/style/string_help.rb +4 -1
  46. data/lib/rubocop/cop/style/string_literals.rb +34 -11
  47. data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
  48. data/lib/rubocop/cop/style/tab.rb +1 -1
  49. data/lib/rubocop/cop/style/variable_name.rb +44 -0
  50. data/lib/rubocop/cop/style/when_then.rb +1 -1
  51. data/lib/rubocop/cop/style/while_until_do.rb +1 -1
  52. data/lib/rubocop/cop/team.rb +4 -7
  53. data/lib/rubocop/cop/util.rb +12 -0
  54. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  55. data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
  56. data/lib/rubocop/formatter/json_formatter.rb +1 -0
  57. data/lib/rubocop/formatter/progress_formatter.rb +9 -13
  58. data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
  59. data/lib/rubocop/options.rb +184 -0
  60. data/lib/rubocop/processed_source.rb +4 -0
  61. data/lib/rubocop/version.rb +1 -1
  62. data/rubocop.gemspec +1 -1
  63. data/spec/rubocop/cli_spec.rb +870 -1001
  64. data/spec/rubocop/config_spec.rb +13 -13
  65. data/spec/rubocop/config_store_spec.rb +38 -37
  66. data/spec/rubocop/cop/commissioner_spec.rb +42 -46
  67. data/spec/rubocop/cop/cop_spec.rb +72 -77
  68. data/spec/rubocop/cop/corrector_spec.rb +51 -55
  69. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
  70. data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
  71. data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
  72. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
  73. data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
  74. data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
  75. data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
  76. data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
  77. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
  78. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
  79. data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
  80. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
  81. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
  82. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
  83. data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
  84. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
  85. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
  86. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
  87. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
  88. data/spec/rubocop/cop/lint/void_spec.rb +50 -56
  89. data/spec/rubocop/cop/offence_spec.rb +101 -131
  90. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
  91. data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
  92. data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
  93. data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
  94. data/spec/rubocop/cop/style/alias_spec.rb +30 -36
  95. data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
  96. data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
  97. data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
  98. data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
  99. data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
  100. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
  101. data/spec/rubocop/cop/style/attr_spec.rb +11 -17
  102. data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
  103. data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
  104. data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
  105. data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
  106. data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
  107. data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
  108. data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
  109. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
  110. data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
  111. data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
  112. data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
  113. data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
  114. data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
  115. data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
  116. data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
  117. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
  118. data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
  119. data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
  120. data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
  121. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
  122. data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
  123. data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
  124. data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
  125. data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
  126. data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
  127. data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
  128. data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
  129. data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
  130. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
  131. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
  132. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
  133. data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
  134. data/spec/rubocop/cop/style/for_spec.rb +18 -24
  135. data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
  136. data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
  137. data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
  138. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
  139. data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
  140. data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
  141. data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
  142. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
  143. data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
  144. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
  145. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
  146. data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
  147. data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
  148. data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
  149. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
  150. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
  151. data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
  152. data/spec/rubocop/cop/style/not_spec.rb +13 -19
  153. data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
  154. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
  155. data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
  156. data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
  157. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
  158. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
  159. data/spec/rubocop/cop/style/proc_spec.rb +13 -19
  160. data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
  161. data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
  162. data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
  163. data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
  164. data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
  165. data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
  166. data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
  167. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
  168. data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
  169. data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
  170. data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
  171. data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
  172. data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
  173. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
  174. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
  175. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
  176. data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
  177. data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
  178. data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
  179. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
  180. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
  181. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
  182. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
  183. data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
  184. data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
  185. data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
  186. data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
  187. data/spec/rubocop/cop/style/tab_spec.rb +9 -15
  188. data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
  189. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
  190. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
  191. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
  192. data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
  193. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
  194. data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
  195. data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
  196. data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
  197. data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
  198. data/spec/rubocop/cop/team_spec.rb +125 -127
  199. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
  200. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
  201. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
  202. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
  203. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
  204. data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
  205. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
  206. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
  207. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
  208. data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
  209. data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
  210. data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
  211. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
  212. data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
  213. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
  214. data/spec/rubocop/options_spec.rb +233 -0
  215. data/spec/rubocop/processed_source_spec.rb +85 -42
  216. data/spec/rubocop/source_parser_spec.rb +108 -110
  217. data/spec/rubocop/target_finder_spec.rb +125 -127
  218. data/spec/rubocop/token_spec.rb +15 -17
  219. metadata +32 -8
  220. data/lib/rubocop/backports/bsearch.rb +0 -39
  221. data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
  222. data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
@@ -2,65 +2,108 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- describe ProcessedSource do
7
- subject(:processed_source) do
8
- ProcessedSource.new(
9
- buffer,
10
- double('ast'),
11
- double('comments'),
12
- double('tokens'),
13
- double('diagnostics')
14
- )
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)
15
36
  end
16
37
 
17
- let(:source) do
18
- [
19
- 'def some_method',
20
- " puts 'foo'",
21
- 'end',
22
- 'some_method'
23
- ].join("\n")
38
+ it 'has same number of elements as line count' do
39
+ expect(processed_source.lines.size).to eq(4)
24
40
  end
25
41
 
26
- let(:buffer) do
27
- buffer = Parser::Source::Buffer.new('(string)', 1)
28
- buffer.source = source
29
- buffer
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')
30
45
  end
46
+ end
31
47
 
32
- describe '#lines' do
33
- it 'is an array' do
34
- expect(processed_source.lines).to be_a(Array)
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')
35
52
  end
53
+ end
36
54
 
37
- it 'has same number of elements as line count' do
38
- expect(processed_source.lines.size).to eq(4)
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))
39
58
  end
59
+ end
40
60
 
41
- it 'contains lines as string without linefeed' do
42
- first_line = processed_source.lines.first
43
- expect(first_line).to eq('def some_method')
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))
44
64
  end
45
65
  end
66
+ end
46
67
 
47
- describe '#[]' do
48
- context 'when an index is passed' do
49
- it 'returns the line' do
50
- expect(processed_source[2]).to eq('end')
51
- end
68
+ describe 'valid_syntax?' do
69
+ let(:diagnostics) do
70
+ [Parser::Diagnostic.new(level, 'message', double('location'))]
71
+ end
72
+
73
+ context 'when the source has diagnostic with error level' do
74
+ let(:level) { :error }
75
+
76
+ it 'returns false' do
77
+ expect(processed_source.valid_syntax?).to be_false
78
+ end
79
+ end
80
+
81
+ context 'when the source has diagnostic with error level' do
82
+ let(:level) { :fatal }
83
+
84
+ it 'returns false' do
85
+ expect(processed_source.valid_syntax?).to be_false
52
86
  end
87
+ end
88
+
89
+ context 'when the source has diagnostic with error level' do
90
+ let(:level) { :warning }
91
+
92
+ it 'returns false' do
93
+ expect(processed_source.valid_syntax?).to be_true
94
+ end
95
+ end
53
96
 
54
- context 'when a range is passed' do
55
- it 'returns the array of lines' do
56
- expect(processed_source[2..3]).to eq(%w(end some_method))
57
- end
97
+ context 'when the source has diagnostics with error and warning level' do
98
+ let(:diagnostics) do
99
+ [
100
+ Parser::Diagnostic.new(:error, 'message', double('location')),
101
+ Parser::Diagnostic.new(:warning, 'message', double('location'))
102
+ ]
58
103
  end
59
104
 
60
- context 'when start index and length are passed' do
61
- it 'returns the array of lines' do
62
- expect(processed_source[2, 2]).to eq(%w(end some_method))
63
- end
105
+ it 'returns false' do
106
+ expect(processed_source.valid_syntax?).to be_false
64
107
  end
65
108
  end
66
109
  end
@@ -2,139 +2,137 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- describe SourceParser, :isolated_environment do
7
- include FileHelper
8
-
9
- describe '.parse_file' do
10
- let(:file) { 'example.rb' }
11
-
12
- let(:source) do
13
- [
14
- '# encoding: utf-8',
15
- '',
16
- 'def some_method',
17
- " puts 'foo'",
18
- 'end',
19
- '',
20
- 'some_method'
21
- ]
22
- end
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
23
22
 
24
- before do
25
- create_file(file, source)
26
- end
23
+ before do
24
+ create_file(file, source)
25
+ end
27
26
 
28
- let(:processed_source) do
29
- SourceParser.parse_file(file)
30
- end
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
31
34
 
32
- it 'returns ProcessedSource' do
33
- expect(processed_source).to be_a(ProcessedSource)
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)
34
38
  end
35
39
 
36
- describe 'the returned processed source' do
37
- it 'has the root node of AST' do
38
- expect(processed_source.ast).to be_a(Parser::AST::Node)
39
- end
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
40
45
 
41
- it 'has an array of comments' do
42
- expect(processed_source.comments).to be_a(Array)
43
- expect(processed_source.comments.first)
44
- .to be_a(Parser::Source::Comment)
45
- end
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
46
50
 
47
- it 'has an array of tokens' do
48
- expect(processed_source.tokens).to be_a(Array)
49
- expect(processed_source.tokens.first).to be_a(Token)
50
- end
51
+ it 'has a source buffer' do
52
+ expect(processed_source.buffer).to be_a(Parser::Source::Buffer)
53
+ end
51
54
 
52
- it 'has a source buffer' do
53
- expect(processed_source.buffer).to be_a(Parser::Source::Buffer)
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
54
59
  end
60
+ end
55
61
 
56
- context 'when the source is valid' do
57
- it 'does not have diagnostics' do
58
- expect(processed_source.diagnostics).to be_a(Array)
59
- expect(processed_source.diagnostics).to be_empty
60
- end
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
+ ]
61
75
  end
62
76
 
63
- context 'when the source has invalid syntax' do
64
- let(:source) do
65
- [
66
- '# encoding: utf-8',
67
- '',
68
- 'def some_method',
69
- " puts 'foo'",
70
- 'end',
71
- '',
72
- 'some_method',
73
- '',
74
- '?invalid_syntax'
75
- ]
76
- end
77
-
78
- it 'has an array of diagnostics' do
79
- expect(processed_source.diagnostics).to be_a(Array)
80
- expect(processed_source.diagnostics.first)
81
- .to be_a(Parser::Diagnostic)
82
- end
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)
83
81
  end
84
82
  end
85
83
  end
84
+ end
86
85
 
87
- describe '.cop_disabled_lines_in' do
88
- let(:source) do
89
- [
90
- '# encoding: utf-8',
91
- '',
92
- '# rubocop:disable MethodLength',
93
- 'def some_method',
94
- " puts 'foo'",
95
- 'end',
96
- '# rubocop:enable MethodLength',
97
- '',
98
- '# rubocop:disable all',
99
- 'some_method',
100
- '# rubocop:enable all',
101
- '',
102
- "code = 'This is evil.'",
103
- 'eval(code) # rubocop:disable Eval',
104
- "puts 'This is not evil.'"
105
- ]
106
- end
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
107
106
 
108
- let(:disabled_lines) { SourceParser.cop_disabled_lines_in(source) }
107
+ let(:disabled_lines) { described_class.cop_disabled_lines_in(source) }
109
108
 
110
- it 'has keys for disabled cops' do
111
- expect(disabled_lines).to have_key('MethodLength')
112
- expect(disabled_lines).to have_key('Eval')
113
- end
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
114
113
 
115
- it 'supports disabling multiple lines with a pair of directive' do
116
- method_length_disabled_lines = disabled_lines['MethodLength']
117
- expected_part = (3..6).to_a
118
- expect(method_length_disabled_lines & expected_part)
119
- .to eq(expected_part)
120
- end
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
121
120
 
122
- it 'supports disabling single line with a direcive at end of line' do
123
- eval_disabled_lines = disabled_lines['Eval']
124
- expect(eval_disabled_lines).to include(14)
125
- expect(eval_disabled_lines).not_to include(15)
126
- end
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
127
126
 
128
- it 'supports disabling all cops with keyword all' do
129
- all_cop_names = Cop::Cop.all.map(&:cop_name).sort
130
- expect(disabled_lines.keys.sort).to eq(all_cop_names)
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)
131
130
 
132
- expected_part = (9..10).to_a
131
+ expected_part = (9..10).to_a
133
132
 
134
- disabled_lines.each_value do |each_cop_disabled_lines|
135
- expect(each_cop_disabled_lines & expected_part)
136
- .to eq(expected_part)
137
- end
133
+ disabled_lines.each_value do |each_cop_disabled_lines|
134
+ expect(each_cop_disabled_lines & expected_part)
135
+ .to eq(expected_part)
138
136
  end
139
137
  end
140
138
  end
@@ -2,177 +2,175 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- describe TargetFinder, :isolated_environment do
7
- include FileHelper
8
-
9
- subject(:target_finder) { TargetFinder.new(config_store, debug) }
10
- let(:config_store) { ConfigStore.new }
11
- let(:debug) { false }
12
-
13
- before do
14
- create_file('dir1/ruby1.rb', '# encoding: utf-8')
15
- create_file('dir1/ruby2.rb', '# encoding: utf-8')
16
- create_file('dir1/file.txt', '# encoding: utf-8')
17
- create_file('dir1/file', '# encoding: utf-8')
18
- create_file('dir1/executable', '#!/usr/bin/env ruby')
19
- create_file('dir2/ruby3.rb', '# encoding: utf-8')
20
- end
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
21
20
 
22
- describe '#find' do
23
- let(:found_files) { target_finder.find(args) }
24
- let(:found_basenames) { found_files.map { |f| File.basename(f) } }
25
- let(:args) { [] }
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) { [] }
26
25
 
27
- it 'returns absolute paths' do
28
- expect(found_files).not_to be_empty
29
- found_files.each do |file|
30
- expect(file).to start_with('/')
31
- end
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('/')
32
30
  end
31
+ end
33
32
 
34
- context 'when no argument is passed' do
35
- let(:args) { [] }
33
+ context 'when no argument is passed' do
34
+ let(:args) { [] }
36
35
 
37
- it 'finds files under the current directory' do
38
- Dir.chdir('dir1') do
39
- expect(found_files).not_to be_empty
40
- found_files.each do |file|
41
- expect(file).to include('/dir1/')
42
- expect(file).not_to include('/dir2/')
43
- end
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/')
44
42
  end
45
43
  end
46
44
  end
45
+ end
47
46
 
48
- context 'when a directory path is passed' do
49
- let(:args) { ['../dir2'] }
47
+ context 'when a directory path is passed' do
48
+ let(:args) { ['../dir2'] }
50
49
 
51
- it 'finds files under the specified directory' do
52
- Dir.chdir('dir1') do
53
- expect(found_files).not_to be_empty
54
- found_files.each do |file|
55
- expect(file).to include('/dir2/')
56
- expect(file).not_to include('/dir1/')
57
- end
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/')
58
56
  end
59
57
  end
60
58
  end
59
+ end
61
60
 
62
- context 'when a file is passed' do
63
- let(:args) { ['dir2/file'] }
61
+ context 'when a file is passed' do
62
+ let(:args) { ['dir2/file'] }
64
63
 
65
- it 'picks the file' do
66
- expect(found_basenames).to eq(['file'])
67
- end
64
+ it 'picks the file' do
65
+ expect(found_basenames).to eq(['file'])
68
66
  end
67
+ end
69
68
 
70
- context 'when a pattern is passed' do
71
- let(:args) { ['dir1/*2.rb'] }
69
+ context 'when a pattern is passed' do
70
+ let(:args) { ['dir1/*2.rb'] }
72
71
 
73
- it 'finds files which match the pattern' do
74
- expect(found_basenames).to eq(['ruby2.rb'])
75
- end
72
+ it 'finds files which match the pattern' do
73
+ expect(found_basenames).to eq(['ruby2.rb'])
76
74
  end
75
+ end
77
76
 
78
- context 'when same paths are passed' do
79
- let(:args) { %w(dir1 dir1) }
77
+ context 'when same paths are passed' do
78
+ let(:args) { %w(dir1 dir1) }
80
79
 
81
- it 'does not return duplicated file paths' do
82
- count = found_basenames.count { |f| f == 'ruby1.rb' }
83
- expect(count).to eq(1)
84
- end
80
+ it 'does not return duplicated file paths' do
81
+ count = found_basenames.count { |f| f == 'ruby1.rb' }
82
+ expect(count).to eq(1)
85
83
  end
86
84
  end
85
+ end
87
86
 
88
- describe '#target_files_in_dir' do
89
- let(:found_files) { target_finder.target_files_in_dir(base_dir) }
90
- let(:found_basenames) { found_files.map { |f| File.basename(f) } }
91
- let(:base_dir) { '.' }
92
-
93
- it 'picks files with extension .rb' do
94
- rb_file_count = found_files.count { |f| f.end_with?('.rb') }
95
- expect(rb_file_count).to eq(3)
96
- end
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) { '.' }
97
91
 
98
- it 'picks ruby executable files with no extension' do
99
- expect(found_basenames).to include('executable')
100
- end
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
101
96
 
102
- it 'does not pick files with no extension and no ruby shebang' do
103
- expect(found_basenames).not_to include('file')
104
- end
97
+ it 'picks ruby executable files with no extension' do
98
+ expect(found_basenames).to include('executable')
99
+ end
105
100
 
106
- it 'picks ruby executable files with no extension' do
107
- expect(found_basenames).to include('executable')
108
- end
101
+ it 'does not pick files with no extension and no ruby shebang' do
102
+ expect(found_basenames).not_to include('file')
103
+ end
109
104
 
110
- it 'does not pick directories' do
111
- found_basenames = found_files.map { |f| File.basename(f) }
112
- expect(found_basenames).not_to include('dir1')
113
- end
105
+ it 'picks ruby executable files with no extension' do
106
+ expect(found_basenames).to include('executable')
107
+ end
114
108
 
115
- it 'picks files specified to be included in config' do
116
- config = double('config')
117
- config.stub(:file_to_include?) do |file|
118
- File.basename(file) == 'file'
119
- end
120
- config.stub(:file_to_exclude?).and_return(false)
121
- config_store.stub(:for).and_return(config)
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
122
113
 
123
- expect(found_basenames).to include('file')
114
+ it 'picks files specified to be included in config' do
115
+ config = double('config')
116
+ config.stub(:file_to_include?) do |file|
117
+ File.basename(file) == 'file'
124
118
  end
119
+ config.stub(:file_to_exclude?).and_return(false)
120
+ config_store.stub(:for).and_return(config)
125
121
 
126
- it 'does not pick files specified to be excluded in config' do
127
- config = double('config').as_null_object
128
- config.stub(:file_to_include?).and_return(false)
129
- config.stub(:file_to_exclude?) do |file|
130
- File.basename(file) == 'ruby2.rb'
131
- end
132
- config_store.stub(:for).and_return(config)
122
+ expect(found_basenames).to include('file')
123
+ end
133
124
 
134
- expect(found_basenames).not_to include('ruby2.rb')
125
+ it 'does not pick files specified to be excluded in config' do
126
+ config = double('config').as_null_object
127
+ config.stub(:file_to_include?).and_return(false)
128
+ config.stub(:file_to_exclude?) do |file|
129
+ File.basename(file) == 'ruby2.rb'
135
130
  end
131
+ config_store.stub(:for).and_return(config)
132
+
133
+ expect(found_basenames).not_to include('ruby2.rb')
134
+ end
136
135
 
137
- it 'does not return duplicated paths' do
138
- config = double('config').as_null_object
139
- config.stub(:file_to_include?).and_return(true)
140
- config.stub(:file_to_exclude?).and_return(false)
141
- config_store.stub(:for).and_return(config)
136
+ it 'does not return duplicated paths' do
137
+ config = double('config').as_null_object
138
+ config.stub(:file_to_include?).and_return(true)
139
+ config.stub(:file_to_exclude?).and_return(false)
140
+ config_store.stub(:for).and_return(config)
142
141
 
143
- count = found_basenames.count { |f| f == 'ruby1.rb' }
144
- expect(count).to eq(1)
145
- end
142
+ count = found_basenames.count { |f| f == 'ruby1.rb' }
143
+ expect(count).to eq(1)
144
+ end
146
145
 
147
- context 'when an exception is raised while reading file' do
148
- around do |example|
149
- File.any_instance.stub(:readline).and_raise(EOFError)
146
+ context 'when an exception is raised while reading file' do
147
+ around do |example|
148
+ File.any_instance.stub(:readline).and_raise(EOFError)
150
149
 
151
- original_stderr = $stderr
152
- $stderr = StringIO.new
153
- begin
154
- example.run
155
- ensure
156
- $stderr = original_stderr
157
- end
150
+ original_stderr = $stderr
151
+ $stderr = StringIO.new
152
+ begin
153
+ example.run
154
+ ensure
155
+ $stderr = original_stderr
158
156
  end
157
+ end
159
158
 
160
- context 'and debug mode is enabled' do
161
- let(:debug) { true }
159
+ context 'and debug mode is enabled' do
160
+ let(:debug) { true }
162
161
 
163
- it 'outputs error message' do
164
- found_files
165
- expect($stderr.string).to include('Unprocessable file')
166
- end
162
+ it 'outputs error message' do
163
+ found_files
164
+ expect($stderr.string).to include('Unprocessable file')
167
165
  end
166
+ end
168
167
 
169
- context 'and debug mode is disabled' do
170
- let(:debug) { false }
168
+ context 'and debug mode is disabled' do
169
+ let(:debug) { false }
171
170
 
172
- it 'outputs nothing' do
173
- found_files
174
- expect($stderr.string).to be_empty
175
- end
171
+ it 'outputs nothing' do
172
+ found_files
173
+ expect($stderr.string).to be_empty
176
174
  end
177
175
  end
178
176
  end