summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2022-11-29 18:44:52 +0800
committer最萌小汐 <sumneko@hotmail.com>2022-11-29 18:44:52 +0800
commitac3be36d170dfbfaa7c9f9a5d3ace10ccce8cfe4 (patch)
tree671bc8c6bc5ea5a02478b64491b1c65e71dcbbd2
parent943b86f06af58216e2f99eee2a45547080980efa (diff)
downloadlua-language-server-ac3be36d170dfbfaa7c9f9a5d3ace10ccce8cfe4.zip
improve
-rw-r--r--script/core/modifyRequirePath.lua7
-rw-r--r--script/files.lua1
-rw-r--r--script/workspace/require-path.lua30
3 files changed, 32 insertions, 6 deletions
diff --git a/script/core/modifyRequirePath.lua b/script/core/modifyRequirePath.lua
index 91c600ac..d0783736 100644
--- a/script/core/modifyRequirePath.lua
+++ b/script/core/modifyRequirePath.lua
@@ -31,13 +31,8 @@ local function checkConvert(changes, uri, renames)
if type(name) ~= 'string' then
return
end
- local uris = rpath.findUrisByRequireName(uri, name)
- local ruri = uris and uris[1]
- if not ruri then
- return
- end
for _, rename in ipairs(renames) do
- if rename.oldUri == ruri then
+ if rpath.isMatchedUri(uri, rename.oldUri, name) then
local visibles = rpath.getVisiblePath(uri, furi.decode(rename.newUri))
if #visibles > 0 then
local newName = visibles[1].name
diff --git a/script/files.lua b/script/files.lua
index 5af2d137..f0881242 100644
--- a/script/files.lua
+++ b/script/files.lua
@@ -667,6 +667,7 @@ function m.compileState(uri)
local ws = require 'workspace'
local prog <close> = progress.create(uri, lang.script.WINDOW_COMPILING, 0.5)
prog:setMessage(ws.getRelativePath(uri))
+ log.trace('Compile State:', uri)
local clock = os.clock()
local state, err = parser.compile(file.text
, 'Lua'
diff --git a/script/workspace/require-path.lua b/script/workspace/require-path.lua
index cfe89b28..f65af868 100644
--- a/script/workspace/require-path.lua
+++ b/script/workspace/require-path.lua
@@ -250,6 +250,36 @@ function m.findUrisByRequireName(uri, name)
return mgr:findUrisByRequireName(uri, name)
end
+---@param suri uri
+---@param uri uri
+---@param name string
+---@return boolean
+function m.isMatchedUri(suri, uri, name)
+ local searchers = config.get(suri, 'Lua.runtime.path')
+ local strict = config.get(suri, 'Lua.runtime.pathStrict')
+ local separator = config.get(suri, 'Lua.completion.requireSeparator')
+ local path = name:gsub('%' .. separator, '/')
+
+ for _, searcher in ipairs(searchers) do
+ local fspath = searcher:gsub('%?', (path:gsub('%%', '%%%%')))
+ fspath = workspace.normalize(fspath)
+ local tail = '/' .. furi.encode(fspath):gsub('^file:[/]*', '')
+ if util.stringEndWith(uri, tail) then
+ local parentUri = files.getLibraryUri(suri, uri) or uri
+ if parentUri == nil or parentUri == '' then
+ parentUri = furi.encode '/'
+ end
+ local relative = uri:sub(#parentUri + 1):sub(1, - #tail)
+ if not strict
+ or relative == '/'
+ or relative == '' then
+ return true
+ end
+ end
+ end
+ return false
+end
+
files.watch(function (ev, uri)
for _, scp in ipairs(workspace.folders) do
scp:set('requireManager', nil)