Skip to content

Commit 9732485

Browse files
committed
improve code-lens
1 parent 6456802 commit 9732485

File tree

3 files changed

+39
-24
lines changed

3 files changed

+39
-24
lines changed

script/core/code-lens.lua

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,16 @@ local await = require 'await'
44
local conv = require 'proto.converter'
55
local getRef = require 'core.reference'
66

7-
---@type codeLens
8-
local latestCodeLens
7+
---@class parser.state
8+
---@field package _codeLens codeLens
99

1010
---@class codeLens.resolving
1111
---@field mode 'reference'
1212
---@field source parser.object
1313

1414
---@class codeLens.result
1515
---@field position integer
16+
---@field uri uri
1617
---@field id integer
1718

1819
---@class codeLens
@@ -64,14 +65,19 @@ end
6465
---@async
6566
function mt:collectReferences()
6667
await.delay()
68+
---@async
6769
guide.eachSourceType(self.state.ast, 'function', function (src)
68-
local assign = src.parent
69-
if not guide.isSet(assign) then
70+
local parent = src.parent
71+
if guide.isSet(parent) then
72+
src = parent
73+
elseif parent.type == 'return' then
74+
else
7075
return
7176
end
77+
await.delay()
7278
self:addResult(src.start, {
7379
mode = 'reference',
74-
source = assign,
80+
source = src,
7581
})
7682
end)
7783
end
@@ -80,50 +86,57 @@ end
8086
---@param source parser.object
8187
---@return proto.command?
8288
function mt:resolveReference(source)
83-
local refs = getRef(self.uri, source.start, false)
89+
local refs = getRef(self.uri, source.finish, false)
8490
local count = refs and #refs or 0
8591
local command = conv.command(
8692
('%d个引用'):format(count),
87-
'editor.action.showReferences',
88-
{
89-
self.uri,
90-
conv.packPosition(self.state, source.start),
91-
}
93+
'',
94+
{}
9295
)
9396
return command
9497
end
9598

9699
---@async
97100
---@param uri uri
98101
---@return codeLens.result[]?
99-
local function codeLens(uri)
100-
latestCodeLens = setmetatable({}, mt)
101-
local suc = latestCodeLens:init(uri)
102+
local function getCodeLens(uri)
103+
local state = files.getState(uri)
104+
if not state then
105+
return nil
106+
end
107+
local codeLens = setmetatable({}, mt)
108+
local suc = codeLens:init(uri)
102109
if not suc then
103110
return nil
104111
end
112+
state._codeLens = codeLens
105113

106-
latestCodeLens:collectReferences()
114+
codeLens:collectReferences()
107115

108-
if #latestCodeLens.results == 0 then
116+
if #codeLens.results == 0 then
109117
return nil
110118
end
111119

112-
return latestCodeLens.results
120+
return codeLens.results
113121
end
114122

115123
---@async
116124
---@param id integer
117125
---@return proto.command?
118-
local function resolve(id)
119-
if not latestCodeLens then
126+
local function resolve(uri, id)
127+
local state = files.getState(uri)
128+
if not state then
129+
return nil
130+
end
131+
local codeLens = state._codeLens
132+
if not codeLens then
120133
return nil
121134
end
122-
local command = latestCodeLens:resolve(id)
135+
local command = codeLens:resolve(id)
123136
return command
124137
end
125138

126139
return {
127-
codeLens = codeLens,
140+
codeLens = getCodeLens,
128141
resolve = resolve,
129142
}

script/parser/guide.lua

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,6 @@ local isSetMap = {
894894
['setindex'] = true,
895895
['tablefield'] = true,
896896
['tableindex'] = true,
897-
['tableexp'] = true,
898897
['label'] = true,
899898
['doc.class'] = true,
900899
['doc.alias'] = true,

script/provider/provider.lua

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -941,7 +941,10 @@ m.register 'textDocument/codeLens' {
941941
for _, result in ipairs(results) do
942942
codeLens[#codeLens+1] = {
943943
range = converter.packRange(state, result.position, result.position),
944-
data = result.id,
944+
data = {
945+
uri = uri,
946+
id = result.id,
947+
},
945948
}
946949
end
947950
return codeLens
@@ -952,7 +955,7 @@ m.register 'codeLens/resolve' {
952955
---@async
953956
function (codeLen)
954957
local core = require 'core.code-lens'
955-
local command = core.resolve(codeLen.data)
958+
local command = core.resolve(codeLen.data.uri, codeLen.data.id)
956959
codeLen.command = command
957960
return codeLen
958961
end

0 commit comments

Comments
 (0)