[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:

public enum SomeEnum {
    case one
    case two

public let global: SomeEnum = .one

import OtherModule

switch OtherModule.global {
    case .one: break
    case .two: break
    ^~~~~ ⚠︎ Warning: Default case recommended for imported enums. Fix-it:
Add `default: break`


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).


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:

Looking forward to hearing your thoughts.


Tanner Nelson
+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