Skip to content

Commit ae7d1a3

Browse files
paldepindCopilot
andcommitted
Translate anonymous Swift parameters as ignore patterns
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 49ef7786-959a-40d6-861f-3dcd71a73665
1 parent b985ae1 commit ae7d1a3

4 files changed

Lines changed: 25 additions & 14 deletions

File tree

‎unified/extractor/src/languages/swift/swift.rs‎

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,17 @@ fn make_or_pattern(
111111
}
112112
}
113113

114+
fn parameter_pattern(
115+
ctx: &mut yeast::build::BuildCtx<'_, SwiftContext>,
116+
name: yeast::Id,
117+
) -> yeast::OutputId {
118+
if ctx.source_text(name) == "_" {
119+
tree!((ignore_pattern #{name}))
120+
} else {
121+
tree!((identifier #{name}))
122+
}
123+
}
124+
114125
/// Translate a multi-part identifier (for example `Foo.Bar.Baz`) into a
115126
/// `member_access_expr` chain rooted at a `name_node` for the first
116127
/// part. Panics on an empty input because the grammar's `_+` quantifier
@@ -669,7 +680,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
669680
=>
670681
(parameter
671682
external_name_node: (identifier #{first})
672-
pattern: (identifier #{second})
683+
pattern: {parameter_pattern(&mut ctx, second)}
673684
type: {ty}
674685
default: {val})
675686
),
@@ -681,7 +692,7 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
681692
=>
682693
(parameter
683694
external_name_node: (identifier #{first}) // duplicate the parameter name
684-
pattern: (identifier #{first})
695+
pattern: {parameter_pattern(&mut ctx, first)}
685696
type: {ty}
686697
default: {val})
687698
),
@@ -867,14 +878,14 @@ fn translation_rules() -> Vec<Rule<SwiftContext>> {
867878
rule!(
868879
(closureParameter firstName: @@name type: _? @ty)
869880
=>
870-
(parameter pattern: (identifier #{name}) type: {ty})
881+
(parameter pattern: {parameter_pattern(&mut ctx, name)} type: {ty})
871882
),
872883
// A shorthand closure parameter (`x` in `{ x, y in … }`): a bare name
873884
// with no parentheses and no type.
874885
rule!(
875886
(closureShorthandParameter name: @@name)
876887
=>
877-
(parameter pattern: (identifier #{name}))
888+
(parameter pattern: {parameter_pattern(&mut ctx, name)})
878889
),
879890
// ---- Control flow ----
880891
// An `if`/`else` expression. Conditions are joined via `and_chain`; the

‎unified/extractor/tests/corpus/swift/expressions/array-type-constructor.output‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ top_level source="⟨body⟩"
181181
function_expr source="{ ⟨parameter⟩, ⟨parameter⟩ in\n\t⟨body⟩\n}"
182182
parameter:
183183
parameter source="⟨pattern⟩"
184-
pattern: identifier "_" source="_"
184+
pattern: ignore_pattern "_" source="_"
185185
parameter source="⟨pattern⟩"
186186
pattern: identifier "count" source="count"
187187
body:

‎unified/extractor/tests/corpus/swift/functions/function-with-anonymous-parameters.output‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -199,23 +199,23 @@ top_level source="⟨body⟩"
199199
parameter source="⟨external_name_node⟩⟨pattern⟩: ⟨type⟩"
200200
external_name_node: identifier "_" source="_"
201201
type: identifier "Int" source="Int"
202-
pattern: identifier "_" source="_"
202+
pattern: ignore_pattern "_" source="_"
203203
parameter source="⟨external_name_node⟩⟨pattern⟩: ⟨type⟩"
204204
external_name_node: identifier "_" source="_"
205205
type: identifier "String" source="String"
206-
pattern: identifier "_" source="_"
206+
pattern: ignore_pattern "_" source="_"
207207
body: block "{\n}" source="{\n}"
208208
function_declaration source="func ⟨name_node⟩(⟨parameter⟩, ⟨parameter⟩) ⟨body⟩"
209209
name_node: identifier "ignore" source="ignore"
210210
parameter:
211211
parameter source="⟨external_name_node⟩ ⟨pattern⟩: ⟨type⟩"
212212
external_name_node: identifier "first" source="first"
213213
type: identifier "Int" source="Int"
214-
pattern: identifier "_" source="_"
214+
pattern: ignore_pattern "_" source="_"
215215
parameter source="⟨external_name_node⟩ ⟨pattern⟩: ⟨type⟩"
216216
external_name_node: identifier "second" source="second"
217217
type: identifier "String" source="String"
218-
pattern: identifier "_" source="_"
218+
pattern: ignore_pattern "_" source="_"
219219
body: block "{\n}" source="{\n}"
220220
variable_declaration source="⟨modifier⟩ ⟨pattern⟩: ⟨type⟩ = ⟨value⟩"
221221
modifier: modifier "let" source="let"
@@ -232,9 +232,9 @@ top_level source="⟨body⟩"
232232
function_expr source="{ ⟨parameter⟩, ⟨parameter⟩ in\n}"
233233
parameter:
234234
parameter source="⟨pattern⟩"
235-
pattern: identifier "_" source="_"
235+
pattern: ignore_pattern "_" source="_"
236236
parameter source="⟨pattern⟩"
237-
pattern: identifier "_" source="_"
237+
pattern: ignore_pattern "_" source="_"
238238
body: block source=""
239239
variable_declaration source="⟨modifier⟩ ⟨pattern⟩ = ⟨value⟩"
240240
modifier: modifier "let" source="let"
@@ -244,8 +244,8 @@ top_level source="⟨body⟩"
244244
parameter:
245245
parameter source="⟨pattern⟩: ⟨type⟩"
246246
type: identifier "Int" source="Int"
247-
pattern: identifier "_" source="_"
247+
pattern: ignore_pattern "_" source="_"
248248
parameter source="⟨pattern⟩: ⟨type⟩"
249249
type: identifier "String" source="String"
250-
pattern: identifier "_" source="_"
250+
pattern: ignore_pattern "_" source="_"
251251
body: block source=""

‎unified/extractor/tests/corpus/swift/types/function-type-with-inout-parameter.output‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,5 @@ top_level source="⟨body⟩"
7979
function_expr source="{ ⟨parameter⟩ in }"
8080
parameter:
8181
parameter source="⟨pattern⟩"
82-
pattern: identifier "_" source="_"
82+
pattern: ignore_pattern "_" source="_"
8383
body: block source=""

0 commit comments

Comments
 (0)