diff --git a/Sources/EnumeratorMacroImpl/EnumeratorMacroType.swift b/Sources/EnumeratorMacroImpl/EnumeratorMacroType.swift index 4e7233d..f8638ba 100644 --- a/Sources/EnumeratorMacroImpl/EnumeratorMacroType.swift +++ b/Sources/EnumeratorMacroImpl/EnumeratorMacroType.swift @@ -62,7 +62,7 @@ extension EnumeratorMacroType: MemberMacro { ) let segments = Array(syntax.segments) let segmentIdx = parserError.context.lineNumber - 2 - if segmentIdx < segments.count { + if segmentIdx >= 0, segmentIdx < segments.count { let syntaxAtErrorLine = segments[segmentIdx] errorSyntax = syntaxAtErrorLine } else { @@ -88,7 +88,19 @@ extension EnumeratorMacroType: MemberMacro { let decls = SourceFileSyntax( stringLiteral: rendered ).statements.compactMap { statement in - DeclSyntax(statement.item) + if let syntax = DeclSyntax(statement.item) { + return syntax + } else { + context.diagnose( + Diagnostic( + node: syntax, + message: MacroError.internalError( + "Could not convert an CodeBlockItemSyntax to a DeclSyntax" + ) + ) + ) + return nil + } } if let withError = decls.first(where: \.hasError) { context.diagnose( diff --git a/Sources/EnumeratorMacroImpl/MacroError.swift b/Sources/EnumeratorMacroImpl/MacroError.swift index c1f183b..a080b7d 100644 --- a/Sources/EnumeratorMacroImpl/MacroError.swift +++ b/Sources/EnumeratorMacroImpl/MacroError.swift @@ -10,6 +10,7 @@ enum MacroError: Error, CustomStringConvertible { case renderedSyntaxContainsErrors(String) case couldNotFindLocationOfNode(syntax: String) case mustacheTemplateError(message: String) + case internalError(String) var description: String { switch self { @@ -29,6 +30,8 @@ enum MacroError: Error, CustomStringConvertible { "Could not find location of node for syntax:\n\(syntax)" case let .mustacheTemplateError(message): "Error while rendering the template: \(message)" + case let .internalError(message): + "An internal error occurred. Please file a bug report at https://github.com/mahdibm/enumerator-macro. Error:\n\(message)" } } } diff --git a/Sources/EnumeratorMacroImpl/Types/EnumCase.swift b/Sources/EnumeratorMacroImpl/Types/EnumCase.swift index 3ad97ef..9c620a3 100644 --- a/Sources/EnumeratorMacroImpl/Types/EnumCase.swift +++ b/Sources/EnumeratorMacroImpl/Types/EnumCase.swift @@ -17,4 +17,3 @@ struct EnumCase { }) } } - diff --git a/Sources/EnumeratorMacroImpl/Types/Utils.swift b/Sources/EnumeratorMacroImpl/Types/Utils.swift index 628d0ef..ff88cc1 100644 --- a/Sources/EnumeratorMacroImpl/Types/Utils.swift +++ b/Sources/EnumeratorMacroImpl/Types/Utils.swift @@ -65,8 +65,4 @@ extension Optional: OptionalProtocol { func asConvertedOptionalAny() -> Optional { self.map { convertToCustomTypesIfPossible($0) } } - - func requireConvertedWrappedType() -> any Any.Type { - type(of: convertToCustomTypesIfPossible(self!)) - } }