ZSBXK2GGVYHLXXMAIIEXW45COI3GSP5CLBRUSY5JNRDSHTLGGBVAC O27AXDRWCFLPVPLPZJTRUJRJFGXXCSR623MJADCSQTUUIEF5ZARAC WBKXA5RVL5DSEJZ4OBDBCTNRT3Q4VFEVQNA344CET3BHY7CY7H5AC 4V7W7A6YX2J57RZUANMZKMKFHIDFNTXRMDR6M57DC6M3B4AHOK6AC GSOBCC5UYHCUY53WEYJ4WG5RUQACOQSBCLEGA5W6GRPHARU4ZWEAC CNJGJCJZ6LRHHIRSRATSE3D3Z5OQGSSTDMXCPVXSKRQLYJFME6IAC TKAAHADV62OQORAO7MYRRRHTGPMG3GKXU4Z4MFNLAO6DLTSDU3CAC 6W6OJAUT3KLOXXKYR4GA3MG4ACLO2T4KX3SGD2KZDX6MYEZYTPHAC U45XPF3YKPXXRJ4MN24T2RV7GOL4FZKQSWX5P5I7WT4HC5XF4FHAC ZL7ZSOEOGP2E24UEFC5VVPN5GTL3EUL34FA7F47WWWFPHJH2RS2AC WRBKZMYVNHRWT7TTUGTDJ3TMWZB32QYW5PCLKTTVAJ2YF6OI3LTAC O763V2GX3Z2JT5EOWNAVVGJ2SDDJ3ZMB63D267P2YXG5SIC6RGGAC private def resolvePathForUri (workspaceRoot : Option String) (path : String) : IO String := dolet candidate : System.FilePath ←if path.startsWith "/" thenpure (System.FilePath.mk path)elsematch workspaceRoot with| some root =>pure <| System.FilePath.mk (root ++ "/" ++ path)| none =>let cwd ← IO.currentDirpure <| System.FilePath.mk (cwd.toString ++ "/" ++ path)trylet rp ← IO.FS.realPath candidatepure rp.toStringcatch _ =>pure candidate.normalize.toStringdef fileUriWithWorkspace (workspaceRoot : Option String) (path : String) : IO String := dolet absPath ← resolvePathForUri workspaceRoot pathpure (fileUri absPath)
private def formatInfoViewContent (tabStop : Nat) (sourceView : ViewState) (sourceBuf : FileBuffer) : IO String := do
private def formatInfoViewContent (workspaceRoot : Option String) (tabStop : Nat) (sourceView : ViewState) (sourceBuf : FileBuffer) : IO String := do
let uriWs ← ViE.Lsp.Lean.fileUriWithWorkspace (some "/tmp/ws") "dir/a b.lean"assertEqual "fileUriWithWorkspace resolves relative path from workspace root" "file:///tmp/ws/dir/a%20b.lean" uriWslet uriWsAbs ← ViE.Lsp.Lean.fileUriWithWorkspace (some "/tmp/ws") "/tmp/alt/x.lean"assertEqual "fileUriWithWorkspace keeps absolute path priority" "file:///tmp/alt/x.lean" uriWsAbs