unparser 0.8.0 → 0.8.1
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 +4 -4
- data/lib/unparser/emitter/block.rb +5 -1
- data/lib/unparser/writer/dynamic_string.rb +18 -19
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 74c2dbda8910251cd49656bf6a510eb8441327d9c1f0e4f6fe1756f0f016a174
|
|
4
|
+
data.tar.gz: 3ee345b280dde6c11e5174a3ab6137f99d4a21e90996ce1aa9cec8ec36bd4bae
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9fa96e7fbb09baf4c0c04e9afe14e9f0348bf2de1601abba5360ed8cdbdd3040b742deeefb44f0485d0501a26d4798ce631e004a357aab11e21c5b131c030ef4
|
|
7
|
+
data.tar.gz: 1a3953a9be8966ff0030ea4757228bf56d4f2be565246bf843649fd3e03735353fd8da3fabd1ea1f6586502940c054981477f043086c86fa2d8264b1a526b989
|
|
@@ -51,7 +51,7 @@ module Unparser
|
|
|
51
51
|
emit_send_target
|
|
52
52
|
when :lambda
|
|
53
53
|
visit(target)
|
|
54
|
-
emit_lambda_arguments
|
|
54
|
+
emit_lambda_arguments
|
|
55
55
|
else
|
|
56
56
|
visit(target)
|
|
57
57
|
end
|
|
@@ -63,7 +63,11 @@ module Unparser
|
|
|
63
63
|
target_writer.emit_arguments_without_heredoc_body
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
+
# NOTE: mutant fails on Ruby < 3.4
|
|
67
|
+
# mutant:disable
|
|
66
68
|
def emit_lambda_arguments
|
|
69
|
+
return if node.type.equal?(:numblock) || itblock?
|
|
70
|
+
|
|
67
71
|
parentheses { writer_with(Args, node: arguments).emit_lambda_arguments }
|
|
68
72
|
end
|
|
69
73
|
|
|
@@ -26,42 +26,41 @@ module Unparser
|
|
|
26
26
|
#
|
|
27
27
|
# mutant:disable
|
|
28
28
|
def dispatch
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
# Try predictable patterns first before exhaustive search
|
|
30
|
+
|
|
31
|
+
# Pattern 1: HEREDOC for large dstr (>= 8 children, preserve readability)
|
|
32
|
+
return write_heredoc if children.length >= HEREDOC_THRESHOLD && round_trips_heredoc?
|
|
33
|
+
|
|
34
|
+
# Pattern 2: Limited search (prevent exponential blowup)
|
|
35
|
+
source = limited_search_segmented_source
|
|
36
|
+
return write(source) if source
|
|
37
|
+
|
|
38
|
+
# Pattern 3: HEREDOC fallback (last resort if segmentation fails)
|
|
39
|
+
return write_heredoc if round_trips_heredoc?
|
|
40
|
+
|
|
41
|
+
fail UnsupportedNodeError, "Unparser cannot round trip this node: #{node.inspect}"
|
|
37
42
|
end
|
|
38
43
|
|
|
39
44
|
private
|
|
40
45
|
|
|
41
|
-
def
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
else
|
|
45
|
-
round_tripping_segmented_source.nil? # && round_trips_heredoc?
|
|
46
|
-
end
|
|
46
|
+
def write_heredoc
|
|
47
|
+
write(HEREDOC_HEADER)
|
|
48
|
+
buffer.push_heredoc(heredoc_body)
|
|
47
49
|
end
|
|
48
|
-
memoize :heredoc?
|
|
49
50
|
|
|
50
51
|
def round_trips_heredoc?
|
|
51
52
|
round_trips?(source: heredoc_source)
|
|
52
53
|
end
|
|
53
54
|
memoize :round_trips_heredoc?
|
|
54
55
|
|
|
55
|
-
def
|
|
56
|
+
def limited_search_segmented_source
|
|
56
57
|
each_segments(children) do |segments|
|
|
57
|
-
|
|
58
58
|
source = segmented_source(segments: segments)
|
|
59
|
-
|
|
60
59
|
return source if round_trips?(source: source)
|
|
61
60
|
end
|
|
61
|
+
|
|
62
62
|
nil
|
|
63
63
|
end
|
|
64
|
-
memoize :round_tripping_segmented_source
|
|
65
64
|
|
|
66
65
|
def each_segments(array)
|
|
67
66
|
yield [array]
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: unparser
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.8.
|
|
4
|
+
version: 0.8.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Markus Schirp
|
|
@@ -43,28 +43,28 @@ dependencies:
|
|
|
43
43
|
requirements:
|
|
44
44
|
- - ">="
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version:
|
|
46
|
+
version: 1.5.1
|
|
47
47
|
type: :runtime
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - ">="
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version:
|
|
53
|
+
version: 1.5.1
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
55
|
name: mutant
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - "~>"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: 0.13.
|
|
60
|
+
version: 0.13.2
|
|
61
61
|
type: :development
|
|
62
62
|
prerelease: false
|
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - "~>"
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: 0.13.
|
|
67
|
+
version: 0.13.2
|
|
68
68
|
- !ruby/object:Gem::Dependency
|
|
69
69
|
name: mutant-rspec
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|