diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2020-09-29 14:53:56 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2020-09-29 14:53:56 +0800 |
commit | 88ff3f4ae07311d4aed9c15df723c50da948f24f (patch) | |
tree | e5e16423a97496676a4b56fc157f21e9885cc306 /script-beta | |
parent | 049eaa1446d8b53cef14ec3a72f315f162ead2bc (diff) | |
download | lua-language-server-88ff3f4ae07311d4aed9c15df723c50da948f24f.zip |
暂存
Diffstat (limited to 'script-beta')
-rw-r--r-- | script-beta/core/semantic-tokens.lua | 2 | ||||
-rw-r--r-- | script-beta/parser/guide.lua | 8 | ||||
-rw-r--r-- | script-beta/vm/getGlobals.lua | 22 |
3 files changed, 22 insertions, 10 deletions
diff --git a/script-beta/core/semantic-tokens.lua b/script-beta/core/semantic-tokens.lua index af1409c1..8947bd88 100644 --- a/script-beta/core/semantic-tokens.lua +++ b/script-beta/core/semantic-tokens.lua @@ -64,7 +64,7 @@ Care['getlocal'] = function (source, results) end -- 3. 不是函数的局部变量 local hasFunc - for _, def in ipairs(vm.getDefs(loc)) do + for _, def in ipairs(vm.getDefs(loc, 'simple')) do if def.type == 'function' or (def.type == 'library' and def.value.type == 'function') then hasFunc = true diff --git a/script-beta/parser/guide.lua b/script-beta/parser/guide.lua index 0b1f1a85..31e2b9d8 100644 --- a/script-beta/parser/guide.lua +++ b/script-beta/parser/guide.lua @@ -1766,14 +1766,6 @@ function m.searchSameFields(status, simple, mode) if first.tag == '_ENV' then -- 检查全局变量的分支情况,需要业务层传入 interface.global m.checkSameSimpleInGlobal(status, simple[1], 1, queue) - if first.ref then - for _, ref in ipairs(first.ref) do - queue[#queue+1] = { - obj = ref, - start = 1, - } - end - end else simple.global = nil tableInsert(simple, 1, 'l|_ENV') diff --git a/script-beta/vm/getGlobals.lua b/script-beta/vm/getGlobals.lua index c5d6dc21..f5b22ff9 100644 --- a/script-beta/vm/getGlobals.lua +++ b/script-beta/vm/getGlobals.lua @@ -4,14 +4,34 @@ local files = require 'files' local library = require 'library' local util = require 'utility' +local function searchG(ref, results) + +end + +local function searchEnvRef(ref, results) + if ref.type == 'setglobal' + or ref.type == 'getglobal' then + results[#results+1] = ref + searchG(ref, results) + elseif ref.type == 'getlocal' then + results[#results+1] = ref.next + searchG(ref.next, results) + end +end + local function getGlobalsOfFile(uri) local globals = {} local ast = files.getAst(uri) if not ast then return globals end + local results = {} local env = guide.getENV(ast.ast) - local results = guide.requestFields(env) + if env.ref then + for _, ref in ipairs(env.ref) do + searchEnvRef(ref, results) + end + end for _, res in ipairs(results) do local name = guide.getSimpleName(res) if name then |