unparser 0.6.7 → 0.6.14

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
  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
  - - ">="