summaryrefslogtreecommitdiff
path: root/script-beta
diff options
context:
space:
mode:
Diffstat (limited to 'script-beta')
-rw-r--r--script-beta/core/completion.lua264
-rw-r--r--script-beta/core/keyword.lua264
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