From 1d1bf71f1e91cdc650cbe35c054779d85f75c6db Mon Sep 17 00:00:00 2001 From: Jean-Philippe Date: Sat, 21 Feb 2026 14:41:52 -0500 Subject: [PATCH] Add Ruby 4.0 support via Prism parser Switch from Parser::CurrentRuby to Prism::Translation::Parser for future-proof Ruby 4.0+ syntax support. Parser::CurrentRuby silently falls back to Ruby33 parser on Ruby 4.0 since the parser gem doesn't know about it yet. - Replace Parser::CurrentRuby with Prism::Translation::Parser - Use Prism::Translation::Parser::Builder as default builder - Add explicit prism runtime dependency - Add Ruby 4.0 to CI matrix - Bump version to 2.1.0 Co-authored-by: Cursor --- .github/workflows/ci.yml | 2 +- Gemfile.lock | 3 ++- ast_transform.gemspec | 1 + lib/ast_transform/source_map.rb | 2 +- lib/ast_transform/transformer.rb | 9 +++++---- lib/ast_transform/version.rb | 2 +- 6 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 869fdad..66ef1de 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - ruby: ['3.2', '3.3'] + ruby: ['3.2', '3.3', '4.0'] steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 diff --git a/Gemfile.lock b/Gemfile.lock index 812d8e3..c8e16a7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,8 +1,9 @@ PATH remote: . specs: - ast_transform (2.0.0) + ast_transform (2.1.0) parser (>= 3.0) + prism (>= 1.5) unparser (>= 0.6) GEM diff --git a/ast_transform.gemspec b/ast_transform.gemspec index e8cf193..e93e0c3 100644 --- a/ast_transform.gemspec +++ b/ast_transform.gemspec @@ -31,5 +31,6 @@ Gem::Specification.new do |spec| # Runtime dependencies spec.add_runtime_dependency "parser", ">= 3.0" + spec.add_runtime_dependency "prism", ">= 1.5" spec.add_runtime_dependency "unparser", ">= 0.6" end diff --git a/lib/ast_transform/source_map.rb b/lib/ast_transform/source_map.rb index ba61603..ae73ee2 100644 --- a/lib/ast_transform/source_map.rb +++ b/lib/ast_transform/source_map.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require 'parser/current' +require 'parser' module ASTTransform class SourceMap diff --git a/lib/ast_transform/transformer.rb b/lib/ast_transform/transformer.rb index a373fc5..4d53ea1 100644 --- a/lib/ast_transform/transformer.rb +++ b/lib/ast_transform/transformer.rb @@ -1,5 +1,6 @@ # frozen_string_literal: true -require 'parser/current' +require 'prism' +require 'prism/translation/parser' require 'unparser' require 'ast_transform/source_map' @@ -8,8 +9,8 @@ class Transformer # Constructs a new Transformer instance. # # @param transformations [Array] The transformations to be run. - # @param builder [Parser::Builders::Default] The AST Node builder. - def initialize(*transformations, builder: Parser::Builders::Default.new) + # @param builder [Prism::Translation::Parser::Builder] The AST Node builder. + def initialize(*transformations, builder: Prism::Translation::Parser::Builder.new) @transformations = transformations @builder = builder end @@ -99,7 +100,7 @@ def create_buffer(source, file_path) def parser @parser&.reset - @parser ||= Parser::CurrentRuby.new(@builder) + @parser ||= Prism::Translation::Parser.new(@builder) end def register_source_map(source_file_path, transformed_file_path, transformed_ast, transformed_source) diff --git a/lib/ast_transform/version.rb b/lib/ast_transform/version.rb index 02ae8cf..1e638f8 100644 --- a/lib/ast_transform/version.rb +++ b/lib/ast_transform/version.rb @@ -1,3 +1,3 @@ module ASTTransform - VERSION = "2.0.0" + VERSION = "2.1.0" end