nixos/lua-lsp/script/core/jump-source.lua

63 lines
2 KiB
Lua

local guide = require 'parser.guide'
local furi = require 'file-uri'
local ws = require 'workspace'
---@param doc parser.object
---@return uri
local function parseUri(doc)
local uri
local scheme = furi.split(doc.path)
if scheme and #scheme >= 2 then
uri = doc.path
else
local suri = guide.getUri(doc):gsub('[/\\][^/\\]*$', '')
local path = ws.getAbsolutePath(suri, doc.path)
if path then
uri = furi.encode(path)
else
uri = doc.path
end
end
---@cast uri uri
return uri
end
---@param results table
return function (results)
for _, result in ipairs(results) do
if result.target.type == 'doc.field.name'
or result.target.type == 'doc.class.name' then
local doc = result.target.parent.source
if doc then
local uri = parseUri(doc)
result.uri = uri
result.target = {
uri = uri,
start = guide.positionOf(doc.line - 1, doc.char),
finish = guide.positionOf(doc.line - 1, doc.char),
}
end
else
local target = result.target
if target.type == 'method'
or target.type == 'field' then
target = target.parent
end
if target.bindDocs then
for _, doc in ipairs(target.bindDocs) do
if doc.type == 'doc.source'
and doc.bindSource == target then
local uri = parseUri(doc)
result.uri = uri
result.target = {
uri = uri,
start = guide.positionOf(doc.line - 1, doc.char),
finish = guide.positionOf(doc.line - 1, doc.char),
}
end
end
end
end
end
end