diff --git a/.swiftformat b/.swiftformat index 80a521d..629c247 100644 --- a/.swiftformat +++ b/.swiftformat @@ -1,6 +1,6 @@ # Stream rules ---swiftversion 5.3 +--swiftversion 5.10 # Use 'swiftformat --options' to list all of the possible options diff --git a/Makefile b/Makefile deleted file mode 100644 index 856d64b..0000000 --- a/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -all: bootstrap - -bootstrap: hook - mint bootstrap - -hook: - ln -sf ../../hooks/pre-commit .git/hooks/pre-commit - chmod +x .git/hooks/pre-commit - -mint: - mint bootstrap - -lint: - mint run swiftlint - -fmt: - mint run swiftformat Sources Tests - -.PHONY: all bootstrap hook mint lint fmt \ No newline at end of file diff --git a/Sources/Log/Classes/Core/Formatters/PrefixLogFormatter.swift b/Sources/Log/Classes/Core/Formatters/PrefixLogFormatter.swift index 02232df..b06e5b2 100644 --- a/Sources/Log/Classes/Core/Formatters/PrefixLogFormatter.swift +++ b/Sources/Log/Classes/Core/Formatters/PrefixLogFormatter.swift @@ -26,11 +26,11 @@ public struct PrefixLogFormatter: ILogFormatter { public func format(message: String, with logLevel: LogLevel) -> String { switch logLevel { case .fault: - return "🚨🚨🚨 [\(name)] => \(message)" + "🚨🚨🚨 [\(name)] => \(message)" case .error: - return "💣💥💣💥 [\(name)] => \(message)" + "💣💥💣💥 [\(name)] => \(message)" default: - return "[\(name)] => \(message)" + "[\(name)] => \(message)" } } } diff --git a/Sources/Log/Classes/Core/Logger/Logger.swift b/Sources/Log/Classes/Core/Logger/Logger.swift index 2af975c..51ceeb1 100644 --- a/Sources/Log/Classes/Core/Logger/Logger.swift +++ b/Sources/Log/Classes/Core/Logger/Logger.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // import Foundation diff --git a/Sources/Log/Classes/Core/Printers/ConsolePrinter.swift b/Sources/Log/Classes/Core/Printers/ConsolePrinter.swift index cb3018d..50b36a9 100644 --- a/Sources/Log/Classes/Core/Printers/ConsolePrinter.swift +++ b/Sources/Log/Classes/Core/Printers/ConsolePrinter.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // import Foundation diff --git a/Sources/Log/Classes/Core/Printers/OSPrinter.swift b/Sources/Log/Classes/Core/Printers/OSPrinter.swift index 10bcb55..edf8e17 100644 --- a/Sources/Log/Classes/Core/Printers/OSPrinter.swift +++ b/Sources/Log/Classes/Core/Printers/OSPrinter.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // import Foundation @@ -65,15 +65,15 @@ extension OSPrinter { private func sysLogPriority(_ logLevel: LogLevel) -> OSLogType { switch logLevel { case .debug: - return .debug + .debug case .info: - return .info + .info case .fault: - return .fault + .fault case .error: - return .error + .error default: - return .default + .default } } } diff --git a/Sources/Log/Classes/Helpers/Writers/ConsoleWriter/ConsoleWriter.swift b/Sources/Log/Classes/Helpers/Writers/ConsoleWriter/ConsoleWriter.swift index adaf162..9a408af 100644 --- a/Sources/Log/Classes/Helpers/Writers/ConsoleWriter/ConsoleWriter.swift +++ b/Sources/Log/Classes/Helpers/Writers/ConsoleWriter/ConsoleWriter.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // import Foundation diff --git a/Sources/Log/Classes/Helpers/Writers/ConsoleWriter/IConsoleWriter.swift b/Sources/Log/Classes/Helpers/Writers/ConsoleWriter/IConsoleWriter.swift index b0b5b6c..189cbb4 100644 --- a/Sources/Log/Classes/Helpers/Writers/ConsoleWriter/IConsoleWriter.swift +++ b/Sources/Log/Classes/Helpers/Writers/ConsoleWriter/IConsoleWriter.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // import Foundation diff --git a/Sources/Log/Classes/Helpers/Writers/OSWriter/IOSWriter.swift b/Sources/Log/Classes/Helpers/Writers/OSWriter/IOSWriter.swift index 29aa5f9..cce7a16 100644 --- a/Sources/Log/Classes/Helpers/Writers/OSWriter/IOSWriter.swift +++ b/Sources/Log/Classes/Helpers/Writers/OSWriter/IOSWriter.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // import Foundation diff --git a/Sources/Log/Classes/Helpers/Writers/OSWriter/OSWriter.swift b/Sources/Log/Classes/Helpers/Writers/OSWriter/OSWriter.swift index 8af506b..ae41bf7 100644 --- a/Sources/Log/Classes/Helpers/Writers/OSWriter/OSWriter.swift +++ b/Sources/Log/Classes/Helpers/Writers/OSWriter/OSWriter.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // import Foundation @@ -20,13 +20,11 @@ final class OSWriter: IOSWriter { private var osLog: OSLog { OSLog(subsystem: subsystem, category: category) } /// An internal lazy property for initializing WriteStrategy instance. - private lazy var writerStrategy: IOSWriterStrategy = { - if #available(macOS 11.0, iOS 14.0, watchOS 7.0, tvOS 14.0, *) { - return os.Logger(osLog) - } else { - return LegacyOSLogger(osLog: osLog) - } - }() + private lazy var writerStrategy: IOSWriterStrategy = if #available(macOS 11.0, iOS 14.0, watchOS 7.0, tvOS 14.0, *) { + os.Logger(osLog) + } else { + LegacyOSLogger(osLog: osLog) + } // MARK: Initialization diff --git a/Tests/LogTests/Mocks/ConsoleWriterMock.swift b/Tests/LogTests/Mocks/ConsoleWriterMock.swift index 620f81b..9c67b65 100644 --- a/Tests/LogTests/Mocks/ConsoleWriterMock.swift +++ b/Tests/LogTests/Mocks/ConsoleWriterMock.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // import Foundation diff --git a/Tests/LogTests/Mocks/OSWriterMock.swift b/Tests/LogTests/Mocks/OSWriterMock.swift index 0d00eb1..7623f13 100644 --- a/Tests/LogTests/Mocks/OSWriterMock.swift +++ b/Tests/LogTests/Mocks/OSWriterMock.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // @testable import Log diff --git a/Tests/LogTests/UnitTests/ConsolePrinterTests.swift b/Tests/LogTests/UnitTests/ConsolePrinterTests.swift index c14640a..6426e79 100644 --- a/Tests/LogTests/UnitTests/ConsolePrinterTests.swift +++ b/Tests/LogTests/UnitTests/ConsolePrinterTests.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // @testable import Log diff --git a/Tests/LogTests/UnitTests/LogTests.swift b/Tests/LogTests/UnitTests/LogTests.swift index a9bf700..0d694f3 100644 --- a/Tests/LogTests/UnitTests/LogTests.swift +++ b/Tests/LogTests/UnitTests/LogTests.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // import Log diff --git a/Tests/LogTests/UnitTests/OSPrinterTests.swift b/Tests/LogTests/UnitTests/OSPrinterTests.swift index d3a69fd..46a2968 100644 --- a/Tests/LogTests/UnitTests/OSPrinterTests.swift +++ b/Tests/LogTests/UnitTests/OSPrinterTests.swift @@ -1,6 +1,6 @@ // // log -// Copyright © 2024 Space Code. All rights reserved. +// Copyright © 2023 Space Code. All rights reserved. // @testable import Log diff --git a/hooks/pre-commit b/hooks/pre-commit index 956fdcb..0d13342 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -1,38 +1,24 @@ #!/bin/bash + +echo "🔍 Running linters..." + +echo "📝 Formatting staged Swift files..." git diff --diff-filter=d --staged --name-only | grep -e '\.swift$' | while read line; do if [[ $line == *"/Generated"* ]]; then - echo "IGNORING GENERATED FILE: " "$line"; + echo "⏭️ Skipping generated file: $line" else - mint run swiftformat swiftformat "${line}"; - git add "$line"; + echo "✨ Formatting: $line" + mise exec swiftformat -- swiftformat "${line}" + git add "$line" fi done -LINT=$(which mint) -if [[ -e "${LINT}" ]]; then - # Export files in SCRIPT_INPUT_FILE_$count to lint against later - count=0 - while IFS= read -r file_path; do - export SCRIPT_INPUT_FILE_$count="$file_path" - count=$((count + 1)) - done < <(git diff --name-only --cached --diff-filter=d | grep ".swift$") - export SCRIPT_INPUT_FILE_COUNT=$count - - if [ "$count" -eq 0 ]; then - echo "No files to lint!" - exit 0 - fi - - echo "Found $count lintable files! Linting now.." - mint run swiftlint --use-script-input-files --strict --config .swiftlint.yml - RESULT=$? # swiftline exit value is number of errors +if ! mise run lint; then + echo "❌ Lint failed. Please fix the issues before committing." + echo "💡 Tip: Run 'mise run format' to auto-fix some issues" + echo "⚠️ To skip this hook, use: git commit --no-verify" + exit 1 +fi - if [ $RESULT -eq 0 ]; then - echo "🎉 Well done. No violation." - fi - exit $RESULT -else - echo "⚠️ WARNING: SwiftLint not found" - echo "⚠️ You might want to edit .git/hooks/pre-commit to locate your swiftlint" - exit 0 -fi \ No newline at end of file +echo "✅ All checks passed!" +exit 0 diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..9e7282a --- /dev/null +++ b/mise.toml @@ -0,0 +1,10 @@ +[tools] +git-cliff = "2.9.1" +swiftlint = "0.62.2" +swiftformat = "0.58.7" + +[settings] +experimental = true + +[hooks] +postinstall = "mise run install" \ No newline at end of file diff --git a/mise/tasks/install.sh b/mise/tasks/install.sh new file mode 100755 index 0000000..aeba03b --- /dev/null +++ b/mise/tasks/install.sh @@ -0,0 +1,57 @@ +#!/bin/bash + +set -e + +echo "🔧 Installing git hooks..." + +# Find git repository root +GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) + +if [ -z "$GIT_ROOT" ]; then + echo "❌ Error: Not a git repository" + exit 1 +fi + +echo "📁 Git root: $GIT_ROOT" + +# Create hooks directory if it doesn't exist +mkdir -p "$GIT_ROOT/.git/hooks" + +# Create pre-commit hook +cat > "$GIT_ROOT/.git/hooks/pre-commit" <<'HOOK_EOF' +#!/bin/bash + +echo "🔍 Running linters..." + +echo "📝 Formatting staged Swift files..." +git diff --diff-filter=d --staged --name-only | grep -e '\.swift$' | while read line; do + if [[ $line == *"/Generated"* ]]; then + echo "⏭️ Skipping generated file: $line" + else + echo "✨ Formatting: $line" + mise exec swiftformat -- swiftformat "${line}" + git add "$line" + fi +done + +if ! mise run lint; then + echo "❌ Lint failed. Please fix the issues before committing." + echo "💡 Tip: Run 'mise run format' to auto-fix some issues" + echo "⚠️ To skip this hook, use: git commit --no-verify" + exit 1 +fi + +echo "✅ All checks passed!" +exit 0 +HOOK_EOF + +chmod +x "$GIT_ROOT/.git/hooks/pre-commit" + +echo "✅ Git hooks installed successfully!" +echo "📍 Hook location: $GIT_ROOT/.git/hooks/pre-commit" +echo "" +echo "Pre-commit hook will:" +echo " 1. Format staged Swift files (except /Generated)" +echo " 2. Run mise lint" +echo "" +echo "To skip the hook, use: git commit --no-verify" \ No newline at end of file diff --git a/mise/tasks/lint b/mise/tasks/lint new file mode 100755 index 0000000..d695a11 --- /dev/null +++ b/mise/tasks/lint @@ -0,0 +1,13 @@ +#!/bin/bash +#MISE description="Lint the log package using SwiftLint and SwiftFormat" +#MISE usage flag "-f --fix" help="Fix the fixable issues" + +set -eo pipefail + +if [ "$usage_fix" = "true" ]; then + swiftformat Sources Tests + swiftlint lint --fix --strict --config .swiftlint.yml Sources Tests +else + swiftformat Sources Tests --lint + swiftlint lint --strict --config .swiftlint.yml Sources Tests +fi \ No newline at end of file