Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

[Bug] @CodedAt with enum with labeled associated values produces compile time warnings

Open Beginner friendly
#169 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
68/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
swift
Domain
backend

Research direction

Start by reading the macro expansion shown in the issue and tracing how @CodedAt generates the decoding condition for labeled associated values. Build the provided enum with Swift 6 and confirm the unused container warning. Done when the generated code for this valid input builds without that warning.

Written by the indexing model from the issue text.

Description

bug

Hi, it seems that #167 introduced new compile time warning for enums with labeled associated values, for example following code now produces warning - Immutable value 'container' was never used; consider replacing with '_' or removing it

@Codable
@CodedAt("type")
enum TypeObject {
    case type1(number: Int)
}

To Reproduce
Steps to reproduce the behavior:

  1. Create project with following enum
@Codable
@CodedAt("type")
enum TypeObject {
    case type1(number: Int)
}
  1. build

Expected behavior

MetaCodable should generate code that does not produce Swift compiler warnings (especially unused variable warnings) for valid inputs.

Environment (please complete the following information, remove ones not applicable):

  • OS: macOS
  • Version 27
  • Xcode 27.2
  • Swift 6

Additional context

expanded macro:

extension TypeObject: Decodable {
    init(from decoder: any Decoder) throws {
        var typeContainer: KeyedDecodingContainer<CodingKeys>?
        let container = try? decoder.container(keyedBy: CodingKeys.self)
        if let container = container {
            typeContainer = container
        } else {
            typeContainer = nil
        }
        if let typeContainer = typeContainer, let container = container { // this `let container` produces warning
            let typeString: String?
            do {
                typeString = try typeContainer.decodeIfPresent(String.self, forKey: CodingKeys.type) ?? nil
            } catch {
                typeString = nil
            }
            if let typeString = typeString {
                switch typeString {
                case "type1":
                    let number: Int
                    let container = try decoder.container(keyedBy: CodingKeys.self)
                    number = try container.decode(Int.self, forKey: CodingKeys.number)
                    self = .type1(number: number)
                    return
                default:
                    break
                }
            }
        }
        let context = DecodingError.Context(
            codingPath: decoder.codingPath,
            debugDescription: "Couldn't match any cases."
        )
        throw DecodingError.typeMismatch(Self.self, context)
    }
}

extension TypeObject: Encodable {
    func encode(to encoder: any Encoder) throws {
        let container = encoder.container(keyedBy: CodingKeys.self)
        var typeContainer = container
        switch self {
        case .type1(number: let number):
            try typeContainer.encode("type1", forKey: CodingKeys.type)
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encode(number, forKey: CodingKeys.number)
        }
    }
}

extension TypeObject {
    enum CodingKeys: String, CodingKey {
        case type = "type"
        case number = "number"
    }
}
Dominant language
Swift
Stars
779
Forks
46
Avg merge
9h 7m
Merged PRs (30d)
2

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from SwiftyLab/MetaCodable

All issues in SwiftyLab/MetaCodable

Similar issues

More Swift issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.