summaryrefslogtreecommitdiff
path: root/script/files.lua
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2022-09-20 19:40:25 +0800
committer最萌小汐 <sumneko@hotmail.com>2022-09-20 19:40:25 +0800
commitcf9e700078499bd363d00b6601a37c616f2ceae8 (patch)
treec4c3bccba003e658345e13acd149f9103853fe44 /script/files.lua
parent33536b0453ec65d1d6abf3db72e057261b2a49be (diff)
downloadlua-language-server-cf9e700078499bd363d00b6601a37c616f2ceae8.zip
resolve #1177 re-support for symlinks
users need to maintain the correctness of symlinks themselves
Diffstat (limited to 'script/files.lua')
-rw-r--r--script/files.lua21
1 files changed, 19 insertions, 2 deletions
diff --git a/script/files.lua b/script/files.lua
index 0d15f166..d9e44823 100644
--- a/script/files.lua
+++ b/script/files.lua
@@ -57,6 +57,18 @@ m.reset()
local fileID = util.counter()
local uriMap = {}
+
+---@param path fs.path
+---@return fs.path
+local function getRealParent(path)
+ local parent = path:parent_path()
+ if parent:string() == path:string() then
+ return path
+ end
+ local res = fs.fullpath(path)
+ return getRealParent(parent) / res:filename()
+end
+
-- 获取文件的真实uri,但不穿透软链接
---@param uri uri
---@return uri
@@ -78,11 +90,16 @@ function m.getRealUri(uri)
if uri == ruri then
return ruri
end
+ local real = getRealParent(path:parent_path()) / res:filename()
+ ruri = furi.encode(real:string())
+ if uri == ruri then
+ return ruri
+ end
if not uriMap[uri] then
- uriMap[uri] = ruri
+ uriMap[uri] = true
log.warn(('Fix real file uri: %s -> %s'):format(uri, ruri))
end
- return uriMap[uri]
+ return ruri
end
--- 打开文件