swift-syntax
swift-syntax copied to clipboard
Improve diagnostics for misspelt 'assocatedtype'
Description
Almost everything in Swift uses camelCase. A notable exception is associatedtype
. If a user happens to write associatedType
in a protocol declaration we currently provide rather poor diagnostics, assuming they meant to declare a function requirement. We should improve those diagnostics, pointing them to the recognised spelling.
Steps to reproduce
Welcome to Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100).
Type :help for assistance.
1> protocol A {
2. associatedType Foo
3. }
expression failed to parse:
error: error while processing module import: error: repl.swift:2:5: error: expected 'func' keyword in instance method declaration
associatedType Foo
^
func
error: repl.swift:2:20: error: found an unexpected second identifier in function declaration; is there an accidental break?
associatedType Foo
^
repl.swift:2:20: note: join the identifiers together
associatedType Foo
~~~~~~~~~~~~~~~^~~
associatedTypeFoo
error: repl.swift:2:23: error: expected '(' in argument list of function declaration
associatedType Foo
^
fixed expression suggested:
protocol A {
associatedType Foo
}
Note that the suggested "fixed" expression does not correct the capitalisation.
Expected behavior
Expect we would notice that a user writing associatedType
is clearly trying to write associatedtype
, and direct them to the correct spelling.
Environment
- Swift compiler version info
swift-driver version: 1.75.2 Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100)
Target: arm64-apple-macosx13.0
- Xcode version info
Xcode 14.3
Build version 14E222b
@ahoppen Should we start transferring parser recovery issues like these to swift-syntax?
Yes, we should track them in the swift-syntax repo + attach the SwiftParser keyword.
Tracked in Apple’s issue tracker as rdar://115385848
Yes, we should track them in the swift-syntax repo
Here are some more: apple/swift-syntax#2196, apple/swift-syntax#2204, apple/swift-syntax#2198.