diff --git a/parser/prism/Translator.cc b/parser/prism/Translator.cc index 77338ea11a8..c427116f420 100644 --- a/parser/prism/Translator.cc +++ b/parser/prism/Translator.cc @@ -1044,7 +1044,19 @@ unique_ptr Translator::translate(pm_node_t *node) { if (paramsNode->rest != nullptr) params.emplace_back(translate(paramsNode->rest)); - translateMultiInto(params, posts); + // Note: This is actually a divergence from the legacy Sorbet parser behavior, which doesn't handle `**nil` + // as a post argument. In this case, the legacy parser would just replace the entire tree with `Nil`. + for (auto &post : posts) { + switch (PM_NODE_TYPE(post)) { + case PM_NO_KEYWORDS_PARAMETER_NODE: { // `**nil` + params.emplace_back(translateSimpleKeyword(post)); + break; + } + default: + params.emplace_back(translate(post)); + } + } + translateMultiInto(params, keywords); if (auto prismKwRestNode = paramsNode->keyword_rest; prismKwRestNode != nullptr) {