From 7d48aebc5d0efcd107954bea77213ff5c60e97c2 Mon Sep 17 00:00:00 2001 From: Kamil Strzelecki Date: Sun, 30 Mar 2025 11:31:16 +0200 Subject: [PATCH 1/4] - --- .mise.toml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.mise.toml b/.mise.toml index 24a94b1..513f2cf 100644 --- a/.mise.toml +++ b/.mise.toml @@ -18,7 +18,6 @@ quiet = true run = """ {{ vars.swiftlint }} lint \ --config .swiftlint.yml \ ---reporter relative-path \ --strict \ {{ vars.sources }} """ @@ -30,7 +29,6 @@ run = """ {{ vars.swiftlint }} lint \ --config .swiftlint.yml \ --config .swiftlint.tests.yml \ ---reporter relative-path \ --strict \ {{ vars.tests }} """ From 8cbdf1d13920f88d16e38e52686681aaa581880d Mon Sep 17 00:00:00 2001 From: Kamil Strzelecki Date: Sun, 30 Mar 2025 12:07:38 +0200 Subject: [PATCH 2/4] - --- .swiftlint.tests.yml | 1 + .swiftlint.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.swiftlint.tests.yml b/.swiftlint.tests.yml index ca7bffd..ee516cf 100644 --- a/.swiftlint.tests.yml +++ b/.swiftlint.tests.yml @@ -1,2 +1,3 @@ disabled_rules: + - function_body_length - no_magic_numbers \ No newline at end of file diff --git a/.swiftlint.yml b/.swiftlint.yml index dfecb11..ee18cc7 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -192,4 +192,4 @@ custom_rules: empty_line_after_type_declaration: name: "Empty line after type declaration" message: "Type declaration should start with an empty line." - regex: "( |^)(actor|class|struct|enum|protocol|extension) (?!var)[^\\{]*? \\{(?!\\}) *\\n? *\\S" + regex: "( |^)(actor|class|struct|enum|protocol|extension) (?!var)[^\\{]*? \\{(?!\\n*\\}) *\\n? *\\S" From b0f0328ce0f22bc275d0ec3cc4c1e758addcb885 Mon Sep 17 00:00:00 2001 From: Kamil Strzelecki Date: Sun, 30 Mar 2025 18:47:19 +0200 Subject: [PATCH 3/4] - --- .github/workflows/pull-request.yml | 3 +-- .github/workflows/release.yml | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 5908299..158a6bb 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -2,7 +2,7 @@ name: Pull request on: pull_request jobs: - build: + pull-request: runs-on: macos-15 steps: @@ -12,7 +12,6 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - echo "GITHUB_TOKEN=${{ env.GITHUB_TOKEN }}" >> $GITHUB_ENV curl https://mise.run | sh mise install diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..c38e287 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,21 @@ +name: Release + +on: + push: + tags: + - '*' + +jobs: + release: + runs-on: ubuntu-latest + + steps: + - name: Draft release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + TAG_NAME=${GITHUB_REF#refs/tags/} + gh release create "$TAG_NAME" \ + --repo="$GITHUB_REPOSITORY" \ + --generate-notes \ + --draft \ No newline at end of file From 20ee7709e2e3a892541e3cff73d26ae239a1b80f Mon Sep 17 00:00:00 2001 From: Kamil Strzelecki Date: Sun, 30 Mar 2025 18:58:27 +0200 Subject: [PATCH 4/4] - --- Package.resolved | 6 ++-- Package.swift | 8 ++++- .../Diagnostics/DiagnosticContext.swift | 17 ---------- .../SwiftSyntaxDiagnosticContext.swift | 34 ------------------- .../MacroExpansionContext.swift | 21 ++++++++++++ .../Parsers/Common/Parser.swift | 5 +-- .../Parsers/Common/_Parser.swift | 5 ++- .../Parsers/EnumCases/EnumCasesParser.swift | 3 +- .../Parsers/Properties/PropertiesParser.swift | 3 +- .../Mocks/DiagnosticContextMock.swift | 22 ------------ .../Parsers/EnumCasesParserTests.swift | 3 +- .../Parsers/PropertiesParserTests.swift | 3 +- 12 files changed, 46 insertions(+), 84 deletions(-) delete mode 100644 Sources/PrincipleMacros/Diagnostics/DiagnosticContext.swift delete mode 100644 Sources/PrincipleMacros/Diagnostics/SwiftSyntaxDiagnosticContext.swift create mode 100644 Sources/PrincipleMacros/ExpansionContext/MacroExpansionContext.swift delete mode 100644 Tests/PrincipleMacrosTests/Mocks/DiagnosticContextMock.swift diff --git a/Package.resolved b/Package.resolved index 14f6b17..6b4ad0b 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,13 +1,13 @@ { - "originHash" : "446eda9bf08d4c402569cebe800ef9876febc6d7ad0dc3ee9108db8d0fefad01", + "originHash" : "908df360b8c2dfd8f054b79926bb65d2ec9386cc68cf7c1d9329b54ee52423a9", "pins" : [ { "identity" : "principle", "kind" : "remoteSourceControl", "location" : "https://github.com/NSFatalError/Principle", "state" : { - "revision" : "1c21754b406e9f2a756c9f490deb3d8477739d86", - "version" : "0.0.1" + "revision" : "3a0ce9bef0828a948b12dc6fb30589a4cfd85ef3", + "version" : "0.0.3" } }, { diff --git a/Package.swift b/Package.swift index a26c413..b690cac 100644 --- a/Package.swift +++ b/Package.swift @@ -53,7 +53,13 @@ let package = Package( ), .testTarget( name: "PrincipleMacrosTests", - dependencies: ["PrincipleMacros"] + dependencies: [ + "PrincipleMacros", + .product( + name: "SwiftSyntaxMacroExpansion", + package: "swift-syntax" + ) + ] ) ] ) diff --git a/Sources/PrincipleMacros/Diagnostics/DiagnosticContext.swift b/Sources/PrincipleMacros/Diagnostics/DiagnosticContext.swift deleted file mode 100644 index ce7d593..0000000 --- a/Sources/PrincipleMacros/Diagnostics/DiagnosticContext.swift +++ /dev/null @@ -1,17 +0,0 @@ -// -// DiagnosticContext.swift -// PrincipleMacros -// -// Created by Kamil Strzelecki on 12/01/2025. -// Copyright © 2025 Kamil Strzelecki. All rights reserved. -// - -import SwiftSyntax - -public protocol DiagnosticContext { - - func diagnose( - node: some SyntaxProtocol, - errorMessage: String - ) -} diff --git a/Sources/PrincipleMacros/Diagnostics/SwiftSyntaxDiagnosticContext.swift b/Sources/PrincipleMacros/Diagnostics/SwiftSyntaxDiagnosticContext.swift deleted file mode 100644 index d824e78..0000000 --- a/Sources/PrincipleMacros/Diagnostics/SwiftSyntaxDiagnosticContext.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// SwiftSyntaxDiagnosticContext.swift -// PrincipleMacros -// -// Created by Kamil Strzelecki on 17/01/2025. -// Copyright © 2025 Kamil Strzelecki. All rights reserved. -// - -import SwiftDiagnostics -import SwiftSyntaxMacros - -public struct SwiftSyntaxDiagnosticContext { - - private let context: Context - - public init(_ context: Context) { - self.context = context - } -} - -extension SwiftSyntaxDiagnosticContext: DiagnosticContext { - - public func diagnose( - node: some SyntaxProtocol, - errorMessage: String - ) { - context.diagnose( - Diagnostic( - node: node, - message: MacroExpansionErrorMessage(errorMessage) - ) - ) - } -} diff --git a/Sources/PrincipleMacros/ExpansionContext/MacroExpansionContext.swift b/Sources/PrincipleMacros/ExpansionContext/MacroExpansionContext.swift new file mode 100644 index 0000000..bb686d4 --- /dev/null +++ b/Sources/PrincipleMacros/ExpansionContext/MacroExpansionContext.swift @@ -0,0 +1,21 @@ +// +// MacroExpansionContext.swift +// PrincipleMacros +// +// Created by Kamil Strzelecki on 30/03/2025. +// Copyright © 2025 Kamil Strzelecki. All rights reserved. +// + +import SwiftSyntaxMacros + +extension MacroExpansionContext { + + public func diagnose( + node: some SyntaxProtocol, + errorMessage: String + ) { + let message = MacroExpansionErrorMessage(errorMessage) + let diagnostic = Diagnostic(node: node, message: message) + diagnose(diagnostic) + } +} diff --git a/Sources/PrincipleMacros/Parsers/Common/Parser.swift b/Sources/PrincipleMacros/Parsers/Common/Parser.swift index 7d8ff68..8f0eec3 100644 --- a/Sources/PrincipleMacros/Parsers/Common/Parser.swift +++ b/Sources/PrincipleMacros/Parsers/Common/Parser.swift @@ -7,6 +7,7 @@ // import SwiftSyntax +import SwiftSyntaxMacros public protocol Parser { @@ -14,11 +15,11 @@ public protocol Parser { static func parse( declaration: DeclSyntaxProtocol, - in context: DiagnosticContext + in context: MacroExpansionContext ) -> ResultsCollection static func parse( memberBlock: MemberBlockSyntax, - in context: DiagnosticContext + in context: MacroExpansionContext ) -> ResultsCollection } diff --git a/Sources/PrincipleMacros/Parsers/Common/_Parser.swift b/Sources/PrincipleMacros/Parsers/Common/_Parser.swift index 7a5cda4..11ea406 100644 --- a/Sources/PrincipleMacros/Parsers/Common/_Parser.swift +++ b/Sources/PrincipleMacros/Parsers/Common/_Parser.swift @@ -6,6 +6,9 @@ // Copyright © 2025 Kamil Strzelecki. All rights reserved. // +import SwiftSyntax +import SwiftSyntaxMacros + internal protocol _Parser: Parser where ResultsCollection: _ParserResultsCollection {} @@ -13,7 +16,7 @@ extension _Parser { public static func parse( memberBlock: MemberBlockSyntax, - in context: DiagnosticContext + in context: MacroExpansionContext ) -> ResultsCollection { ResultsCollection( memberBlock.members.flatMap { member in diff --git a/Sources/PrincipleMacros/Parsers/EnumCases/EnumCasesParser.swift b/Sources/PrincipleMacros/Parsers/EnumCases/EnumCasesParser.swift index 16a9c79..8fabbd4 100644 --- a/Sources/PrincipleMacros/Parsers/EnumCases/EnumCasesParser.swift +++ b/Sources/PrincipleMacros/Parsers/EnumCases/EnumCasesParser.swift @@ -7,12 +7,13 @@ // import SwiftSyntax +import SwiftSyntaxMacros public enum EnumCasesParser: _Parser { public static func parse( declaration: DeclSyntaxProtocol, - in _: DiagnosticContext + in _: MacroExpansionContext ) -> EnumCasesList { guard let declaration = EnumCaseDeclSyntax(declaration) else { return .init() diff --git a/Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift b/Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift index 0b69221..6f085b7 100644 --- a/Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift +++ b/Sources/PrincipleMacros/Parsers/Properties/PropertiesParser.swift @@ -7,12 +7,13 @@ // import SwiftSyntax +import SwiftSyntaxMacros public enum PropertiesParser: _Parser { public static func parse( declaration: DeclSyntaxProtocol, - in context: DiagnosticContext + in context: MacroExpansionContext ) -> PropertiesList { guard let declaration = VariableDeclSyntax(declaration) else { return .init() diff --git a/Tests/PrincipleMacrosTests/Mocks/DiagnosticContextMock.swift b/Tests/PrincipleMacrosTests/Mocks/DiagnosticContextMock.swift deleted file mode 100644 index e4725cb..0000000 --- a/Tests/PrincipleMacrosTests/Mocks/DiagnosticContextMock.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// DiagnosticContextMock.swift -// PrincipleMacros -// -// Created by Kamil Strzelecki on 18/01/2025. -// Copyright © 2025 Kamil Strzelecki. All rights reserved. -// - -@testable import PrincipleMacros -import Testing - -internal final class DiagnosticContextMock: DiagnosticContext { - - func diagnose( - node: some SyntaxProtocol, - errorMessage: String - ) { - Issue.record( - "Unexpected error for \(node): \(errorMessage)" - ) - } -} diff --git a/Tests/PrincipleMacrosTests/Parsers/EnumCasesParserTests.swift b/Tests/PrincipleMacrosTests/Parsers/EnumCasesParserTests.swift index d5ab265..d637c7c 100644 --- a/Tests/PrincipleMacrosTests/Parsers/EnumCasesParserTests.swift +++ b/Tests/PrincipleMacrosTests/Parsers/EnumCasesParserTests.swift @@ -7,11 +7,12 @@ // @testable import PrincipleMacros +import SwiftSyntaxMacroExpansion import Testing internal struct EnumCasesParserTests { - private let context = DiagnosticContextMock() + private let context = BasicMacroExpansionContext() @Test func testEnumCase() throws { diff --git a/Tests/PrincipleMacrosTests/Parsers/PropertiesParserTests.swift b/Tests/PrincipleMacrosTests/Parsers/PropertiesParserTests.swift index bd2a681..4c3d292 100644 --- a/Tests/PrincipleMacrosTests/Parsers/PropertiesParserTests.swift +++ b/Tests/PrincipleMacrosTests/Parsers/PropertiesParserTests.swift @@ -7,11 +7,12 @@ // @testable import PrincipleMacros +import SwiftSyntaxMacroExpansion import Testing internal struct PropertiesParserTests { - private let context = DiagnosticContextMock() + private let context = BasicMacroExpansionContext() @Test func testStoredLet() throws {