diff --git a/CodeEdit.xcodeproj/project.pbxproj b/CodeEdit.xcodeproj/project.pbxproj index dc0c9157b..2755e13bd 100644 --- a/CodeEdit.xcodeproj/project.pbxproj +++ b/CodeEdit.xcodeproj/project.pbxproj @@ -419,7 +419,7 @@ 303E88462C276FD600EEA8D9 /* XCRemoteSwiftPackageReference "LanguageServerProtocol" */, 6C4E37FA2C73E00700AEE7B5 /* XCRemoteSwiftPackageReference "SwiftTerm" */, 6CB94D012CA1205100E8651C /* XCRemoteSwiftPackageReference "swift-async-algorithms" */, - 30597BCA2D9AA5BE004BC2CC /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */, + 6CFE18222DA59C9F00A7B796 /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */, ); preferredProjectObjectVersion = 55; productRefGroup = B658FB2D27DA9E0F00EA4DBD /* Products */; @@ -1649,14 +1649,6 @@ minimumVersion = 0.13.2; }; }; - 30597BCA2D9AA5BE004BC2CC /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/CodeEditApp/CodeEditSourceEditor.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 0.10.0; - }; - }; 30CB648F2C16CA8100CC8A9E /* XCRemoteSwiftPackageReference "LanguageServerProtocol" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/ChimeHQ/LanguageServerProtocol"; @@ -1753,6 +1745,14 @@ version = 1.0.1; }; }; + 6CFE18222DA59C9F00A7B796 /* XCRemoteSwiftPackageReference "CodeEditSourceEditor" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/CodeEditApp/CodeEditSourceEditor"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.11.0; + }; + }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ diff --git a/CodeEdit.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/CodeEdit.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 4b3a8ce4c..305b01206 100644 --- a/CodeEdit.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/CodeEdit.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "3d134b350244fc51aaff618575f0cb6d754dbbef6fb05b12964d922d42ce960e", + "originHash" : "ac57a6899925c3e4ac6d43aed791c845c6fc24a4441b6a10297a207d951b7836", "pins" : [ { "identity" : "anycodable", @@ -33,8 +33,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/CodeEditApp/CodeEditSourceEditor", "state" : { - "revision" : "6b2c945501f0a5c15d8aa6d159fb2550c391bdd0", - "version" : "0.10.0" + "revision" : "f444927ab70015f4b76f119f6fc5d0e358fcd77a", + "version" : "0.11.0" } }, { @@ -51,8 +51,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/CodeEditApp/CodeEditTextView.git", "state" : { - "revision" : "1792167c751b6668b4743600d2cf73d2829dd18a", - "version" : "0.7.9" + "revision" : "47faec9fb571c9c695897e69f0a4f08512ae682e", + "version" : "0.8.2" } }, { diff --git a/CodeEdit/Features/Editor/Views/CodeFileView.swift b/CodeEdit/Features/Editor/Views/CodeFileView.swift index e4e96959b..f45f4d107 100644 --- a/CodeEdit/Features/Editor/Views/CodeFileView.swift +++ b/CodeEdit/Features/Editor/Views/CodeFileView.swift @@ -40,8 +40,8 @@ struct CodeFileView: View { var matchAppearance @AppSettings(\.textEditing.letterSpacing) var letterSpacing - @AppSettings(\.textEditing.bracketHighlight) - var bracketHighlight + @AppSettings(\.textEditing.bracketEmphasis) + var bracketEmphasis @AppSettings(\.textEditing.useSystemCursor) var useSystemCursor @@ -50,6 +50,8 @@ struct CodeFileView: View { @ObservedObject private var themeModel: ThemeModel = .shared + @State private var treeSitter = TreeSitterClient() + private var cancellables = Set() private let isEditable: Bool @@ -99,23 +101,6 @@ struct CodeFileView: View { @State private var font: NSFont = Settings[\.textEditing].font.current - @State private var bracketPairHighlight: BracketPairHighlight? = { - let theme = ThemeModel.shared.selectedTheme ?? ThemeModel.shared.themes.first! - let color = Settings[\.textEditing].bracketHighlight.useCustomColor - ? Settings[\.textEditing].bracketHighlight.color.nsColor - : theme.editor.text.nsColor.withAlphaComponent(0.8) - switch Settings[\.textEditing].bracketHighlight.highlightType { - case .disabled: - return nil - case .flash: - return .flash - case .bordered: - return .bordered(color: color) - case .underline: - return .underline(color: color) - } - }() - @Environment(\.edgeInsets) private var edgeInsets @@ -132,10 +117,12 @@ struct CodeFileView: View { editorOverscroll: overscroll.overscrollPercentage, cursorPositions: $cursorPositions, useThemeBackground: useThemeBackground, + highlightProviders: [treeSitter], contentInsets: edgeInsets.nsEdgeInsets, + additionalTextInsets: NSEdgeInsets(top: 2, left: 0, bottom: 0, right: 0), isEditable: isEditable, letterSpacing: letterSpacing, - bracketPairHighlight: bracketPairHighlight, + bracketPairEmphasis: getBracketPairEmphasis(), useSystemCursor: useSystemCursor, undoManager: undoManager, coordinators: textViewCoordinators @@ -154,19 +141,18 @@ struct CodeFileView: View { .onChange(of: settingsFont) { newFontSetting in font = newFontSetting.current } - .onChange(of: bracketHighlight) { _ in - bracketPairHighlight = getBracketPairHighlight() - } } - private func getBracketPairHighlight() -> BracketPairHighlight? { - let color = if Settings[\.textEditing].bracketHighlight.useCustomColor { - Settings[\.textEditing].bracketHighlight.color.nsColor + /// Determines the style of bracket emphasis based on the `bracketEmphasis` setting and the current theme. + /// - Returns: The emphasis style to use for bracket pair emphasis. + private func getBracketPairEmphasis() -> BracketPairEmphasis? { + let color = if Settings[\.textEditing].bracketEmphasis.useCustomColor { + Settings[\.textEditing].bracketEmphasis.color.nsColor } else { currentTheme.editor.text.nsColor.withAlphaComponent(0.8) } - switch Settings[\.textEditing].bracketHighlight.highlightType { + switch Settings[\.textEditing].bracketEmphasis.highlightType { case .disabled: return nil case .flash: diff --git a/CodeEdit/Features/Editor/Views/EditorAreaView.swift b/CodeEdit/Features/Editor/Views/EditorAreaView.swift index 4868edc21..5e3dd8557 100644 --- a/CodeEdit/Features/Editor/Views/EditorAreaView.swift +++ b/CodeEdit/Features/Editor/Views/EditorAreaView.swift @@ -46,8 +46,8 @@ struct EditorAreaView: View { } var editorInsetAmount: Double { - let tabBarHeight = shouldShowTabBar ? (EditorTabBarView.height + 1) : 0 - let jumpBarHeight = showEditorJumpBar ? (EditorJumpBarView.height + 1) : 0 + let tabBarHeight = shouldShowTabBar ? (EditorTabBarView.height) : 0 + let jumpBarHeight = showEditorJumpBar ? (EditorJumpBarView.height) : 0 return tabBarHeight + jumpBarHeight } diff --git a/CodeEdit/Features/Settings/Pages/TextEditingSettings/Models/TextEditingSettings.swift b/CodeEdit/Features/Settings/Pages/TextEditingSettings/Models/TextEditingSettings.swift index 70a71d67c..26e760f1e 100644 --- a/CodeEdit/Features/Settings/Pages/TextEditingSettings/Models/TextEditingSettings.swift +++ b/CodeEdit/Features/Settings/Pages/TextEditingSettings/Models/TextEditingSettings.swift @@ -26,6 +26,7 @@ extension SettingsData { "Letter Spacing", "Autocomplete braces", "Enable type-over completion", + "Bracket Pair Emphasis", "Bracket Pair Highlight" ] if #available(macOS 14.0, *) { @@ -64,7 +65,7 @@ extension SettingsData { var letterSpacing: Double = 1.0 /// The behavior of bracket pair highlights. - var bracketHighlight: BracketPairHighlight = BracketPairHighlight() + var bracketEmphasis: BracketPairEmphasis = BracketPairEmphasis() /// Use the system cursor for the source editor. var useSystemCursor: Bool = true @@ -107,10 +108,10 @@ extension SettingsData { Double.self, forKey: .letterSpacing ) ?? 1 - self.bracketHighlight = try container.decodeIfPresent( - BracketPairHighlight.self, - forKey: .bracketHighlight - ) ?? BracketPairHighlight() + self.bracketEmphasis = try container.decodeIfPresent( + BracketPairEmphasis.self, + forKey: .bracketEmphasis + ) ?? BracketPairEmphasis() if #available(macOS 14, *) { self.useSystemCursor = try container.decodeIfPresent(Bool.self, forKey: .useSystemCursor) ?? true } else { @@ -164,7 +165,7 @@ extension SettingsData { } } - struct BracketPairHighlight: Codable, Hashable { + struct BracketPairEmphasis: Codable, Hashable { /// The type of highlight to use var highlightType: HighlightType = .flash var useCustomColor: Bool = false diff --git a/CodeEdit/Features/Settings/Pages/TextEditingSettings/TextEditingSettingsView.swift b/CodeEdit/Features/Settings/Pages/TextEditingSettings/TextEditingSettingsView.swift index 04522e60b..03b78a8c0 100644 --- a/CodeEdit/Features/Settings/Pages/TextEditingSettings/TextEditingSettingsView.swift +++ b/CodeEdit/Features/Settings/Pages/TextEditingSettings/TextEditingSettingsView.swift @@ -176,26 +176,26 @@ private extension TextEditingSettingsView { Group { Picker( "Bracket Pair Highlight", - selection: $textEditing.bracketHighlight.highlightType + selection: $textEditing.bracketEmphasis.highlightType ) { - Text("Disabled").tag(SettingsData.TextEditingSettings.BracketPairHighlight.HighlightType.disabled) + Text("Disabled").tag(SettingsData.TextEditingSettings.BracketPairEmphasis.HighlightType.disabled) Divider() - Text("Bordered").tag(SettingsData.TextEditingSettings.BracketPairHighlight.HighlightType.bordered) - Text("Flash").tag(SettingsData.TextEditingSettings.BracketPairHighlight.HighlightType.flash) - Text("Underline").tag(SettingsData.TextEditingSettings.BracketPairHighlight.HighlightType.underline) + Text("Bordered").tag(SettingsData.TextEditingSettings.BracketPairEmphasis.HighlightType.bordered) + Text("Flash").tag(SettingsData.TextEditingSettings.BracketPairEmphasis.HighlightType.flash) + Text("Underline").tag(SettingsData.TextEditingSettings.BracketPairEmphasis.HighlightType.underline) } - if [.bordered, .underline].contains(textEditing.bracketHighlight.highlightType) { - Toggle("Use Custom Color", isOn: $textEditing.bracketHighlight.useCustomColor) + if [.bordered, .underline].contains(textEditing.bracketEmphasis.highlightType) { + Toggle("Use Custom Color", isOn: $textEditing.bracketEmphasis.useCustomColor) SettingsColorPicker( "Bracket Pair Highlight Color", - color: $textEditing.bracketHighlight.color.swiftColor + color: $textEditing.bracketEmphasis.color.swiftColor ) .foregroundColor( - textEditing.bracketHighlight.useCustomColor + textEditing.bracketEmphasis.useCustomColor ? Color(.labelColor) : Color(.secondaryLabelColor) ) - .disabled(!textEditing.bracketHighlight.useCustomColor) + .disabled(!textEditing.bracketEmphasis.useCustomColor) } } }