summaryrefslogtreecommitdiff
path: root/script-beta/core/keyword.lua
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2020-09-09 15:32:16 +0800
committer最萌小汐 <sumneko@hotmail.com>2020-09-09 15:32:16 +0800
commit5f2417d1e23cbcf6c2d1b6bf5c488c7b99a2b628 (patch)
treee5e99e20d7fa52fc3e43bf08e0541e2f3d336216 /script-beta/core/keyword.lua
parent969beada83dc990c4b19ea6eec1614bb2cfe95f9 (diff)
downloadlua-language-server-5f2417d1e23cbcf6c2d1b6bf5c488c7b99a2b628.zip
common 不会找到关键字
Diffstat (limited to 'script-beta/core/keyword.lua')
-rw-r--r--script-beta/core/keyword.lua264
1 files changed, 264 insertions, 0 deletions
diff --git a/script-beta/core/keyword.lua b/script-beta/core/keyword.lua
new file mode 100644
index 00000000..7e192b2d
--- /dev/null
+++ b/script-beta/core/keyword.lua
@@ -0,0 +1,264 @@
+local ckind = require 'define.CompletionItemKind'
+local guide = require 'parser.guide'
+
+local keyWordMap = {
+ {'do', function (hasSpace, results)
+ if hasSpace then
+ results[#results+1] = {
+ label = 'do .. end',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[$0 end]],
+ }
+ else
+ results[#results+1] = {
+ label = 'do .. end',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ do
+ $0
+ end]],
+ }
+ end
+ return true
+ end, function (ast, start)
+ return guide.eachSourceContain(ast.ast, start, function (source)
+ if source.type == 'while'
+ or source.type == 'in'
+ or source.type == 'loop' then
+ for i = 1, #source.keyword do
+ if start == source.keyword[i] then
+ return true
+ end
+ end
+ end
+ end)
+ end},
+ {'and'},
+ {'break'},
+ {'else'},
+ {'elseif', function (hasSpace, results)
+ if hasSpace then
+ results[#results+1] = {
+ label = 'elseif .. then',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[$1 then]],
+ }
+ else
+ results[#results+1] = {
+ label = 'elseif .. then',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[elseif $1 then]],
+ }
+ end
+ return true
+ end},
+ {'end'},
+ {'false'},
+ {'for', function (hasSpace, results)
+ if hasSpace then
+ results[#results+1] = {
+ label = 'for .. in',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ ${1:key, value} in ${2:pairs(${3:t})} do
+ $0
+ end]]
+ }
+ results[#results+1] = {
+ label = 'for i = ..',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ ${1:i} = ${2:1}, ${3:10, 1} do
+ $0
+ end]]
+ }
+ else
+ results[#results+1] = {
+ label = 'for .. in',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ for ${1:key, value} in ${2:pairs(${3:t})} do
+ $0
+ end]]
+ }
+ results[#results+1] = {
+ label = 'for i = ..',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ for ${1:i} = ${2:1}, ${3:10, 1} do
+ $0
+ end]]
+ }
+ end
+ return true
+ end},
+ {'function', function (hasSpace, results)
+ if hasSpace then
+ results[#results+1] = {
+ label = 'function ()',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ $1($2)
+ $0
+ end]]
+ }
+ else
+ results[#results+1] = {
+ label = 'function ()',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ function $1($2)
+ $0
+ end]]
+ }
+ end
+ return true
+ end},
+ {'goto'},
+ {'if', function (hasSpace, results)
+ if hasSpace then
+ results[#results+1] = {
+ label = 'if .. then',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ $1 then
+ $0
+ end]]
+ }
+ else
+ results[#results+1] = {
+ label = 'if .. then',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ if $1 then
+ $0
+ end]]
+ }
+ end
+ return true
+ end},
+ {'in', function (hasSpace, results)
+ if hasSpace then
+ results[#results+1] = {
+ label = 'in ..',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ ${1:pairs(${2:t})} do
+ $0
+ end]]
+ }
+ else
+ results[#results+1] = {
+ label = 'in ..',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ in ${1:pairs(${2:t})} do
+ $0
+ end]]
+ }
+ end
+ return true
+ end},
+ {'local', function (hasSpace, results)
+ if hasSpace then
+ results[#results+1] = {
+ label = 'local function',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ function $1($2)
+ $0
+ end]]
+ }
+ else
+ results[#results+1] = {
+ label = 'local function',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ local function $1($2)
+ $0
+ end]]
+ }
+ end
+ return false
+ end},
+ {'nil'},
+ {'not'},
+ {'or'},
+ {'repeat', function (hasSpace, results)
+ if hasSpace then
+ results[#results+1] = {
+ label = 'repeat .. until',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[$0 until $1]]
+ }
+ else
+ results[#results+1] = {
+ label = 'repeat .. until',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ repeat
+ $0
+ until $1]]
+ }
+ end
+ return true
+ end},
+ {'return', function (hasSpace, results)
+ if not hasSpace then
+ results[#results+1] = {
+ label = 'do return end',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[do return $1end]]
+ }
+ end
+ return false
+ end},
+ {'then'},
+ {'true'},
+ {'until'},
+ {'while', function (hasSpace, results)
+ if hasSpace then
+ results[#results+1] = {
+ label = 'while .. do',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ ${1:true} do
+ $0
+ end]]
+ }
+ else
+ results[#results+1] = {
+ label = 'while .. do',
+ kind = ckind.Snippet,
+ insertTextFormat = 2,
+ insertText = [[
+ while ${1:true} do
+ $0
+ end]]
+ }
+ end
+ return true
+ end},
+}
+
+return keyWordMap