unified: Emit function and initializer parameter types

Emit a parameter's declared type on the mapped `parameter` node. The
tree-sitter path dropped it — its untyped-parameter rule was ordered
before the typed one and shadowed it — and the mapping matched that for
corpus parity; swift-syntax models the type as a required
`functionParameter.type`, so emitting it is a correctness improvement.

The existing function-parameter corpus cases (and the initializer cases
from the previous commit) witness the restored types.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Taus
2026-07-23 13:05:28 +00:00
parent f9c1279041
commit 3f56bc7d5e
8 changed files with 31 additions and 7 deletions

View File

@@ -560,17 +560,13 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
),
// A function parameter. With two names (`firstName`+`secondName`) the
// first is the external argument label and the second the internal name;
// with one name it is just the internal name. The default value is
// optional.
//
// PARITY: the declared type is intentionally dropped. In the tree-sitter
// path the untyped-parameter rule was ordered before the typed one and
// shadowed it (first match wins), so the baseline emits no parameter
// type; emitting one here would diverge from it.
// with one name it is just the internal name. The declared type is
// emitted; the default value is optional.
rule!(
(functionParameter
firstName: @@first
secondName: _? @@second
type: @ty
defaultValue: (initializerClause value: @val)?)
=>
parameter {
@@ -581,6 +577,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
tree!((parameter
external_name: {external}
pattern: (name_pattern identifier: (identifier #{name}))
type: {ty}
default: {val}))
}
),

View File

@@ -69,6 +69,9 @@ top_level
name: identifier "greet"
parameter:
parameter
type:
named_type_expr
name: identifier "String"
pattern:
name_pattern
identifier: identifier "name"

View File

@@ -61,6 +61,9 @@ top_level
parameter:
parameter
external_name: identifier "person"
type:
named_type_expr
name: identifier "String"
pattern:
name_pattern
identifier: identifier "name"

View File

@@ -78,11 +78,17 @@ top_level
parameter:
parameter
external_name: identifier "_"
type:
named_type_expr
name: identifier "Int"
pattern:
name_pattern
identifier: identifier "a"
parameter
external_name: identifier "_"
type:
named_type_expr
name: identifier "Int"
pattern:
name_pattern
identifier: identifier "b"

View File

@@ -68,6 +68,9 @@ top_level
parameter:
parameter
external_name: identifier "_"
type:
named_type_expr
name: identifier "T"
pattern:
name_pattern
identifier: identifier "x"

View File

@@ -82,6 +82,9 @@ top_level
parameter:
parameter
external_name: identifier "_"
type:
named_type_expr
name: identifier "Int"
pattern:
name_pattern
identifier: identifier "values"

View File

@@ -105,6 +105,9 @@ top_level
constructor_declaration
parameter:
parameter
type:
named_type_expr
name: identifier "Int"
pattern:
name_pattern
identifier: identifier "x"

View File

@@ -71,11 +71,17 @@ top_level
parameter:
parameter
external_name: identifier "width"
type:
named_type_expr
name: identifier "Int"
pattern:
name_pattern
identifier: identifier "w"
parameter
external_name: identifier "height"
type:
named_type_expr
name: identifier "Int"
pattern:
name_pattern
identifier: identifier "h"