rufo 0.0.37 → 0.0.38

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fb66c78ddab7f72ff2c62ea1a6c8d268ee07871a
4
- data.tar.gz: cdb227d8ae51899ffe33bf2468f7dccbe95f5b2a
3
+ metadata.gz: eb5d79057ba5a76559fc6ff7f243a8d490794700
4
+ data.tar.gz: 1d35a7183d666b212916b860e55f922ef265c6e4
5
5
  SHA512:
6
- metadata.gz: 6bebee1f9ef22fa4a3589cf0000f187e94da9f0224819922ca48cc13dbccd0c5349756956626c02230cda2e0f4fd4f91b7c2db1c287f5421d92c78151a5d0046
7
- data.tar.gz: d7485eaa65ed1783c83f8134f5f97b298380f969c0600490d9d5f6e697f4ef3ff3fa5f32b2de5661823a5910fb21ba4e1c56fab5b2b65db4dab810a3c1de4024
6
+ metadata.gz: f0f992361ccd2b36c155d7fa4c157f48be8d877774e0b6b69d2b110412caeae47ee8984c680ae2f8850c3866c311b56a70925cff5dfded4eee22f4f789ddcc59
7
+ data.tar.gz: 8f6ed9ee0a58328c73fefa468d8832e80b49d656480a582f3fbc7551c8c158f0fe5c1233d683e143cbfbdbc09c2e7d558392b4f48620782fbcd98d89698ec426
data/README.md CHANGED
@@ -53,17 +53,17 @@ this choice.
53
53
  Another example is aligning call parameters:
54
54
 
55
55
  ```ruby
56
- # Align with respect to the first parameter
56
+ # Align with respect to the first parameter:
57
57
  foo 1, 2,
58
58
  3, 4,
59
59
  5
60
60
 
61
- # Align by regular indent (2 spaces)
61
+ # Align by regular indent (2 spaces):
62
62
  foo 1, 2,
63
63
  3, 4,
64
64
  5
65
65
 
66
- # Align arrays
66
+ # Align arrays:
67
67
  foo 1, [
68
68
  2,
69
69
  3,
@@ -75,12 +75,12 @@ foo 1, [
75
75
  3,
76
76
  ]
77
77
 
78
- # Aling trailing calls
78
+ # Align trailing calls:
79
79
  assert foo(
80
80
  1
81
81
  )
82
82
 
83
- # Don't extra align trailing calls
83
+ # Don't extra align trailing calls:
84
84
  assert foo(
85
85
  1
86
86
  )
@@ -101,7 +101,8 @@ If Rufo does not change these things by default, what does it do? Well, it makes
101
101
  - no trailing whitespace remains
102
102
  - a trailing newline at the end of the file remains
103
103
 
104
- And of course it can be configured to do more. Check the settings section below.
104
+ And of course it can be configured to do much more.
105
+ Check the [Settings](https://github.com/asterite/rufo/wiki/Settings) section in the [Wiki](https://github.com/asterite/rufo/wiki) for more details.
105
106
 
106
107
  ## Installation
107
108
 
@@ -140,7 +141,15 @@ $ rufo --check file names or dir names
140
141
  ```
141
142
 
142
143
  This will print one line for each file that isn't correctly formatted
143
- according to **rufo**, and will exit with exit code 1.
144
+ according to **Rufo**, and will exit with exit code 3.
145
+
146
+ ### Exit codes
147
+
148
+ | Code | Result |
149
+ | ---- | ---- |
150
+ | `0` | No errors, but also no formatting changes |
151
+ | `1` | Error. Either `Ripper` could not parse syntax or input file is missing |
152
+ | `3` | Input changed. Formatted code differs from input |
144
153
 
145
154
  ## Editor support
146
155
 
@@ -148,24 +157,23 @@ according to **rufo**, and will exit with exit code 1.
148
157
  - Emacs [emacs-rufo](https://github.com/aleandros/emacs-rufo) :construction: or [rufo.el](https://github.com/danielma/rufo.el)
149
158
  - Sublime Text: [sublime-rufo](https://github.com/asterite/sublime-rufo)
150
159
  - Vim: [rufo-vim](https://github.com/splattael/rufo-vim)
151
- - Visual Studio Code: [rufo-vscode](https://marketplace.visualstudio.com/items?itemName=siliconsenthil.rufo-vscode)
160
+ - Visual Studio Code: [rufo-vscode](https://marketplace.visualstudio.com/items?itemName=siliconsenthil.rufo-vscode) or [vscode-rufo](https://marketplace.visualstudio.com/items?itemName=mbessey.vscode-rufo)
152
161
 
153
162
 
154
163
  Did you write a plugin for your favorite editor? That's great! Let me know about it and
155
164
  I will list it here.
156
165
 
157
- ### Tips for editor plugins implementors
166
+ ### Tips for editor plugin implementors
158
167
 
159
- Rufo works best, and it's incredibly convenient, when code is automatically
160
- formatted on save. In this way you can for example surround a piece of code with
161
- `if ... end` and it gets automatically indented, or unindented when you remove
162
- such code.
168
+ It is especially convenient if your code is automatically _formatted on save_.
169
+ For example, surrounding a piece of code with `if ... end` will automatically indent
170
+ the code when you save. Likewise, it will be automatically unindented should you remove it.
163
171
 
164
172
  For this to work best, the cursor position must be preserved, otherwise it becomes
165
- pretty annoying if the cursor is reset at the top of the editor.
173
+ pretty annoying if the cursor is reset to the top of the editor.
166
174
 
167
175
  You should compute a diff between the old content and new content
168
- and apply the necessary editions. You can check out how this is done in the
176
+ and apply the necessary changes. You can check out how this is done in the
169
177
  [Sublime Text plugin for Rufo](https://github.com/asterite/sublime-rufo):
170
178
 
171
179
  - [diff_match_patch.py](https://github.com/asterite/sublime-rufo/blob/master/diff_match_patch.py) contains the diff algorithm (you can port it to other languages or try to search for a similar algorithm online)
@@ -173,8 +181,8 @@ and apply the necessary editions. You can check out how this is done in the
173
181
 
174
182
  ## Configuration
175
183
 
176
- To configure Rufo, place a `.rufo` file in your project. When formatting a file or a directory
177
- via the `rufo` program, a `.rufo` file will try to be found in that directory or parent directories.
184
+ To configure Rufo, place a `.rufo` file in your project. Then when you format a file or a directory,
185
+ Rufo will look for a `.rufo` file in that directory or parent directories and apply the configuration.
178
186
 
179
187
  The `.rufo` file is a Ruby file that is evaluated in the context of the formatter.
180
188
  The available settings are listed [here](https://github.com/asterite/rufo/wiki/Settings).
@@ -191,8 +199,8 @@ To parse and lex, [Ripper](https://ruby-doc.org/stdlib-2.4.0/libdoc/ripper/rdoc/
191
199
 
192
200
  As a reference, this was implemented in a similar fashion to [Crystal](https://github.com/crystal-lang/crystal)'s formatter.
193
201
 
194
- And as a side note, rufo has **no dependencies**. It only depends on `rspec` for tests, but that's it.
195
- That means it loads very fast (no need to read many Ruby files), and because `Ripper` is mostly written
202
+ And as a side note, Rufo has **no dependencies**. To run Rufo's specs you will require [rspec](https://github.com/rspec/rspec), but that's it.
203
+ This means Rufo loads very fast (no need to read many Ruby files), and since [Ripper](https://ruby-doc.org/stdlib-2.4.0/libdoc/ripper/rdoc/Ripper.html) is mostly written
196
204
  in C (uses Ruby's lexer and parser) it formats files pretty fast too.
197
205
 
198
206
  ## Development
@@ -3,6 +3,10 @@
3
3
  require "optparse"
4
4
 
5
5
  class Rufo::Command
6
+ CODE_OK = 0
7
+ CODE_ERROR = 1
8
+ CODE_CHANGE = 3
9
+
6
10
  def self.run(argv)
7
11
  want_check, filename_for_dot_rufo = parse_options(argv)
8
12
  new(want_check, filename_for_dot_rufo).run(argv)
@@ -15,25 +19,26 @@ class Rufo::Command
15
19
  end
16
20
 
17
21
  def run(argv)
18
- if argv.empty?
19
- format_stdin
20
- else
21
- format_args argv
22
- end
22
+ status_code = if argv.empty?
23
+ format_stdin
24
+ else
25
+ format_args argv
26
+ end
27
+
28
+ exit status_code
23
29
  end
24
30
 
25
31
  def format_stdin
26
32
  code = STDIN.read
33
+
27
34
  result = format(code, @filename_for_dot_rufo || Dir.getwd)
28
35
 
29
- if @want_check
30
- exit 1 if result != code
31
- else
32
- print result
33
- end
36
+ print(result) if !@want_check
37
+
38
+ code == result ? CODE_OK : CODE_CHANGE
34
39
  rescue Rufo::SyntaxError
35
40
  STDERR.puts "Error: the given text is not a valid ruby program (it has syntax errors)"
36
- exit 1
41
+ CODE_ERROR
37
42
  rescue => ex
38
43
  STDERR.puts "You've found a bug!"
39
44
  STDERR.puts "Please report it to https://github.com/asterite/rufo/issues with code that triggers it"
@@ -54,13 +59,23 @@ class Rufo::Command
54
59
  end
55
60
  end
56
61
 
62
+ return CODE_ERROR if files.empty?
63
+
57
64
  changed = false
65
+ syntax_error = false
58
66
 
59
67
  files.each do |file|
60
- changed |= format_file file
68
+ result = format_file(file)
69
+
70
+ changed |= result == CODE_CHANGE
71
+ syntax_error |= result == CODE_ERROR
61
72
  end
62
73
 
63
- exit 1 if changed
74
+ case
75
+ when syntax_error then CODE_ERROR
76
+ when changed then CODE_CHANGE
77
+ else CODE_OK
78
+ end
64
79
  end
65
80
 
66
81
  def format_file(filename)
@@ -72,24 +87,22 @@ class Rufo::Command
72
87
  # We ignore syntax errors as these might be template files
73
88
  # with .rb extension
74
89
  STDERR.puts "Error: #{filename} has syntax errors"
75
- return true
90
+ return CODE_ERROR
76
91
  end
77
92
 
78
93
  if code.force_encoding(result.encoding) != result
79
94
  if @want_check
80
- STDERR.puts "Error: formatting #{filename} produced changes"
95
+ STDERR.puts "Formatting #{filename} produced changes"
81
96
  else
82
97
  File.write(filename, result)
83
98
  puts "Format: #{filename}"
84
99
  end
85
100
 
86
- return true
101
+ return CODE_CHANGE
87
102
  end
88
-
89
- false
90
103
  rescue Rufo::SyntaxError
91
104
  STDERR.puts "Error: the given text in #{filename} is not a valid ruby program (it has syntax errors)"
92
- exit 1
105
+ CODE_ERROR
93
106
  rescue => ex
94
107
  STDERR.puts "You've found a bug!"
95
108
  STDERR.puts "It happened while trying to format the file #{filename}"
@@ -939,14 +939,7 @@ class Rufo::Formatter
939
939
 
940
940
  consume_call_dot
941
941
 
942
- first_space = skip_space
943
-
944
- if newline? || comment?
945
- consume_end_of_line
946
- write_indent(next_indent)
947
- else
948
- write_space_using_setting(first_space, @spaces_around_dot)
949
- end
942
+ skip_space_or_newline_using_setting(@spaces_around_dot, next_indent)
950
943
 
951
944
  if name == :call
952
945
  # :call means it's .()
@@ -1695,17 +1688,7 @@ class Rufo::Formatter
1695
1688
  check :on_comma
1696
1689
  write ","
1697
1690
  next_token
1698
-
1699
- first_space = skip_space
1700
-
1701
- if newline? || comment?
1702
- indent(base_column || @indent) do
1703
- consume_end_of_line(want_multiline: false, first_space: first_space)
1704
- write_indent
1705
- end
1706
- else
1707
- write_space_using_setting(first_space, @spaces_after_comma)
1708
- end
1691
+ skip_space_or_newline_using_setting(@spaces_after_comma, base_column || @indent)
1709
1692
  end
1710
1693
  end
1711
1694
 
@@ -2108,15 +2091,7 @@ class Rufo::Formatter
2108
2091
  check :on_comma
2109
2092
  write ","
2110
2093
  next_token
2111
-
2112
- first_space = skip_space
2113
-
2114
- if newline? || comment?
2115
- consume_end_of_line
2116
- write_indent
2117
- else
2118
- write_space_using_setting(first_space, @spaces_after_comma)
2119
- end
2094
+ skip_space_or_newline_using_setting(@spaces_after_comma)
2120
2095
  end
2121
2096
 
2122
2097
  def visit_array(node)
@@ -2365,12 +2340,7 @@ class Rufo::Formatter
2365
2340
  end
2366
2341
  end
2367
2342
 
2368
- first_space = skip_space
2369
- if newline? || comment?
2370
- skip_space_or_newline
2371
- else
2372
- write_space_using_setting(first_space, @spaces_inside_array_bracket)
2373
- end
2343
+ skip_space_or_newline_using_setting(@spaces_inside_array_bracket)
2374
2344
 
2375
2345
  check :on_rbracket
2376
2346
  write "]"
@@ -2407,15 +2377,7 @@ class Rufo::Formatter
2407
2377
 
2408
2378
  visit receiver
2409
2379
 
2410
- first_space = skip_space
2411
-
2412
- if newline? || comment?
2413
- consume_end_of_line
2414
-
2415
- write_indent(@dot_column || next_indent)
2416
- else
2417
- write_space_using_setting(first_space, @spaces_around_dot)
2418
- end
2380
+ skip_space_or_newline_using_setting(@spaces_around_dot, @dot_column || next_indent)
2419
2381
 
2420
2382
  # Remember dot column
2421
2383
  dot_column = @column
@@ -2423,15 +2385,7 @@ class Rufo::Formatter
2423
2385
 
2424
2386
  consume_call_dot
2425
2387
 
2426
- first_space = skip_space
2427
-
2428
- if newline? || comment?
2429
- consume_end_of_line
2430
- write_indent(next_indent)
2431
- else
2432
- skip_space_or_newline
2433
- write_space_using_setting(first_space, @spaces_around_dot)
2434
- end
2388
+ skip_space_or_newline_using_setting(@spaces_around_dot, next_indent)
2435
2389
 
2436
2390
  visit name
2437
2391
 
@@ -2483,14 +2437,8 @@ class Rufo::Formatter
2483
2437
  write "->"
2484
2438
  next_token
2485
2439
 
2486
- if space? && @spaces_after_lambda_arrow == :dynamic
2487
- consume_space(want_preserve_whitespace: true)
2488
- elsif @spaces_after_lambda_arrow == :one
2489
- skip_space
2490
- write_space
2491
- else
2492
- skip_space_or_newline
2493
- end
2440
+ first_space = skip_space
2441
+ write_space_using_setting(first_space, @spaces_after_lambda_arrow)
2494
2442
 
2495
2443
  if empty_params?(params)
2496
2444
  if current_token_kind == :on_lparen
@@ -3481,6 +3429,18 @@ class Rufo::Formatter
3481
3429
  end
3482
3430
  end
3483
3431
 
3432
+ def skip_space_or_newline_using_setting(setting, indent_size = @indent)
3433
+ indent(indent_size) do
3434
+ first_space = skip_space
3435
+ if newline? || comment?
3436
+ consume_end_of_line(want_multiline: false, first_space: first_space)
3437
+ write_indent
3438
+ else
3439
+ write_space_using_setting(first_space, setting)
3440
+ end
3441
+ end
3442
+ end
3443
+
3484
3444
  def write_line
3485
3445
  @output << "\n"
3486
3446
  @last_was_newline = true
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rufo
4
- VERSION = "0.0.37"
4
+ VERSION = "0.0.38"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rufo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.37
4
+ version: 0.0.38
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ary Borenszweig
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-09 00:00:00.000000000 Z
11
+ date: 2017-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler