[swift-evolution] Warning when omitting default case for imported enums
Tanner Nelson
tanner at vapor.codes
Tue Feb 7 09:12:31 CST 2017
Hello Swift Evolution,
I'd like to propose that a warning be emitted when default cases are
omitted for enums from other modules.
What this would look like:
OtherModule:
```
public enum SomeEnum {
case one
case two
}
public let global: SomeEnum = .one
```
executable:
```
import OtherModule
switch OtherModule.global {
case .one: break
case .two: break
^~~~~ ⚠︎ Warning: Default case recommended for imported enums. Fix-it:
Add `default: break`
}
```
Why:
Allowing the omission of a default case in an exhaustive switch makes the
addition of a new case to the enum a breaking change.
In other words, if you're exhaustively switching on an enum from an
imported library, the imported library can break your code by adding a new
case to that enum (which the library authors may erroneously view as an
additive/minor-bump change).
Background:
As a maintainer of a Swift framework, public enums have been a pain point
in maintaining semver. They've made it difficult to implement additive
features and have necessitated the avoidance of enums in our future public
API plans.
Related Twitter thread:
https://twitter.com/tanner0101/status/796860273760104454
Looking forward to hearing your thoughts.
Best,
Tanner
Tanner Nelson
Vapor
+1 (435) 773-2831
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170207/972ff6e7/attachment.html>
More information about the swift-evolution
mailing list