@@ -439,25 +439,25 @@ local fvm_list_job = nil
439
439
--- Returns table<{name: string, status: active|global|nil}>
440
440
function M .fvm_list (callback )
441
441
if not fvm_list_job then
442
- -- Example output:
443
- --
444
- -- Cache Directory: /Users/rjm/fvm/versions
445
- --
446
- -- master (active)
447
- -- beta
448
- -- stable (global)
449
- fvm_list_job = Job :new ({ command = " fvm" , args = { " list" } })
442
+ fvm_list_job = Job :new ({ command = " fvm" , args = { " api" , " list" } })
450
443
451
444
fvm_list_job :after_success (vim .schedule_wrap (function (j )
452
445
local out = j :result ()
453
- local sdks_out = { unpack (out , 3 , # out ) }
446
+ local json_str = table.concat (out , " \n " )
447
+ -- Parse the JSON string
448
+ local ok , parsed = pcall (vim .json .decode , json_str )
449
+ if not ok then
450
+ ui .notify (" Failed to parse fvm list output" , ui .ERROR )
451
+ fvm_list_job = nil
452
+ return
453
+ end
454
454
455
455
local sdks = {}
456
- for _ , sdk_out in pairs (sdks_out ) do
457
- -- matches: "<name> (<status>)"
458
- local name , status = sdk_out : match ( " (.*)%s%((%w+)%) " )
459
- name = name or sdk_out
460
- table.insert ( sdks , { name = name , status = status })
456
+ for _ , version in pairs (parsed . versions ) do
457
+ table.insert ( sdks , {
458
+ name = version . name ,
459
+ dart_sdk_version = version . dartSdkVersion ,
460
+ })
461
461
end
462
462
463
463
callback (sdks )
0 commit comments