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