diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2019-10-28 16:03:02 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2019-10-28 16:03:02 +0800 |
commit | d544fa45c903bbc479ae383e3626940316134ba1 (patch) | |
tree | 931955617a702162e06ff95ffe96a4ab0b60cd82 | |
parent | 51cb6529d23b01586a60c2a015f22dd1eca40127 (diff) | |
download | lua-language-server-d544fa45c903bbc479ae383e3626940316134ba1.zip |
暂存
-rw-r--r-- | server-beta/src/files.lua | 9 | ||||
-rw-r--r-- | server-beta/src/parser/guide.lua | 22 | ||||
-rw-r--r-- | server-beta/src/proto/provider.lua | 5 | ||||
-rw-r--r-- | server-beta/src/searcher/eachRef.lua | 26 |
4 files changed, 37 insertions, 25 deletions
diff --git a/server-beta/src/files.lua b/server-beta/src/files.lua index 1a1cf347..6c0d8dae 100644 --- a/server-beta/src/files.lua +++ b/server-beta/src/files.lua @@ -31,6 +31,15 @@ function m.close(uri) m.openMap[uri] = nil end +--- 是否存在 +---@return boolean +function m.exists(uri) + if platform.OS == 'Windows' then + uri = uri:lower() + end + return m.fileMap[uri] ~= nil +end + --- 设置文件文本 ---@param uri string ---@param text string diff --git a/server-beta/src/parser/guide.lua b/server-beta/src/parser/guide.lua index a561e49c..f8330438 100644 --- a/server-beta/src/parser/guide.lua +++ b/server-beta/src/parser/guide.lua @@ -247,28 +247,6 @@ function m.getLabel(block, name) error('guide.getLocal overstack') end ---- 获取指定区块中的 return -function m.getReturns(block) - local list = { block } - local returns = {} - for i = 1, 1000 do - local len = #list - if len == 0 then - return - end - local obj = list[len] - list[len] = nil - if obj.type == 'return' then - returns[#returns+1] = obj - end - if i > 1 and obj.type == 'function' then - else - m.addChilds(list, obj, m.actionMap) - end - end - return returns -end - --- 判断source是否包含offset function m.isContain(source, offset) return source.start <= offset and source.finish >= offset - 1 diff --git a/server-beta/src/proto/provider.lua b/server-beta/src/proto/provider.lua index 9ad5147a..a27066aa 100644 --- a/server-beta/src/proto/provider.lua +++ b/server-beta/src/proto/provider.lua @@ -150,14 +150,13 @@ end) proto.on('textDocument/definition', function (params) local core = require 'core.definition' local uri = params.textDocument.uri - local ast = files.getAst(uri) - if not ast then + if not files.exists(uri) then return nil end local lines = files.getLines(uri) local text = files.getText(uri) local offset = inte.offset(lines, text, params.position) - local result = core(ast, offset) + local result = core(uri, offset) if not result then return nil end diff --git a/server-beta/src/searcher/eachRef.lua b/server-beta/src/searcher/eachRef.lua index 65fd3529..93a05079 100644 --- a/server-beta/src/searcher/eachRef.lua +++ b/server-beta/src/searcher/eachRef.lua @@ -1,5 +1,25 @@ local guide = require 'parser.guide' +local function ofCall(searcher, func, index, callback) + searcher:eachRef(func, function (info) + local src = info.source + local funcDef = src.value + if funcDef and funcDef.type == 'function' then + -- 搜索函数第 index 个返回值 + end + end) +end + +local function ofValue(searcher, value, callback) + -- 检查函数返回值 + if value.type == 'select' then + local call = value.vararg + if call.type == 'call' then + ofCall(searcher, call.node, value.index, callback) + end + end +end + local function ofSelf(searcher, loc, callback) -- self 的2个特殊引用位置: -- 1. 当前方法定义时的对象(mt) @@ -32,12 +52,18 @@ local function ofLocal(searcher, loc, callback) source = ref, mode = 'set', } + if ref.value then + ofValue(searcher, ref.value, callback) + end end end end if loc.tag == 'self' then ofSelf(searcher, loc, callback) end + if loc.value then + ofValue(searcher, loc.value, callback) + end end local function checkField(key, info, callback) |