Files
swift-mirror/userdocs/diagnostics/deprecated-declaration.md
Doug Gregor f45271f569 Move diagnostic group documentation in with educational notes
Since these different forms of documentation have a similar purpose,
and there's already some infrastructure for educational notes, unify all of
the diagnostics-related documentation in a single place.

We might consider unifying these ideas in the compiler as well, but
that's for another day.
2025-02-27 21:19:02 -08:00

2.4 KiB

Deprecated Declaration Warnings (DeprecatedDeclaration)

This diagnostic group includes warnings related to deprecated APIs that may be removed in future versions and should be replaced with more current alternatives.

The DeprecatedDeclaration group covers the following warnings:

  • Use of a function annotated with @available(<platform>, deprecated: <version>)
    @available(iOS, deprecated: 10.0)
    func oldFunction() {
      // This function is deprecated and should not be used.
    }
    
    oldFunction() // 'oldFunction()' is deprecated
    
  • Use of a function annotated with @available(<platform>, deprecated: <version>, renamed: "<new name>")
    @available(iOS, deprecated: 10.0, renamed: "newFunction")
    func oldFunction() {
      // This function is deprecated and should not be used.
    }
    
    oldFunction() // 'oldFunction()' is deprecated: renamed to 'newFunction'
    
  • Use of a type as an instance of a protocol when the type's conformance to the protocol is marked as deprecated
    struct S {}
    
    protocol P {}
    
    @available(*, deprecated)
    extension S: P {}
    
    func f(_ p: some P) {}
    
    func test() {
      f(S()) // Conformance of 'S' to 'P' is deprecated
    }
    
  • When a protocol requirement has a default implementation marked as deprecated and the type conforming to the protocol doesn't provide that requirement
    protocol P {
      func f()
      func g()
    }
    
    extension P {
      @available(*, deprecated)
      func f() {}
      @available(*, deprecated, message: "write it yourself")
      func g() {}
    }
    
    struct S: P {} // deprecated default implementation is used to satisfy instance method 'f()' required by protocol 'P'
                  // deprecated default implementation is used to satisfy instance method 'g()' required by protocol 'P': write it yourself
    
  • When a protocol requirement has been deprecated
    struct S: Hashable {
      var hashValue: Int { // 'Hashable.hashValue' is deprecated as a protocol requirement; conform type 'S' to 'Hashable' by implementing 'hash(into:)' instead
        ...
      }
    }
    final class C: Executor {
      func enqueue(_ job: __owned Job) {} // 'Executor.enqueue(Job)' is deprecated as a protocol requirement; conform type 'C' to 'Executor' by implementing 'func enqueue(ExecutorJob)' instead
    }
    

Usage Example

swiftc -Werror DeprecatedDeclaration file.swift
swiftc -warnings-as-errors -Wwarning DeprecatedDeclaration file.swift