ast_transform 2.1.1 → 2.1.2

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: bc4f949d11b3c6ae864a5c773e6df3f286f88da246499eca57d13069e87c7376
4
- data.tar.gz: ba829cf5e50d1c23c4fad2aed2dcd0bd5cbb2ffa15bbc4a9aab0d2abbf09df1e
3
+ metadata.gz: 3322dbf3c31a96df5ddea9892b60c40b785842500c13f178d1a9b11b5842bf12
4
+ data.tar.gz: aef4ed8d812275368ec5f22c61d9b3d049ecc42490c406d08e8afd4e34e589e7
5
5
  SHA512:
6
- metadata.gz: 037e381eade462b8c9259ef14620ca55d1da3576a1028321b698dfa34cafb063fbfb8c41920aa60d56ec793bbe05842309568b5c2282006b2ce7e952bce5f4e7
7
- data.tar.gz: d4284341fa943f57666c3ca5ace2038708ed1e2e284b26c82b17c241db6b2487b638990f2a55703561f116693438a30ee4f1a556a83f31037ff44e7f5b554a50
6
+ metadata.gz: bfd3828a33d2668a854ed4d5b1c299615ca47e92232ccf6705b008437cdb43e6497b9ef517e2664f5cd68b9197f9cc78ef2bd50090152f7889490a18e28cf72a
7
+ data.tar.gz: 6f9647eaad1208d3cacb9ba038f8e63ff213d1ae7030bb96ec0a28386125096526f64bffa93100795427d67c2671b2638711c9ca891222beac01b0c046a07afc
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ast_transform (2.1.0)
4
+ ast_transform (2.1.2)
5
5
  parser (>= 3.0)
6
6
  prism (>= 1.5)
7
7
  unparser (>= 0.6)
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'prism/translation/parser'
4
+
5
+ module ASTTransform
6
+ # Extends the default Prism parser builder to distinguish keyword arguments
7
+ # from hash literals in the AST.
8
+ #
9
+ # The upstream builder always emits :hash nodes for both `foo(bar: 1)` and
10
+ # `foo({ bar: 1 })`. Unparser uses the node type to decide whether to emit
11
+ # braces: :hash gets `{}`, :kwargs does not. Since Ruby 3.0+ treats these as
12
+ # semantically different (strict keyword/positional separation), we need the
13
+ # AST to preserve the distinction.
14
+ class KwargsBuilder < Prism::Translation::Parser::Builder
15
+ def associate(begin_t, pairs, end_t)
16
+ node = super
17
+ return node unless begin_t.nil? && end_t.nil?
18
+
19
+ node.updated(:kwargs)
20
+ end
21
+ end
22
+ end
@@ -2,6 +2,7 @@
2
2
  require 'prism'
3
3
  require 'prism/translation/parser'
4
4
  require 'unparser'
5
+ require 'ast_transform/kwargs_builder'
5
6
  require 'ast_transform/source_map'
6
7
 
7
8
  module ASTTransform
@@ -9,10 +10,8 @@ module ASTTransform
9
10
  # Constructs a new Transformer instance.
10
11
  #
11
12
  # @param transformations [Array<ASTTransform::AbstractTransformation>] The transformations to be run.
12
- # @param builder [Prism::Translation::Parser::Builder] The AST Node builder.
13
- def initialize(*transformations, builder: Prism::Translation::Parser::Builder.new)
13
+ def initialize(*transformations)
14
14
  @transformations = transformations
15
- @builder = builder
16
15
  end
17
16
 
18
17
  # Builds the AST for the given +source+.
@@ -100,7 +99,7 @@ module ASTTransform
100
99
 
101
100
  def parser
102
101
  @parser&.reset
103
- @parser ||= Prism::Translation::Parser.new(@builder)
102
+ @parser ||= Prism::Translation::Parser.new(ASTTransform::KwargsBuilder.new)
104
103
  end
105
104
 
106
105
  def register_source_map(source_file_path, transformed_file_path, transformed_ast, transformed_source)
@@ -1,3 +1,3 @@
1
1
  module ASTTransform
2
- VERSION = "2.1.1"
2
+ VERSION = "2.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ast_transform
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean-Philippe Duchesne
@@ -164,6 +164,7 @@ files:
164
164
  - lib/ast_transform/instruction_sequence/bootsnap_mixin.rb
165
165
  - lib/ast_transform/instruction_sequence/mixin.rb
166
166
  - lib/ast_transform/instruction_sequence/mixin_utils.rb
167
+ - lib/ast_transform/kwargs_builder.rb
167
168
  - lib/ast_transform/source_map.rb
168
169
  - lib/ast_transform/transformation.rb
169
170
  - lib/ast_transform/transformation_helper.rb