Prism::Translation::Parser raises NoMethodError for a method with a &nil parameter and a body

Offen Anfängerfreundlich
#4,370 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@bbatsov arbeitet bereits daran.

Seit 11.11.2026.

  • #4371 von @bbatsov — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
82/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
ruby
Bereich
backend

Rechercherichtung

Beginne in lib/prism/translation/parser/compiler.rb und prüfe find_forwarding, wo laut Issue node.block.name für Blockparameter aufgerufen wird. Vergleiche die Parametertypen der Knoten für &nil und benannte Blockparameter und führe dann die Parser-Übersetzungstests für Methodendefinitionen aus. Die Aufgabe ist erledigt, wenn das Parsen einer Methode mit nicht leerem Rumpf und einem &nil-Parameter keinen NoMethodError mehr auslöst und die bestehenden Fälle für Blöcke und Lambdas weiterhin funktionieren.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

With Prism 2.1.0 the parser translation fails on a method that has a &nil parameter and a non-empty body:

require "prism"
require "prism/translation/parser"

buffer = Parser::Source::Buffer.new("test.rb", source: "def foo(&nil); bar; end")
Prism::Translation::Parser41.new.parse(buffer)
# => undefined method 'name' for an instance of Prism::NoBlockParameterNode (NoMethodError)

It works when the body is empty, and for blocks and lambdas (foo { |&nil| bar }).

find_forwarding in lib/prism/translation/parser/compiler.rb calls node.block.name for any block parameter, and NoBlockParameterNode has no name. Checking for a BlockParameterNode there fixes it. Happy to send a PR.

Vorherrschende Sprache
C
Sterne
1k
Forks
202
Ø Merge
5 Std. 55 Min.
Gemergte PRs (30 T.)
85

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus ruby/prism

Alle Issues in ruby/prism

Ähnliche Issues

Weitere Issues zu C

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.