diff options
Diffstat (limited to 'lib/prism/translation/parser.rb')
| -rw-r--r-- | lib/prism/translation/parser.rb | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/lib/prism/translation/parser.rb b/lib/prism/translation/parser.rb index 5f2f01dbda..70031f133a 100644 --- a/lib/prism/translation/parser.rb +++ b/lib/prism/translation/parser.rb @@ -1,9 +1,15 @@ # frozen_string_literal: true +# :markup: markdown begin + required_version = ">= 3.3.7.2" + gem "parser", required_version require "parser" rescue LoadError - warn(%q{Error: Unable to load parser. Add `gem "parser"` to your Gemfile.}) + warn(<<~MSG) + Error: Unable to load parser #{required_version}. \ + Add `gem "parser"` to your Gemfile or run `bundle update parser`. + MSG exit(1) end @@ -13,6 +19,13 @@ module Prism # whitequark/parser gem's syntax tree. It inherits from the base parser for # the parser gem, and overrides the parse* methods to parse with prism and # then translate. + # + # Note that this version of the parser always parses using the latest + # version of Ruby syntax supported by Prism. If you want specific version + # support, use one of the version-specific subclasses, such as + # `Prism::Translation::Parser34`. If you want to parse using the same + # version of Ruby syntax as the currently running version of Ruby, use + # `Prism::Translation::ParserCurrent`. class Parser < ::Parser::Base Diagnostic = ::Parser::Diagnostic # :nodoc: private_constant :Diagnostic @@ -20,7 +33,7 @@ module Prism # The parser gem has a list of diagnostics with a hard-coded set of error # messages. We create our own diagnostic class in order to set our own # error messages. - class PrismDiagnostic < Diagnostic + class PrismDiagnostic < Diagnostic # :nodoc: # This is the cached message coming from prism. attr_reader :message @@ -59,13 +72,19 @@ module Prism # should be implemented as needed. # def initialize(builder = Prism::Translation::Parser::Builder.new, parser: Prism) + if !builder.is_a?(Prism::Translation::Parser::Builder) + warn(<<~MSG, uplevel: 1, category: :deprecated) + [deprecation]: The builder passed to `Prism::Translation::Parser.new` is not a \ + `Prism::Translation::Parser::Builder` subclass. This will raise in the next major version. + MSG + end @parser = parser super(builder) end def version # :nodoc: - 34 + 41 end # The default encoding for Ruby files is UTF-8. @@ -337,8 +356,10 @@ module Prism "3.3.1" when 34 "3.4.0" - when 35 - "3.5.0" + when 35, 40 + "4.0.0" + when 41 + "4.1.0" else "latest" end |
