Prism::Translation::Parser raises NoMethodError for a method with a &nil parameter and a body
メンテナーはふだん 1 日以内に返信
評価
調査の方向性
lib/prism/translation/parser/compiler.rbから始め、issueによるとブロックパラメータに対してnode.block.nameが呼び出されるfind_forwardingを調べてください。&nilと名前付きブロックパラメータのパラメータノードの型を比較し、メソッド定義を対象とするparser translationテストを実行してください。非空の本体と&nilパラメータを持つメソッドを解析してもNoMethodErrorが発生せず、既存のブロックとlambdaのケースも引き続き動作すれば完了です。
索引モデルが issue の本文から書いたものです。
説明
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.
- 主要言語
- C
- スター
- 1k
- フォーク
- 202
- 平均マージ
- 5時間 55分
- マージ済み PR(30日)
- 85
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
ruby/prism のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
Heredoc and outer-context recovery at recursion depth / stack budget limit causes location underflowオープン
難易度 4/5 3〜5日 初心者へのやさしさ 43/100
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 1/100
メンテナーはふだん 1 日以内に返信
-
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
メンテナーはふだん 1 日以内に返信
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
-
area: recompiler area: runtime kind: bug preview-effort: small priority: low
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100