diff --git a/ios/VibeTunnel/App/VibeTunnelApp.swift b/ios/VibeTunnel/App/VibeTunnelApp.swift index 86181be0..f489ab29 100644 --- a/ios/VibeTunnel/App/VibeTunnelApp.swift +++ b/ios/VibeTunnel/App/VibeTunnelApp.swift @@ -36,9 +36,9 @@ struct VibeTunnelApp: App { private var colorScheme: ColorScheme? { switch colorSchemePreferenceRaw { - case "light": return .light - case "dark": return .dark - default: return nil + case "light": .light + case "dark": .dark + default: nil // System default } } diff --git a/ios/VibeTunnel/Views/Settings/SettingsView.swift b/ios/VibeTunnel/Views/Settings/SettingsView.swift index d5cf3531..484ef572 100644 --- a/ios/VibeTunnel/Views/Settings/SettingsView.swift +++ b/ios/VibeTunnel/Views/Settings/SettingsView.swift @@ -106,9 +106,9 @@ struct GeneralSettingsView: View { var displayName: String { switch self { - case .system: return "System" - case .light: return "Light" - case .dark: return "Dark" + case .system: "System" + case .light: "Light" + case .dark: "Dark" } } } @@ -124,14 +124,14 @@ struct GeneralSettingsView: View { Text("Appearance") .font(.headline) .foregroundColor(Theme.Colors.terminalForeground) - + VStack(spacing: Theme.Spacing.medium) { // Color Scheme VStack(alignment: .leading, spacing: Theme.Spacing.small) { Text("Color Scheme") .font(Theme.Typography.terminalSystem(size: 14)) .foregroundColor(Theme.Colors.terminalForeground.opacity(0.7)) - + Picker("Color Scheme", selection: $colorSchemePreferenceRaw) { ForEach(ColorSchemePreference.allCases, id: \.self) { preference in Text(preference.displayName).tag(preference.rawValue) @@ -144,7 +144,7 @@ struct GeneralSettingsView: View { .cornerRadius(Theme.CornerRadius.card) } } - + // Terminal Defaults Section VStack(alignment: .leading, spacing: Theme.Spacing.medium) { Text("Terminal Defaults") diff --git a/ios/VibeTunnel/Views/Terminal/TerminalToolbar.swift b/ios/VibeTunnel/Views/Terminal/TerminalToolbar.swift index d0290d65..4efabb49 100644 --- a/ios/VibeTunnel/Views/Terminal/TerminalToolbar.swift +++ b/ios/VibeTunnel/Views/Terminal/TerminalToolbar.swift @@ -164,7 +164,7 @@ struct TerminalToolbar: View { Spacer() } - + // Fourth row - F-keys (F7-F12) HStack(spacing: Theme.Spacing.extraSmall) { ForEach(["F7", "F8", "F9", "F10", "F11", "F12"], id: \.self) { fkey in @@ -184,29 +184,29 @@ struct TerminalToolbar: View { Spacer() } - + // Fifth row - Special characters HStack(spacing: Theme.Spacing.extraSmall) { ToolbarButton(label: "\\") { HapticFeedback.impact(.light) onSpecialKey(.backslash) } - + ToolbarButton(label: "|") { HapticFeedback.impact(.light) onSpecialKey(.pipe) } - + ToolbarButton(label: "`") { HapticFeedback.impact(.light) onSpecialKey(.backtick) } - + ToolbarButton(label: "~") { HapticFeedback.impact(.light) onSpecialKey(.tilde) } - + ToolbarButton(label: "END") { HapticFeedback.impact(.light) // Send Ctrl+E for end diff --git a/ios/VibeTunnel/Views/Terminal/TerminalView.swift b/ios/VibeTunnel/Views/Terminal/TerminalView.swift index b28cd0d3..010f51f4 100644 --- a/ios/VibeTunnel/Views/Terminal/TerminalView.swift +++ b/ios/VibeTunnel/Views/Terminal/TerminalView.swift @@ -888,7 +888,7 @@ class TerminalViewModel { } } } - + func sendSpecialKey(_ key: TerminalInput.SpecialKey) { sendInput(key.rawValue) } diff --git a/ios/VibeTunnel/Views/Welcome/WelcomeView.swift b/ios/VibeTunnel/Views/Welcome/WelcomeView.swift index e5178af3..ad637436 100644 --- a/ios/VibeTunnel/Views/Welcome/WelcomeView.swift +++ b/ios/VibeTunnel/Views/Welcome/WelcomeView.swift @@ -46,7 +46,9 @@ struct WelcomeView: View { HStack(spacing: 8) { ForEach(0..<5) { index in Circle() - .fill(index == currentPage ? Theme.Colors.primaryAccent : Theme.Colors.secondaryText.opacity(0.3)) + .fill(index == currentPage ? + Theme.Colors.primaryAccent : + Theme.Colors.secondaryText.opacity(0.3)) .frame(width: 8, height: 8) .animation(.easeInOut, value: currentPage) } diff --git a/ios/scripts/lint.sh b/ios/scripts/lint.sh new file mode 100755 index 00000000..2bdfb492 --- /dev/null +++ b/ios/scripts/lint.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# ============================================================================= +# ============================================================================= +# +# This script runs SwiftFormat and SwiftLint on the VibeTunnel iOS codebase +# to ensure consistent code style and catch potential issues. +# +# USAGE: +# ./scripts/lint.sh +# +# DEPENDENCIES: +# - swiftformat (brew install swiftformat) +# - swiftlint (brew install swiftlint) +# +# FEATURES: +# - Automatically formats Swift code with SwiftFormat +# - Fixes auto-correctable SwiftLint issues +# - Reports remaining SwiftLint warnings and errors +# +# EXIT CODES: +# 0 - Success (all checks passed) +# 1 - Missing dependencies or linting errors +# +# ============================================================================= + +set -euo pipefail + +# Source common functions +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +[[ -f "$SCRIPT_DIR/common.sh" ]] && source "$SCRIPT_DIR/common.sh" || true + +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" + +# Change to project root +cd "$PROJECT_ROOT" + +# Check if project has Swift files +if ! find . -name "*.swift" -not -path "./.build/*" -not -path "./build/*" | head -1 | grep -q .; then + print_warning "No Swift files found in project" + exit 0 +fi + +print_info "Running SwiftFormat..." +if command -v swiftformat &> /dev/null; then + if swiftformat . --config ../apple/.swiftformat --verbose; then + print_success "SwiftFormat completed successfully" + else + print_error "SwiftFormat encountered errors" + exit 1 + fi +else + print_error "SwiftFormat not installed" + echo " Install with: brew install swiftformat" + exit 1 +fi + +print_info "Running SwiftLint..." +if command -v swiftlint &> /dev/null; then + # First run auto-corrections + print_info "Applying auto-corrections..." + swiftlint --fix --config ../apple/.swiftlint.yml + + # Then run full lint check + print_info "Checking for remaining issues..." + if swiftlint --config ../apple/.swiftlint.yml; then + print_success "SwiftLint completed successfully" + else + print_warning "SwiftLint found issues that require manual attention" + # Don't exit with error as these may be warnings + fi +else + print_error "SwiftLint not installed" + echo " Install with: brew install swiftlint" + exit 1 +fi + +print_success "Linting complete!" diff --git a/mac/scripts/lint.sh b/mac/scripts/lint.sh index 28720aa2..29e4faf7 100755 --- a/mac/scripts/lint.sh +++ b/mac/scripts/lint.sh @@ -45,7 +45,7 @@ fi # Run SwiftFormat print_info "Running SwiftFormat..." if command -v swiftformat &> /dev/null; then - if swiftformat . --verbose; then + if swiftformat . --config ../apple/.swiftformat --verbose; then print_success "SwiftFormat completed successfully" else print_error "SwiftFormat encountered errors" @@ -62,11 +62,11 @@ print_info "Running SwiftLint..." if command -v swiftlint &> /dev/null; then # First run auto-corrections print_info "Applying auto-corrections..." - swiftlint --fix + swiftlint --fix --config ../apple/.swiftlint.yml # Then run full lint check print_info "Checking for remaining issues..." - if swiftlint; then + if swiftlint --config ../apple/.swiftlint.yml; then print_success "SwiftLint completed successfully" else print_warning "SwiftLint found issues that require manual attention" @@ -78,4 +78,4 @@ else exit 1 fi -print_success "Linting complete!" \ No newline at end of file +print_success "Linting complete!" diff --git a/web/package.json b/web/package.json index b3bde687..5213468a 100644 --- a/web/package.json +++ b/web/package.json @@ -122,6 +122,10 @@ "bash -c 'tsc --noEmit --project tsconfig.server.json'", "bash -c 'tsc --noEmit --project tsconfig.client.json'", "bash -c 'tsc --noEmit --project tsconfig.sw.json'" + ], + "../{ios,mac}/**/*.swift": [ + "bash -c 'cd ../ios && ./scripts/lint.sh'", + "bash -c 'cd ../mac && ./scripts/lint.sh'" ] } }