tailor 0.1.5 → 1.0.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. data/.gitignore +9 -1
  2. data/.rspec +2 -1
  3. data/.tailor +6 -0
  4. data/Gemfile.lock +47 -78
  5. data/{ChangeLog.rdoc → History.rdoc} +0 -0
  6. data/README.rdoc +157 -24
  7. data/Rakefile +0 -9
  8. data/bin/tailor +16 -69
  9. data/features/configurable.feature +78 -0
  10. data/features/horizontal_spacing.feature +262 -0
  11. data/features/indentation.feature +17 -21
  12. data/features/indentation/bad_files_with_no_trailing_newline.feature +90 -0
  13. data/features/indentation/good_files_with_no_trailing_newline.feature +206 -0
  14. data/features/name_detection.feature +72 -0
  15. data/features/step_definitions/indentation_steps.rb +10 -133
  16. data/features/support/env.rb +7 -15
  17. data/features/support/file_cases/horizontal_spacing_cases.rb +265 -0
  18. data/features/support/file_cases/indentation_cases.rb +972 -0
  19. data/features/support/file_cases/naming_cases.rb +52 -0
  20. data/features/support/file_cases/vertical_spacing_cases.rb +70 -0
  21. data/features/support/hooks.rb +8 -0
  22. data/features/support/{1_file_with_bad_operator_spacing → legacy}/bad_op_spacing.rb +0 -0
  23. data/features/support/{1_file_with_bad_ternary_colon_spacing → legacy}/bad_ternary_colon_spacing.rb +0 -0
  24. data/features/support/{1_long_file_with_indentation/my_project.rb → legacy/long_file_with_indentation.rb} +1 -1
  25. data/features/support/world.rb +14 -0
  26. data/features/vertical_spacing.feature +114 -0
  27. data/lib/ext/string_ext.rb +5 -0
  28. data/lib/tailor.rb +6 -252
  29. data/lib/tailor/cli.rb +49 -0
  30. data/lib/tailor/cli/options.rb +251 -0
  31. data/lib/tailor/composite_observable.rb +56 -0
  32. data/lib/tailor/configuration.rb +263 -0
  33. data/lib/tailor/critic.rb +162 -0
  34. data/lib/tailor/formatters/text.rb +126 -0
  35. data/lib/tailor/lexed_line.rb +246 -0
  36. data/lib/tailor/lexer.rb +428 -0
  37. data/lib/tailor/lexer/token.rb +103 -0
  38. data/lib/tailor/lexer_constants.rb +75 -0
  39. data/lib/tailor/logger.rb +28 -0
  40. data/lib/tailor/problem.rb +100 -0
  41. data/lib/tailor/reporter.rb +48 -0
  42. data/lib/tailor/ruler.rb +39 -0
  43. data/lib/tailor/rulers.rb +7 -0
  44. data/lib/tailor/rulers/allow_camel_case_methods_ruler.rb +30 -0
  45. data/lib/tailor/rulers/allow_hard_tabs_ruler.rb +22 -0
  46. data/lib/tailor/rulers/allow_screaming_snake_case_classes_ruler.rb +32 -0
  47. data/lib/tailor/rulers/allow_trailing_line_spaces_ruler.rb +33 -0
  48. data/lib/tailor/rulers/indentation_spaces_ruler.rb +199 -0
  49. data/lib/tailor/rulers/indentation_spaces_ruler/indentation_manager.rb +362 -0
  50. data/lib/tailor/rulers/max_code_lines_in_class_ruler.rb +84 -0
  51. data/lib/tailor/rulers/max_code_lines_in_method_ruler.rb +84 -0
  52. data/lib/tailor/rulers/max_line_length_ruler.rb +31 -0
  53. data/lib/tailor/rulers/spaces_after_comma_ruler.rb +83 -0
  54. data/lib/tailor/rulers/spaces_after_lbrace_ruler.rb +114 -0
  55. data/lib/tailor/rulers/spaces_after_lbracket_ruler.rb +123 -0
  56. data/lib/tailor/rulers/spaces_after_lparen_ruler.rb +116 -0
  57. data/lib/tailor/rulers/spaces_before_comma_ruler.rb +67 -0
  58. data/lib/tailor/rulers/spaces_before_lbrace_ruler.rb +93 -0
  59. data/lib/tailor/rulers/spaces_before_rbrace_ruler.rb +98 -0
  60. data/lib/tailor/rulers/spaces_before_rbracket_ruler.rb +70 -0
  61. data/lib/tailor/rulers/spaces_before_rparen_ruler.rb +70 -0
  62. data/lib/tailor/rulers/spaces_in_empty_braces_ruler.rb +94 -0
  63. data/lib/tailor/rulers/trailing_newlines_ruler.rb +36 -0
  64. data/lib/tailor/runtime_error.rb +3 -0
  65. data/lib/tailor/tailorrc.erb +88 -0
  66. data/lib/tailor/version.rb +2 -2
  67. data/spec/spec_helper.rb +7 -5
  68. data/spec/tailor/cli_spec.rb +94 -0
  69. data/spec/tailor/configuration_spec.rb +147 -0
  70. data/spec/tailor/critic_spec.rb +63 -0
  71. data/spec/tailor/lexed_line_spec.rb +569 -0
  72. data/spec/tailor/lexer/token_spec.rb +46 -0
  73. data/spec/tailor/lexer_spec.rb +181 -0
  74. data/spec/tailor/options_spec.rb +6 -0
  75. data/spec/tailor/problem_spec.rb +74 -0
  76. data/spec/tailor/reporter_spec.rb +53 -0
  77. data/spec/tailor/ruler_spec.rb +56 -0
  78. data/spec/tailor/rulers/indentation_spaces_ruler/indentation_manager_spec.rb +454 -0
  79. data/spec/tailor/rulers/indentation_spaces_ruler_spec.rb +128 -0
  80. data/spec/tailor/rulers/spaces_after_comma_spec.rb +31 -0
  81. data/spec/tailor/rulers/spaces_after_lbrace_ruler_spec.rb +145 -0
  82. data/spec/tailor/rulers/spaces_before_lbrace_ruler_spec.rb +63 -0
  83. data/spec/tailor/rulers/spaces_before_rbrace_ruler_spec.rb +63 -0
  84. data/spec/tailor/rulers_spec.rb +9 -0
  85. data/spec/tailor/version_spec.rb +6 -0
  86. data/spec/tailor_spec.rb +9 -21
  87. data/tailor.gemspec +22 -35
  88. data/tasks/features.rake +7 -0
  89. data/tasks/roodi.rake +9 -0
  90. data/tasks/roodi_config.yaml +14 -0
  91. data/tasks/spec.rake +16 -0
  92. data/tasks/yard.rake +14 -0
  93. metadata +224 -77
  94. data/features/case_checking.feature +0 -38
  95. data/features/spacing.feature +0 -97
  96. data/features/spacing/commas.feature +0 -44
  97. data/features/step_definitions/case_checking_steps.rb +0 -42
  98. data/features/step_definitions/spacing_steps.rb +0 -156
  99. data/features/support/1_file_with_bad_comma_spacing/bad_comma_spacing.rb +0 -43
  100. data/features/support/1_file_with_bad_curly_brace_spacing/bad_curly_brace_spacing.rb +0 -60
  101. data/features/support/1_file_with_bad_parenthesis/bad_parenthesis.rb +0 -4
  102. data/features/support/1_file_with_bad_square_brackets/bad_square_brackets.rb +0 -62
  103. data/features/support/1_file_with_camel_case_class/camel_case_class.rb +0 -5
  104. data/features/support/1_file_with_camel_case_method/camel_case_method.rb +0 -3
  105. data/features/support/1_file_with_hard_tabs/hard_tab.rb +0 -3
  106. data/features/support/1_file_with_long_lines/long_lines.rb +0 -5
  107. data/features/support/1_file_with_snake_case_class/snake_case_class.rb +0 -5
  108. data/features/support/1_file_with_snake_case_method/snake_case_method.rb +0 -3
  109. data/features/support/1_file_with_trailing_whitespace/trailing_whitespace.rb +0 -5
  110. data/features/support/1_good_simple_file/simple_project.rb +0 -5
  111. data/features/support/common.rb +0 -102
  112. data/features/support/matchers.rb +0 -11
  113. data/lib/tailor/file_line.rb +0 -220
  114. data/lib/tailor/indentation.rb +0 -245
  115. data/lib/tailor/spacing.rb +0 -237
  116. data/spec/file_line_spec.rb +0 -70
  117. data/spec/indentation_spec.rb +0 -259
  118. data/spec/spacing/colon_spacing_spec.rb +0 -71
  119. data/spec/spacing/comma_spacing_spec.rb +0 -159
  120. data/spec/spacing/curly_brace_spacing_spec.rb +0 -257
  121. data/spec/spacing/parentheses_spacing_spec.rb +0 -28
  122. data/spec/spacing/square_bracket_spacing_spec.rb +0 -116
  123. data/spec/spacing_spec.rb +0 -167
  124. data/tasks/metrics.rake +0 -23
@@ -0,0 +1,265 @@
1
+ H_SPACING_OK = {}
2
+ H_SPACING_1 = {}
3
+ H_SPACING_2 = {}
4
+
5
+ H_SPACING_OK[:short_line_no_newline] = %Q{'#{'#' * 78}'}
6
+ H_SPACING_OK[:short_line_newline_at_81] =
7
+ %Q{'#{'#' * 78}'
8
+ }
9
+
10
+ #-------------------------------------------------------------------------------
11
+ # Hard tabs
12
+ #-------------------------------------------------------------------------------
13
+ H_SPACING_1[:hard_tab] =
14
+ %Q{def something
15
+ \tputs "something"
16
+ end}
17
+
18
+ H_SPACING_1[:hard_tab_with_spaces] =
19
+ %Q{class Thing
20
+ def something
21
+ \t puts "something"
22
+ end
23
+ end}
24
+
25
+ # This only reports the hard tab problem (and not the indentation problem)
26
+ # because a hard tab is counted as 1 space; here, this is 4 spaces, so it
27
+ # looks correct to the parser. I'm leaving this behavior, as detecting the
28
+ # hard tab should signal the problem. If you fix the hard tab and don't
29
+ # fix indentation, tailor will flag you on the indentation on the next run.
30
+ H_SPACING_1[:hard_tab_with_1_indented_space] =
31
+ %Q{class Thing
32
+ def something
33
+ \t puts "something"
34
+ end
35
+ end}
36
+
37
+ H_SPACING_2[:hard_tab_with_2_indented_spaces] =
38
+ %Q{class Thing
39
+ def something
40
+ \t puts "something"
41
+ end
42
+ end}
43
+
44
+ #-------------------------------------------------------------------------------
45
+ # Long lines
46
+ #-------------------------------------------------------------------------------
47
+ H_SPACING_1[:long_line_no_newline] = %Q{'#{'#' * 79}'}
48
+ H_SPACING_1[:long_line_newline_at_82] =%Q{'#{'#' * 79}'
49
+ }
50
+
51
+ #-------------------------------------------------------------------------------
52
+ # Trailing whitespace
53
+ #-------------------------------------------------------------------------------
54
+ H_SPACING_1[:empty_line_with_spaces] = %Q{ }
55
+ H_SPACING_1[:empty_line_with_spaces_in_method] = %Q{def thing
56
+
57
+ puts 'something'
58
+ end}
59
+
60
+ H_SPACING_1[:trailing_spaces_on_def] = %Q{def thing
61
+ puts 'something'
62
+ end}
63
+
64
+ #-------------------------------------------------------------------------------
65
+ # Comma spacing
66
+ #-------------------------------------------------------------------------------
67
+ H_SPACING_1[:no_space_after_comma] = %Q{[1,2]}
68
+ H_SPACING_1[:two_spaces_after_comma] = %Q{[1, 2]}
69
+ H_SPACING_1[:one_space_before_comma] = %Q{[1 ,2]}
70
+ H_SPACING_1[:two_spaces_before_comma] = %Q{[1 , 2]}
71
+ H_SPACING_2[:two_spaces_before_comma_twice] = %Q{[1 , 2 , 3]}
72
+ H_SPACING_2[:two_spaces_after_comma_twice] = %Q{[1, 2, 3]}
73
+
74
+ H_SPACING_2[:spaces_before_with_trailing_comments] = %Q{[
75
+ 1 , # Comment!
76
+ 2 , # Another comment.
77
+ }
78
+
79
+ H_SPACING_OK[:space_after_comma_in_array] = %Q{[1, 2]}
80
+
81
+ H_SPACING_OK[:trailing_comma] = %Q{def thing(one, two,
82
+ three)
83
+ end}
84
+
85
+ H_SPACING_OK[:trailing_comma_with_trailing_comment] =
86
+ %Q{def thing(one, two, # Comment!
87
+ three)
88
+ end}
89
+
90
+ H_SPACING_OK[:no_before_comma_in_array] = %Q{[1, 2]}
91
+
92
+ #-------------------------------------------------------------------------------
93
+ # Braces
94
+ #-------------------------------------------------------------------------------
95
+ H_SPACING_OK[:empty_hash] = %Q{{}}
96
+ H_SPACING_OK[:single_line_hash] = %Q{{ :one => 'one' }}
97
+ H_SPACING_OK[:single_line_hash_lonely_braces] = %Q{{
98
+ :one => 'one'
99
+ }}
100
+
101
+ H_SPACING_OK[:hash_as_param_in_parens] =
102
+ %Q{add_headers({ content_length: new_body.length })}
103
+
104
+ H_SPACING_OK[:two_line_hash] = %Q{{ :one =>
105
+ 'one' }}
106
+
107
+ H_SPACING_OK[:two_line_hash_trailing_comment] = %Q{{ :one => # comment
108
+ 'one' }}
109
+
110
+ H_SPACING_OK[:three_line_hash] = %Q{{ :one =>
111
+ 'one', :two =>
112
+ 'two' }}
113
+
114
+ H_SPACING_OK[:single_line_block] = %Q{1..10.times { |n| puts number }}
115
+ H_SPACING_OK[:multi_line_braces_block] = %Q{1..10.times { |n|
116
+ puts number }}
117
+
118
+ H_SPACING_OK[:multi_line_qword_using_braces] = %Q{%w{
119
+ foo
120
+ bar
121
+ baz
122
+ }.each do |whatevs|
123
+ bla
124
+ end}
125
+
126
+ H_SPACING_OK[:empty_hash_in_multi_line_statement] =
127
+ %Q{if true
128
+ {}
129
+ end}
130
+
131
+ H_SPACING_OK[:multi_line_hash_in_multi_line_statement] =
132
+ %Q{if true
133
+ options = {
134
+ one: 1
135
+ }
136
+ end}
137
+
138
+ H_SPACING_OK[:single_line_string_interp] = %Q{`\#{IFCONFIG} | grep \#{ip}`}
139
+ H_SPACING_OK[:single_line_block_in_string_interp] =
140
+ %Q{"I did this \#{1..10.times { |n| n }} times."}
141
+
142
+ H_SPACING_OK[:empty_hash_in_string_in_block] =
143
+ %Q{[1].map { |n| { :first => "\#{n}-\#{{}}" } }}
144
+
145
+ H_SPACING_OK[:string_interp_with_colonop] =
146
+ %Q{"\#{::Rails.root}"}
147
+
148
+ H_SPACING_1[:single_line_hash_2_spaces_before_lbrace] =
149
+ %Q{thing = { :one => 'one' }}
150
+
151
+ H_SPACING_1[:single_line_hash_2_spaces_before_rbrace] =
152
+ %Q{thing = { :one => 'one' }}
153
+
154
+ H_SPACING_1[:single_line_hash_2_spaces_after_lbrace] =
155
+ %Q{thing = { :one => 'one' }}
156
+
157
+ H_SPACING_1[:single_line_hash_0_spaces_before_lbrace] =
158
+ %Q{thing ={ :one => 'one' }}
159
+
160
+ H_SPACING_1[:two_line_hash_2_spaces_before_lbrace] = %Q{thing1 =
161
+ thing2 = { :one => 'one' }}
162
+
163
+ H_SPACING_1[:two_line_hash_2_spaces_before_rbrace] = %Q{thing1 =
164
+ thing2 = { :one => 'one' }}
165
+
166
+ H_SPACING_1[:two_line_hash_2_spaces_before_lbrace_lonely_braces] =
167
+ %Q{thing1 =
168
+ thing2 = {
169
+ :one => 'one'
170
+ }}
171
+
172
+ H_SPACING_1[:space_in_empty_hash_in_string_in_block] =
173
+ %Q{[1].map { |n| { :first => "\#{n}-\#{{ }}" } }}
174
+
175
+ H_SPACING_1[:single_line_block_2_spaces_before_lbrace] =
176
+ %Q{1..10.times { |n| puts n }}
177
+
178
+ H_SPACING_1[:single_line_block_in_string_interp_2_spaces_before_lbrace] =
179
+ %Q{"I did this \#{1..10.times { |n| puts n }} times."}
180
+
181
+ H_SPACING_1[:single_line_block_0_spaces_before_lbrace] =
182
+ %Q{1..10.times{ |n| puts n }}
183
+
184
+ H_SPACING_1[:two_line_braces_block_2_spaces_before_lbrace] =
185
+ %Q{1..10.times { |n|
186
+ puts n}}
187
+
188
+ H_SPACING_1[:two_line_braces_block_0_spaces_before_lbrace_trailing_comment] =
189
+ %Q{1..10.times{ |n| # comment
190
+ puts n}}
191
+
192
+ H_SPACING_2[:no_space_after_l_before_r_after_string_interp] =
193
+ %Q{logger.debug "Upgrading from \#{current_version} to \#{new_version}", {:format => :short}}
194
+
195
+ H_SPACING_2[:no_space_before_consecutive_rbraces] =
196
+ %Q{thing = { 'id' => "\#{source}", 'attributes' => { 'height' => "\#{height}"}}}
197
+
198
+ #-------------------------------------------------------------------------------
199
+ # Brackets
200
+ #-------------------------------------------------------------------------------
201
+ H_SPACING_OK[:empty_array] = %Q{[]}
202
+ H_SPACING_OK[:simple_array] = %Q{[1, 2, 3]}
203
+ H_SPACING_OK[:two_d_array] = %Q{[[1, 2, 3], ['a', 'b', 'c']]}
204
+ H_SPACING_OK[:hash_key_reference] = %Q{thing[:one]}
205
+ H_SPACING_OK[:array_of_symbols] =
206
+ %Q{transition [:active, :reactivated] => :opened}
207
+ H_SPACING_OK[:array_of_hashes] =
208
+ %Q{[ { :one => [[1, 2, 3], ['a', 'b', 'c']] },
209
+ { :two => [[4, 5, 6], ['d', 'e', 'f']] }]}
210
+
211
+ H_SPACING_OK[:simple_array_lonely_brackets] =
212
+ %Q{[
213
+ 1, 2,
214
+ 3
215
+ ]}
216
+
217
+ H_SPACING_OK[:simple_nested_array_lonely_brackets] =
218
+ %Q{def thing
219
+ [
220
+ 1, 2,
221
+ 3
222
+ ]
223
+ end}
224
+
225
+
226
+ H_SPACING_OK[:empty_array_in_multi_line_statement] =
227
+ %Q{if true
228
+ []
229
+ end}
230
+
231
+ H_SPACING_1[:space_in_empty_array] = %Q{[ ]}
232
+ H_SPACING_1[:simple_array_space_after_lbracket] = %Q{[ 1, 2, 3]}
233
+ H_SPACING_1[:simple_array_space_before_rbracket] = %Q{[1, 2, 3 ]}
234
+ H_SPACING_1[:hash_key_ref_space_before_rbracket] = %Q{thing[:one ]}
235
+ H_SPACING_1[:hash_key_ref_space_after_lbracket] = %Q{thing[ :one]}
236
+ H_SPACING_2[:two_d_array_space_after_lbrackets] =
237
+ %Q{[ [1, 2, 3], [ 'a', 'b', 'c']]}
238
+ H_SPACING_2[:two_d_array_space_before_rbrackets] =
239
+ %Q{[[1, 2, 3 ], [ 'a', 'b', 'c'] ]}
240
+
241
+ #-------------------------------------------------------------------------------
242
+ # Parens
243
+ #-------------------------------------------------------------------------------
244
+ H_SPACING_OK[:empty_parens] = %Q{def thing()}
245
+ H_SPACING_OK[:simple_method_call] = %Q{thing(one, two)}
246
+ H_SPACING_OK[:multi_line_method_call] = %Q{thing(one,
247
+ two)}
248
+ H_SPACING_OK[:multi_line_method_call_lonely_parens] = %Q{thing(
249
+ one, two
250
+ )}
251
+
252
+ H_SPACING_1[:simple_method_call_space_after_lparen] = %Q{thing( one, two)}
253
+ H_SPACING_1[:simple_method_call_space_before_rparen] = %Q{thing(one, two )}
254
+ H_SPACING_1[:method_call_space_after_lparen_trailing_comment] =
255
+ %Q{thing( one, two) # comment}
256
+ H_SPACING_2[:method_call_space_after_lparen_before_rparen_trailing_comment] =
257
+ %Q{thing( one, two ) # comment}
258
+
259
+ H_SPACING_1[:multi_line_method_call_space_after_lparen] = %Q{thing( one,
260
+ two)}
261
+ H_SPACING_1[:multi_line_method_call_space_after_lparen_trailing_comment] =
262
+ %Q{thing( one,
263
+ two)}
264
+
265
+
@@ -0,0 +1,972 @@
1
+ INDENT_OK = {}
2
+
3
+ INDENT_OK[:class] =
4
+ %Q{class MyClass
5
+ end}
6
+
7
+ INDENT_OK[:one_line_class] =
8
+ %Q{class MyClass; end}
9
+
10
+ INDENT_OK[:one_line_subclass] =
11
+ %Q{class MyClass < RuntimeError; end}
12
+
13
+ INDENT_OK[:one_line_subclass_with_inheritance] =
14
+ %Q{class MyClass < Array
15
+ class MyError < RuntimeError; end
16
+ include AnotherThing
17
+ end}
18
+
19
+ INDENT_OK[:class_empty] =
20
+ %Q{class MyClass
21
+
22
+ end}
23
+
24
+ INDENT_OK[:class_empty_trailing_comment] =
25
+ %Q{class MyClass # Comment!
26
+
27
+ end}
28
+
29
+ INDENT_OK[:class_singlestatement] =
30
+ %Q{class MyClass
31
+ include Stuff
32
+ end}
33
+
34
+ INDENT_OK[:assignment_addition_multistatement] =
35
+ %Q{thing = 1 +
36
+ 2 + 3 + 4 +
37
+ 5}
38
+
39
+ INDENT_OK[:assignment_addition_multistatement_trailing_comment] =
40
+ %Q{thing = 1 + # Comment!
41
+ 2 + 3 + 4 +
42
+ 5}
43
+
44
+ INDENT_OK[:assignment_hash_multistatement] =
45
+ %Q{thing = {
46
+ :one => 'one',
47
+ two: 'two'
48
+ }}
49
+
50
+ INDENT_OK[:assignment_hash_multistatement_trailing_comment] =
51
+ %Q{thing = {
52
+ :one => 'one', # Comment
53
+ two: 'two'
54
+ }}
55
+
56
+ INDENT_OK[:assignment_array_multistatement] =
57
+ %Q{thing = [
58
+ :one,
59
+ :two
60
+ ]}
61
+
62
+ INDENT_OK[:assignment_array_multistatement_trailing_comment] =
63
+ %Q{thing = [
64
+ :one, # comment
65
+ :two
66
+ ]}
67
+
68
+ INDENT_OK[:assignment_paren_multistatement] =
69
+ %Q{eval('puts',
70
+ binding,
71
+ 'my_file.rb',
72
+ 5)}
73
+
74
+ INDENT_OK[:assignment_paren_multistatement_trailing_comment] =
75
+ %Q{eval('puts',
76
+ binding,
77
+ 'my_file.rb', # comment
78
+ 5)}
79
+
80
+ INDENT_OK[:assignment_twolevel_hash_multistatement] =
81
+ %Q{thing = {
82
+ :one => {
83
+ :a => 'a',
84
+ b: => 'b'
85
+ },
86
+ two: {
87
+ x: 'x',
88
+ :y => 'y'
89
+ }
90
+ }}
91
+
92
+ INDENT_OK[:assignment_twolevel_array_multistatement] =
93
+ %Q{thing = [
94
+ [:one],
95
+ [
96
+ :two,
97
+ :three
98
+ ]
99
+ ]}
100
+
101
+ INDENT_OK[:assignment_twolevel_paren_multistatement] =
102
+ %Q{result = Integer(
103
+ String.new(
104
+ "1"
105
+ ).to_i,
106
+ 16
107
+ )}
108
+
109
+ INDENT_OK[:method_call_multistatement] =
110
+ %Q{my_method_with_many_params(one, two,
111
+ three,
112
+ four,
113
+ five)}
114
+
115
+ INDENT_OK[:method_call_multistatement_trailing_comment] =
116
+ %Q{my_method_with_many_params(one, two,
117
+ three, # comment
118
+ four,
119
+ five)}
120
+
121
+ INDENT_OK[:method_call_multistatement_lonely_paren] =
122
+ %Q{my_method_with_many_params(one, two,
123
+ three,
124
+ four,
125
+ five
126
+ )}
127
+
128
+ INDENT_OK[:method_call_multistatement_lonely_paren_trailing_comment] =
129
+ %Q{my_method_with_many_params(one, two, # comment
130
+ three,
131
+ four,
132
+ five
133
+ )}
134
+
135
+ INDENT_OK[:rescue_ending_with_comma] =
136
+ %Q{begin
137
+ ssh.upload source, dest
138
+ @logger.info "Successfully copied the file \#{source} to " +
139
+ "\#{@config[:scp_hostname]}:\#{dest}."
140
+ rescue SocketError, ArgumentError, SystemCallError,
141
+ Net::SCP::Exception, Timeout::Error => ex
142
+ @logger.error "Failed to copy the file \#{source} to \#{dest} due to " +
143
+ "\#{ex.message}"
144
+ end}
145
+
146
+ INDENT_OK[:rescue_ending_with_comma_trailing_comment] =
147
+ %Q{begin
148
+ ssh.upload source, dest
149
+ @logger.info "Successfully copied the file \#{source} to " +
150
+ "\#{@config[:scp_hostname]}:\#{dest}."
151
+ rescue SocketError, ArgumentError, SystemCallError, # comment
152
+ Net::SCP::Exception, Timeout::Error => ex
153
+ @logger.error "Failed to copy the file \#{source} to \#{dest} due to " +
154
+ "\#{ex.message}"
155
+ end}
156
+
157
+ INDENT_OK[:keyword_ending_with_period] =
158
+ %Q{if [].
159
+ empty?
160
+ puts 'hi'
161
+ end}
162
+
163
+ INDENT_OK[:keyword_ending_with_period_trailing_comment] =
164
+ %Q{if []. # comment
165
+ empty?
166
+ puts 'hi'
167
+ end}
168
+
169
+ INDENT_OK[:def] =
170
+ %Q{def a_method
171
+ end}
172
+
173
+ INDENT_OK[:def_empty] =
174
+ %Q{def a_method
175
+
176
+ end}
177
+
178
+ INDENT_OK[:nested_def] =
179
+ %Q{def first_method
180
+ def second_method
181
+ puts "hi"
182
+ end
183
+ end}
184
+
185
+ INDENT_OK[:nested_class] =
186
+ %Q{class MyClass
187
+ class AnotherClass
188
+ end
189
+ end}
190
+
191
+ INDENT_OK[:require_class_singlestatement] =
192
+ %Q{require 'time'
193
+
194
+ class MyClass
195
+ include Stuff
196
+ end}
197
+
198
+ INDENT_OK[:require_class_singlestatement_def] =
199
+ %Q{require 'time'
200
+
201
+ class MyClass
202
+ include Stuff
203
+
204
+ def a_method
205
+ end
206
+ end}
207
+
208
+ INDENT_OK[:require_class_singlestatement_def_content] =
209
+ %Q{require 'time'
210
+
211
+ class MyClass
212
+ include Stuff
213
+
214
+ def a_method
215
+ puts "hello"
216
+ end
217
+ end}
218
+
219
+ INDENT_OK[:if_modifier] =
220
+ %Q{puts "hi" if nil.nil?}
221
+
222
+ INDENT_OK[:if_modifier2] =
223
+ %Q{start_key_registration_server if @profiles.values.include? :SM5000}
224
+
225
+ INDENT_OK[:def_return_if_modifier] =
226
+ %Q{def a_method
227
+ return @something if @something
228
+ end}
229
+
230
+ INDENT_OK[:unless_modifier] =
231
+ %Q{puts "hi" unless nil.nil?}
232
+
233
+ INDENT_OK[:def_return_unless_modifier] =
234
+ %Q{def a_method
235
+ return @something unless @something
236
+ end}
237
+
238
+ INDENT_OK[:multi_line_if_with_trailing_andop] =
239
+ %Q{unless Tim::Runner.configuration[:scp_hostname].nil?
240
+ @reporter.secure_copy if Tim::Runner.configuration[:scp_username] &&
241
+ Tim::Runner.configuration[:scp_password]
242
+ end}
243
+
244
+ INDENT_OK[:while_within_single_line_block] =
245
+ %Q{Timeout::timeout(DEVICE_TIMEOUT) { sleep(0.5) while @device_server.urls.nil? }}
246
+
247
+ INDENT_OK[:case_whens_level] =
248
+ %Q{def my_method
249
+ case true
250
+ when true
251
+ puts "stuff"
252
+ when false
253
+ puts "blah blah"
254
+ end
255
+ end}
256
+
257
+ INDENT_OK[:case_strings_in_strings] =
258
+ %Q{case type
259
+ when :output
260
+ "I like to \#{eval('puts')}, but should be \#{eval('print')}"
261
+ when :input
262
+ "Gimme \#{eval('gets')}!"
263
+ end}
264
+
265
+ INDENT_OK[:case_whens_in] =
266
+ %Q{def my_method
267
+ case true
268
+ when true
269
+ puts "stuff"
270
+ when false
271
+ puts "blah blah"
272
+ end
273
+ end}
274
+
275
+ INDENT_OK[:while_do_loop] =
276
+ %Q{while true do
277
+ puts "something"
278
+ end}
279
+
280
+ INDENT_OK[:while_do_loop2] =
281
+ %Q{i = 0;
282
+ num = 5;
283
+
284
+ while i < num do
285
+ puts("Inside the loop i = \#{i}");
286
+ i +=1;
287
+ end}
288
+
289
+ INDENT_OK[:until_do_loop] =
290
+ %Q{until true do
291
+ puts "something"
292
+ end}
293
+
294
+ INDENT_OK[:until_do_loop2] =
295
+ %Q{i = 0;
296
+ num = 5;
297
+
298
+ until i > num do
299
+ puts("Inside the loop i = \#{i}");
300
+ i +=1;
301
+ end}
302
+
303
+ INDENT_OK[:for_do_loop] =
304
+ %Q{for i in 1..100 do
305
+ puts i
306
+ end}
307
+
308
+ INDENT_OK[:loop_do_loop] =
309
+ %Q{loop do
310
+ puts 'looping'
311
+ end}
312
+
313
+ INDENT_OK[:while_as_modifier_loop] =
314
+ %Q{i = 0;
315
+ num = 5;
316
+ begin
317
+ puts("Inside the loop i = \#{i}");
318
+ i +=1;
319
+ end while i < num}
320
+
321
+ INDENT_OK[:until_as_modifier_loop] =
322
+ %Q{i = 0;
323
+ num = 5;
324
+ begin
325
+ puts("Inside the loop i = \#{i}");
326
+ i +=1;
327
+ end until i > num}
328
+
329
+ INDENT_OK[:for_with_break_loop] =
330
+ %Q{for i in 0..5
331
+ if i > 2 then
332
+ break
333
+ end
334
+ puts "Value of local variable is \#{i}"
335
+ end}
336
+
337
+ INDENT_OK[:for_with_next_loop] =
338
+ %Q{for i in 0..5
339
+ if i < 2 then
340
+ next
341
+ end
342
+ puts "Value of local variable is \#{i}"
343
+ end}
344
+
345
+ INDENT_OK[:for_with_redo_loop] =
346
+ %Q{for i in 0..5
347
+ if i < 2 then
348
+ puts "Value of local variable is \#{i}"
349
+ redo
350
+ end
351
+ end}
352
+
353
+ INDENT_OK[:for_with_retry_loop] =
354
+ %Q{for i in 1..5
355
+ retry if i > 2
356
+ puts "Value of local variable is \#{i}"
357
+ end}
358
+
359
+ INDENT_OK[:loop_with_braces] =
360
+ %Q{loop {
361
+ puts 'stuff'
362
+ }}
363
+
364
+ #----------- Braces ----------#
365
+ INDENT_OK[:single_line_braces] =
366
+ %Q{{ one: 1, two: 2 }}
367
+
368
+ INDENT_OK[:single_line_braces_as_t_string] =
369
+ %Q{%Q{this is a t string!}}
370
+
371
+ INDENT_OK[:multi_line_braces] =
372
+ %Q{{ one: 1,
373
+ two: 2 }}
374
+
375
+ INDENT_OK[:multi_line_braces_as_t_string] =
376
+ %Q{%Q{this is a t string!
377
+ suckaaaaaa!}}
378
+
379
+ INDENT_OK[:multi_line_lonely_braces] =
380
+ %Q{{
381
+ :one => 'one', :two => 'two',
382
+ :three => 'three'
383
+ }}
384
+
385
+ INDENT_OK[:multi_line_lonely_braces_as_t_string] =
386
+ %Q{%Q{
387
+ this is a t string!
388
+ suckaaaaaa!
389
+ }}
390
+
391
+ INDENT_OK[:multi_line_braces_embedded_arrays] =
392
+ %Q{{
393
+ :one => ['one', 17, {}], :two => ['two'],
394
+ :three => 'three'
395
+ }}
396
+ INDENT_OK[:braces_combo] =
397
+ %Q{{ three: 3 }
398
+ {
399
+ three: 3 }
400
+ { three: 3
401
+ }
402
+ {
403
+ three: 3
404
+ }}
405
+
406
+ #----------- Brackets ----------#
407
+ INDENT_OK[:single_line_brackets] =
408
+ %Q{['one', 'two', 'three']}
409
+
410
+ INDENT_OK[:single_line_brackets_as_t_string] =
411
+ %Q{%Q[this is a t string!]}
412
+
413
+ INDENT_OK[:multi_line_brackets] =
414
+ %Q{['one',
415
+ 'two',
416
+ 'three']}
417
+
418
+ INDENT_OK[:multi_line_brackets_as_t_string] =
419
+ %Q{%Q[this is a t string!
420
+ it doesn't matter that this is way over here.
421
+ suckaaaaaa!]}
422
+
423
+ INDENT_OK[:multi_line_lonely_brackets] =
424
+ %Q{[
425
+ 'one',
426
+ 'two',
427
+ 'three'
428
+ ]}
429
+
430
+ INDENT_OK[:multi_line_lonely_brackets_as_t_string] =
431
+ %Q{%Q[
432
+ this is a t string!
433
+ it doesn't matter that this is way over here.
434
+ suckaaaaaa!
435
+ ]}
436
+
437
+ INDENT_OK[:multi_line_brackets_embedded_hashes] =
438
+ %Q{summary_table.rows << [{ value: "File", align: :center },
439
+ { value: "Total Problems", align: :center }]}
440
+
441
+ INDENT_OK[:brackets_combo] =
442
+ %Q{[2]
443
+ [
444
+ 2]
445
+ [2
446
+ ]
447
+ [
448
+ 2
449
+ ]}
450
+
451
+ #----------- Parens ----------#
452
+
453
+ INDENT_OK[:single_line_parens] =
454
+ %Q{(true || false)}
455
+
456
+ INDENT_OK[:single_line_parens_as_t_string] =
457
+ %Q{%Q(this is a t string!)}
458
+
459
+ INDENT_OK[:multi_line_parens] =
460
+ %Q{my_method(first_argument, second_arg,
461
+ third_arg)}
462
+
463
+ INDENT_OK[:multi_line_parens_as_t_string] =
464
+ %Q{%Q(this is a t string!
465
+ and i'm not going
466
+ anywhere!')}
467
+
468
+ INDENT_OK[:multi_line_lonely_parens] =
469
+ %Q{my_method(
470
+ first_argument
471
+ )}
472
+
473
+ INDENT_OK[:multi_line_lonely_parens_with_commas] =
474
+ %Q{my_method(
475
+ first_argument, second_arg,
476
+ third_arg
477
+ )}
478
+
479
+ INDENT_OK[:multi_line_lonely_parens_as_t_string] =
480
+ %Q{%Q(
481
+ this is a t string!
482
+ and i'm not going
483
+ anywhere!'
484
+ )}
485
+
486
+ INDENT_OK[:parens_combo] =
487
+ %Q{(1)
488
+ (
489
+ 1)
490
+ (1
491
+ )
492
+ (
493
+ 1
494
+ )}
495
+
496
+
497
+ #-------------------------------------------------------------------------------
498
+ # Operators
499
+ #-------------------------------------------------------------------------------
500
+ INDENT_OK[:multi_line_ops] =
501
+ %Q{2 -
502
+ 1 -
503
+ 0 +
504
+ 12}
505
+
506
+ INDENT_OK[:multi_line_andop_in_method] =
507
+ %Q{def end_of_multiline_string?(lexed_line_output)
508
+ lexed_line_output.any? { |e| e[1] == :on_tstring_end } &&
509
+ lexed_line_output.none? { |e| e[1] == :on_tstring_beg }
510
+ end}
511
+
512
+ INDENT_OK[:multi_line_rshift_in_method] =
513
+ %Q{rule(:transport_specifier) do
514
+ match('[A-Za-z]').repeat(3).as(:streaming_protocol) >> forward_slash >>
515
+ match('[A-Za-z]').repeat(3).as(:profile) >>
516
+ (forward_slash >> match('[A-Za-z]').repeat(3).as(:transport_protocol)).maybe
517
+ end
518
+
519
+ rule(:interleaved) do
520
+ str('interleaved=') >> number.as(:rtp_channel) >> dash >>
521
+ number.as(:rtcp_channel)
522
+ end
523
+
524
+ rule(:ttl) do
525
+ str('ttl=') >> match('[\d]').repeat(1, 3).as(:ttl)
526
+ end}
527
+
528
+ INDENT_OK[:multi_line_string_concat_with_plus] =
529
+ %Q{DVR_SSDP_NOTIFICATION_TEMPLATE = File.dirname(__FILE__) +
530
+ '/profiles/DVR5000/ssdp_notification.erb'}
531
+
532
+ INDENT_OK[:multi_line_string_concat_with_plus_in_parens] =
533
+ %Q{DVR_CONFIG_RENDERER = Erubis::Eruby.new(File.read File.dirname(__FILE__) +
534
+ '/profiles/DVR5000/device_config.xml.erb')}
535
+
536
+ INDENT_OK[:multi_line_string_concat_twice] =
537
+ %Q{unless Tim::Runner.configuration[:email].nil? ||
538
+ Tim::Runner.configuration[:email].empty?
539
+ Tim::EmailReporter.subject_status ||= subject_status
540
+ @email_reporter.send_email
541
+ end
542
+
543
+ def print_iteration_start iteration_number
544
+ iteration_message = "Running Iteration \#{iteration_number} of " +
545
+ @config[:suite_iterations].to_s
546
+ @logger.info bar(iteration_message)
547
+ end}
548
+
549
+ #-------------------------------------------------------------------------------
550
+ # Method calls
551
+ #-------------------------------------------------------------------------------
552
+ INDENT_OK[:multi_line_method_call] =
553
+ %Q{def initialize(raw_response)
554
+ if raw_response.nil? || raw_response.empty?
555
+ raise RTSP::Error,
556
+ "\#{self.class} received nil string--this shouldn't happen."
557
+ end
558
+
559
+ @raw_response = raw_response
560
+
561
+ head, body = split_head_and_body_from @raw_response
562
+ parse_head(head)
563
+ @body = parse_body(body)
564
+ end}
565
+
566
+ INDENT_OK[:multi_line_method_call_ends_with_period] =
567
+ %Q{unless streamer == MulticastStreamer.instance
568
+ streamer.state = :DISCONNECTED
569
+ UnicastStreamer.pool << streamer unless UnicastStreamer.pool.
570
+ member? streamer
571
+ end}
572
+
573
+ INDENT_OK[:multi_line_method_call_ends_with_many_periods] =
574
+ %Q{my_hashie.first_level.
575
+ second_level.
576
+ third_level}
577
+
578
+ INDENT_OK[:method_closing_lonely_paren] =
579
+ %Q{def your_thing(one
580
+ )
581
+ end}
582
+
583
+ INDENT_OK[:method_lonely_args] =
584
+ %Q{def your_thing(
585
+ one
586
+ )
587
+ puts "stuff"
588
+ end}
589
+
590
+ #------------------------------------------------------------------------------
591
+ # If + logical operators
592
+ #------------------------------------------------------------------------------
593
+ INDENT_OK[:multi_line_if_logical_and] =
594
+ %Q{if @indentation_ruler.op_statement_nesting.empty? &&
595
+ @indentation_ruler.tstring_nesting.empty? &&
596
+ @indentation_ruler.paren_nesting.empty? &&
597
+ @indentation_ruler.brace_nesting.empty? &&
598
+ @indentation_ruler.bracket_nesting.empty?
599
+ if current_line.line_ends_with_comma?
600
+ if @indentation_ruler.last_comma_statement_line.nil?
601
+ @indentation_ruler.increase_next_line
602
+ end
603
+
604
+ @indentation_ruler.last_comma_statement_line = lineno
605
+ log "last: \#{@indentation_ruler.last_comma_statement_line}"
606
+ end
607
+ end}
608
+
609
+ INDENT_OK[:multi_line_each_block] =
610
+ %Q{style.each do |ruler_name, value|
611
+ instance_eval(
612
+ "Tailor::Rulers::\#{camelize(ruler_name.to_s)}Ruler.new(\#{value})"
613
+ )
614
+ parent_ruler.add_child_ruler(ruler)
615
+ end}
616
+
617
+ INDENT_OK[:multi_line_each_block_with_op_and_parens] =
618
+ %Q{style.each do |ruler_name, value|
619
+ ruler =
620
+ instance_eval(
621
+ "Tailor::Rulers::\#{camelize(ruler_name.to_s)}Ruler.new(\#{value})"
622
+ )
623
+ parent_ruler.add_child_ruler(ruler)
624
+ end}
625
+
626
+ INDENT_OK[:do_end_block_in_parens] =
627
+ %Q{begin
628
+ throw(:result, sexp_line.flatten.compact.any? do |s|
629
+ s == MODIFIERS[self]
630
+ end)
631
+ rescue NoMethodError
632
+ end}
633
+
634
+ INDENT_OK[:rparen_and_do_same_line] =
635
+ %Q{opt.on('-c', '--config-file FILE',
636
+ "Use a specific config file.") do |config|
637
+ options.config_file = config
638
+ end}
639
+
640
+ #-------------------------------------------------------------------------------
641
+ # Single-line keywords
642
+ #-------------------------------------------------------------------------------
643
+ INDENT_OK[:single_line_begin_rescue_end] =
644
+ %Q{def log
645
+ l = begin; lineno; rescue; "<EOF>"; end
646
+ c = begin; column; rescue; "<EOF>"; end
647
+ subclass_name = self.class.to_s.sub(/^Tailor::/, '')
648
+ args.first.insert(0, "<\#{subclass_name}> \#{l}[\#{c}]: ")
649
+ Tailor::Logger.log(*args)
650
+ end}
651
+
652
+ #-------------------------------------------------------------------------------
653
+ # Combos
654
+ #-------------------------------------------------------------------------------
655
+ INDENT_OK[:combo1] =
656
+ %Q{def set_default_smtp
657
+ Mail.defaults do
658
+ @config = Tim::Runner.configuration
659
+ delivery_method(:smtp,
660
+ { :address => @config[:smtp_server],
661
+ :port => @config[:smtp_server_port] })
662
+ end
663
+ end}
664
+
665
+ INDENT_OK[:combo2] =
666
+ %Q{class C
667
+
668
+ send :each do
669
+ def foo
670
+ end
671
+ end
672
+
673
+ end}
674
+
675
+ INDENT_OK[:combo3] =
676
+ %Q{def report_turducken(results, performance_results)
677
+ stuffing[:log_files] = { "\#{File.basename @logger.log_file_location}" =>
678
+ File.read(@logger.log_file_location).gsub(/(?<f><)(?<q>\/)?(?<w>\w)/,
679
+ '\k<f>!\k<q>\k<w>') }.merge remote_logs
680
+
681
+ begin
682
+ Stuffer.login(@config[:turducken_server], @config[:turducken_username],
683
+ @config[:turducken_password])
684
+ suite_result_url = Stuffer.stuff(stuffing)
685
+ rescue Errno::ECONNREFUSED
686
+ @logger.error "Unable to connect to Turducken server!"
687
+ end
688
+
689
+ suite_result_url
690
+ end}
691
+
692
+ INDENT_OK[:brace_bracket_paren_combo1] =
693
+ %Q{[{ :one => your_thing(
694
+ 1)
695
+ }
696
+ ]}
697
+
698
+ INDENT_OK[:paren_comma_combo1] =
699
+ %Q{def do_something
700
+ self[:log_file_location] = Time.now.strftime(File.join(Tim::LOG_DIR,
701
+ "\#{self[:product]}_%Y-%m-%d_%H-%M-%S.log"))
702
+
703
+ handle_arguments arg_list
704
+ end}
705
+
706
+ INDENT_OK[:line_ends_with_label] =
707
+ %Q{options = {
708
+ actual_trailing_spaces:
709
+ lexed_line.last_non_line_feed_event.last.size
710
+ }}
711
+
712
+ #-------------------------------------------------------------------------------
713
+ # INDENT_1 (1 problem)
714
+ #-------------------------------------------------------------------------------
715
+ INDENT_1 = {}
716
+
717
+ INDENT_1[:class_indented_end] =
718
+ %Q{class MyClass
719
+ end}
720
+
721
+ INDENT_1[:class_indented_singlestatement] =
722
+ %Q{class MyClass
723
+ include Something
724
+ end}
725
+
726
+ INDENT_1[:class_indented_singlestatement_trailing_comment] =
727
+ %Q{class MyClass
728
+ include Something # comment
729
+ end}
730
+
731
+ INDENT_1[:class_outdented_singlestatement] =
732
+ %Q{class MyClass
733
+ include Something
734
+ end}
735
+
736
+ INDENT_1[:def_indented_end] =
737
+ %Q{def a
738
+ end}
739
+
740
+ INDENT_1[:def_content_indented_end] =
741
+ %Q{def a
742
+ puts "stuff"
743
+ end}
744
+
745
+ INDENT_1[:class_def_content_outdented_end] =
746
+ %Q{class A
747
+ def a
748
+ puts "stuff"
749
+ end
750
+ end}
751
+
752
+ INDENT_1[:class_def_outdented_content] =
753
+ %Q{class A
754
+ def a
755
+ puts "stuff"
756
+ end
757
+ end}
758
+
759
+ INDENT_1[:class_method_def_using_self_outdented] =
760
+ %Q{class A
761
+ self.my_method
762
+ puts 'stuff'
763
+ end
764
+ end}
765
+
766
+ INDENT_1[:case_indented_whens_level] =
767
+ %Q{def my_method
768
+ case true
769
+ when true
770
+ puts "stuff"
771
+ when false
772
+ puts "blah blah"
773
+ end
774
+ end}
775
+
776
+ INDENT_1[:case_indented_whens_level_trailing_comment] =
777
+ %Q{def my_method
778
+ case true # comment
779
+ when true
780
+ puts "stuff"
781
+ when false
782
+ puts "blah blah"
783
+ end
784
+ end}
785
+
786
+ INDENT_1[:case_outdented_whens_level] =
787
+ %Q{def my_method
788
+ case true
789
+ when true
790
+ puts "stuff"
791
+ when false
792
+ puts "blah blah"
793
+ end
794
+ end}
795
+
796
+ INDENT_1[:case_when_indented_whens_level] =
797
+ %Q{def my_method
798
+ case true
799
+ when true
800
+ puts "stuff"
801
+ when false
802
+ puts "blah blah"
803
+ end
804
+ end}
805
+
806
+ INDENT_1[:case_when_outdented_whens_level] =
807
+ %Q{def my_method
808
+ case true
809
+ when true
810
+ puts "stuff"
811
+ when false
812
+ puts "blah blah"
813
+ end
814
+ end}
815
+
816
+ INDENT_1[:case_indented_whens_in] =
817
+ %Q{def my_method
818
+ case true
819
+ when true
820
+ puts "stuff"
821
+ when false
822
+ puts "blah blah"
823
+ end
824
+ end}
825
+
826
+ INDENT_1[:while_do_indented] =
827
+ %Q{ while true do
828
+ puts "something"
829
+ end}
830
+
831
+ INDENT_1[:while_do_outdented] =
832
+ %Q{def my_method
833
+ while true do
834
+ puts "something"
835
+ end
836
+ end}
837
+
838
+ INDENT_1[:while_do_content_outdented] =
839
+ %Q{def my_method
840
+ while true do
841
+ puts "something"
842
+ end
843
+ end}
844
+
845
+ INDENT_1[:while_do_content_indented] =
846
+ %Q{def my_method
847
+ while true do
848
+ puts "something"
849
+ end
850
+ end}
851
+
852
+ INDENT_1[:while_do_indented2] =
853
+ %Q{i = 0;
854
+ num = 5;
855
+
856
+ while i < num do
857
+ puts("Inside the loop i = \#{i}" );
858
+ i +=1;
859
+ end}
860
+
861
+ INDENT_1[:while_do_indented2_trailing_comment] =
862
+ %Q{i = 0;
863
+ num = 5;
864
+
865
+ while i < num do # comment
866
+ puts("Inside the loop i = \#{i}" );
867
+ i +=1;
868
+ end}
869
+
870
+ INDENT_1[:until_do_indented] =
871
+ %Q{i = 0;
872
+ num = 5;
873
+
874
+ until i > num do
875
+ puts("Inside the loop i = \#{i}" );
876
+ i +=1;
877
+ end}
878
+
879
+ INDENT_1[:for_do_indented] =
880
+ %Q{ for i in 1..100 do
881
+ puts i
882
+ end}
883
+
884
+ INDENT_1[:loop_do_indented] =
885
+ %Q{ loop do
886
+ puts 'looping'
887
+ end}
888
+
889
+ INDENT_1[:multi_line_string_first_line_indented] =
890
+ %Q{def a_method
891
+ if defined? Term::ANSIColor
892
+ message << %Q{# \#{(i + 1).to_s.bold}.
893
+ # * position: \#{position}
894
+ # * type: \#{problem[:type].to_s.red}
895
+ # * message: \#{problem[:message].red}
896
+ }
897
+ else
898
+ message << %Q{# \#{(i + 1)}.
899
+ # * position: \#{position}
900
+ # * type: \#{problem[:type]}
901
+ # * message: \#{problem[:message]}
902
+ }
903
+ end
904
+ end}
905
+
906
+ INDENT_1[:multi_line_string_first_line_indented_trailing_comment] =
907
+ %Q{def a_method
908
+ if defined? Term::ANSIColor # comment
909
+ message << %Q{# \#{(i + 1).to_s.bold}.
910
+ # * position: \#{position}
911
+ # * type: \#{problem[:type].to_s.red}
912
+ # * message: \#{problem[:message].red}
913
+ }
914
+ else
915
+ message << %Q{# \#{(i + 1)}.
916
+ # * position: \#{position}
917
+ # * type: \#{problem[:type]}
918
+ # * message: \#{problem[:message]}
919
+ }
920
+ end
921
+ end}
922
+
923
+ #-------------------------------------------------------------------------------
924
+ # Operators
925
+ #-------------------------------------------------------------------------------
926
+ INDENT_1[:multi_line_andop_first_line_indented] =
927
+ %Q{def end_of_multiline_string?(lexed_line_output)
928
+ lexed_line_output.any? { |e| e[1] == :on_tstring_end } &&
929
+ lexed_line_output.none? { |e| e[1] == :on_tstring_beg }
930
+ end}
931
+
932
+ INDENT_1[:multi_line_andop_first_line_indented_trailing_comment] =
933
+ %Q{def end_of_multiline_string?(lexed_line_output)
934
+ lexed_line_output.any? { |e| e[1] == :on_tstring_end } && # comment
935
+ lexed_line_output.none? { |e| e[1] == :on_tstring_beg }
936
+ end}
937
+
938
+ INDENT_1[:multi_line_andop_second_line_indented] =
939
+ %Q{def end_of_multiline_string?(lexed_line_output)
940
+ lexed_line_output.any? { |e| e[1] == :on_tstring_end } &&
941
+ lexed_line_output.none? { |e| e[1] == :on_tstring_beg }
942
+ end}
943
+
944
+ INDENT_1[:multi_line_string_concat_with_plus_out] =
945
+ %Q{DVR_SSDP_NOTIFICATION_TEMPLATE = File.dirname(__FILE__) +
946
+ '/profiles/DVR5000/ssdp_notification.erb'}
947
+
948
+ INDENT_1[:multi_line_method_call_end_in] =
949
+ %Q{def initialize(raw_response)
950
+ if raw_response.nil? || raw_response.empty?
951
+ raise RTSP::Error,
952
+ "#{self.class} received nil string--this shouldn't happen."
953
+ end
954
+ end}
955
+
956
+ INDENT_1[:multi_line_method_call_ends_with_period_2nd_line_in] =
957
+ %Q{unless streamer == MulticastStreamer.instance
958
+ streamer.state = :DISCONNECTED
959
+ UnicastStreamer.pool << streamer unless UnicastStreamer.pool.
960
+ member? streamer
961
+ end}
962
+
963
+ INDENT_1[:multi_line_method_call_ends_with_many_periods_last_in] =
964
+ %Q{my_hashie.first_level.
965
+ second_level.
966
+ third_level}
967
+
968
+ INDENT_1[:multi_line_method_call_ends_with_many_periods_last_in_trailing_comment] =
969
+ %Q{my_hashie.first_level.
970
+ second_level.
971
+ third_level # comment}
972
+