diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2021-12-30 17:51:22 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2021-12-30 17:51:22 +0800 |
commit | b1c20a1f24cc7e17d446b2ac4e4118c36173dc20 (patch) | |
tree | a55942645f0cbc5db38aad471ac92e2d5b4c7c8c /script/core | |
parent | a555b92349e2ab07b9111a296618a69caa068032 (diff) | |
download | lua-language-server-b1c20a1f24cc7e17d446b2ac4e4118c36173dc20.zip |
update
Diffstat (limited to 'script/core')
-rw-r--r-- | script/core/completion/completion.lua | 20 | ||||
-rw-r--r-- | script/core/completion/postfix.lua | 2 | ||||
-rw-r--r-- | script/core/diagnostics/deprecated.lua | 6 | ||||
-rw-r--r-- | script/core/diagnostics/init.lua | 6 | ||||
-rw-r--r-- | script/core/diagnostics/lowercase-global.lua | 2 | ||||
-rw-r--r-- | script/core/diagnostics/undefined-global.lua | 4 | ||||
-rw-r--r-- | script/core/hint.lua | 8 | ||||
-rw-r--r-- | script/core/hover/description.lua | 4 | ||||
-rw-r--r-- | script/core/hover/label.lua | 2 | ||||
-rw-r--r-- | script/core/hover/table.lua | 3 | ||||
-rw-r--r-- | script/core/infer.lua | 17 | ||||
-rw-r--r-- | script/core/noder.lua | 8 | ||||
-rw-r--r-- | script/core/semantic-tokens.lua | 45 |
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) |