Skip to content

Commit 41c0a36

Browse files
committed
fix #925
1 parent bccfab5 commit 41c0a36

File tree

8 files changed

+82
-33
lines changed

8 files changed

+82
-33
lines changed

Diff for: changelog.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# changelog
22

3+
## 2.6.2
4+
* `FIX` [#925](https://github.com/sumneko/lua-language-server/issues/925)
5+
36
## 2.6.1
47
`2022-1-24`
58
* `CHG` default values of settings:

Diff for: script/files.lua

+3-22
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,6 @@ function m.getOpenedCache(uri)
9999
return data.cache
100100
end
101101

102-
--- 标记为库文件
103-
---@param scp scope
104-
---@param uri uri
105-
---@param libraryUri uri
106-
function m.setLibraryUri(scp, uri, libraryUri)
107-
scp:get 'libraryMap' [uri] = libraryUri
108-
end
109-
110102
--- 是否是库文件
111103
function m.isLibrary(uri, excludeFolder)
112104
if excludeFolder then
@@ -117,13 +109,11 @@ function m.isLibrary(uri, excludeFolder)
117109
end
118110
end
119111
for _, scp in ipairs(scope.folders) do
120-
local map = scp:get 'libraryMap'
121-
if map and map[uri] ~= nil then
112+
if scp:isLinkedUri(uri) then
122113
return true
123114
end
124115
end
125-
local map = scope.fallback:get 'libraryMap'
126-
if map and map[uri] ~= nil then
116+
if scope.fallback:isLinkedUri(uri) then
127117
return true
128118
end
129119
return false
@@ -132,16 +122,7 @@ end
132122
--- 获取库文件的根目录
133123
function m.getLibraryUri(suri, uri)
134124
local scp = scope.getScope(suri)
135-
local map = scp:get 'libraryMap'
136-
if map and map[uri] ~= nil then
137-
return map[uri]
138-
end
139-
return nil
140-
end
141-
142-
---@param scp scope
143-
function m.flushAllLibrary(scp)
144-
scp:set('libraryMap', {})
125+
return scp:getLinkedUri(uri)
145126
end
146127

147128
--- 是否存在

Diff for: script/workspace/loading.lua

-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ function mt:loadFile(uri, libraryUri)
9999
files.addRef(uri)
100100
if libraryUri then
101101
log.info('++++As library of:', libraryUri)
102-
files.setLibraryUri(self.scp, uri, libraryUri)
103102
end
104103
end
105104
elseif files.isDll(uri) then

Diff for: script/workspace/require-path.lua

+2-9
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ function m.getVisiblePath(suri, path)
5656
local result = cache[path]
5757
if not result then
5858
result = {}
59-
if libraryPath then
60-
cache[path] = result
61-
end
59+
cache[path] = result
6260
for _, searcher in ipairs(searchers) do
6361
local isAbsolute = searcher:match '^[/\\]'
6462
or searcher:match '^%a+%:'
@@ -71,11 +69,7 @@ function m.getVisiblePath(suri, path)
7169
if libraryPath then
7270
currentPath = currentPath:sub(#libraryPath + 2)
7371
else
74-
local isRelative
75-
currentPath, isRelative = workspace.getRelativePath(uri)
76-
if not isAbsolute and not isRelative then
77-
goto CONTINUE
78-
end
72+
currentPath = workspace.getRelativePath(uri)
7973
end
8074
end
8175
repeat
@@ -100,7 +94,6 @@ function m.getVisiblePath(suri, path)
10094
addRequireName(suri, uri, expect)
10195
end
10296
until not pos or strict
103-
::CONTINUE::
10497
end
10598
end
10699
return result

Diff for: script/workspace/scope.lua

+14
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,20 @@ function mt:isLinkedUri(uri)
5656
return false
5757
end
5858

59+
---@param uri uri
60+
---@return uri?
61+
function mt:getLinkedUri(uri)
62+
if not uri then
63+
return nil
64+
end
65+
for linkUri in pairs(self._links) do
66+
if uri:sub(1, #linkUri) == linkUri then
67+
return linkUri
68+
end
69+
end
70+
return nil
71+
end
72+
5973
---@param k string
6074
---@param v any
6175
function mt:set(k, v)

Diff for: script/workspace/workspace.lua

+1-1
Original file line numberDiff line numberDiff line change
@@ -428,8 +428,8 @@ function m.awaitReload(scp)
428428
scp:set('ready', false)
429429
scp:set('nativeMatcher', nil)
430430
scp:set('libraryMatcher', nil)
431+
scp:removeAllLinks()
431432
m.flushFiles(scp)
432-
files.flushAllLibrary(scp)
433433
plugin.init(scp)
434434
m.awaitPreload(scp)
435435
scp:set('ready', true)

Diff for: test/tclient/init.lua

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ require 'tclient.tests.single-mode'
22
require 'tclient.tests.library-ignore-limit'
33
require 'tclient.tests.multi-workspace'
44
require 'tclient.tests.folders-with-single-file'
5+
require 'tclient.tests.load-library'

Diff for: test/tclient/tests/load-library.lua

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
local lclient = require 'tclient.lclient'
2+
local util = require 'utility'
3+
local ws = require 'workspace'
4+
local files = require 'files'
5+
local furi = require 'file-uri'
6+
local fs = require 'bee.filesystem'
7+
8+
local libraryPath = LOGPATH .. '/load-library'
9+
local libraryFilePath = LOGPATH .. '/load-library/library-file.lua'
10+
11+
---@async
12+
lclient():start(function (client)
13+
client:registerFakers()
14+
15+
client:register('workspace/configuration', function ()
16+
return {
17+
{
18+
['workspace.library'] = { libraryPath }
19+
},
20+
}
21+
end)
22+
23+
fs.create_directories(fs.path(libraryPath))
24+
if not fs.exists(fs.path(libraryFilePath)) then
25+
util.saveFile(libraryFilePath, 'LIBRARY_FILE = true')
26+
end
27+
28+
client:initialize()
29+
30+
client:notify('textDocument/didOpen', {
31+
textDocument = {
32+
uri = furi.encode('abc/1.lua'),
33+
languageId = 'lua',
34+
version = 0,
35+
text = [[
36+
require 'library-file'
37+
print(LIBRARY_FILE)
38+
]]
39+
}
40+
})
41+
42+
ws.awaitReady()
43+
44+
local locations = client:awaitRequest('textDocument/definition', {
45+
textDocument = { uri = furi.encode('abc/1.lua') },
46+
position = { line = 0, character = 10 },
47+
})
48+
49+
assert(util.equal(locations, {
50+
{
51+
uri = furi.encode(libraryFilePath),
52+
range = {
53+
start = { line = 0, character = 0 },
54+
['end'] = { line = 0, character = 0 },
55+
}
56+
}
57+
}))
58+
end)

0 commit comments

Comments
 (0)