Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ final class TaskNotificationHandler: ObservableObject {
/// - toWorkspace: The workspace to restrict the task to. Defaults to `nil`, which is received by all workspaces.
/// - action: The action being taken on the task.
/// - model: The task contents.
@MainActor
static func postTask(toWorkspace: URL? = nil, action: Action, model: TaskNotificationModel) {
NotificationCenter.default.post(name: .taskNotification, object: nil, userInfo: [
"id": model.id,
Expand Down
36 changes: 36 additions & 0 deletions CodeEdit/Features/CodeEditUI/Views/ErrorDescriptionLabel.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//
// ErrorDescriptionLabel.swift
// CodeEdit
//
// Created by Khan Winter on 8/14/25.
//

import SwiftUI

struct ErrorDescriptionLabel: View {
let error: Error

var body: some View {
VStack(alignment: .leading) {
if let error = error as? LocalizedError {
if let description = error.errorDescription {
Text(description)
}

if let reason = error.failureReason {
Text(reason)
}

if let recoverySuggestion = error.recoverySuggestion {
Text(recoverySuggestion)
}
} else {
Text(error.localizedDescription)
}
}
}
}

#Preview {
ErrorDescriptionLabel(error: CancellationError())
}
46 changes: 46 additions & 0 deletions CodeEdit/Features/LSP/Registry/Errors/PackageManagerError.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
//
// PackageManagerError.swift
// CodeEdit
//
// Created by Abe Malla on 5/12/25.
//

import Foundation

enum PackageManagerError: Error, LocalizedError {
case unknown
case packageManagerNotInstalled
case initializationFailed(String)
case installationFailed(String)
case invalidConfiguration

var errorDescription: String? {
switch self {
case .unknown:
"Unknown error occurred"
case .packageManagerNotInstalled:
"The required package manager is not installed."
case .initializationFailed:
"Installation directory initialization failed."
case .installationFailed:
"Package installation failed."
case .invalidConfiguration:
"The package registry contained an invalid installation configuration."
}
}

var failureReason: String? {
switch self {
case .unknown:
nil
case .packageManagerNotInstalled:
nil
case .initializationFailed(let string):
string
case .installationFailed(let string):
string
case .invalidConfiguration:
nil
}
}
}
47 changes: 47 additions & 0 deletions CodeEdit/Features/LSP/Registry/Errors/RegistryManagerError.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//
// RegistryManagerError.swift
// CodeEdit
//
// Created by Abe Malla on 5/12/25.
//

import Foundation

enum RegistryManagerError: Error, LocalizedError {
case installationRunning
case invalidResponse(statusCode: Int)
case downloadFailed(url: URL, error: Error)
case maxRetriesExceeded(url: URL, lastError: Error)
case writeFailed(error: Error)
case failedToSaveRegistryCache

var errorDescription: String? {
switch self {
case .installationRunning:
"A package is already being installed."
case .invalidResponse(let statusCode):
"Invalid response received: \(statusCode)"
case .downloadFailed(let url, _):
"Download for \(url) error."
case .maxRetriesExceeded(let url, _):
"Maximum retries exceeded for url: \(url)"
case .writeFailed:
"Failed to write to file."
case .failedToSaveRegistryCache:
"Failed to write to registry cache."
}
}

var failureReason: String? {
switch self {
case .installationRunning, .invalidResponse, .failedToSaveRegistryCache:
return nil
case .downloadFailed(_, let error), .maxRetriesExceeded(_, let error), .writeFailed(let error):
return if let error = error as? LocalizedError {
error.errorDescription
} else {
error.localizedDescription
}
}
}
}
185 changes: 0 additions & 185 deletions CodeEdit/Features/LSP/Registry/InstallationQueueManager.swift

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,42 @@ enum InstallationMethod: Equatable {
return nil
}
}

func packageManager(installPath: URL) -> PackageManagerProtocol? {
switch packageManagerType {
case .npm:
return NPMPackageManager(installationDirectory: installPath)
case .cargo:
return CargoPackageManager(installationDirectory: installPath)
case .pip:
return PipPackageManager(installationDirectory: installPath)
case .golang:
return GolangPackageManager(installationDirectory: installPath)
case .github, .sourceBuild:
return GithubPackageManager(installationDirectory: installPath)
case .nuget, .opam, .gem, .composer:
// TODO: IMPLEMENT OTHER PACKAGE MANAGERS
return nil
default:
return nil
}
}

var installerDescription: String {
guard let packageManagerType else { return "Unknown" }
switch packageManagerType {
case .npm, .cargo, .golang, .pip, .sourceBuild, .github:
return packageManagerType.userDescription
case .nuget, .opam, .gem, .composer:
return "(Unsupported) \(packageManagerType.userDescription)"
}
}

var packageDescription: String? {
guard let packageName else { return nil }
if let version {
return "\(packageName)@\(version)"
}
return packageName
}
}
Loading
Loading