summaryrefslogtreecommitdiff
path: root/script/core/completion
diff options
context:
space:
mode:
authorkevinhwang91 <kevin.hwang@live.com>2022-02-07 01:16:41 +0800
committerkevinhwang91 <kevin.hwang@live.com>2022-02-08 23:06:00 +0800
commit43f774f396d1457ed59341e2fe94f0f5af1e3a93 (patch)
treec3273ae933b61fab2fc495e2b85976c8a646a129 /script/core/completion
parent7842cd0e12e9d6a1971ff557a035f08386296198 (diff)
downloadlua-language-server-43f774f396d1457ed59341e2fe94f0f5af1e3a93.zip
feat(postfix): reduce its priority and add templates
In the language server like gopls, which supports `var` to assign variable and `range` to iterate collection, we should add these templates for postfix in Lua as well.
Diffstat (limited to 'script/core/completion')
-rw-r--r--script/core/completion/postfix.lua54
1 files changed, 54 insertions, 0 deletions
diff --git a/script/core/completion/postfix.lua b/script/core/completion/postfix.lua
index 2ac24933..0bdc1d54 100644
--- a/script/core/completion/postfix.lua
+++ b/script/core/completion/postfix.lua
@@ -133,6 +133,60 @@ register 'xpcall' {
end
}
+register 'local' {
+ function (state, source, callback)
+ if source.type ~= 'getglobal'
+ and source.type ~= 'getfield'
+ and source.type ~= 'getmethod'
+ and source.type ~= 'getindex'
+ and source.type ~= 'getlocal'
+ and source.type ~= 'call'
+ and source.type ~= 'table' then
+ return
+ end
+ local subber = subString(state)
+ callback(string.format('local $1 = %s$0'
+ , subber(source.start + 1, source.finish)
+ ))
+ end
+}
+
+register 'ipairs' {
+ function (state, source, callback)
+ if source.type ~= 'getglobal'
+ and source.type ~= 'getfield'
+ and source.type ~= 'getmethod'
+ and source.type ~= 'getindex'
+ and source.type ~= 'getlocal'
+ and source.type ~= 'call'
+ and source.type ~= 'table' then
+ return
+ end
+ local subber = subString(state)
+ callback(string.format('for ${1:i}, ${2:v} in ipairs(%s) do\n\t$0\nend'
+ , subber(source.start + 1, source.finish)
+ ))
+ end
+}
+
+register 'pairs' {
+ function (state, source, callback)
+ if source.type ~= 'getglobal'
+ and source.type ~= 'getfield'
+ and source.type ~= 'getmethod'
+ and source.type ~= 'getindex'
+ and source.type ~= 'getlocal'
+ and source.type ~= 'call'
+ and source.type ~= 'table' then
+ return
+ end
+ local subber = subString(state)
+ callback(string.format('for ${1:k}, ${2:v} in pairs(%s) do\n\t$0\nend'
+ , subber(source.start + 1, source.finish)
+ ))
+ end
+}
+
register 'insert' {
function (state, source, callback)
if source.type ~= 'getglobal'