unparser 0.6.7 → 0.6.14

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: 43c55e0072230fba02c24266555e1599559396739677e4371b6c9bca4b2a29b1
4
- data.tar.gz: 4743b675c63ed3cf84ee3c784b70fd5078f8ed4e022e02bde27473a7bf44dbbe
3
+ metadata.gz: f7ba6fe43070f8f0f156310dc9b588dfcb0dc9aef45c1eb639250efb1622d3dd
4
+ data.tar.gz: b73a4e1be5514ca85e2014be9008b59ed1a6847f370682a505d8e718d2e7cbef
5
5
  SHA512:
6
- metadata.gz: 94bc33d333f3652cbdfa12169432d7a139b568cb72d4ae08994921760d2f7c8348a8d35f717053c059866ce7e640d08c9af6495a5e37132b2b667d1895b889da
7
- data.tar.gz: ee2ee8e37250de111c419566c74d7b5954b02137f9e6fcb88cf9ff26820583698faf2533e6d01ae5738481bab91797060e2773781e9c93cb8da26efce602c1b0
6
+ metadata.gz: c360281c3941b7094ee10e09718e6b37f2de361af373942313692728f95160b3c94b979b3fe352804c7f91768edaf3e448e7ec406d392c8eeb68e1f9002ade62
7
+ data.tar.gz: 962d1c44aaa8d94aae4e60997dd75a2c8535b6a6f054f5aa382ff112c3c335a8a67d01af5700781073dce1e6e1b1f20567d7b532b2e1b7fc7dca71a701b26b10
data/README.md CHANGED
@@ -10,13 +10,13 @@ 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.7
13
+ * Only support for Ruby >= 3.1
14
14
 
15
15
  Notable Users:
16
16
 
17
17
  * [mutant](https://github.com/mbj/mutant) - Code review engine via mutation testing.
18
18
  * [ruby-next](https://github.com/ruby-next/ruby-next) - Ruby Syntax Backports.
19
- * May other [reverse-dependencies](https://rubygems.org/gems/unparser/reverse_dependencies).
19
+ * Many other [reverse-dependencies](https://rubygems.org/gems/unparser/reverse_dependencies).
20
20
 
21
21
  (if you want your tool to be mentioned here please PR the addition with a TLDR of your use case).
22
22
 
@@ -20,9 +20,11 @@ module Unparser
20
20
  # @return [Object]
21
21
  #
22
22
  # @api public
23
+ #
24
+ # mutant:disable
23
25
  def freeze
24
26
  memoized_method_cache
25
- super()
27
+ super
26
28
  end
27
29
 
28
30
  private
@@ -5,7 +5,7 @@ module Unparser
5
5
 
6
6
  # Calculated local variable scope for a given node
7
7
  class LocalVariableScope
8
- include Enumerable, Adamantium, Concord.new(:node)
8
+ include Enumerable, Adamantium
9
9
 
10
10
  # Initialize object
11
11
  #
@@ -21,7 +21,6 @@ module Unparser
21
21
  items << scope
22
22
  end
23
23
  @items = items
24
- super(node)
25
24
  end
26
25
 
27
26
  # Test if local variable was first at given assignment
data/lib/unparser/cli.rb CHANGED
@@ -169,11 +169,11 @@ module Unparser
169
169
 
170
170
  def targets(file_name)
171
171
  if File.directory?(file_name)
172
- Dir.glob(File.join(file_name, '**/*.rb')).sort
172
+ Dir.glob(File.join(file_name, '**/*.rb'))
173
173
  elsif File.file?(file_name)
174
174
  [file_name]
175
175
  else
176
- Dir.glob(file_name).sort
176
+ Dir.glob(file_name)
177
177
  end.map { |file| Target::Path.new(Pathname.new(file)) }
178
178
  end
179
179
  end # CLI
@@ -30,8 +30,10 @@ module Unparser
30
30
 
31
31
  # Well rubocop you are static so you do not have a clue here ;)
32
32
  # rubocop:disable Style/RedundantInitialize
33
+ # rubocop:disable Style/MissingSuper
33
34
  def initialize; end
34
35
  # rubocop:enable Style/RedundantInitialize
36
+ # rubocop:enable Style/MissingSuper
35
37
 
36
38
  end.new
37
39
 
@@ -25,9 +25,14 @@ module Unparser
25
25
  private
26
26
 
27
27
  def dispatch
28
- visit(left)
28
+ visit(left) if left
29
29
  write(MAP.fetch(node.type))
30
- visit(right)
30
+
31
+ if right
32
+ visit(right)
33
+ else
34
+ write(';')
35
+ end
31
36
  end
32
37
  end # FlipFLop
33
38
  end # Emitter
@@ -25,7 +25,7 @@ module Unparser
25
25
  end
26
26
 
27
27
  def emit_heredoc_reminder_member(node)
28
- emitter(node.children.last).emit_heredoc_reminders
28
+ emitter(node.children.last).emit_heredoc_reminders if n_pair?(node)
29
29
  end
30
30
 
31
31
  def emit_hash_body
@@ -9,20 +9,11 @@ module Unparser
9
9
 
10
10
  children :target, :pattern
11
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
-
21
12
  private
22
13
 
23
14
  def dispatch
24
15
  visit(target)
25
- write(SYMBOL)
16
+ write(' => ')
26
17
  visit(pattern)
27
18
  end
28
19
  end # MatchPattern
@@ -35,6 +35,11 @@ module Unparser
35
35
 
36
36
  children :target, :operator, :value
37
37
 
38
+ def emit_heredoc_reminders
39
+ emitter(target).emit_heredoc_reminders
40
+ emitter(value).emit_heredoc_reminders
41
+ end
42
+
38
43
  private
39
44
 
40
45
  def dispatch
@@ -15,19 +15,30 @@ module Unparser
15
15
  private
16
16
 
17
17
  def dispatch
18
- if colon?(key)
19
- write(key.children.first.to_s, ': ')
18
+ if colon?
19
+ emit_colon
20
+ unless implicit_value?
21
+ write(' ')
22
+ visit(value)
23
+ end
20
24
  else
21
25
  visit(key)
22
26
  write(' => ')
27
+ visit(value)
23
28
  end
24
-
25
- visit(value)
26
29
  end
27
30
 
28
- def colon?(key)
31
+ def colon?
29
32
  n_sym?(key) && BAREWORD.match?(key.children.first)
30
33
  end
34
+
35
+ def emit_colon
36
+ write(key.children.first.to_s, ':')
37
+ end
38
+
39
+ def implicit_value?
40
+ n_lvar?(value) && value.children.first.equal?(key.children.first)
41
+ end
31
42
  end
32
43
  end
33
44
  end
@@ -10,7 +10,7 @@ module Unparser
10
10
  # Emitter for primitives based on Object#inspect
11
11
  class Inspect < self
12
12
 
13
- handle :sym, :str
13
+ handle :str
14
14
 
15
15
  private
16
16
 
@@ -20,6 +20,32 @@ module Unparser
20
20
 
21
21
  end # Inspect
22
22
 
23
+ class Symbol < self
24
+
25
+ handle :sym
26
+
27
+ private
28
+
29
+ # mutant:disable
30
+ def dispatch
31
+ if inspect_breaks_parsing?
32
+ write(":#{value.name.inspect}")
33
+ else
34
+ write(value.inspect)
35
+ end
36
+ end
37
+
38
+ # mutant:disable
39
+ def inspect_breaks_parsing?
40
+ return false unless RUBY_VERSION < '3.2.'
41
+
42
+ Unparser.parse(value.inspect)
43
+ false
44
+ rescue Parser::SyntaxError
45
+ true
46
+ end
47
+ end # Symbol
48
+
23
49
  # Emitter for complex literals
24
50
  class Complex < self
25
51
 
@@ -121,25 +121,29 @@ module Unparser
121
121
  end
122
122
 
123
123
  def emit_body(node, indent: true)
124
- if indent
125
- buffer.indent
126
- nl
127
- end
128
-
129
- if n_begin?(node)
130
- if node.children.one?
131
- visit_deep(node)
124
+ with_indent(indent: indent) do
125
+ if n_begin?(node)
126
+ if node.children.empty?
127
+ write('()')
128
+ elsif node.children.one?
129
+ visit_deep(node)
130
+ else
131
+ emit_body_inner(node)
132
+ end
132
133
  else
133
- emit_body_inner(node)
134
+ visit_deep(node)
134
135
  end
135
- else
136
- visit_deep(node)
137
136
  end
137
+ end
138
138
 
139
- if indent
140
- buffer.unindent
141
- nl
142
- end
139
+ def with_indent(indent:)
140
+ return yield unless indent
141
+
142
+ buffer.indent
143
+ nl
144
+ yield
145
+ buffer.unindent
146
+ nl
143
147
  end
144
148
 
145
149
  def emit_body_inner(node)
@@ -20,6 +20,7 @@ module Unparser
20
20
 
21
21
  def binary_syntax_allowed?
22
22
  selector_binary_operator? \
23
+ && n_send?(node) \
23
24
  && arguments.one? \
24
25
  && !n_splat?(arguments.first) \
25
26
  && !n_kwargs?(arguments.first)
@@ -52,6 +52,7 @@ module Unparser
52
52
  kwargs
53
53
  kwsplat
54
54
  lambda
55
+ lvar
55
56
  match_rest
56
57
  pair
57
58
  rescue
@@ -17,6 +17,7 @@ module Unparser
17
17
  #
18
18
  # @api private
19
19
  #
20
+ # rubocop:disable Style/OperatorMethodCall
20
21
  def success?
21
22
  [
22
23
  original_source,
@@ -25,6 +26,7 @@ module Unparser
25
26
  generated_node
26
27
  ].all?(&:right?) && generated_node.from_right.==(original_node.from_right)
27
28
  end
29
+ # rubocop:enable Style/OperatorMethodCall
28
30
 
29
31
  # Return error report
30
32
  #
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.7
4
+ version: 0.6.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Schirp
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-08 00:00:00.000000000 Z
11
+ date: 2024-06-10 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.2.0
33
+ version: 3.3.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.2.0
40
+ version: 3.3.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.11.18
47
+ version: 0.12.2
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.11.18
54
+ version: 0.12.2
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.11.18
61
+ version: 0.12.2
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.11.18
68
+ version: 0.12.2
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -251,6 +251,7 @@ metadata:
251
251
  bug_tracker_uri: https://github.com/mbj/unparser/issues
252
252
  changelog_uri: https://github.com/mbj/unparser/blob/master/Changelog.md
253
253
  funding_uri: https://github.com/sponsors/mbj
254
+ source_code_uri: https://github.com/mbj/unparser
254
255
  rubygems_mfa_required: 'true'
255
256
  post_install_message:
256
257
  rdoc_options: []
@@ -260,7 +261,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
260
261
  requirements:
261
262
  - - ">="
262
263
  - !ruby/object:Gem::Version
263
- version: '2.7'
264
+ version: '3.1'
264
265
  required_rubygems_version: !ruby/object:Gem::Requirement
265
266
  requirements:
266
267
  - - ">="