Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto Apto para principiantes
#169 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
68/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
swift
Área
backend

Línea de trabajo

Empieza leyendo la expansión de la macro que se muestra en el issue y sigue cómo @CodedAt genera la condición de decodificación para los valores asociados con etiqueta. Compila el enum proporcionado con Swift 6 y confirma la advertencia por container sin usar. La tarea está terminada cuando el código generado para esta entrada válida se compila sin esa advertencia.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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"
    }
}
Lenguaje dominante
Swift
Estrellas
779
Forks
46
Merge medio
9 h 7 min
PR fusionados (30 d)
2

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de SwiftyLab/MetaCodable

Todos los issues de SwiftyLab/MetaCodable

Issues similares

Más issues de Swift

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.