Skip to content

Commit 2f2c022

Browse files
Refactors, added text icon colors
1 parent ee93abb commit 2f2c022

File tree

7 files changed

+45
-29
lines changed

7 files changed

+45
-29
lines changed

CodeEdit/Features/LSP/Registry/RegistryManager.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import Combine
99
import Foundation
1010
import ZIPFoundation
1111

12-
let homeDirectory = FileManager.default.homeDirectoryForCurrentUser
13-
let installPath = homeDirectory
12+
private let homeDirectory = FileManager.default.homeDirectoryForCurrentUser
13+
private let installPath = homeDirectory
1414
.appending(path: "Library")
1515
.appending(path: "Application Support")
1616
.appending(path: "CodeEdit")
@@ -56,7 +56,7 @@ final class RegistryManager {
5656
return []
5757
}
5858

59-
@AppSettings(\.extensions.installedLanguageServers)
59+
@AppSettings(\.languageServers.installedLanguageServers)
6060
var installedLanguageServers: [String: SettingsData.InstalledLanguageServer]
6161

6262
deinit {
@@ -169,7 +169,7 @@ final class RegistryManager {
169169
return true
170170
}
171171
let hoursSinceLastUpdate = Date().timeIntervalSince(modificationDate) / 3600
172-
return hoursSinceLastUpdate > 24
172+
return hoursSinceLastUpdate >= 24
173173
}()
174174

175175
if needsUpdate {

CodeEdit/Features/Settings/Models/SettingsData.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ struct SettingsData: Codable, Hashable {
5050
/// Search Settings
5151
var search: SearchSettings = .init()
5252

53-
/// Extension Settings
54-
var extensions: ExtensionSettings = .init()
53+
/// Language Server Settings
54+
var languageServers: LanguageServerSettings = .init()
5555

5656
/// Developer settings for CodeEdit developers
5757
var developerSettings: DeveloperSettings = .init()
@@ -77,8 +77,8 @@ struct SettingsData: Codable, Hashable {
7777
KeybindingsSettings.self,
7878
forKey: .keybindings
7979
) ?? .init()
80-
self.extensions = try container.decodeIfPresent(
81-
ExtensionSettings.self, forKey: .extensions
80+
self.languageServers = try container.decodeIfPresent(
81+
LanguageServerSettings.self, forKey: .languageServers
8282
) ?? .init()
8383
self.developerSettings = try container.decodeIfPresent(
8484
DeveloperSettings.self, forKey: .developerSettings
@@ -108,8 +108,8 @@ struct SettingsData: Codable, Hashable {
108108
sourceControl.searchKeys.forEach { settings.append(.init(name, isSetting: true, settingName: $0)) }
109109
case .location:
110110
LocationsSettings().searchKeys.forEach { settings.append(.init(name, isSetting: true, settingName: $0)) }
111-
case .extensions:
112-
ExtensionSettings().searchKeys.forEach { settings.append(.init(name, isSetting: true, settingName: $0)) }
111+
case .languageServers:
112+
LanguageServerSettings().searchKeys.forEach { settings.append(.init(name, isSetting: true, settingName: $0)) }
113113
case .developer:
114114
developerSettings.searchKeys.forEach { settings.append(.init(name, isSetting: true, settingName: $0)) }
115115
case .behavior: return [.init(name, settingName: "Error")]

CodeEdit/Features/Settings/Models/SettingsPage.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ struct SettingsPage: Hashable, Equatable, Identifiable {
3232
case components = "Components"
3333
case location = "Locations"
3434
case advanced = "Advanced"
35-
case extensions = "Language Servers" // TODO: CHANGE NAME TO "Extensions" WHEN EXTENSIONS ARE IMPLEMENTED
35+
case languageServers = "Language Servers"
3636
case developer = "Developer"
3737
}
3838

CodeEdit/Features/Settings/Pages/Extensions/LanguageServerRowView.swift

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77

88
import SwiftUI
99

10+
private let iconSize: CGFloat = 26
11+
1012
struct LanguageServerRowView: View, Equatable {
1113
let packageName: String
1214
let subtitle: String
13-
let icon: String
1415
let onCancel: (() -> Void)
1516
let onInstall: (() async -> Void)
1617

@@ -26,15 +27,13 @@ struct LanguageServerRowView: View, Equatable {
2627
init(
2728
packageName: String,
2829
subtitle: String,
29-
icon: String,
3030
isInstalled: Bool = false,
3131
isEnabled: Bool = false,
3232
onCancel: @escaping (() -> Void),
3333
onInstall: @escaping () async -> Void
3434
) {
3535
self.packageName = packageName
3636
self.subtitle = subtitle
37-
self.icon = icon
3837
self.isInstalled = isInstalled
3938
self.isEnabled = isEnabled
4039
self.onCancel = onCancel
@@ -68,14 +67,7 @@ struct LanguageServerRowView: View, Equatable {
6867
.truncationMode(.tail)
6968
}
7069
} icon: {
71-
Image(icon)
72-
.resizable()
73-
.aspectRatio(contentMode: .fill)
74-
.clipShape(RoundedRectangle(cornerRadius: 6))
75-
.frame(width: 26, height: 26)
76-
.padding(.top, 2)
77-
.padding(.bottom, 2)
78-
.padding(.leading, 2)
70+
letterIcon()
7971
}
8072
.opacity(isInstalled && !isEnabled ? 0.5 : 1.0)
8173

@@ -159,6 +151,32 @@ struct LanguageServerRowView: View, Equatable {
159151
}
160152
}
161153

154+
@ViewBuilder
155+
private func letterIcon() -> some View {
156+
RoundedRectangle(cornerRadius: iconSize / 4, style: .continuous)
157+
.fill(background)
158+
.overlay {
159+
Text(String(cleanedTitle.first ?? Character("")))
160+
.font(.system(size: iconSize * 0.65))
161+
.foregroundColor(.primary)
162+
}
163+
.clipShape(RoundedRectangle(cornerRadius: iconSize / 4, style: .continuous))
164+
.shadow(
165+
color: Color(NSColor.black).opacity(0.25),
166+
radius: iconSize / 40,
167+
y: iconSize / 40
168+
)
169+
.frame(width: iconSize, height: iconSize)
170+
}
171+
172+
private var background: AnyShapeStyle {
173+
let colors: [Color] = [
174+
.blue, .green, .orange, .red, .purple, .pink, .teal, .yellow, .indigo, .cyan
175+
]
176+
let hashValue = abs(cleanedTitle.hashValue) % colors.count
177+
return AnyShapeStyle(colors[hashValue].gradient)
178+
}
179+
162180
static func == (lhs: LanguageServerRowView, rhs: LanguageServerRowView) -> Bool {
163181
lhs.packageName == rhs.packageName && lhs.subtitle == rhs.subtitle
164182
}

CodeEdit/Features/Settings/Pages/Extensions/LanguageServersView.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ struct LanguageServersView: View {
2828
LanguageServerRowView(
2929
packageName: item.name,
3030
subtitle: item.description,
31-
icon: "GitHubIcon",
3231
isInstalled: RegistryManager.shared.installedLanguageServers[item.name] != nil,
3332
isEnabled: RegistryManager.shared.installedLanguageServers[item.name]?.isEnabled ?? false,
3433
onCancel: { },

CodeEdit/Features/Settings/Pages/Extensions/Models/ExtensionSettings.swift renamed to CodeEdit/Features/Settings/Pages/Extensions/Models/LanguageServerSettings.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
//
2-
// ExtensionSettings.swift
2+
// LanguageServerSettings.swift
33
// CodeEdit
44
//
55
// Created by Abe Malla on 2/2/25.
@@ -8,13 +8,12 @@
88
import Foundation
99

1010
extension SettingsData {
11-
struct ExtensionSettings: Codable, Hashable, SearchableSettingsPage {
11+
struct LanguageServerSettings: Codable, Hashable, SearchableSettingsPage {
1212

1313
/// The search keys
1414
var searchKeys: [String] {
1515
[
16-
"Extensions",
17-
"Language Server",
16+
"Language Servers",
1817
"LSP Binaries",
1918
"Linters",
2019
"Formatters",

CodeEdit/Features/Settings/SettingsView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ struct SettingsView: View {
8787
),
8888
.init(
8989
SettingsPage(
90-
.extensions,
90+
.languageServers,
9191
baseColor: Color(hex: "#6A69DC"), // Purple
9292
icon: .system("cube.box.fill")
9393
)
@@ -184,7 +184,7 @@ struct SettingsView: View {
184184
SourceControlSettingsView()
185185
case .location:
186186
LocationsSettingsView()
187-
case .extensions:
187+
case .languageServers:
188188
LanguageServersView()
189189
case .developer:
190190
DeveloperSettingsView()

0 commit comments

Comments
 (0)