Skip to content

Commit 2580893

Browse files
committed
parse path in source
1 parent 19bd07b commit 2580893

File tree

3 files changed

+69
-14
lines changed

3 files changed

+69
-14
lines changed

script/core/jump-source.lua

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,26 @@
11
local guide = require 'parser.guide'
2+
local furi = require 'file-uri'
3+
local ws = require 'workspace'
4+
5+
---@param doc parser.object
6+
---@return uri
7+
local function parseUri(doc)
8+
local uri
9+
local scheme = furi.split(doc.path)
10+
if scheme and #scheme >= 2 then
11+
uri = doc.path
12+
else
13+
local suri = guide.getUri(doc):gsub('[/\\][^/\\]*$', '')
14+
local path = ws.getAbsolutePath(suri, doc.path)
15+
if path then
16+
uri = furi.encode(path)
17+
else
18+
uri = doc.path
19+
end
20+
end
21+
---@cast uri uri
22+
return uri
23+
end
224

325
---@param results table
426
return function (results)
@@ -7,8 +29,9 @@ return function (results)
729
or result.target.type == 'doc.class.name' then
830
local doc = result.target.parent.source
931
if doc then
10-
result.uri = doc.source
11-
result.target.uri = doc.source
32+
local uri = parseUri(doc)
33+
result.uri = uri
34+
result.target.uri = uri
1235
result.target.start = guide.positionOf(doc.line - 1, doc.char)
1336
result.target.finish = guide.positionOf(doc.line - 1, doc.char)
1437
end
@@ -22,8 +45,9 @@ return function (results)
2245
for _, doc in ipairs(target.bindDocs) do
2346
if doc.type == 'doc.source'
2447
and doc.bindSource == target then
25-
result.uri = doc.source
26-
result.target.uri = doc.source
48+
local uri = parseUri(doc)
49+
result.uri = uri
50+
result.target.uri = uri
2751
result.target.start = guide.positionOf(doc.line - 1, doc.char)
2852
result.target.finish = guide.positionOf(doc.line - 1, doc.char)
2953
end

script/parser/luadoc.lua

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ local re = require 'parser.relabel'
33
local guide = require 'parser.guide'
44
local compile = require 'parser.compile'
55
local util = require 'utility'
6-
local furi = require 'file-uri'
76

87
local TokenTypes, TokenStarts, TokenFinishs, TokenContents, TokenMarks
98
---@type integer
@@ -148,7 +147,7 @@ Symbol <- ({} {
148147
---@field async? boolean
149148
---@field versions? table[]
150149
---@field names? parser.object[]
151-
---@field source? parser.object
150+
---@field path? string
152151

153152
local function parseTokens(text, offset)
154153
Ci = 0
@@ -1419,17 +1418,11 @@ local docSwitch = util.switch()
14191418
source = source or fullSource
14201419
line = tonumber(line) or 1
14211420
char = tonumber(char) or 0
1422-
local uri
1423-
if furi.split(source) then
1424-
uri = source
1425-
else
1426-
uri = furi.decode(source)
1427-
end
14281421
local result = {
14291422
type = 'doc.source',
14301423
start = getStart(),
14311424
finish = getFinish(),
1432-
source = uri,
1425+
path = source,
14331426
line = line,
14341427
char = char,
14351428
}

test/tclient/tests/jump-source.lua

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ lclient():start(function (client)
1414

1515
client:notify('textDocument/didOpen', {
1616
textDocument = {
17-
uri = furi.encode('1.lua'),
17+
uri = furi.encode('D:/test/1.lua'),
1818
languageId = 'lua',
1919
version = 0,
2020
text = [[
@@ -36,6 +36,12 @@ YY = 1
3636
---@class BBB
3737
---@source file:///lib.c
3838
BBB = {}
39+
40+
---@source D:/xxx/2.lua
41+
D2 = 1
42+
43+
---@source 2.lua
44+
D3 = 1
3945
]]
4046
}
4147
})
@@ -55,6 +61,8 @@ print(XX)
5561
print(YY)
5662
---@type BBB
5763
print(BBB)
64+
print(D2)
65+
print(D3)
5866
]]
5967
}
6068
})
@@ -148,4 +156,34 @@ print(BBB)
148156
}
149157
}
150158
}))
159+
160+
local locations = client:awaitRequest('textDocument/definition', {
161+
textDocument = { uri = furi.encode('main.lua') },
162+
position = { line = 9, character = 7 },
163+
})
164+
165+
assert(util.equal(locations, {
166+
{
167+
uri = 'file:///d%3A/xxx/2.lua',
168+
range = {
169+
start = { line = 0, character = 0 },
170+
['end'] = { line = 0, character = 0 },
171+
}
172+
}
173+
}))
174+
175+
local locations = client:awaitRequest('textDocument/definition', {
176+
textDocument = { uri = furi.encode('main.lua') },
177+
position = { line = 10, character = 7 },
178+
})
179+
180+
assert(util.equal(locations, {
181+
{
182+
uri = 'file:///d%3A/test/2.lua',
183+
range = {
184+
start = { line = 0, character = 0 },
185+
['end'] = { line = 0, character = 0 },
186+
}
187+
}
188+
}))
151189
end)

0 commit comments

Comments
 (0)