From: Peter Jankuliak
Date: Thu, 11 May 2023 19:52:15 +0000 (+0100)
Subject: Simplify cygwin path conversions
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=acfd1408f2b076c7f883cb74aa2bf451219a78d8;p=vim-lsp.git
Simplify cygwin path conversions
---
diff --git a/autoload/lsp/util.vim b/autoload/lsp/util.vim
index bb783d3..f9add18 100644
--- a/autoload/lsp/util.vim
+++ b/autoload/lsp/util.vim
@@ -112,8 +112,10 @@ export def LspFileToUri(fname: string): string
var uri: string = fname->fnamemodify(':p')
if has("win32unix")
- # We're in Cygwin
- uri = CygwinToWindowsPath(uri)
+ # We're in Cygwin, we need to convert POSIX style paths to Windows style.
+ # `cygpath -m` converts paths of the form "/cygdrive/c/foo/bar" to "C:/foo/bar", and
+ # paths of the form "/home/pete/foo" to "C:/cygwin64/home/pete/foo".
+ uri = system($'cygpath -m {uri}')->substitute('^\(\p*\).*$', '\=submatch(1)', "")
endif
var on_windows: bool = false
@@ -138,31 +140,6 @@ export def LspFileToUri(fname: string): string
return uri
enddef
-# Convert POSIX paths as used in Cygwin to native Windows paths
-def CygwinToWindowsPath(path: string): string
- if path =~? '^\/cygdrive\/'
- # Convert paths of the form "/cygdrive/c/foo/bar" to "c:/foo/bar"
-
- return path->substitute('^\/cygdrive\/\(\a\)\/', '\=submatch(1) .. ":/"', "")
- elseif path =~? '^\/'
- # Convert paths of the form "/home/pete/foo" to "C:/cygwin64/home/pete/foo"
-
- if g:cygwinroot->len() == 0
- # https://stackoverflow.com/a/7449029/273348
- var query: string = "reg query HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Cygwin\\\\setup /v rootdir | grep rootdir"
-
- g:cygwinroot = system(query)->substitute(
- \ '^\s*\S\+\s\+\S\+\s\+\(\p\+\).*$',
- \ '\=submatch(1)',
- \ "")
- endif
-
- return $'{g:cygwinroot}{path}'
- else
- return path
- endif
-enddef
-
# Convert a Vim buffer number to an LSP URI (file://)
export def LspBufnrToUri(bnr: number): string
return LspFileToUri(bnr->bufname())