summaryrefslogtreecommitdiff
path: root/server-beta/src/core/getmethod.lua
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2019-10-14 20:46:44 +0800
committer最萌小汐 <sumneko@hotmail.com>2019-10-14 20:46:44 +0800
commit64bcf0979e681f8c2f521642cf648dbf88f360a9 (patch)
tree9b07d7577573add1851f22f959040b3f370a378f /server-beta/src/core/getmethod.lua
parentb735bbc94ce68bd1a7b66f2f2b195e4951508d42 (diff)
downloadlua-language-server-64bcf0979e681f8c2f521642cf648dbf88f360a9.zip
修正bug
Diffstat (limited to 'server-beta/src/core/getmethod.lua')
-rw-r--r--server-beta/src/core/getmethod.lua52
1 files changed, 52 insertions, 0 deletions
diff --git a/server-beta/src/core/getmethod.lua b/server-beta/src/core/getmethod.lua
new file mode 100644
index 00000000..fd5855c1
--- /dev/null
+++ b/server-beta/src/core/getmethod.lua
@@ -0,0 +1,52 @@
+local guide = require 'parser.guide'
+local checkSMT = require 'core.setmetatable'
+
+local m = {}
+
+function m:field(source, key, callback)
+ local used = {}
+ local found = false
+ used[source] = true
+
+ local node = source.node
+ used[node] = true
+
+ local myKey = guide.getKeyName(source)
+ if key == myKey then
+ callback(source.method, 'get')
+ end
+
+ self:eachField(node, myKey, function (src, mode)
+ if used[src] then
+ return
+ end
+ used[src] = true
+ self:eachField(src, key, function (src, mode)
+ used[src] = true
+ if mode == 'set' then
+ callback(src, mode)
+ found = true
+ end
+ end)
+ end)
+
+ self:eachValue(node, function (src)
+ self:eachField(src, myKey, function (src, mode)
+ if used[src] then
+ return
+ end
+ used[src] = true
+ self:eachField(src, key, function (src, mode)
+ used[src] = true
+ if mode == 'set' then
+ callback(src, mode)
+ found = true
+ end
+ end)
+ end)
+ end)
+
+ checkSMT(self, key, used, found, callback)
+end
+
+return m