@@ -13,21 +13,10 @@ struct LanguageServersView: View {
1313 @State private var registryItems : [ RegistryItem ] = [ ]
1414 @State private var isLoading = true
1515
16+ @State private var showingInfoPanel = false
17+
1618 var body : some View {
1719 SettingsForm {
18- Section {
19- EmptyView ( )
20- } header: {
21- Label (
22- " Warning: Language server installation is not complete. Use this at your own risk. It "
23- + " **WILL** break. " ,
24- systemImage: " exclamationmark.triangle.fill "
25- )
26- . padding ( )
27- . foregroundStyle ( . black)
28- . background ( RoundedRectangle ( cornerRadius: 12 ) . fill ( . yellow) )
29- }
30-
3120 if isLoading {
3221 HStack {
3322 Spacer ( )
@@ -61,6 +50,11 @@ struct LanguageServersView: View {
6150 )
6251 . listRowInsets ( EdgeInsets ( top: 8 , leading: 8 , bottom: 8 , trailing: 8 ) )
6352 }
53+ } header: {
54+ Label (
55+ " Warning: Language server installation is experimental. Use at your own risk. " ,
56+ systemImage: " exclamationmark.triangle.fill "
57+ )
6458 }
6559 }
6660 }
@@ -82,6 +76,28 @@ struct LanguageServersView: View {
8276 } message: { details in
8377 Text ( details. error)
8478 }
79+ . toolbar {
80+ Button {
81+ showingInfoPanel. toggle ( )
82+ } label: {
83+ Image ( systemName: " questionmark.circle " )
84+ }
85+ . buttonStyle ( . plain)
86+ . foregroundStyle ( . secondary)
87+ . popover ( isPresented: $showingInfoPanel, arrowEdge: . top) {
88+ VStack ( alignment: . leading) {
89+ HStack {
90+ Text ( " Language Server Installation " ) . font ( . title2)
91+ Spacer ( )
92+ }
93+ . frame ( width: 300 )
94+ Text ( getInfoString ( ) )
95+ . lineLimit ( nil )
96+ . frame ( width: 300 )
97+ }
98+ . padding ( )
99+ }
100+ }
85101 }
86102
87103 private func loadRegistryItems( ) {
@@ -91,6 +107,23 @@ struct LanguageServersView: View {
91107 isLoading = false
92108 }
93109 }
110+
111+ private func getInfoString( ) -> AttributedString {
112+ let string = " CodeEdit makes use of the Mason Registry for language server installation. To install a package, "
113+ + " CodeEdit uses the package manager directed by the Mason Registry, and installs a copy of "
114+ + " the language server in Application Support. \n \n "
115+ + " Language server installation is still experimental, there may be bugs and expect this flow "
116+ + " to change over time. "
117+
118+ var attrString = AttributedString ( string)
119+
120+ if let linkRange = attrString. range ( of: " Mason Registry " ) {
121+ attrString [ linkRange] . link = URL ( string: " https://mason-registry.dev/ " )
122+ attrString [ linkRange] . foregroundColor = NSColor . linkColor
123+ }
124+
125+ return attrString
126+ }
94127}
95128
96129private struct InstallationFailure : Identifiable {
0 commit comments