unparser 0.6.0 → 0.6.7

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
  SHA256:
3
- metadata.gz: 0a585e06cf743ca1901a601efa2fb7f178528307f89a6bea190df19014e3abf3
4
- data.tar.gz: dc1980af7f00fa4b54da6fc91cc740857588bf5d1bf30f6c362be995a86a2d83
3
+ metadata.gz: 43c55e0072230fba02c24266555e1599559396739677e4371b6c9bca4b2a29b1
4
+ data.tar.gz: 4743b675c63ed3cf84ee3c784b70fd5078f8ed4e022e02bde27473a7bf44dbbe
5
5
  SHA512:
6
- metadata.gz: da5524a1621bd1202f943c201b79b425ae4c203a9642a633b2a8a66fc85a0b8d3a250464c18432b791ce7e656c5b1a3940bc93d004f0bc18aa5413f931fc74bf
7
- data.tar.gz: ab9cd266e002fcf85a12e1051a6b6a9fb9f47479ac2d7d883abcb99306d09ea6a196cb5d7de98a8c4f8a6635a78284e14e689cc2786f0a994eb504db0a0545ee
6
+ metadata.gz: 94bc33d333f3652cbdfa12169432d7a139b568cb72d4ae08994921760d2f7c8348a8d35f717053c059866ce7e640d08c9af6495a5e37132b2b667d1895b889da
7
+ data.tar.gz: ee2ee8e37250de111c419566c74d7b5954b02137f9e6fcb88cf9ff26820583698faf2533e6d01ae5738481bab91797060e2773781e9c93cb8da26efce602c1b0
data/README.md CHANGED
@@ -10,7 +10,7 @@ The following constraints apply:
10
10
 
11
11
  * No support for macruby extensions
12
12
  * Only support for the [modern AST](https://github.com/whitequark/parser/#usage) format
13
- * Only support for Ruby >= 2.5
13
+ * Only support for Ruby >= 2.7
14
14
 
15
15
  Notable Users:
16
16
 
@@ -110,7 +110,7 @@ If you need to generate Ruby Syntax outside of this band feel free to contact me
110
110
  Testing:
111
111
  --------
112
112
 
113
- Unparser currently successfully round trips almost all ruby code around. Using MRI-2.5.x.
113
+ Unparser currently successfully round trips almost all ruby code around. Using Ruby >= 2.6.
114
114
  If there is a non round trippable example that is NOT subjected to known [Limitations](#limitations).
115
115
  please report a bug.
116
116
 
@@ -187,10 +187,15 @@ Contributing
187
187
  * Make your feature addition or bug fix.
188
188
  * Add tests for it. This is important so I don't break it in a
189
189
  future version unintentionally.
190
- * Commit, do not mess with Rakefile or version
190
+ * Commit, do not mess with version
191
191
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
192
192
  * Send me a pull request. Bonus points for topic branches.
193
193
 
194
+ Known Users
195
+ -------------
196
+
197
+ * [RailsRocket](https://www.railsrocket.app) - A no-code app builder that creates Rails apps
198
+
194
199
  License
195
200
  -------
196
201
 
data/bin/unparser CHANGED
@@ -2,7 +2,7 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  trap('INT') do |status|
5
- exit! 128 + status
5
+ exit! status + 128
6
6
  end
7
7
 
8
8
  require 'unparser'
@@ -101,7 +101,8 @@ module Unparser
101
101
  def visibility
102
102
  if @descendant.private_method_defined?(@method_name) then :private
103
103
  elsif @descendant.protected_method_defined?(@method_name) then :protected
104
- else :public
104
+ else
105
+ :public
105
106
  end
106
107
  end
107
108
 
@@ -44,7 +44,6 @@ module Unparser
44
44
  #
45
45
  def append_without_prefix(string)
46
46
  write(string)
47
- self
48
47
  end
49
48
 
50
49
  # Increase indent
@@ -77,7 +76,6 @@ module Unparser
77
76
  #
78
77
  def nl
79
78
  write(NL)
80
- self
81
79
  end
82
80
 
83
81
  def root_indent
@@ -107,18 +105,6 @@ module Unparser
107
105
  @content.dup.freeze
108
106
  end
109
107
 
110
- # Capture the content written to the buffer within the block
111
- #
112
- # @return [String]
113
- #
114
- # @api private
115
- #
116
- def capture_content
117
- size_before = @content.size
118
- yield
119
- @content[size_before..-1]
120
- end
121
-
122
108
  # Write raw fragment to buffer
123
109
  #
124
110
  # Does not do indentation logic.
data/lib/unparser/cli.rb CHANGED
@@ -76,6 +76,7 @@ module Unparser
76
76
  @targets = []
77
77
 
78
78
  @fail_fast = false
79
+ @start_with = nil
79
80
  @success = true
80
81
  @validation = :validation
81
82
  @verbose = false
@@ -28,7 +28,10 @@ module Unparser
28
28
 
29
29
  private
30
30
 
31
+ # Well rubocop you are static so you do not have a clue here ;)
32
+ # rubocop:disable Style/RedundantInitialize
31
33
  def initialize; end
34
+ # rubocop:enable Style/RedundantInitialize
32
35
 
33
36
  end.new
34
37
 
@@ -2,11 +2,13 @@
2
2
 
3
3
  module Unparser
4
4
  class Emitter
5
- # Emitter for block and kwrestarg arguments
6
- class Morearg < self
5
+ # Emitter for forwarding arguments
6
+ class ForwardArg < self
7
7
  MAP = {
8
- blockarg: '&',
9
- kwrestarg: '**'
8
+ blockarg: '&',
9
+ forwarded_kwrestarg: '**',
10
+ forwarded_restarg: '*',
11
+ kwrestarg: '**'
10
12
  }.freeze
11
13
 
12
14
  handle(*MAP.keys)
@@ -127,7 +129,7 @@ module Unparser
127
129
 
128
130
  def dispatch
129
131
  write('&')
130
- visit(name)
132
+ visit(name) if name
131
133
  end
132
134
 
133
135
  end # BlockPass
@@ -15,8 +15,8 @@ module Unparser
15
15
  emit_target
16
16
  ws
17
17
  write_open
18
- target_writer.emit_heredoc_reminders if n_send?(target)
19
18
  emit_block_arguments unless n_lambda?(target)
19
+ target_writer.emit_heredoc_reminders if n_send?(target)
20
20
  emit_optional_body_ensure_rescue(body)
21
21
  write_close
22
22
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unparser
4
+ class Emitter
5
+ # Emitter for in pattern nodes
6
+ class FindPattern < self
7
+ handle :find_pattern
8
+
9
+ private
10
+
11
+ def dispatch
12
+ write('[')
13
+ delimited(children)
14
+ write(']')
15
+ end
16
+ end # FindPattern
17
+ end # Emitter
18
+ end # Unparser
@@ -6,14 +6,6 @@ module Unparser
6
6
  class Hash < self
7
7
  handle :hash
8
8
 
9
- def emit_last_argument_hash
10
- if children.empty?
11
- write('{}')
12
- else
13
- emit_hash_body
14
- end
15
- end
16
-
17
9
  def emit_heredoc_reminders
18
10
  children.each(&method(:emit_heredoc_reminder_member))
19
11
  end
@@ -60,7 +60,7 @@ module Unparser
60
60
  end
61
61
 
62
62
  def write_symbol_body(symbol)
63
- write(symbol.inspect[1..-1])
63
+ write(symbol.inspect[1..])
64
64
  end
65
65
  end # Pin
66
66
  end # Emitter
@@ -6,17 +6,25 @@ module Unparser
6
6
  class MatchPattern < self
7
7
 
8
8
  handle :match_pattern
9
- handle :match_pattern_p
10
9
 
11
10
  children :target, :pattern
12
11
 
12
+ # Modern ast format emits `match_pattern`
13
+ # node on single line pre 3.0, but 3.0+ uses `match_pattern_p`
14
+ SYMBOL =
15
+ if RUBY_VERSION < '3.0'
16
+ ' in '
17
+ else
18
+ ' => '
19
+ end
20
+
13
21
  private
14
22
 
15
23
  def dispatch
16
24
  visit(target)
17
- write(' in ')
25
+ write(SYMBOL)
18
26
  visit(pattern)
19
27
  end
20
- end # InPattern
28
+ end # MatchPattern
21
29
  end # Emitter
22
30
  end # Unparser
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Unparser
4
+ class Emitter
5
+ class MatchPatternP < self
6
+
7
+ handle :match_pattern_p
8
+
9
+ children :target, :pattern
10
+
11
+ private
12
+
13
+ def dispatch
14
+ visit(target)
15
+ write(' in ')
16
+ visit(pattern)
17
+ end
18
+ end # MatchPatternP
19
+ end # Emitter
20
+ end # Unparser
@@ -4,8 +4,15 @@ module Unparser
4
4
  class Emitter
5
5
  # Emiter for match rest nodes
6
6
  class MatchRest < self
7
+ handle :match_rest
8
+
7
9
  children :match_var
8
10
 
11
+ def dispatch
12
+ write('*')
13
+ visit(match_var) if match_var
14
+ end
15
+
9
16
  def emit_array_pattern
10
17
  write('*')
11
18
  emit_match_var
@@ -19,7 +19,10 @@ module Unparser
19
19
  end
20
20
 
21
21
  def binary_syntax_allowed?
22
- selector_binary_operator? && arguments.one? && !n_splat?(arguments.first)
22
+ selector_binary_operator? \
23
+ && arguments.one? \
24
+ && !n_splat?(arguments.first) \
25
+ && !n_kwargs?(arguments.first)
23
26
  end
24
27
 
25
28
  def selector_unary_operator?
@@ -48,7 +51,7 @@ module Unparser
48
51
  memoize :assignment?
49
52
 
50
53
  def arguments
51
- children[2..-1]
54
+ children[2..]
52
55
  end
53
56
  memoize :arguments
54
57
 
@@ -36,18 +36,20 @@ module Unparser
36
36
  args
37
37
  array
38
38
  array_pattern
39
- empty_else
40
39
  begin
41
40
  block
42
41
  cbase
43
42
  const
44
43
  dstr
44
+ empty_else
45
45
  ensure
46
46
  hash
47
47
  hash_pattern
48
48
  if
49
49
  in_pattern
50
50
  int
51
+ kwarg
52
+ kwargs
51
53
  kwsplat
52
54
  lambda
53
55
  match_rest
@@ -113,18 +113,6 @@ module Unparser
113
113
  n_str?(last) && last.children.first[-1].eql?("\n")
114
114
  end
115
115
 
116
- def emit_squiggly_heredoc_body
117
- buffer.indent
118
- children.each do |child|
119
- if n_str?(child)
120
- write(escape_dynamic(child.children.first))
121
- else
122
- emit_dynamic(child)
123
- end
124
- end
125
- buffer.unindent
126
- end
127
-
128
116
  def emit_normal_heredoc_body
129
117
  buffer.root_indent do
130
118
  children.each do |child|
@@ -17,7 +17,7 @@ module Unparser
17
17
 
18
18
  write(MAP.fetch(name, name).to_s)
19
19
 
20
- if n_int?(receiver) && selector.equal?(:'+@')
20
+ if n_int?(receiver) && selector.equal?(:+@)
21
21
  write('+')
22
22
  end
23
23
 
@@ -6,8 +6,8 @@ module Unparser
6
6
  class Send
7
7
  include Writer, Adamantium, Constants, Generation
8
8
 
9
- INDEX_ASSIGN = :'[]='
10
- INDEX_REFERENCE = :'[]'
9
+ INDEX_ASSIGN = :[]=
10
+ INDEX_REFERENCE = :[]
11
11
 
12
12
  OPERATORS = {
13
13
  csend: '&.',
@@ -45,7 +45,7 @@ module Unparser
45
45
  def effective_writer_class
46
46
  if details.binary_syntax_allowed?
47
47
  Binary
48
- elsif details.selector_unary_operator? && n_send?(node)
48
+ elsif details.selector_unary_operator? && n_send?(node) && arguments.empty?
49
49
  Unary
50
50
  elsif write_as_attribute_assignment?
51
51
  AttributeAssignment
data/lib/unparser.rb CHANGED
@@ -218,7 +218,9 @@ require 'unparser/emitter/xstr'
218
218
  require 'unparser/emitter/yield'
219
219
  require 'unparser/emitter/kwargs'
220
220
  require 'unparser/emitter/pair'
221
+ require 'unparser/emitter/find_pattern'
221
222
  require 'unparser/emitter/match_pattern'
223
+ require 'unparser/emitter/match_pattern_p'
222
224
  require 'unparser/writer'
223
225
  require 'unparser/writer/binary'
224
226
  require 'unparser/writer/dynamic_string'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unparser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-16 00:00:00.000000000 Z
11
+ date: 2023-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs
@@ -30,42 +30,42 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 3.0.0
33
+ version: 3.2.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 3.0.0
40
+ version: 3.2.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mutant
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.10.25
47
+ version: 0.11.18
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.10.25
54
+ version: 0.11.18
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: mutant-rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.10.25
61
+ version: 0.11.18
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.10.25
68
+ version: 0.11.18
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -184,6 +184,7 @@ files:
184
184
  - lib/unparser/emitter/defined.rb
185
185
  - lib/unparser/emitter/dstr.rb
186
186
  - lib/unparser/emitter/dsym.rb
187
+ - lib/unparser/emitter/find_pattern.rb
187
188
  - lib/unparser/emitter/flipflop.rb
188
189
  - lib/unparser/emitter/float.rb
189
190
  - lib/unparser/emitter/flow_modifier.rb
@@ -203,6 +204,7 @@ files:
203
204
  - lib/unparser/emitter/match_alt.rb
204
205
  - lib/unparser/emitter/match_as.rb
205
206
  - lib/unparser/emitter/match_pattern.rb
207
+ - lib/unparser/emitter/match_pattern_p.rb
206
208
  - lib/unparser/emitter/match_rest.rb
207
209
  - lib/unparser/emitter/match_var.rb
208
210
  - lib/unparser/emitter/mlhs.rb
@@ -249,6 +251,7 @@ metadata:
249
251
  bug_tracker_uri: https://github.com/mbj/unparser/issues
250
252
  changelog_uri: https://github.com/mbj/unparser/blob/master/Changelog.md
251
253
  funding_uri: https://github.com/sponsors/mbj
254
+ rubygems_mfa_required: 'true'
252
255
  post_install_message:
253
256
  rdoc_options: []
254
257
  require_paths:
@@ -257,15 +260,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
257
260
  requirements:
258
261
  - - ">="
259
262
  - !ruby/object:Gem::Version
260
- version: '2.5'
263
+ version: '2.7'
261
264
  required_rubygems_version: !ruby/object:Gem::Requirement
262
265
  requirements:
263
266
  - - ">="
264
267
  - !ruby/object:Gem::Version
265
268
  version: '0'
266
269
  requirements: []
267
- rubyforge_project:
268
- rubygems_version: 2.7.6.2
270
+ rubygems_version: 3.3.26
269
271
  signing_key:
270
272
  specification_version: 4
271
273
  summary: Generate equivalent source for parser gem AST nodes