@@ -115,6 +115,48 @@ function formatInstallStatus(result) {
115115 }
116116}
117117
118+ function formatStartupTimeoutValue ( timeout ) {
119+ return typeof timeout === "number" ? `${ timeout } ms` : "Default" ;
120+ }
121+
122+ function sanitizeInstallMessage ( message ) {
123+ const lines = String ( message || "" )
124+ . split ( "\n" )
125+ . map ( ( line ) => line . trim ( ) )
126+ . filter ( Boolean )
127+ . filter (
128+ ( line ) =>
129+ ! / ^ p r o o t w a r n i n g : / i. test ( line ) &&
130+ ! line . includes ( `"/proc/self/fd/0"` ) &&
131+ ! line . includes ( `"/proc/self/fd/1"` ) &&
132+ ! line . includes ( `"/proc/self/fd/2"` ) ,
133+ ) ;
134+
135+ return lines . join ( " " ) ;
136+ }
137+
138+ function formatInstallInfo ( result ) {
139+ const cleanedMessage = sanitizeInstallMessage ( result ?. message ) ;
140+
141+ switch ( result ?. status ) {
142+ case "present" :
143+ return result . version
144+ ? `Version ${ result . version } is available.`
145+ : "Language server is installed and ready." ;
146+ case "missing" :
147+ return "Language server is not installed in the terminal environment." ;
148+ case "failed" :
149+ return (
150+ cleanedMessage || "Acode could not verify the installation status."
151+ ) ;
152+ default :
153+ return (
154+ cleanedMessage ||
155+ "Installation status could not be checked automatically."
156+ ) ;
157+ }
158+ }
159+
118160function formatValue ( value ) {
119161 if ( value === undefined || value === null || value === "" ) return "" ;
120162 let text = String ( value ) ;
@@ -154,9 +196,16 @@ function updateItemDisplay($list, itemsByKey, key, value, extras = {}) {
154196 const $item = $list ?. querySelector ?. ( `[data-key="${ key } "]` ) ;
155197 if ( ! $item ) return ;
156198
157- const $value = $item . querySelector ( ".value" ) ;
158- if ( $value ) {
159- $value . textContent = formatValue ( item . value ) ;
199+ const $subtitle = $item . querySelector ( ".value" ) ;
200+ if ( $subtitle ) {
201+ $subtitle . textContent = $subtitle . classList . contains ( "setting-info" )
202+ ? String ( item . info || "" )
203+ : formatValue ( item . value ) ;
204+ }
205+
206+ const $trailingValue = $item . querySelector ( ".setting-trailing-value" ) ;
207+ if ( $trailingValue ) {
208+ $trailingValue . textContent = formatValue ( item . value ) ;
160209 }
161210
162211 const $checkbox = $item . querySelector ( ".input-checkbox" ) ;
@@ -200,38 +249,44 @@ function createItems(snapshot) {
200249 text : "Enabled" ,
201250 checkbox : snapshot . merged . enabled !== false ,
202251 info : "Enable or disable this language server" ,
252+ category : "General" ,
203253 } ,
204254 {
205255 key : "install_status" ,
206256 text : "Installed" ,
207257 value : formatInstallStatus ( snapshot . installResult ) ,
208- info :
209- snapshot . installResult . message ||
210- "Current installation state for this language server" ,
258+ info : formatInstallInfo ( snapshot . installResult ) ,
259+ category : "Installation" ,
260+ chevron : true ,
211261 } ,
212262 {
213263 key : "install_server" ,
214264 text : "Install / Repair" ,
215265 info : "Install or repair this language server" ,
266+ category : "Installation" ,
267+ chevron : true ,
216268 } ,
217269 {
218270 key : "update_server" ,
219271 text : "Update Server" ,
220272 info : "Update this language server if an update flow exists" ,
273+ category : "Installation" ,
274+ chevron : true ,
221275 } ,
222276 {
223277 key : "uninstall_server" ,
224278 text : "Uninstall Server" ,
225279 info : "Remove installed packages or binaries for this server" ,
280+ category : "Installation" ,
281+ chevron : true ,
226282 } ,
227283 {
228284 key : "startup_timeout" ,
229285 text : "Startup Timeout" ,
230- value :
231- typeof snapshot . merged . startupTimeout === "number"
232- ? `${ snapshot . merged . startupTimeout } ms`
233- : "Default (5000 ms)" ,
286+ value : formatStartupTimeoutValue ( snapshot . merged . startupTimeout ) ,
234287 info : "Configure how long Acode waits for the server to start" ,
288+ category : "Advanced" ,
289+ chevron : true ,
235290 } ,
236291 {
237292 key : "edit_init_options" ,
@@ -240,11 +295,15 @@ function createItems(snapshot) {
240295 ? "Configured"
241296 : "Empty" ,
242297 info : "Edit initialization options as JSON" ,
298+ category : "Advanced" ,
299+ chevron : true ,
243300 } ,
244301 {
245302 key : "view_init_options" ,
246303 text : "View Initialization Options" ,
247304 info : "View the effective initialization options as JSON" ,
305+ category : "Advanced" ,
306+ chevron : true ,
248307 } ,
249308 ] ;
250309
@@ -254,6 +313,7 @@ function createItems(snapshot) {
254313 text,
255314 checkbox : snapshot . builtinExts [ extKey ] !== false ,
256315 info,
316+ category : "Features" ,
257317 } ) ;
258318 } ) ;
259319
@@ -275,9 +335,7 @@ async function refreshVisibleState($list, itemsByKey, serverId) {
275335 "install_status" ,
276336 formatInstallStatus ( snapshot . installResult ) ,
277337 {
278- info :
279- snapshot . installResult . message ||
280- "Current installation state for this language server" ,
338+ info : formatInstallInfo ( snapshot . installResult ) ,
281339 } ,
282340 ) ;
283341 updateItemDisplay ( $list , itemsByKey , "install_server" , "" ) ;
@@ -287,9 +345,7 @@ async function refreshVisibleState($list, itemsByKey, serverId) {
287345 $list ,
288346 itemsByKey ,
289347 "startup_timeout" ,
290- typeof snapshot . merged . startupTimeout === "number"
291- ? `${ snapshot . merged . startupTimeout } ms`
292- : "Default (5000 ms)" ,
348+ formatStartupTimeoutValue ( snapshot . merged . startupTimeout ) ,
293349 ) ;
294350 updateItemDisplay (
295351 $list ,
@@ -379,6 +435,9 @@ export default function lspServerDetail(serverId) {
379435 undefined ,
380436 {
381437 preserveOrder : true ,
438+ pageClassName : "detail-settings-page" ,
439+ listClassName : "detail-settings-list" ,
440+ valueInTail : true ,
382441 } ,
383442 ) ;
384443
@@ -414,7 +473,8 @@ export default function lspServerDetail(serverId) {
414473 const result = await checkServerInstallation ( snapshot . merged ) ;
415474 const lines = [
416475 `Status: ${ formatInstallStatus ( result ) } ` ,
417- result . message ? `Details: ${ result . message } ` : null ,
476+ result . version ? `Version: ${ result . version } ` : null ,
477+ `Details: ${ formatInstallInfo ( result ) } ` ,
418478 ] . filter ( Boolean ) ;
419479 alert ( "Installation Status" , lines . join ( "<br>" ) ) ;
420480 break ;
0 commit comments