tailor 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. data/.tailor +1 -0
  2. data/Gemfile.lock +1 -1
  3. data/History.rdoc +34 -0
  4. data/README.rdoc +17 -1
  5. data/features/valid_ruby.feature +1 -1
  6. data/lib/ext/string_ext.rb +0 -4
  7. data/lib/tailor/cli/options.rb +9 -2
  8. data/lib/tailor/configuration.rb +103 -150
  9. data/lib/tailor/configuration/file_set.rb +110 -0
  10. data/lib/tailor/formatters/text.rb +108 -79
  11. data/lib/tailor/rake_task.rb +148 -0
  12. data/lib/tailor/tailorrc.erb +1 -1
  13. data/lib/tailor/version.rb +1 -1
  14. data/spec/functional/configuration_spec.rb +244 -0
  15. data/spec/functional/horizontal_spacing/braces_spec.rb +238 -0
  16. data/spec/functional/horizontal_spacing/brackets_spec.rb +88 -0
  17. data/spec/functional/horizontal_spacing/comma_spacing_spec.rb +68 -0
  18. data/spec/functional/horizontal_spacing/hard_tabs_spec.rb +110 -0
  19. data/spec/functional/horizontal_spacing/long_lines_spec.rb +51 -0
  20. data/spec/functional/horizontal_spacing/parens_spec.rb +102 -0
  21. data/spec/functional/horizontal_spacing/trailing_whitespace_spec.rb +66 -0
  22. data/spec/functional/horizontal_spacing_spec.rb +59 -0
  23. data/spec/functional/indentation_spacing/bad_indentation_spec.rb +372 -0
  24. data/spec/functional/indentation_spacing_spec.rb +85 -0
  25. data/spec/functional/naming/camel_case_methods_spec.rb +56 -0
  26. data/spec/functional/naming/screaming_snake_case_classes_spec.rb +83 -0
  27. data/spec/functional/naming_spec.rb +35 -0
  28. data/spec/functional/vertical_spacing/class_length_spec.rb +67 -0
  29. data/spec/functional/vertical_spacing/method_length_spec.rb +61 -0
  30. data/spec/functional/vertical_spacing_spec.rb +35 -0
  31. data/spec/support/bad_indentation_cases.rb +265 -0
  32. data/{features/support/file_cases/indentation_cases.rb → spec/support/good_indentation_cases.rb} +6 -266
  33. data/spec/support/horizontal_spacing_cases.rb +136 -0
  34. data/spec/support/naming_cases.rb +26 -0
  35. data/{features/support/file_cases → spec/support}/vertical_spacing_cases.rb +0 -33
  36. data/spec/{tailor → unit/tailor}/cli_spec.rb +1 -1
  37. data/spec/{tailor → unit/tailor}/composite_observable_spec.rb +1 -1
  38. data/spec/unit/tailor/configuration/file_set_spec.rb +65 -0
  39. data/spec/{tailor → unit/tailor}/configuration/style_spec.rb +1 -1
  40. data/spec/{tailor → unit/tailor}/configuration_spec.rb +1 -59
  41. data/spec/{tailor → unit/tailor}/critic_spec.rb +1 -1
  42. data/spec/{tailor → unit/tailor}/formatter_spec.rb +1 -1
  43. data/spec/{tailor → unit/tailor}/lexed_line_spec.rb +1 -1
  44. data/spec/{tailor → unit/tailor}/lexer/token_spec.rb +1 -1
  45. data/spec/{tailor → unit/tailor}/lexer_spec.rb +1 -2
  46. data/spec/{tailor → unit/tailor}/options_spec.rb +1 -1
  47. data/spec/{tailor → unit/tailor}/problem_spec.rb +1 -1
  48. data/spec/{tailor → unit/tailor}/reporter_spec.rb +1 -1
  49. data/spec/{tailor → unit/tailor}/ruler_spec.rb +1 -1
  50. data/spec/{tailor → unit/tailor}/rulers/indentation_spaces_ruler/indentation_manager_spec.rb +1 -1
  51. data/spec/{tailor → unit/tailor}/rulers/indentation_spaces_ruler_spec.rb +1 -1
  52. data/spec/{tailor → unit/tailor}/rulers/spaces_after_comma_ruler_spec.rb +1 -1
  53. data/spec/{tailor → unit/tailor}/rulers/spaces_after_lbrace_ruler_spec.rb +1 -1
  54. data/spec/{tailor → unit/tailor}/rulers/spaces_before_lbrace_ruler_spec.rb +1 -1
  55. data/spec/{tailor → unit/tailor}/rulers/spaces_before_rbrace_ruler_spec.rb +1 -1
  56. data/spec/{tailor → unit/tailor}/rulers_spec.rb +1 -1
  57. data/spec/unit/tailor/version_spec.rb +6 -0
  58. data/spec/{tailor_spec.rb → unit/tailor_spec.rb} +1 -1
  59. data/tasks/spec.rake +8 -3
  60. metadata +121 -93
  61. data/features/horizontal_spacing.feature +0 -263
  62. data/features/indentation/bad_files_with_no_trailing_newline.feature +0 -91
  63. data/features/indentation/good_files_with_no_trailing_newline.feature +0 -219
  64. data/features/name_detection.feature +0 -72
  65. data/features/support/file_cases/horizontal_spacing_cases.rb +0 -266
  66. data/features/support/file_cases/naming_cases.rb +0 -51
  67. data/features/vertical_spacing.feature +0 -135
  68. data/m.rb +0 -15
  69. data/spec/tailor/version_spec.rb +0 -6
@@ -0,0 +1,56 @@
1
+ require_relative '../../spec_helper'
2
+ require 'tailor/critic'
3
+ require 'tailor/configuration/style'
4
+
5
+
6
+ CAMEL_CASE_METHODS = {}
7
+
8
+ CAMEL_CASE_METHODS[:one_caps_camel_case_method] =
9
+ %Q{def thingOne
10
+ end}
11
+
12
+ CAMEL_CASE_METHODS[:one_caps_camel_case_method_trailing_comment] =
13
+ %Q{def thingOne # comment
14
+ end}
15
+
16
+
17
+ describe "Detection of camel case methods" do
18
+ before do
19
+ Tailor::Logger.stub(:log)
20
+ FakeFS.activate!
21
+ File.open(file_name.to_s, 'w') { |f| f.write contents }
22
+ critic.check_file(file_name.to_s, style.to_hash)
23
+ end
24
+
25
+ let(:critic) do
26
+ Tailor::Critic.new
27
+ end
28
+
29
+ let(:contents) { CAMEL_CASE_METHODS[file_name] }
30
+
31
+ let(:style) do
32
+ style = Tailor::Configuration::Style.new
33
+ style.trailing_newlines 0, level: :off
34
+ style.allow_invalid_ruby true, level: :off
35
+
36
+ style
37
+ end
38
+
39
+ context "standard camel case method" do
40
+ let(:file_name) { :one_caps_camel_case_method }
41
+ specify { critic.problems[file_name.to_s].size.should be 1 }
42
+ specify { critic.problems[file_name.to_s].first[:type].should == "allow_camel_case_methods" }
43
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
44
+ specify { critic.problems[file_name.to_s].first[:column].should be 4 }
45
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
46
+ end
47
+
48
+ context "standard camel case method, trailing comment" do
49
+ let(:file_name) { :one_caps_camel_case_method_trailing_comment }
50
+ specify { critic.problems[file_name.to_s].size.should be 1 }
51
+ specify { critic.problems[file_name.to_s].first[:type].should == "allow_camel_case_methods" }
52
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
53
+ specify { critic.problems[file_name.to_s].first[:column].should be 4 }
54
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
55
+ end
56
+ end
@@ -0,0 +1,83 @@
1
+ require_relative '../../spec_helper'
2
+ require 'tailor/critic'
3
+ require 'tailor/configuration/style'
4
+
5
+
6
+ SCREAMING_SNAKE_CASE_CLASSES = {}
7
+
8
+ SCREAMING_SNAKE_CASE_CLASSES[:one_screaming_snake_case_class] =
9
+ %Q{class Thing_One
10
+ end}
11
+
12
+ SCREAMING_SNAKE_CASE_CLASSES[:one_screaming_snake_case_module] =
13
+ %Q{module Thing_One
14
+ end}
15
+
16
+ SCREAMING_SNAKE_CASE_CLASSES[:double_screaming_snake_case_class] =
17
+ %Q{class Thing_One_Again
18
+ end}
19
+
20
+ SCREAMING_SNAKE_CASE_CLASSES[:double_screaming_snake_case_module] =
21
+ %Q{module Thing_One_Again
22
+ end}
23
+
24
+
25
+
26
+ describe "Detection of camel case methods" do
27
+ before do
28
+ Tailor::Logger.stub(:log)
29
+ FakeFS.activate!
30
+ File.open(file_name.to_s, 'w') { |f| f.write contents }
31
+ critic.check_file(file_name.to_s, style.to_hash)
32
+ end
33
+
34
+ let(:critic) do
35
+ Tailor::Critic.new
36
+ end
37
+
38
+ let(:contents) { SCREAMING_SNAKE_CASE_CLASSES[file_name] }
39
+
40
+ let(:style) do
41
+ style = Tailor::Configuration::Style.new
42
+ style.trailing_newlines 0, level: :off
43
+ style.allow_invalid_ruby true, level: :off
44
+
45
+ style
46
+ end
47
+
48
+ context "standard screaming snake case class" do
49
+ let(:file_name) { :one_screaming_snake_case_class }
50
+ specify { critic.problems[file_name.to_s].size.should be 1 }
51
+ specify { critic.problems[file_name.to_s].first[:type].should == "allow_screaming_snake_case_classes" }
52
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
53
+ specify { critic.problems[file_name.to_s].first[:column].should be 6 }
54
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
55
+ end
56
+
57
+ context "standard screaming snake case module" do
58
+ let(:file_name) { :one_screaming_snake_case_module }
59
+ specify { critic.problems[file_name.to_s].size.should be 1 }
60
+ specify { critic.problems[file_name.to_s].first[:type].should == "allow_screaming_snake_case_classes" }
61
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
62
+ specify { critic.problems[file_name.to_s].first[:column].should be 7 }
63
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
64
+ end
65
+
66
+ context "double screaming snake case class" do
67
+ let(:file_name) { :double_screaming_snake_case_class }
68
+ specify { critic.problems[file_name.to_s].size.should be 1 }
69
+ specify { critic.problems[file_name.to_s].first[:type].should == "allow_screaming_snake_case_classes" }
70
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
71
+ specify { critic.problems[file_name.to_s].first[:column].should be 6 }
72
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
73
+ end
74
+
75
+ context "double screaming snake case module" do
76
+ let(:file_name) { :double_screaming_snake_case_module }
77
+ specify { critic.problems[file_name.to_s].size.should be 1 }
78
+ specify { critic.problems[file_name.to_s].first[:type].should == "allow_screaming_snake_case_classes" }
79
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
80
+ specify { critic.problems[file_name.to_s].first[:column].should be 7 }
81
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
82
+ end
83
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../spec_helper'
2
+ require_relative '../support/naming_cases'
3
+ require 'tailor/critic'
4
+ require 'tailor/configuration/style'
5
+
6
+ describe "Naming problem detection" do
7
+ before do
8
+ Tailor::Logger.stub(:log)
9
+ FakeFS.activate!
10
+ end
11
+
12
+ let(:critic) do
13
+ Tailor::Critic.new
14
+ end
15
+
16
+ let(:style) do
17
+ style = Tailor::Configuration::Style.new
18
+ style.trailing_newlines 0, level: :off
19
+ style.allow_invalid_ruby true, level: :off
20
+
21
+ style
22
+ end
23
+
24
+ NAMING_OK.each do |file_name, contents|
25
+ before do
26
+ FileUtils.touch file_name.to_s
27
+ File.open(file_name.to_s, 'w') { |f| f.write contents }
28
+ end
29
+
30
+ it "should be OK" do
31
+ critic.check_file(file_name.to_s, style.to_hash)
32
+ critic.problems.should == { file_name.to_s => [] }
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,67 @@
1
+ require_relative '../../spec_helper'
2
+ require 'tailor/critic'
3
+ require 'tailor/configuration/style'
4
+
5
+
6
+ CLASS_LENGTH = {}
7
+ CLASS_LENGTH[:class_too_long] =
8
+ %Q{class Party
9
+ include Clowns
10
+ include Pizza
11
+
12
+ def barrel_roll
13
+ puts "DOABARRELROLL!"
14
+ end
15
+ end}
16
+
17
+ CLASS_LENGTH[:parent_class_too_long] =
18
+ %Q{class Party
19
+
20
+ class Pizza
21
+ include Cheese
22
+ include Yumminess
23
+ end
24
+ end}
25
+
26
+
27
+ describe "Detection of class length" do
28
+ before do
29
+ Tailor::Logger.stub(:log)
30
+ FakeFS.activate!
31
+ File.open(file_name.to_s, 'w') { |f| f.write contents }
32
+ critic.check_file(file_name.to_s, style.to_hash)
33
+ end
34
+
35
+ let(:critic) do
36
+ Tailor::Critic.new
37
+ end
38
+
39
+ let(:contents) { CLASS_LENGTH[file_name] }
40
+
41
+ let(:style) do
42
+ style = Tailor::Configuration::Style.new
43
+ style.trailing_newlines 0, level: :off
44
+ style.allow_invalid_ruby true, level: :off
45
+ style.max_code_lines_in_class 5
46
+
47
+ style
48
+ end
49
+
50
+ context "single class" do
51
+ let(:file_name) { :class_too_long }
52
+ specify { critic.problems[file_name.to_s].size.should be 1 }
53
+ specify { critic.problems[file_name.to_s].first[:type].should == "max_code_lines_in_class" }
54
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
55
+ specify { critic.problems[file_name.to_s].first[:column].should be 0 }
56
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
57
+ end
58
+
59
+ context "class in a class" do
60
+ let(:file_name) { :parent_class_too_long }
61
+ specify { critic.problems[file_name.to_s].size.should be 1 }
62
+ specify { critic.problems[file_name.to_s].first[:type].should == "max_code_lines_in_class" }
63
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
64
+ specify { critic.problems[file_name.to_s].first[:column].should be 0 }
65
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
66
+ end
67
+ end
@@ -0,0 +1,61 @@
1
+ require_relative '../../spec_helper'
2
+ require 'tailor/critic'
3
+ require 'tailor/configuration/style'
4
+
5
+
6
+ METHOD_LENGTH = {}
7
+ METHOD_LENGTH[:method_too_long] =
8
+ %Q{def thing
9
+ puts
10
+ puts
11
+ end}
12
+
13
+ METHOD_LENGTH[:parent_method_too_long] =
14
+ %Q{def thing
15
+ puts
16
+ def inner_thing; print '1'; end
17
+ puts
18
+ end}
19
+
20
+
21
+ describe "Detection of method length" do
22
+ before do
23
+ Tailor::Logger.stub(:log)
24
+ FakeFS.activate!
25
+ File.open(file_name.to_s, 'w') { |f| f.write contents }
26
+ critic.check_file(file_name.to_s, style.to_hash)
27
+ end
28
+
29
+ let(:critic) do
30
+ Tailor::Critic.new
31
+ end
32
+
33
+ let(:contents) { METHOD_LENGTH[file_name] }
34
+
35
+ let(:style) do
36
+ style = Tailor::Configuration::Style.new
37
+ style.trailing_newlines 0, level: :off
38
+ style.allow_invalid_ruby true, level: :off
39
+ style.max_code_lines_in_method 3
40
+
41
+ style
42
+ end
43
+
44
+ context "single class too long" do
45
+ let(:file_name) { :method_too_long }
46
+ specify { critic.problems[file_name.to_s].size.should be 1 }
47
+ specify { critic.problems[file_name.to_s].first[:type].should == "max_code_lines_in_method" }
48
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
49
+ specify { critic.problems[file_name.to_s].first[:column].should be 0 }
50
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
51
+ end
52
+
53
+ context "method in a method" do
54
+ let(:file_name) { :method_too_long }
55
+ specify { critic.problems[file_name.to_s].size.should be 1 }
56
+ specify { critic.problems[file_name.to_s].first[:type].should == "max_code_lines_in_method" }
57
+ specify { critic.problems[file_name.to_s].first[:line].should be 1 }
58
+ specify { critic.problems[file_name.to_s].first[:column].should be 0 }
59
+ specify { critic.problems[file_name.to_s].first[:level].should be :error }
60
+ end
61
+ end
@@ -0,0 +1,35 @@
1
+ require_relative '../spec_helper'
2
+ require_relative '../support/vertical_spacing_cases'
3
+ require 'tailor/critic'
4
+ require 'tailor/configuration/style'
5
+
6
+ describe "Vertical Space problem detection" do
7
+ before do
8
+ Tailor::Logger.stub(:log)
9
+ FakeFS.activate!
10
+ end
11
+
12
+ let(:critic) do
13
+ Tailor::Critic.new
14
+ end
15
+
16
+ let(:style) do
17
+ style = Tailor::Configuration::Style.new
18
+ style.trailing_newlines 0, level: :off
19
+ style.allow_invalid_ruby true, level: :off
20
+
21
+ style
22
+ end
23
+
24
+ V_SPACING_OK.each do |file_name, contents|
25
+ before do
26
+ FileUtils.touch file_name.to_s
27
+ File.open(file_name.to_s, 'w') { |f| f.write contents }
28
+ end
29
+
30
+ it "should be OK" do
31
+ critic.check_file(file_name.to_s, style.to_hash)
32
+ critic.problems.should == { file_name.to_s => [] }
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,265 @@
1
+ #-------------------------------------------------------------------------------
2
+ # INDENT_1 (1 problem)
3
+ #-------------------------------------------------------------------------------
4
+ INDENT_1 = {}
5
+
6
+ INDENT_1[:class_indented_end] =
7
+ %Q{class MyClass
8
+ end}
9
+
10
+ INDENT_1[:class_indented_single_statement] =
11
+ %Q{class MyClass
12
+ include Something
13
+ end}
14
+
15
+ INDENT_1[:class_indented_single_statement_trailing_comment] =
16
+ %Q{class MyClass
17
+ include Something # comment
18
+ end}
19
+
20
+ INDENT_1[:class_outdented_single_statement] =
21
+ %Q{class MyClass
22
+ include Something
23
+ end}
24
+
25
+ INDENT_1[:def_indented_end] =
26
+ %Q{def a
27
+ end}
28
+
29
+ INDENT_1[:def_content_indented_end] =
30
+ %Q{def a
31
+ puts "stuff"
32
+ end}
33
+
34
+ INDENT_1[:class_def_content_outdented_end] =
35
+ %Q{class A
36
+ def a
37
+ puts "stuff"
38
+ end
39
+ end}
40
+
41
+ INDENT_1[:class_def_outdented_content] =
42
+ %Q{class A
43
+ def a
44
+ puts "stuff"
45
+ end
46
+ end}
47
+
48
+ INDENT_1[:class_method_def_using_self_outdented] =
49
+ %Q{class A
50
+ self.my_method
51
+ puts 'stuff'
52
+ end
53
+ end}
54
+
55
+ INDENT_1[:case_indented_whens_level] =
56
+ %Q{def my_method
57
+ case true
58
+ when true
59
+ puts "stuff"
60
+ when false
61
+ puts "blah blah"
62
+ end
63
+ end}
64
+
65
+ INDENT_1[:case_indented_whens_level_trailing_comment] =
66
+ %Q{def my_method
67
+ case true # comment
68
+ when true
69
+ puts "stuff"
70
+ when false
71
+ puts "blah blah"
72
+ end
73
+ end}
74
+
75
+ INDENT_1[:case_outdented_whens_level] =
76
+ %Q{def my_method
77
+ case true
78
+ when true
79
+ puts "stuff"
80
+ when false
81
+ puts "blah blah"
82
+ end
83
+ end}
84
+
85
+ INDENT_1[:case_when_indented_whens_level] =
86
+ %Q{def my_method
87
+ case true
88
+ when true
89
+ puts "stuff"
90
+ when false
91
+ puts "blah blah"
92
+ end
93
+ end}
94
+
95
+ INDENT_1[:case_when_outdented_whens_level] =
96
+ %Q{def my_method
97
+ case true
98
+ when true
99
+ puts "stuff"
100
+ when false
101
+ puts "blah blah"
102
+ end
103
+ end}
104
+
105
+ INDENT_1[:case_indented_whens_in] =
106
+ %Q{def my_method
107
+ case true
108
+ when true
109
+ puts "stuff"
110
+ when false
111
+ puts "blah blah"
112
+ end
113
+ end}
114
+
115
+ INDENT_1[:while_do_indented] =
116
+ %Q{ while true do
117
+ puts "something"
118
+ end}
119
+
120
+ INDENT_1[:while_do_outdented] =
121
+ %Q{def my_method
122
+ while true do
123
+ puts "something"
124
+ end
125
+ end}
126
+
127
+ INDENT_1[:while_do_content_outdented] =
128
+ %Q{def my_method
129
+ while true do
130
+ puts "something"
131
+ end
132
+ end}
133
+
134
+ INDENT_1[:while_do_content_indented] =
135
+ %Q{def my_method
136
+ while true do
137
+ puts "something"
138
+ end
139
+ end}
140
+
141
+ INDENT_1[:while_do_indented2] =
142
+ %Q{i = 0;
143
+ num = 5;
144
+
145
+ while i < num do
146
+ puts("Inside the loop i = \#{i}");
147
+ i +=1;
148
+ end}
149
+
150
+ INDENT_1[:while_do_indented2_trailing_comment] =
151
+ %Q{i = 0;
152
+ num = 5;
153
+
154
+ while i < num do # comment
155
+ puts("Inside the loop i = \#{i}");
156
+ i +=1;
157
+ end}
158
+
159
+ INDENT_1[:until_do_indented] =
160
+ %Q{i = 0;
161
+ num = 5;
162
+
163
+ until i > num do
164
+ puts("Inside the loop i = \#{i}");
165
+ i +=1;
166
+ end}
167
+
168
+ INDENT_1[:for_do_indented] =
169
+ %Q{ for i in 1..100 do
170
+ puts i
171
+ end}
172
+
173
+ INDENT_1[:loop_do_indented] =
174
+ %Q{ loop do
175
+ puts 'looping'
176
+ end}
177
+
178
+ INDENT_1[:if_line_indented] =
179
+ %Q{def a_method
180
+ if defined? Term::ANSIColor
181
+ message << %Q{# \#{(i + 1).to_s.bold}.
182
+ # * position: \#{position}
183
+ # * type: \#{problem[:type].to_s.red}
184
+ # * message: \#{problem[:message].red}
185
+ }
186
+ else
187
+ message << %Q{# \#{(i + 1)}.
188
+ # * position: \#{position}
189
+ # * type: \#{problem[:type]}
190
+ # * message: \#{problem[:message]}
191
+ }
192
+ end
193
+ end}
194
+
195
+ INDENT_1[:if_line_indented_trailing_comment] =
196
+ %Q{def a_method
197
+ if defined? Term::ANSIColor # comment
198
+ message << %Q{# \#{(i + 1).to_s.bold}.
199
+ # * position: \#{position}
200
+ # * type: \#{problem[:type].to_s.red}
201
+ # * message: \#{problem[:message].red}
202
+ }
203
+ else
204
+ message << %Q{# \#{(i + 1)}.
205
+ # * position: \#{position}
206
+ # * type: \#{problem[:type]}
207
+ # * message: \#{problem[:message]}
208
+ }
209
+ end
210
+ end}
211
+
212
+ INDENT_1[:multi_line_tstring] =
213
+ %Q{INDENT_OK[:class] =
214
+ %Q{class MyClass
215
+ end}}
216
+
217
+ #-------------------------------------------------------------------------------
218
+ # Operators
219
+ #-------------------------------------------------------------------------------
220
+ INDENT_1[:multi_line_andop_first_line_indented] =
221
+ %Q{def end_of_multiline_string?(lexed_line_output)
222
+ lexed_line_output.any? { |e| e[1] == :on_tstring_end } &&
223
+ lexed_line_output.none? { |e| e[1] == :on_tstring_beg }
224
+ end}
225
+
226
+ INDENT_1[:multi_line_andop_first_line_indented_trailing_comment] =
227
+ %Q{def end_of_multiline_string?(lexed_line_output)
228
+ lexed_line_output.any? { |e| e[1] == :on_tstring_end } && # comment
229
+ lexed_line_output.none? { |e| e[1] == :on_tstring_beg }
230
+ end}
231
+
232
+ INDENT_1[:multi_line_andop_second_line_indented] =
233
+ %Q{def end_of_multiline_string?(lexed_line_output)
234
+ lexed_line_output.any? { |e| e[1] == :on_tstring_end } &&
235
+ lexed_line_output.none? { |e| e[1] == :on_tstring_beg }
236
+ end}
237
+
238
+ INDENT_1[:multi_line_string_concat_with_plus_out] =
239
+ %Q{DVR_SSDP_NOTIFICATION_TEMPLATE = File.dirname(__FILE__) +
240
+ '/profiles/DVR5000/ssdp_notification.erb'}
241
+
242
+ INDENT_1[:multi_line_method_call_end_in] =
243
+ %Q{def initialize(raw_response)
244
+ if raw_response.nil? || raw_response.empty?
245
+ raise RTSP::Error,
246
+ "#{self.class} received nil string--this shouldn't happen."
247
+ end
248
+ end}
249
+
250
+ INDENT_1[:multi_line_method_call_ends_with_period_2nd_line_in] =
251
+ %Q{unless streamer == MulticastStreamer.instance
252
+ streamer.state = :DISCONNECTED
253
+ UnicastStreamer.pool << streamer unless UnicastStreamer.pool.
254
+ member? streamer
255
+ end}
256
+
257
+ INDENT_1[:multi_line_method_call_ends_with_many_periods_last_in] =
258
+ %Q{my_hashie.first_level.
259
+ second_level.
260
+ third_level}
261
+
262
+ INDENT_1[:multi_line_method_call_ends_with_many_periods_last_in_trailing_comment] =
263
+ %Q{my_hashie.first_level.
264
+ second_level.
265
+ third_level # comment}