[Bug] @CodedAt with enum with labeled associated values produces compile time warnings
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 68/100
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
- I have read the documentation.
- I have read the limitations.
- I could not find my issue.
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:
- Create project with following
enum
@Codable
@CodedAt("type")
enum TypeObject {
case type1(number: Int)
}
- 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
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de SwiftyLab/MetaCodable
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
SwiftyLab/MetaCodable#82 · 6 comentarios ·
-
enhancement good first issue
Dificultad 4/5 3-5 días Aptitud para principiantes 32/100
SwiftyLab/MetaCodable#49 · 5 comentarios · 2 reacciones ·
Todos los issues de SwiftyLab/MetaCodable
Issues similares
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
NobiResearch/Ovenbird#148 ·
Los mantenedores suelen responder en 1 día
-
[Author] @pablocolaiacovoAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 72/100
shanselman/TinyToolTown#883 ·
Los mantenedores suelen responder en 5 días
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
521xueweihan/HelloGitHub#4149 ·
-
Android: theme prop is ignored in R8-minified release builds (Theme enum is not Enumerable)Posiblemente ocupada @1kuko3 la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100