summaryrefslogtreecommitdiff
path: root/script-beta/core/completion.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script-beta/core/completion.lua')
-rw-r--r--script-beta/core/completion.lua264
1 files changed, 4 insertions, 260 deletions
diff --git a/script-beta/core/completion.lua b/script-beta/core/completion.lua
index 71d34a06..aac8bda4 100644
--- a/script-beta/core/completion.lua
+++ b/script-beta/core/completion.lua
@@ -15,6 +15,7 @@ local markdown = require 'provider.markdown'
local findSource = require 'core.find-source'
local await = require 'await'
local parser = require 'parser'
+local keyWordMap = require 'core.keyword'
local stackID = 0
local resolveID = 0
@@ -338,6 +339,9 @@ local function checkCommon(word, text, offset, results)
for _, result in ipairs(results) do
used[result.label] = true
end
+ for _, data in ipairs(keyWordMap) do
+ used[data[1]] = true
+ end
for str, pos in text:gmatch '([%a_][%w_]*)()' do
if not used[str] and pos - 1 ~= offset then
used[str] = true
@@ -359,266 +363,6 @@ local function isInString(ast, offset)
end)
end
-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},
-}
-
local function checkKeyWord(ast, text, start, word, hasSpace, afterLocal, results)
local snipType = config.config.completion.keywordSnippet
for _, data in ipairs(keyWordMap) do