tailor 1.0.0.alpha2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/.gitignore +1 -0
  2. data/.tailor +10 -2
  3. data/Gemfile.lock +2 -2
  4. data/History.rdoc +20 -0
  5. data/README.rdoc +176 -26
  6. data/features/configurable.feature +19 -39
  7. data/features/horizontal_spacing.feature +3 -2
  8. data/features/indentation.feature +2 -2
  9. data/features/indentation/bad_files_with_no_trailing_newline.feature +9 -8
  10. data/features/indentation/good_files_with_no_trailing_newline.feature +19 -6
  11. data/features/name_detection.feature +2 -2
  12. data/features/support/env.rb +0 -2
  13. data/features/support/file_cases/horizontal_spacing_cases.rb +5 -4
  14. data/features/support/file_cases/indentation_cases.rb +105 -54
  15. data/features/support/file_cases/naming_cases.rb +0 -1
  16. data/features/support/file_cases/vertical_spacing_cases.rb +0 -1
  17. data/features/support/legacy/bad_ternary_colon_spacing.rb +1 -1
  18. data/features/valid_ruby.feature +17 -0
  19. data/features/vertical_spacing.feature +40 -19
  20. data/lib/ext/string_ext.rb +12 -0
  21. data/lib/tailor/cli.rb +7 -5
  22. data/lib/tailor/cli/options.rb +13 -3
  23. data/lib/tailor/composite_observable.rb +17 -2
  24. data/lib/tailor/configuration.rb +83 -72
  25. data/lib/tailor/configuration/style.rb +85 -0
  26. data/lib/tailor/critic.rb +67 -117
  27. data/lib/tailor/formatter.rb +38 -0
  28. data/lib/tailor/formatters/text.rb +35 -10
  29. data/lib/tailor/lexed_line.rb +38 -5
  30. data/lib/tailor/lexer.rb +150 -14
  31. data/lib/tailor/{lexer_constants.rb → lexer/lexer_constants.rb} +9 -7
  32. data/lib/tailor/lexer/token.rb +6 -2
  33. data/lib/tailor/logger.rb +4 -0
  34. data/lib/tailor/problem.rb +8 -73
  35. data/lib/tailor/reporter.rb +1 -1
  36. data/lib/tailor/ruler.rb +67 -6
  37. data/lib/tailor/rulers/allow_camel_case_methods_ruler.rb +9 -1
  38. data/lib/tailor/rulers/allow_hard_tabs_ruler.rb +9 -1
  39. data/lib/tailor/rulers/allow_invalid_ruby_ruler.rb +38 -0
  40. data/lib/tailor/rulers/allow_screaming_snake_case_classes_ruler.rb +9 -2
  41. data/lib/tailor/rulers/allow_trailing_line_spaces_ruler.rb +10 -5
  42. data/lib/tailor/rulers/indentation_spaces_ruler.rb +93 -26
  43. data/lib/tailor/rulers/indentation_spaces_ruler/indentation_manager.rb +128 -84
  44. data/lib/tailor/rulers/max_code_lines_in_class_ruler.rb +9 -5
  45. data/lib/tailor/rulers/max_code_lines_in_method_ruler.rb +9 -5
  46. data/lib/tailor/rulers/max_line_length_ruler.rb +10 -5
  47. data/lib/tailor/rulers/spaces_after_comma_ruler.rb +13 -4
  48. data/lib/tailor/rulers/spaces_after_lbrace_ruler.rb +8 -4
  49. data/lib/tailor/rulers/spaces_after_lbracket_ruler.rb +8 -4
  50. data/lib/tailor/rulers/spaces_after_lparen_ruler.rb +8 -4
  51. data/lib/tailor/rulers/spaces_before_comma_ruler.rb +8 -4
  52. data/lib/tailor/rulers/spaces_before_lbrace_ruler.rb +13 -6
  53. data/lib/tailor/rulers/spaces_before_rbrace_ruler.rb +12 -8
  54. data/lib/tailor/rulers/spaces_before_rbracket_ruler.rb +12 -5
  55. data/lib/tailor/rulers/spaces_before_rparen_ruler.rb +13 -6
  56. data/lib/tailor/rulers/spaces_in_empty_braces_ruler.rb +13 -9
  57. data/lib/tailor/rulers/trailing_newlines_ruler.rb +10 -5
  58. data/lib/tailor/tailorrc.erb +3 -3
  59. data/lib/tailor/version.rb +1 -1
  60. data/m.rb +15 -0
  61. data/spec/spec_helper.rb +0 -1
  62. data/spec/tailor/cli_spec.rb +8 -9
  63. data/spec/tailor/composite_observable_spec.rb +41 -0
  64. data/spec/tailor/configuration/style_spec.rb +197 -0
  65. data/spec/tailor/configuration_spec.rb +52 -33
  66. data/spec/tailor/critic_spec.rb +7 -8
  67. data/spec/tailor/formatter_spec.rb +52 -0
  68. data/spec/tailor/lexed_line_spec.rb +236 -88
  69. data/spec/tailor/lexer_spec.rb +8 -63
  70. data/spec/tailor/problem_spec.rb +14 -46
  71. data/spec/tailor/reporter_spec.rb +8 -8
  72. data/spec/tailor/ruler_spec.rb +1 -1
  73. data/spec/tailor/rulers/indentation_spaces_ruler/indentation_manager_spec.rb +132 -176
  74. data/spec/tailor/rulers/indentation_spaces_ruler_spec.rb +41 -33
  75. data/spec/tailor/rulers/{spaces_after_comma_spec.rb → spaces_after_comma_ruler_spec.rb} +5 -5
  76. data/spec/tailor/rulers/spaces_after_lbrace_ruler_spec.rb +14 -14
  77. data/spec/tailor/rulers/spaces_before_lbrace_ruler_spec.rb +1 -1
  78. data/spec/tailor/rulers/spaces_before_rbrace_ruler_spec.rb +1 -1
  79. data/spec/tailor/version_spec.rb +1 -1
  80. data/spec/tailor_spec.rb +3 -1
  81. data/tailor.gemspec +11 -3
  82. data/uest.rb +9 -0
  83. metadata +66 -41
  84. data/features/step_definitions/spacing/commas_steps.rb +0 -14
data/.gitignore CHANGED
@@ -5,6 +5,7 @@
5
5
  .yardoc/
6
6
  logic.txt
7
7
  output.txt
8
+ test.rb
8
9
 
9
10
  .bundle/
10
11
  .idea/
data/.tailor CHANGED
@@ -1,6 +1,14 @@
1
1
  Tailor.config do |config|
2
2
  config.formatters "text"
3
3
  config.file_set 'lib/**/*.rb'
4
- config.file_set 'spec/**/*.rb'
5
- config.file_set 'features/**/*.rb'
4
+
5
+ config.file_set 'features/**/*.rb', :features do |style|
6
+ style.max_line_length 90, level: :warn
7
+ end
8
+
9
+ config.file_set 'spec/**/*.rb', :spec do |style|
10
+ style.spaces_after_lbrace 1, level: :warn
11
+ style.spaces_before_lbrace 1, level: :warn
12
+ style.spaces_before_rbrace 1, level: :warn
13
+ end
6
14
  end
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- tailor (1.0.0.alpha)
5
- log_switch (>= 0.2.0)
4
+ tailor (1.0.0)
5
+ log_switch (>= 0.3.0)
6
6
  term-ansicolor (>= 1.0.5)
7
7
  text-table (>= 1.2.2)
8
8
 
data/History.rdoc CHANGED
@@ -1,3 +1,23 @@
1
+ === 1.0.0 2012-04-17
2
+
3
+ * Big update to config file.
4
+ * Fix for indentation checking on nested Hashes.
5
+ * Fix for overriding default style in config files.
6
+ * Fix to exit after --show-config.
7
+ * gh-99[https://github.com/turboladen/tailor/issues/99]
8
+ * Now warns by default if `ruby -c [file]` fails.
9
+ * gh-93[https://github.com/turboladen/tailor/issues/93]
10
+ * 2 'end's on the same line don't cause an indentation error.
11
+ * gh-92[https://github.com/turboladen/tailor/issues/92]
12
+ * Users can now turn off a ruler...
13
+ * CLI: <tt>--my-option off</tt>
14
+ * Config file: <tt>my_option 1, level: :off</tt>
15
+ * gh-86[https://github.com/turboladen/tailor/issues/86]
16
+ * Indentation checking implemented.
17
+ * gh-68[https://github.com/turboladen/tailor/issues/68]
18
+ * Spaces aren't improperly detected after a token when the line ends with a
19
+ backslash.
20
+
1
21
  === 1.0.0.alpha2 2012-04-09
2
22
 
3
23
  * Fix for when not using a config file.
data/README.rdoc CHANGED
@@ -4,11 +4,14 @@
4
4
 
5
5
  == DESCRIPTION:
6
6
 
7
- tailor recursively parses Ruby files in a directory and checks them for bad
8
- style. Rules for judging style are based on a number of style guides that are
9
- popular in the Ruby community. More on this here
7
+ tailor parses Ruby files and measures them with some style and static analysis
8
+ "rulers". Default values for the Rulers are based on a number of style guides
9
+ in the Ruby community as well as what seems to be common. More on this here
10
10
  http://wiki.github.com/turboladen/tailor.
11
11
 
12
+ tailor's goal is to help you be consistent with your style, throughout your
13
+ project, whatever style that may be.
14
+
12
15
  == FEATURES/PROBLEMS:
13
16
 
14
17
  * Checks for bad style in Ruby files
@@ -33,12 +36,15 @@ http://wiki.github.com/turboladen/tailor.
33
36
  * Name cases
34
37
  * Snake case class & module names
35
38
  * Camel case method names
39
+ * Valid Ruby (warns by default)
36
40
  * Configurable
37
41
  * Specify style in
38
42
  * ~./tailorrc
39
43
  * PROJECT_ROOT + .tailor
40
44
  * as CLI options
41
- * "File sets" allow for applying different styles to different sets of files
45
+ * "File sets" allow for applying different styles to different groups of files
46
+ * Set problems to :warn or :off instead of :fail
47
+ * Define custom "Rulers"
42
48
  * CI/Build Integration
43
49
  * (Well, this may be stretching things a bit, but...) Exit 1 on failures
44
50
 
@@ -56,8 +62,8 @@ At tailor's inception, there were some other static analysis tools for Ruby,
56
62
  but none which checked style stuff; tailor started off as a means to fill this
57
63
  gap. Since then, a number of those tools have dropped by the wayside due to
58
64
  various Ruby 1.9 incompatibilities, and left a bigger tool gap for Rubyists.
59
- Right now it's mostly a style-checker, but might also have a future role in
60
- analyzing other aspects of your Ruby code.
65
+ Right now it's mostly a style-checker, but might into a tool for analyzing other
66
+ aspects of your Ruby code.
61
67
 
62
68
  === Since 0.x...
63
69
 
@@ -85,8 +91,61 @@ Run tailor like:
85
91
 
86
92
  $ tailor
87
93
 
88
- There are still a number of false-positives and false-negatives in detection of
89
- the above rules, so please don't expect perfection in this detection. :)
94
+ ==== On style...
95
+
96
+ The features list, above, shows some aspects of style that should be fairly
97
+ straightforward (as to their meaning and reason), however, others make some big
98
+ assumptions--particularly the indentation checking "ruler". There are a number
99
+ of popular indenting conventions... In the case of multi-line parameters to a
100
+ method, some like do this:
101
+
102
+ def a_really_freakin_long_method_name(my_really_long_first_parameter,
103
+ my_next_param)
104
+ # ...
105
+ end
106
+
107
+ ...while others prefer:
108
+
109
+ def a_really_freakin_long_method_name(my_really_long_first_parameter,
110
+ my_next_param)
111
+ # ...
112
+ end
113
+
114
+ ...and yet some others prefer:
115
+
116
+ def a_really_freakin_long_method_name(my_really_long_first_parameter,
117
+ my_next_param)
118
+ # ...
119
+ end
120
+
121
+ At this point, tailor only supports the style used in the first example. If
122
+ this style isn't to your liking, then definitely take a look at the
123
+ Configurable section here to see how to turn this off. Other styles will
124
+ probably be supported in the future.
125
+
126
+ All that to say, though, that this isn't the only case where tailor makes style
127
+ assumptions. Another discrepancy in popular styles is with regard to aligning
128
+ operators in different lines. Some like:
129
+
130
+ my_hash[:first][:thing] = 1
131
+ my_hash[:eleventy][:thing] = 2
132
+
133
+ ...while others prefer:
134
+
135
+ my_hash[:first][:thing] = 1
136
+ my_hash[:eleventy][:thing] = 2
137
+
138
+ ...and yet some others prefer:
139
+
140
+ my_hash[:first][:thing] = 1
141
+ my_hash[:eleventy][:thing] = 2
142
+
143
+ Again, tailor only supports the first example here.
144
+
145
+ The goal is certainly not to force you to use the style that tailor currently
146
+ uses; it just might not support your style yet. If tailor doesn't support your
147
+ style, please feel free to take a look at the issues list and make a request.
148
+ ...or fork away!
90
149
 
91
150
  === Configurable:
92
151
 
@@ -113,15 +172,15 @@ are > 100 chars (instead of the default of 80):
113
172
 
114
173
  $ tailor --max-line-length 100 lib/
115
174
 
116
- If you want to simply disable a ruler, just pass +false+ to the option:
175
+ If you want to simply disable a ruler, just pass +off+ to the option:
117
176
 
118
- $ tailor --max-line-length false lib/
177
+ $ tailor --max-line-length off lib/
119
178
 
120
179
  ==== Configuration File
121
180
 
122
- Configuration files allow for some more flexibility with style rulers, file
123
- lists, and (eventually) report formatters. To create one with default
124
- settings, do:
181
+ While you can drive most tailor options from the command line, configuration
182
+ files allow for some more flexibility with style rulers, file lists, and
183
+ (eventually) report formatters. To create one with default settings, do:
125
184
 
126
185
  $ tailor --create-config
127
186
 
@@ -130,12 +189,12 @@ straightforward (if they're not, please let me know!). You don't have to specif
130
189
  all of those settings in your config file--those are just rendered so you have
131
190
  a starting ground to tweak with. If you only want to override a single value,
132
191
  you can delete the rest of the code from your config. This would accomplish
133
- the same as the --max-line-length example above:
192
+ the same as the <tt>--max-line-length</tt> example above:
134
193
 
135
194
  # .tailor
136
195
  Tailor.config do |config|
137
- config.file_set 'lib/**/*.rb' do
138
- max_line_length 100
196
+ config.file_set 'lib/**/*.rb' do |style|
197
+ style.max_line_length 100
139
198
  end
140
199
  end
141
200
 
@@ -151,29 +210,120 @@ globs to use the default set of rulers... File sets allow for those sorts of
151
210
  things.
152
211
 
153
212
  In the default config file, you see a single parameter being passed to
154
- <tt>config.file_set</tt>--this is the _label_ for that file set. The label is
213
+ <tt>config.file_set</tt>--this is the glob that defines the list of files for
214
+ that file set. While you don't see it, +config.file_set+ takes a second
215
+ optional parameter that allows you to _label_ your style properties, and thus
216
+ use different sets of style properties for differet sets of files. The label is
155
217
  simply just a name to refer to that file set by; it will show in your report
156
218
  (in the case that problems were found, of course) so you know what set of
157
- rulers caused the problem to be found. <tt>config.file_set</tt> also takes
158
- a second paramter: the file/directory/glob to apply the style to.
219
+ rulers caused the problem to be found.
159
220
 
160
221
  # .tailor
161
222
  Tailor.config do |config|
162
- config.file_set :rails_app, 'app/**/*.rb' do
163
- max_line_length 100
223
+
224
+ # All defaults; implies "default" label
225
+ config.file_set 'lib/**/*.rb
226
+
227
+ config.file_set 'app/**/*.rb', :rails_app do |style|
228
+ style.max_line_length 100
164
229
  # All other rulers will use default values
165
230
  end
166
231
 
167
- config.file_set :features, 'features/**/*.rb' # Uses default style
232
+ # Uses default style, but labelled in the report with "features"
233
+ config.file_set 'features/**/*.rb', :features
168
234
 
169
- config.file_set :rspec, 'spec/**/*.rb' do
170
- spaces_after_lbrace false
171
- spaces_before_lbrace false
172
- spaces_before_rbrace false
235
+ config.file_set 'spec/**/*.rb', :rspec do |style|
236
+ style.spaces_after_lbrace false
237
+ style.spaces_before_lbrace false
238
+ style.spaces_before_rbrace false
173
239
  # All other rulers will use default values
174
240
  end
175
241
  end
176
242
 
243
+ Similarly to the CLI, if you want to turn off a default Ruler, set its problem
244
+ level to +:off+:
245
+
246
+ # .tailor
247
+ Tailor.config do |config|
248
+ config.file_set 'lib/**/*.rb do |style|
249
+ style.indentation_spaces 2, level: :off
250
+ end
251
+ end
252
+
253
+
254
+ === Define A Custom Ruler
255
+
256
+ While tailor provides a number of Rulers for checking style, it also provides a
257
+ way for you to add your own rulers without having to delve into its innards. To
258
+ do this, you need to do the following.
259
+
260
+ ==== Create the Ruler
261
+
262
+ Before jumping in to this, take a look at {Tailor::Ruler} and any of the
263
+ existing Rulers in +lib/tailor/rulers/+. There are some key things a new Ruler
264
+ must have:
265
+
266
+ * the class name ends with "Ruler"
267
+ * it inherits {Tailor::Ruler}
268
+ * it's defined within the {Tailor::Rulers} module
269
+ * +#initialize+ defines two parameters:
270
+ 1. +config+ sets +@config+ to the "golden rule" value for what you're measuring
271
+ 2. +options+ is a Hash, that should at least be passed the :level => you want
272
+ the problem to be logged as
273
+ * +#add_lexer_observers+ gets passed a list of {Tailor::Lexer} event types that
274
+ the ruler should get notified on
275
+ * it defines call-back methods for {Tailor::Lexer} to call when it comes across
276
+ an event of interest
277
+ * it calls +#measure+ to assess if the criteria it's checking has been met
278
+ * it adds a {Tailor::Problem} to +@problems+ when one is found in +#measure+
279
+
280
+ ==== Add the Ruler to the list of Styles
281
+
282
+ Internally, this all happens in +lib/tailor/configuration/style.rb+, but you can
283
+ add infomation about your ruler to your config file. If you created a Ruler:
284
+
285
+ # max_lines_in_block.rb
286
+ class Tailor
287
+ module Rulers
288
+ class MaxLinesInBlockRuler < Tailor::Ruler
289
+ def initialize(config, options)
290
+ super(config, options)
291
+ add_lexer_observers :ignored_nl, :kw
292
+ end
293
+
294
+ def ignored_nl_update(lexed_line, lineno, column)
295
+ # ...
296
+ end
297
+
298
+ def kw_update(token, lexed_line, lineno, column)
299
+ # ...
300
+ end
301
+
302
+ def measure
303
+ # ...
304
+ end
305
+
306
+ # ...
307
+ end
308
+ end
309
+ end
310
+
311
+ ...then require this and add it to the Style list of properties:
312
+
313
+ # .tailor
314
+ require 'tailor/configuration/style'
315
+ require 'max_lines_in_block'
316
+
317
+ Tailor::Configuration::Style.define_property :max_lines_in_block
318
+
319
+ Tailor.config do |config|
320
+ config.file_set 'lib/**/*.rb' do |style|
321
+ style.max_lines_in_block 10, level: :error
322
+ end
323
+ end
324
+
325
+ Next time you run tailor, your Ruler will get initialized and used.
326
+
177
327
  == REQUIREMENTS:
178
328
 
179
329
  * Rubies (tested)
@@ -1,55 +1,35 @@
1
- @wip
2
1
  Feature: Configurable
3
2
  As a Ruby developer
4
3
  I want to be able to configure tailor to my style likings
5
4
  So that tailor only detects the problems that I care about.
6
5
 
7
- Scenario: No config file exists
8
- Given a file named ".tailorrc" should not exist
6
+ Scenario: Print configuration when no config file exists
7
+ Given a file named ".tailor" should not exist
9
8
  When I successfully run `tailor --show-config`
10
- Then the output should contain:
11
- """
12
- +---------------------------+------------------+
13
- | Configuration |
14
- +---------------------------+------------------+
15
- | Indentation |
16
- +---------------------------+------------------+
17
- | spaces | 2 |
18
- | allow_hard_tabs | false |
19
- | continuation_spaces | 2 |
20
- +---------------------------+------------------+
21
- | Vertical whitespace |
22
- +---------------------------+------------------+
23
- | trailing_newlines | 1 |
24
- +---------------------------+------------------+
25
- """
9
+ Then the output should match /Configuration/
10
+ And the output should match /Formatters.+|.+text.+|/
11
+ And the output should match /Label.+|.+default.+|/
12
+ And the output should match /Style.+|/
13
+ And the output should match /File List.+|/
26
14
  And the exit status should be 0
27
15
 
28
- Scenario: Configuration file at ~/.tailorrc is valid YAML
16
+ Scenario: Print configuration when .tailor exists
29
17
  Given a file named ".tailorrc" with:
30
18
  """
31
- ---
32
- :indentation:
33
- :spaces: 5
34
- :vertical_whitespace:
35
- :trailing_newlines: 11
19
+ Tailor::Configuration::Style.define_property :some_ruler
20
+
21
+ Tailor.config do |config|
22
+ config.formatters 'test'
23
+ config.file_set 'test/**/*.rb' do |style|
24
+ style.some_ruler 1234
25
+ end
26
+ end
36
27
  """
37
28
  When I successfully run `tailor --show-config`
38
- Then the output should contain:
39
- """
40
- +-------------------------+------------------+
41
- | Configuration |
42
- +-------------------------+------------------+
43
- | Indentation |
44
- +-------------------------+------------------+
45
- | spaces | 5 |
46
- +-------------------------+------------------+
47
- | Vertical whitespace |
48
- +-------------------------+------------------+
49
- | trailing_newlines | 11 |
50
- +-------------------------+------------------+
51
- """
29
+ Then the output should match /Formatters.+|.+test.+|/
30
+ And the output should match /some_ruler.+|.+1234.+|/
52
31
 
32
+ @wip
53
33
  Scenario: Pass in configuration file at runtime
54
34
  Given a file named "some_config.yml" with:
55
35
  """
@@ -6,8 +6,8 @@ Feature: Horizontal spacing detection
6
6
  Given my configuration file ".tailor" looks like:
7
7
  """
8
8
  Tailor.config do |config|
9
- config.file_set do
10
- trailing_newlines 0
9
+ config.file_set do |style|
10
+ style.trailing_newlines 0
11
11
  end
12
12
  end
13
13
  """
@@ -104,6 +104,7 @@ Feature: Horizontal spacing detection
104
104
  | h_spacing/ok/space_after_comma_in_array |
105
105
  | h_spacing/ok/trailing_comma |
106
106
  | h_spacing/ok/trailing_comma_with_trailing_comment |
107
+ | h_spacing/ok/line_ends_with_backslash |
107
108
 
108
109
  @good_files @braces
109
110
 
@@ -8,8 +8,8 @@ Feature: Indentation check
8
8
  Given my configuration file ".tailor" looks like:
9
9
  """
10
10
  Tailor.config do |config|
11
- config.file_set do
12
- trailing_newlines 0
11
+ config.file_set do |style|
12
+ style.trailing_newlines 0
13
13
  end
14
14
  end
15
15
  """
@@ -5,8 +5,8 @@ Feature: Indentation check on bad fails without trailing newlines
5
5
  Given my configuration file ".tailor" looks like:
6
6
  """
7
7
  Tailor.config do |config|
8
- config.file_set do
9
- trailing_newlines 0
8
+ config.file_set do |style|
9
+ style.trailing_newlines 0
10
10
  end
11
11
  end
12
12
  """
@@ -19,14 +19,14 @@ Feature: Indentation check on bad fails without trailing newlines
19
19
  And the output should match /position: <Position>/
20
20
  And the exit status should be 1
21
21
 
22
- @multi_line
22
+ @multi_line @keywords
23
23
  Scenarios: 1 problem with classes
24
24
  | File | Position |
25
25
  | indent/1/class_indented_end | 2:1 |
26
26
  | indent/1/class_method_def_using_self_outdented | 2:1 |
27
27
 
28
28
 
29
- @multi_line
29
+ @single_line @keywords
30
30
  Scenarios: 1 problem with single-line statement
31
31
  | File | Position |
32
32
  | indent/1/class_indented_singlestatement | 2:3 |
@@ -34,14 +34,14 @@ Feature: Indentation check on bad fails without trailing newlines
34
34
  | indent/1/class_outdented_singlestatement | 2:1 |
35
35
  | indent/1/class_def_outdented_content | 3:3 |
36
36
 
37
- @multi_line
37
+ @multi_line @keywords
38
38
  Scenarios: 1 problem with def
39
39
  | File | Position |
40
40
  | indent/1/def_indented_end | 2:1 |
41
41
  | indent/1/def_content_indented_end | 3:1 |
42
42
  | indent/1/class_def_content_outdented_end | 4:1 |
43
43
 
44
- @multi_line
44
+ @multi_line @keywords @continuations
45
45
  Scenarios: 1 problem with case
46
46
  | File | Position |
47
47
  | indent/1/case_indented_whens_level | 2:3 |
@@ -51,7 +51,7 @@ Feature: Indentation check on bad fails without trailing newlines
51
51
  | indent/1/case_when_outdented_whens_level | 3:1 |
52
52
  | indent/1/case_indented_whens_in | 2:3 |
53
53
 
54
- @multi_line
54
+ @multi_line @keywords
55
55
  Scenarios: 1 problem with 'do' loop
56
56
  | File | Position |
57
57
  | indent/1/while_do_indented | 1:1 |
@@ -64,11 +64,12 @@ Feature: Indentation check on bad fails without trailing newlines
64
64
  | indent/1/for_do_indented | 1:1 |
65
65
  | indent/1/loop_do_indented | 1:1 |
66
66
 
67
- @multi_line
67
+ @multi_line @strings
68
68
  Scenarios: 1 problem with multi-line string
69
69
  | File | Position |
70
70
  | indent/1/multi_line_string_first_line_indented | 2:3 |
71
71
  | indent/1/multi_line_string_first_line_indented_trailing_comment | 2:3 |
72
+ | indent/1/multi_line_tstring | 2:0 |
72
73
 
73
74
  @multi_line
74
75
  Scenarios: 1 problem with multi-line operator use