[Bug]: Swift: a local with same name as a modifier (prefix, open, final...) used in a switch case body gives a syntax-parse error from tree-sitter-swift
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 65/100
- Issue type
- Bug
- Clarity
- Clearly specified
- Activity status
- Active
- Domain
- developer-experience, tooling
Research direction
The issue names extract.py, the Swift test parametrization, and the changelog. Read the existing handling for modifier-named identifiers and run the two Swift test files mentioned in the issue. Done means the covered switch-case expressions parse, the six additional names are included, and those tests pass; the listed exceptions remain unchanged.
Written by the indexing model from the issue text.
Description
Pre-flight checks
- I have checked the Troubleshooting section in the README
What happened?
Summary:
tree-sitter-swift 0.7.4 cannot parse a local value whose name is a Swift contextual modifier when it is used as return name <operator> or return name.member inside a switch case. The grammar reads the identifier as a declaration modifier waiting for a declaration, and the surrounding code collapses into ERROR nodes. Graphify warns about a syntax-parse error at line: X and extracts the file only partially.
Related but distinct: #3540 (another tree-sitter-swift parse failure, if let x = await ...).
The trigger is a modifier-named identifier at the start of an expression statement inside a case body, followed by an operator or member access.
Limits and unfixed exceptions (the fix doesn't cover these, so behavior is unchanged: partial extraction plus the warning):
- A function parameter named like a modifier. Renaming it would change the argument label and every call site.
- A closure parameter, as in
xs.map { prefix in ... }. - Tuple destructuring, as in
let (prefix, b) = t. - A file with any other syntax error, because the rewrite is accepted only if the whole file then parses cleanly.
- Names I haven't tested. The list is only what I verified.
Covered: if let prefix = x, and a type-scope property with the same name.
Code change: added six names that also fail to extract.py, the test parametrization, and the changelog: distributed, nonmutating, public, private, internal and fileprivate.
Validation: The Swift tests pass, 36 of 36 in the two files I re-ran after the change. I did not re-run the full suite because it had 8 failures before this change, and they also fail without this fix.
static, class and inout also error, but they are reserved keywords, so let class = 1 isn't valid Swift.
Steps to reproduce
Minimal repro
let prefix = "x"
switch kind {
case 0:
return prefix + "a" // error
| Case body | Result |
|---|---|
return prefix + "a" |
error |
return prefix.count > 0 ? "a" : "b" |
error |
return prefix |
ok |
print(prefix) |
ok |
let y = prefix |
ok |
x = prefix + "a" |
ok |
return "a" + prefix |
ok |
return pfx + "a" (local renamed) |
ok |
return prefix + "a" inside if k == 0 { ... } instead of a switch |
ok |
return prefix + "a" after the switch, outside any case |
ok |
Error output or graph output
codefile.swift had a syntax-parse error at line X, so its extraction may be partial (Y symbols found).
Graphify version
0.9.102
Operating System
macOS
Python Version
3.13
Installation Method
uv tool install (recommended)
Additional Environment Details
No response
Additional context
No response
- Dominant language
- Python
- Stars
- 124k
- Forks
- 11.9k
- Avg merge
- 2h 35m
- Merged PRs (30d)
- 6
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Graphify-Labs/graphify
-
[Bug]: valid JSON with the wrong global-manifest shape bypasses recoveryPossibly taken @azizur100389 claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 64/100
Graphify-Labs/graphify#5020 · 1 comment ·
Maintainers usually reply within 1 day
-
[Bug]: malformed learning sidecar data can hide valid annotationsPossibly taken @azizur100389 claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Graphify-Labs/graphify#5019 · 1 comment ·
Maintainers usually reply within 1 day
-
[Bug]: graphify update skips or partially rebuilds a missing graph when the manifest survivesPossibly taken @azizur100389 claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
Graphify-Labs/graphify#5016 · 1 comment ·
Maintainers usually reply within 1 day
-
extract --out <dir>: semantic cache never saved, docs missing from manifest (relative source_file resolved against --out)Possibly taken A pull request linked to this issue is open or already merged. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Graphify-Labs/graphify#4831 · 3 comments ·
Maintainers usually reply within 1 day
-
hooks: last-resort `python3` probe launches the Microsoft Store redirector on Windows (visible console flash, exit 9009)Possibly taken @Deepjyoti-Sarmah claimed this 17 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Graphify-Labs/graphify#4563 · 2 comments ·
Maintainers usually reply within 1 day
All issues in Graphify-Labs/graphify
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
fritzprix/libr-agent#2612 ·
Maintainers usually reply within 1 day
-
needs-triage presubmit-gate
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
gke-labs/kube-agents#5001 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
simonw/sqlite-utils#928 ·
Maintainers usually reply within 3 days
-
colorado
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
freelawproject/juriscraper#2405 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
cline/mcp-marketplace#3576 ·