diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2019-10-23 17:46:12 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2019-10-23 17:46:12 +0800 |
commit | a86c0e00521835278c85806d61f78838d4283b83 (patch) | |
tree | 1081c19bf178926874e99b284e152614f80d3604 | |
parent | 17485f8030932500636cce91d01dd6af4c6d411c (diff) | |
download | lua-language-server-a86c0e00521835278c85806d61f78838d4283b83.zip |
暂存
-rw-r--r-- | server-beta/src/searcher/getValue.lua | 2 | ||||
-rw-r--r-- | server-beta/src/searcher/init.lua | 32 |
2 files changed, 31 insertions, 3 deletions
diff --git a/server-beta/src/searcher/getValue.lua b/server-beta/src/searcher/getValue.lua new file mode 100644 index 00000000..5f716b65 --- /dev/null +++ b/server-beta/src/searcher/getValue.lua @@ -0,0 +1,2 @@ +return function () +end diff --git a/server-beta/src/searcher/init.lua b/server-beta/src/searcher/init.lua index 2b85dd24..5a6bc014 100644 --- a/server-beta/src/searcher/init.lua +++ b/server-beta/src/searcher/init.lua @@ -1,7 +1,9 @@ -local guide = require 'parser.guide' -local files = require 'files' +local guide = require 'parser.guide' +local files = require 'files' +local getValue = require 'searcher.getValue' local setmetatable = setmetatable +local assert = assert _ENV = nil @@ -19,6 +21,28 @@ local specials = { local mt = {} mt.__index = mt mt.__name = 'searcher' +mt._step = 0 + +function mt:step() + self._step = self._step + 1 + assert(self.step <= 100, 'Stack overflow!') + if not self._stepClose then + self._stepClose = setmetatable({}, { + __close = function () + self._step = self._step - 1 + end + }) + end + return self._stepClose +end + +--- 获取关联的值 +---@param source table +---@return value table +function mt:getValue(source) + local _ <close> = self:step() + return getValue(self, source) +end ---@class engineer local m = {} @@ -29,7 +53,6 @@ local m = {} function m.create(uri) local ast = files.getAst(uri) local searcher = setmetatable({ - step = 0, ast = ast.ast, uri = uri, cache = { @@ -39,6 +62,9 @@ function m.create(uri) value = {}, specialName = {}, }, + lock = { + value = {}, + } }, mt) return searcher end |