Return Value Ignored

ID

swift.return_value_ignored

Severity

low

Remediation Complexity

trivial

Remediation Risk

low

Remediation Effort

low

Resource

Reliability

Language

Swift

Tags

reliability, unused_result

Description

Reports calls to well-known immutable-API methods whose return value is discarded. Many Swift idioms return a new instance instead of mutating the receiver (String.lowercased(), Array.sorted(), Sequence.map); ignoring the result means the operation has no effect.

var s = "Hello"
s.lowercased()                       // FLAW — result discarded

s = s.lowercased()                   // OK — assigned back
_ = s.lowercased()                   // OK — intentional discard

Rationale

Swift’s compiler emits an "unused result" warning when the callee is not marked @discardableResult, but stdlib extensions, bridged Foundation calls, and many third-party libraries omit the attribute, so the warning never appears. The rule surfaces a curated subset of well-known immutable methods (String, Array, Set, Sequence, Optional) so the mistake is caught at review time.

Remediation

Either consume the return value or signal the discard explicitly:

// 1) assign back
s = s.lowercased()

// 2) consume in a larger expression
return xs.map(transform).reduce(0, +)

// 3) explicit discard
_ = s.lowercased()

Mirrors java.return_value_ignored.

When not to fire

  • mutating methods (append, removeAll, sort, …​) — those modify the receiver in place;

  • calls assigned to a variable, returned, or passed as an argument;

  • calls chained into another expression (s.lowercased().count).