rufo 0.0.29 → 0.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a5d988295293486aedb59809e856de442d3e7643
4
- data.tar.gz: 8429b9a9e9c0261736946f31564aed9f85618c91
3
+ metadata.gz: 3d993ab0deff7da557c3e35bac8271ad6c60d43c
4
+ data.tar.gz: 669c9785a3ef39403dc0b6746ad0e5c8c7196e15
5
5
  SHA512:
6
- metadata.gz: 4fe7de7ca53140f7b02fda1d5bdc9ad8cf448f448f60c969479f9e8427b96585a7dc7094f816fe3450f21f591bdea88f2c162670a906f0a13eda2b38f9388327
7
- data.tar.gz: 1dc130a6f8708862eb9a4ded52459607579a1f431e77758f2e1d2266a50d6563e8e3fe52b0b8110c4e8508014107b7624ab49cb24a1fa8861d937abc03ff461f
6
+ metadata.gz: e6bcf974f8c95767a9a70a1f24acad264d6facb5040e466709a3b15fcfc11f5ecf8c0de1f8cbf02d9b34e051f0487711ad7f79639b9908a6cff99207dc4f2e19
7
+ data.tar.gz: 0e2f04958a659060263e4e1dfa15748e2b70bbce178f91db46a278aeec5cc8671ed207ec3b053aee609edbc5881bba78b313bc431925826c82e7081351e621c2
@@ -26,6 +26,9 @@ class Rufo::Formatter
26
26
  # calls to that dot
27
27
  @dot_column = nil
28
28
 
29
+ # Did this line already set the `@dot_column` variable?
30
+ @line_has_dot_column = nil
31
+
29
32
  # The column of a `obj.method` call, but only the name part,
30
33
  # so we can also align arguments accordingly
31
34
  @name_dot_column = nil
@@ -103,16 +106,16 @@ class Rufo::Formatter
103
106
  @case_when_positions = []
104
107
 
105
108
  # Settings
106
- indent_size options.fetch(:indent_size, 2)
107
- space_after_hash_brace options.fetch(:space_after_hash_brace, :dynamic)
109
+ indent_size options.fetch(:indent_size, 2)
110
+ space_after_hash_brace options.fetch(:space_after_hash_brace, :dynamic)
108
111
  space_after_array_bracket options.fetch(:space_after_array_bracket, :never)
109
- align_comments options.fetch(:align_comments, true)
110
- align_assignments options.fetch(:align_assignments, false)
111
- align_hash_keys options.fetch(:align_hash_keys, true)
112
- align_case_when options.fetch(:align_case_when, true)
113
- align_chained_calls options.fetch(:align_chained_calls, true)
114
- preserve_whitespace options.fetch(:preserve_whitespace, true)
115
- trailing_commas options.fetch(:trailing_commas, :always)
112
+ align_comments options.fetch(:align_comments, true)
113
+ align_assignments options.fetch(:align_assignments, false)
114
+ align_hash_keys options.fetch(:align_hash_keys, true)
115
+ align_case_when options.fetch(:align_case_when, true)
116
+ align_chained_calls options.fetch(:align_chained_calls, true)
117
+ preserve_whitespace options.fetch(:preserve_whitespace, true)
118
+ trailing_commas options.fetch(:trailing_commas, :always)
116
119
  end
117
120
 
118
121
  # The indent size (default: 2)
@@ -906,8 +909,9 @@ class Rufo::Formatter
906
909
  end
907
910
  end
908
911
 
909
- # Remember dot column
910
- dot_column = @column
912
+ # Remember dot column, but only if there isn't one already set
913
+ dot_column = @column unless @dot_column
914
+
911
915
  consume_call_dot
912
916
 
913
917
  skip_space
@@ -927,7 +931,7 @@ class Rufo::Formatter
927
931
 
928
932
  # Only set it after we visit the call after the dot,
929
933
  # so we remember the outmost dot position
930
- @dot_column = dot_column
934
+ @dot_column = dot_column if dot_column
931
935
  end
932
936
 
933
937
  def consume_call_dot
@@ -983,6 +987,18 @@ class Rufo::Formatter
983
987
  call_info << true
984
988
  end
985
989
 
990
+ want_trailing_comma = true
991
+
992
+ # Check if there's a block arg and if the call ends with hash key/values
993
+ if args_node[0] == :args_add_block
994
+ _, args, block_arg = args_node
995
+ want_trailing_comma = !block_arg
996
+ if args.is_a?(Array) && (last_arg = args.last) && last_arg.is_a?(Array) &&
997
+ last_arg[0].is_a?(Symbol) && last_arg[0] != :bare_assoc_hash
998
+ want_trailing_comma = false
999
+ end
1000
+ end
1001
+
986
1002
  push_call(node) do
987
1003
  visit args_node
988
1004
  skip_space
@@ -992,7 +1008,7 @@ class Rufo::Formatter
992
1008
 
993
1009
  if found_comma
994
1010
  if needs_trailing_newline
995
- write "," if @trailing_commas != :never
1011
+ write "," if @trailing_commas != :never && !block_arg
996
1012
 
997
1013
  next_token
998
1014
  indent(next_indent) do
@@ -1007,7 +1023,7 @@ class Rufo::Formatter
1007
1023
 
1008
1024
  if newline? || comment?
1009
1025
  if needs_trailing_newline
1010
- write "," if @trailing_commas == :always
1026
+ write "," if @trailing_commas == :always && want_trailing_comma
1011
1027
 
1012
1028
  indent(next_indent) do
1013
1029
  consume_end_of_line
@@ -1018,7 +1034,7 @@ class Rufo::Formatter
1018
1034
  end
1019
1035
  else
1020
1036
  if needs_trailing_newline && !found_comma
1021
- write "," if @trailing_commas == :always
1037
+ write "," if @trailing_commas == :always && want_trailing_comma
1022
1038
  consume_end_of_line
1023
1039
  write_indent
1024
1040
  end
@@ -1314,9 +1330,15 @@ class Rufo::Formatter
1314
1330
 
1315
1331
  if block_arg
1316
1332
  skip_space_or_newline
1317
- write_params_comma if comma?
1333
+
1334
+ if comma?
1335
+ indent(next_indent) do
1336
+ write_params_comma
1337
+ end
1338
+ end
1318
1339
 
1319
1340
  consume_op "&"
1341
+ skip_space_or_newline
1320
1342
  visit block_arg
1321
1343
  end
1322
1344
  end
@@ -1630,6 +1652,21 @@ class Rufo::Formatter
1630
1652
  # [:binary, left, op, right]
1631
1653
  _, left, op, right = node
1632
1654
 
1655
+ # If this binary is not at the beginning of a line, if there's
1656
+ # a newline following the op we want to align it with the left
1657
+ # value. So for example:
1658
+ #
1659
+ # var = left_exp ||
1660
+ # right_exp
1661
+ #
1662
+ # But:
1663
+ #
1664
+ # def foo
1665
+ # left_exp ||
1666
+ # right_exp
1667
+ # end
1668
+ needed_indent = @column == @indent ? next_indent : @column
1669
+
1633
1670
  visit left
1634
1671
  if space?
1635
1672
  needs_space = true
@@ -1650,7 +1687,7 @@ class Rufo::Formatter
1650
1687
  end
1651
1688
 
1652
1689
  consume_op_or_keyword op
1653
- indent_after_space right, want_space: needs_space
1690
+ indent_after_space right, want_space: needs_space, needed_indent: needed_indent
1654
1691
  end
1655
1692
 
1656
1693
  def consume_op_or_keyword(op)
@@ -1757,6 +1794,11 @@ class Rufo::Formatter
1757
1794
  check :on_rparen
1758
1795
  next_token
1759
1796
  skip_space
1797
+
1798
+ # () needs to be preserved if some content follows
1799
+ unless newline? || comment?
1800
+ write "()"
1801
+ end
1760
1802
  else
1761
1803
  write "("
1762
1804
 
@@ -1976,6 +2018,7 @@ class Rufo::Formatter
1976
2018
 
1977
2019
  if elements && !elements.empty?
1978
2020
  write_space if has_space
2021
+ column = @column
1979
2022
 
1980
2023
  elements.each_with_index do |elem, i|
1981
2024
  if elem[0] == :@tstring_content
@@ -1991,7 +2034,7 @@ class Rufo::Formatter
1991
2034
  if current_token_value.include?("\n")
1992
2035
  next_token
1993
2036
  write_line
1994
- write_indent(next_indent)
2037
+ write_indent(column)
1995
2038
  else
1996
2039
  next_token
1997
2040
  write_space
@@ -2894,8 +2937,8 @@ class Rufo::Formatter
2894
2937
  # # that continues here
2895
2938
  # ```
2896
2939
  if last_comment &&
2897
- last_comment[0][0] + 1 == current_token[0][0] &&
2898
- last_comment[0][1] == current_token[0][1]
2940
+ last_comment[0][0] + 1 == current_token[0][0] &&
2941
+ last_comment[0][1] == current_token[0][1]
2899
2942
  write_indent(last_comment_column)
2900
2943
  track_comment
2901
2944
  else
@@ -2947,8 +2990,8 @@ class Rufo::Formatter
2947
2990
  # or the last thing was a comment (from which we removed the newline)
2948
2991
  # or we just passed multiple lines (but printed only one)
2949
2992
  if (!found_newline && !at_prefix && !(want_semicolon && last == :semicolon)) ||
2950
- last == :comment ||
2951
- (multilple_lines && want_multiline)
2993
+ last == :comment ||
2994
+ (multilple_lines && want_multiline)
2952
2995
  write_line
2953
2996
  end
2954
2997
  end
@@ -3100,13 +3143,13 @@ class Rufo::Formatter
3100
3143
  @last_was_newline = false
3101
3144
  end
3102
3145
 
3103
- def indent_after_space(node, sticky: false, want_space: true, first_space: nil)
3146
+ def indent_after_space(node, sticky: false, want_space: true, first_space: nil, needed_indent: next_indent)
3104
3147
  first_space = current_token if space?
3105
3148
 
3106
3149
  skip_space
3107
3150
  case current_token_kind
3108
3151
  when :on_ignored_nl, :on_comment
3109
- indent do
3152
+ indent(needed_indent) do
3110
3153
  consume_end_of_line
3111
3154
  write_indent
3112
3155
  visit node
data/lib/rufo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rufo
2
- VERSION = "0.0.29"
2
+ VERSION = "0.0.30"
3
3
  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.29
4
+ version: 0.0.30
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-06-28 00:00:00.000000000 Z
11
+ date: 2017-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler