diff options
Diffstat (limited to 'script-beta/core/completion.lua')
-rw-r--r-- | script-beta/core/completion.lua | 264 |
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 |