summaryrefslogtreecommitdiff
path: root/script/core
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2021-12-30 17:51:22 +0800
committer最萌小汐 <sumneko@hotmail.com>2021-12-30 17:51:22 +0800
commitb1c20a1f24cc7e17d446b2ac4e4118c36173dc20 (patch)
treea55942645f0cbc5db38aad471ac92e2d5b4c7c8c /script/core
parenta555b92349e2ab07b9111a296618a69caa068032 (diff)
downloadlua-language-server-b1c20a1f24cc7e17d446b2ac4e4118c36173dc20.zip
update
Diffstat (limited to 'script/core')
-rw-r--r--script/core/completion/completion.lua20
-rw-r--r--script/core/completion/postfix.lua2
-rw-r--r--script/core/diagnostics/deprecated.lua6
-rw-r--r--script/core/diagnostics/init.lua6
-rw-r--r--script/core/diagnostics/lowercase-global.lua2
-rw-r--r--script/core/diagnostics/undefined-global.lua4
-rw-r--r--script/core/hint.lua8
-rw-r--r--script/core/hover/description.lua4
-rw-r--r--script/core/hover/label.lua2
-rw-r--r--script/core/hover/table.lua3
-rw-r--r--script/core/infer.lua17
-rw-r--r--script/core/noder.lua8
-rw-r--r--script/core/semantic-tokens.lua45
13 files changed, 62 insertions, 65 deletions
diff --git a/script/core/completion/completion.lua b/script/core/completion/completion.lua
index 9a7847f8..cbe782cc 100644
--- a/script/core/completion/completion.lua
+++ b/script/core/completion/completion.lua
@@ -180,7 +180,7 @@ local function buildDetail(source)
end
local function getSnip(source)
- local context = config.get(nil, 'Lua.completion.displayContext')
+ local context = config.get(guide.getUri(source), 'Lua.completion.displayContext')
if context <= 0 then
return nil
end
@@ -222,7 +222,7 @@ local function buildDesc(source)
end
local function buildFunction(results, source, value, oop, data)
- local snipType = config.get(nil, 'Lua.completion.callSnippet')
+ local snipType = config.get(guide.getUri(source), 'Lua.completion.callSnippet')
if snipType == 'Disable' or snipType == 'Both' then
results[#results+1] = data
end
@@ -324,7 +324,7 @@ local function checkLocal(state, word, position, results)
end
local function checkModule(state, word, position, results)
- if not config.get(nil, 'Lua.completion.autoRequire') then
+ if not config.get(state.uri, 'Lua.completion.autoRequire') then
return
end
local locals = guide.getVisibleLocals(state.ast, position)
@@ -337,7 +337,7 @@ local function checkModule(state, word, position, results)
local stemName = fileName:gsub('%..+', '')
if not locals[stemName]
and not vm.hasGlobalSets(stemName)
- and not config.get(nil, 'Lua.diagnostics.globals')[stemName]
+ and not config.get(state.uri, 'Lua.diagnostics.globals')[stemName]
and stemName:match '^[%a_][%w_]*$'
and matchKey(word, stemName) then
local targetState = files.getState(uri)
@@ -448,8 +448,8 @@ local function checkFieldFromFieldToIndex(state, name, src, parent, word, startP
}
end
else
- if config.get(nil, 'Lua.runtime.version') == 'lua 5.1'
- or config.get(nil, 'Lua.runtime.version') == 'luaJIT' then
+ if config.get(state.uri, 'Lua.runtime.version') == 'lua 5.1'
+ or config.get(state.uri, 'Lua.runtime.version') == 'luaJIT' then
textEdit.newText = '_G' .. textEdit.newText
else
textEdit.newText = '_ENV' .. textEdit.newText
@@ -536,7 +536,7 @@ local function checkFieldOfRefs(refs, state, word, startPos, position, parent, o
goto CONTINUE
end
local funcLabel
- if config.get(nil, 'Lua.completion.showParams') then
+ if config.get(state.uri, 'Lua.completion.showParams') then
local value = searcher.getObjectValue(src) or src
if value.type == 'function'
or value.type == 'doc.type.function' then
@@ -630,7 +630,7 @@ end
local function checkCommon(state, word, position, results)
local myUri = state.uri
- local showWord = config.get(nil, 'Lua.completion.showWord')
+ local showWord = config.get(state.uri, 'Lua.completion.showWord')
if showWord == 'Disable' then
return
end
@@ -645,7 +645,7 @@ local function checkCommon(state, word, position, results)
for _, data in ipairs(keyWordMap) do
used[data[1]] = true
end
- if config.get(nil, 'Lua.completion.workspaceWord') and #word >= 2 then
+ if config.get(state.uri, 'Lua.completion.workspaceWord') and #word >= 2 then
results.complete = true
local myHead = word:sub(1, 2)
for uri in files.eachFile() do
@@ -720,7 +720,7 @@ end
local function checkKeyWord(state, start, position, word, hasSpace, afterLocal, results)
local text = state.lua
- local snipType = config.get(nil, 'Lua.completion.keywordSnippet')
+ local snipType = config.get(state.uri, 'Lua.completion.keywordSnippet')
local symbol = lookBackward.findSymbol(text, guide.positionToOffset(state, start))
local isExp = symbol == '(' or symbol == ',' or symbol == '='
local info = {
diff --git a/script/core/completion/postfix.lua b/script/core/completion/postfix.lua
index b2b777e7..2ac24933 100644
--- a/script/core/completion/postfix.lua
+++ b/script/core/completion/postfix.lua
@@ -278,7 +278,7 @@ return function (state, position, results)
offset = newOffset - 1
end
local symbol = text:sub(offset, offset)
- if symbol == config.get(nil, 'Lua.completion.postfix') then
+ if symbol == config.get(state.uri, 'Lua.completion.postfix') then
local wordPosition = guide.offsetToPosition(state, offset - 1)
checkPostFix(state, word or '', wordPosition, position, symbol, results)
return symbol ~= '.' and symbol ~= ':'
diff --git a/script/core/diagnostics/deprecated.lua b/script/core/diagnostics/deprecated.lua
index 5fe36c42..1c248646 100644
--- a/script/core/diagnostics/deprecated.lua
+++ b/script/core/diagnostics/deprecated.lua
@@ -23,10 +23,10 @@ return function (uri, callback)
if not key then
return
end
- if config.get(nil, 'Lua.diagnostics.globals')[key] then
+ if config.get(uri, 'Lua.diagnostics.globals')[key] then
return
end
- if config.get(nil, 'Lua.runtime.special')[key] then
+ if config.get(uri, 'Lua.runtime.special')[key] then
return
end
end
@@ -83,7 +83,7 @@ return function (uri, callback)
end
table.sort(versions)
if #versions > 0 then
- message = ('%s(%s)'):format(message, lang.script('DIAG_DEFINED_VERSION', table.concat(versions, '/'), config.get(nil, 'Lua.runtime.version')))
+ message = ('%s(%s)'):format(message, lang.script('DIAG_DEFINED_VERSION', table.concat(versions, '/'), config.get(uri, 'Lua.runtime.version')))
end
end
cache[id] = {
diff --git a/script/core/diagnostics/init.lua b/script/core/diagnostics/init.lua
index 2a21302b..4e2a4976 100644
--- a/script/core/diagnostics/init.lua
+++ b/script/core/diagnostics/init.lua
@@ -20,13 +20,13 @@ table.sort(diagList, function (a, b)
end)
local function check(uri, name, results)
- if config.get(nil, 'Lua.diagnostics.disable')[name] then
+ if config.get(uri, 'Lua.diagnostics.disable')[name] then
return
end
- local level = config.get(nil, 'Lua.diagnostics.severity')[name]
+ local level = config.get(uri, 'Lua.diagnostics.severity')[name]
or define.DiagnosticDefaultSeverity[name]
- local neededFileStatus = config.get(nil, 'Lua.diagnostics.neededFileStatus')[name]
+ local neededFileStatus = config.get(uri, 'Lua.diagnostics.neededFileStatus')[name]
or define.DiagnosticDefaultNeededFileStatus[name]
if neededFileStatus == 'None' then
diff --git a/script/core/diagnostics/lowercase-global.lua b/script/core/diagnostics/lowercase-global.lua
index bd301c7f..d7032c13 100644
--- a/script/core/diagnostics/lowercase-global.lua
+++ b/script/core/diagnostics/lowercase-global.lua
@@ -24,7 +24,7 @@ return function (uri, callback)
end
local definedGlobal = {}
- for name in pairs(config.get(nil, 'Lua.diagnostics.globals')) do
+ for name in pairs(config.get(uri, 'Lua.diagnostics.globals')) do
definedGlobal[name] = true
end
diff --git a/script/core/diagnostics/undefined-global.lua b/script/core/diagnostics/undefined-global.lua
index 41a50d99..45fc390b 100644
--- a/script/core/diagnostics/undefined-global.lua
+++ b/script/core/diagnostics/undefined-global.lua
@@ -27,10 +27,10 @@ return function (uri, callback)
if not key then
return
end
- if config.get(nil, 'Lua.diagnostics.globals')[key] then
+ if config.get(uri, 'Lua.diagnostics.globals')[key] then
return
end
- if config.get(nil, 'Lua.runtime.special')[key] then
+ if config.get(uri, 'Lua.runtime.special')[key] then
return
end
local node = src.node
diff --git a/script/core/hint.lua b/script/core/hint.lua
index 82c7371b..eebadb05 100644
--- a/script/core/hint.lua
+++ b/script/core/hint.lua
@@ -32,11 +32,11 @@ local function typeHint(uri, results, start, finish)
return
end
if source.parent.type == 'funcargs' then
- if not config.get(nil, 'Lua.hint.paramType') then
+ if not config.get(uri, 'Lua.hint.paramType') then
return
end
else
- if not config.get(nil, 'Lua.hint.setType') then
+ if not config.get(uri, 'Lua.hint.setType') then
return
end
end
@@ -99,7 +99,7 @@ end
---@async
local function paramName(uri, results, start, finish)
- local paramConfig = config.get(nil, 'Lua.hint.paramName')
+ local paramConfig = config.get(uri, 'Lua.hint.paramName')
if not paramConfig or paramConfig == 'Disable' then
return
end
@@ -162,7 +162,7 @@ end
---@async
local function awaitHint(uri, results, start, finish)
- local awaitConfig = config.get(nil, 'Lua.hint.await')
+ local awaitConfig = config.get(uri, 'Lua.hint.await')
if not awaitConfig then
return
end
diff --git a/script/core/hover/description.lua b/script/core/hover/description.lua
index c5a42a32..7f34f14d 100644
--- a/script/core/hover/description.lua
+++ b/script/core/hover/description.lua
@@ -65,11 +65,11 @@ end
local function asStringView(source, literal)
-- 内部包含转义符?
local rawLen = source.finish - source.start - 2 * #source[2]
- if config.get(nil, 'Lua.hover.viewString')
+ if config.get(guide.getUri(source), 'Lua.hover.viewString')
and (source[2] == '"' or source[2] == "'")
and rawLen > #literal then
local view = literal
- local max = config.get(nil, 'Lua.hover.viewStringMax')
+ local max = config.get(guide.getUri(source), 'Lua.hover.viewStringMax')
if #view > max then
view = view:sub(1, max) .. '...'
end
diff --git a/script/core/hover/label.lua b/script/core/hover/label.lua
index 436ff913..a39f0eac 100644
--- a/script/core/hover/label.lua
+++ b/script/core/hover/label.lua
@@ -157,7 +157,7 @@ local function formatNumber(n)
end
local function asNumber(source)
- if not config.get(nil, 'Lua.hover.viewNumber') then
+ if not config.get(guide.getUri(source), 'Lua.hover.viewNumber') then
return nil
end
local num = source[1]
diff --git a/script/core/hover/table.lua b/script/core/hover/table.lua
index 3785d479..bd2f81ad 100644
--- a/script/core/hover/table.lua
+++ b/script/core/hover/table.lua
@@ -3,6 +3,7 @@ local util = require 'utility'
local config = require 'config'
local infer = require 'core.infer'
local await = require 'await'
+local guide = require 'parser.guide'
local function formatKey(key)
if type(key) == 'string' then
@@ -136,7 +137,7 @@ end
---@async
return function (source)
- local maxFields = config.get(nil, 'Lua.hover.previewFields')
+ local maxFields = config.get(guide.getUri(source), 'Lua.hover.previewFields')
if maxFields <= 0 then
return 'table'
end
diff --git a/script/core/infer.lua b/script/core/infer.lua
index 9bb1e447..982b8ef3 100644
--- a/script/core/infer.lua
+++ b/script/core/infer.lua
@@ -3,6 +3,7 @@ local config = require 'config'
local noder = require 'core.noder'
local util = require 'utility'
local vm = require "vm.vm"
+local guide = require "parser.guide"
local CLASS = {'CLASS'}
local TABLE = {'TABLE'}
@@ -232,8 +233,8 @@ local function bindClassOrType(source)
return false
end
-local function cleanInfers(infers)
- local version = config.get(nil, 'Lua.runtime.version')
+local function cleanInfers(uri, infers)
+ local version = config.get(uri, 'Lua.runtime.version')
local enableInteger = version == 'Lua 5.3' or version == 'Lua 5.4'
infers['unknown'] = nil
if infers['number'] then
@@ -269,7 +270,7 @@ end
---合并对象的推断类型
---@param infers string[]
---@return string
-function m.viewInfers(infers)
+function m.viewInfers(uri, infers)
if infers[CACHE] then
return infers[CACHE]
end
@@ -298,7 +299,7 @@ function m.viewInfers(infers)
return sa < sb
end
end)
- local limit = config.get(nil, 'Lua.hover.enumsLimit')
+ local limit = config.get(uri, 'Lua.hover.enumsLimit')
if limit < 0 then
limit = 0
end
@@ -510,7 +511,7 @@ function m.searchInfers(source, field, mark)
end
end
end
- cleanInfers(infers)
+ cleanInfers(guide.getUri(source), infers)
return infers
end
@@ -606,7 +607,7 @@ function m.searchAndViewInfers(source, field, mark)
return 'any'
end
local infers = m.searchInfers(source, field, mark)
- local view = m.viewInfers(infers)
+ local view = m.viewInfers(guide.getUri(source), infers)
if type(view) == 'boolean' then
log.error('Why view is boolean?', util.dump(infers))
return 'any'
@@ -630,8 +631,8 @@ function m.getClass(source)
end
end
end
- cleanInfers(infers)
- local view = m.viewInfers(infers)
+ cleanInfers(guide.getUri(source), infers)
+ local view = m.viewInfers(guide.getUri(source), infers)
if view == 'any' then
return nil
end
diff --git a/script/core/noder.lua b/script/core/noder.lua
index 373644de..6681fa7c 100644
--- a/script/core/noder.lua
+++ b/script/core/noder.lua
@@ -497,7 +497,7 @@ local function getNodeKey(source)
if methodNode then
return getNodeKey(methodNode)
end
- if config.get(nil, 'Lua.IntelliSense.traceFieldInject') then
+ if config.get(guide.getUri(source), 'Lua.IntelliSense.traceFieldInject') then
local localValueID = getLocalValueID(source)
if localValueID then
return localValueID
@@ -822,7 +822,7 @@ local function bindValue(noders, source, id)
local bindDocs = source.bindDocs
if source.type == 'getlocal'
or source.type == 'setlocal' then
- if not config.get(nil, 'Lua.IntelliSense.traceLocalSet') then
+ if not config.get(guide.getUri(source), 'Lua.IntelliSense.traceLocalSet') then
return
end
bindDocs = source.node.bindDocs
@@ -837,7 +837,7 @@ local function bindValue(noders, source, id)
end
-- x = y : x -> y
pushForward(noders, id, valueID, INFO_REJECT_SET)
- if not config.get(nil, 'Lua.IntelliSense.traceBeSetted')
+ if not config.get(guide.getUri(source), 'Lua.IntelliSense.traceBeSetted')
and source.type ~= 'local' then
return
end
@@ -1329,7 +1329,7 @@ compileNodeMap = util.switch()
, index
)
pushForward(noders, returnID, getID(rtnObj))
- if config.get(nil, 'Lua.IntelliSense.traceReturn') then
+ if config.get(guide.getUri(source), 'Lua.IntelliSense.traceReturn') then
pushBackward(noders, getID(rtnObj), returnID, INFO_DEEP_AND_DONT_CROSS)
end
end
diff --git a/script/core/semantic-tokens.lua b/script/core/semantic-tokens.lua
index 291819f2..12848d2b 100644
--- a/script/core/semantic-tokens.lua
+++ b/script/core/semantic-tokens.lua
@@ -9,10 +9,8 @@ local converter = require 'proto.converter'
local infer = require 'core.infer'
local config = require 'config'
-local isEnhanced = config.get(nil, 'Lua.color.mode') == 'SemanticEnhanced'
-
local Care = {}
-Care['getglobal'] = function (source, results)
+Care['getglobal'] = function (source, options, results)
local isLib = vm.isGlobalLibraryName(source[1])
local isFunc = false
local value = source.value
@@ -21,7 +19,7 @@ Care['getglobal'] = function (source, results)
isFunc = true
elseif source.parent.type == 'call' then
isFunc = true
- elseif isEnhanced then
+ elseif options.isEnhanced then
isFunc = infer.hasType(source, 'function')
end
@@ -36,7 +34,7 @@ Care['getglobal'] = function (source, results)
}
end
Care['setglobal'] = Care['getglobal']
-Care['getmethod'] = function (source, results)
+Care['getmethod'] = function (source, options, results)
local method = source.method
if method and method.type == 'method' then
results[#results+1] = {
@@ -48,7 +46,7 @@ Care['getmethod'] = function (source, results)
end
end
Care['setmethod'] = Care['getmethod']
-Care['field'] = function (source, results)
+Care['field'] = function (source, options, results)
local modifiers = 0
if source.parent and source.parent.type == 'tablefield' then
modifiers = define.TokenModifiers.declaration
@@ -65,7 +63,7 @@ Care['field'] = function (source, results)
return
end
end
- if isEnhanced and infer.hasType(source, 'function') then
+ if options.isEnhanced and infer.hasType(source, 'function') then
results[#results+1] = {
start = source.start,
finish = source.finish,
@@ -90,7 +88,7 @@ Care['field'] = function (source, results)
modifieres = modifiers,
}
end
-Care['getlocal'] = function (source, results)
+Care['getlocal'] = function (source, options, results)
local loc = source.node
-- 1. 值为函数的局部变量 | Local variable whose value is a function
if loc.refs then
@@ -127,7 +125,7 @@ Care['getlocal'] = function (source, results)
return
end
-- 5. References to other functions
- if isEnhanced and infer.hasType(loc, 'function') then
+ if options.isEnhanced and infer.hasType(loc, 'function') then
results[#results+1] = {
start = source.start,
finish = source.finish,
@@ -137,7 +135,7 @@ Care['getlocal'] = function (source, results)
return
end
-- 6. Class declaration
- if isEnhanced then
+ if options.isEnhanced then
-- search all defs
for _, def in ipairs(vm.getDefs(source)) do
if def.bindDocs then
@@ -214,7 +212,7 @@ Care['getlocal'] = function (source, results)
}
end
Care['setlocal'] = Care['getlocal']
-Care['local'] = function (source, results) -- Local declaration, i.e. "local x", "local y = z", or "local function() end"
+Care['local'] = function (source, options, results) -- Local declaration, i.e. "local x", "local y = z", or "local function() end"
if source[1] == '_ENV'
or source[1] == 'self' then
return
@@ -231,7 +229,7 @@ Care['local'] = function (source, results) -- Local declaration, i.e. "local x",
if source.value then
local isFunction = false
- if isEnhanced then
+ if options.isEnhanced then
isFunction = source.value.type == 'function' or infer.hasType(source.value, 'function')
else
isFunction = source.value.type == 'function'
@@ -299,21 +297,21 @@ Care['local'] = function (source, results) -- Local declaration, i.e. "local x",
modifieres = modifiers,
}
end
-Care['doc.return.name'] = function (source, results)
+Care['doc.return.name'] = function (source, options, results)
results[#results+1] = {
start = source.start,
finish = source.finish,
type = define.TokenTypes.parameter,
}
end
-Care['doc.tailcomment'] = function (source, results)
+Care['doc.tailcomment'] = function (source, options, results)
results[#results+1] = {
start = source.start,
finish = source.finish,
type = define.TokenTypes.comment,
}
end
-Care['doc.type.name'] = function (source, results)
+Care['doc.type.name'] = function (source, options, results)
if source.typeGeneric then
results[#results+1] = {
start = source.start,
@@ -323,14 +321,14 @@ Care['doc.type.name'] = function (source, results)
end
end
-Care['nonstandardSymbol.comment'] = function (source, results)
+Care['nonstandardSymbol.comment'] = function (source, options, results)
results[#results+1] = {
start = source.start,
finish = source.finish,
type = define.TokenTypes.comment,
}
end
-Care['nonstandardSymbol.continue'] = function (source, results)
+Care['nonstandardSymbol.continue'] = function (source, options, results)
results[#results+1] = {
start = source.start,
finish = source.finish,
@@ -367,27 +365,24 @@ local function buildTokens(uri, results)
return tokens
end
-config.watch(function (key, value)
- if key == 'Lua.color.mode' then
- isEnhanced = value == 'SemanticEnhanced'
- end
-end)
-
---@async
return function (uri, start, finish)
local state = files.getState(uri)
- local text = files.getText(uri)
if not state then
return nil
end
+ local options = {
+ isEnhanced = config.get(uri, 'Lua.color.mode') == 'SemanticEnhanced',
+ }
+
local results = {}
guide.eachSourceBetween(state.ast, start, finish, function (source) ---@async
local method = Care[source.type]
if not method then
return
end
- method(source, results)
+ method(source, options, results)
await.delay()
end)