diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2021-03-29 14:04:32 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2021-03-29 14:04:32 +0800 |
commit | 90c4b35ef7486f460aaf0c32072f6c142ca74bb0 (patch) | |
tree | b56371c99226908018a0d8f1db5a30642580e3ce | |
parent | f7905e759ec7be0188b7f237eeb531bc111695af (diff) | |
download | lua-language-server-90c4b35ef7486f460aaf0c32072f6c142ca74bb0.zip |
stash
-rw-r--r-- | script/core/completion.lua | 3 | ||||
-rw-r--r-- | script/core/diagnostics/redundant-parameter.lua | 9 | ||||
-rw-r--r-- | script/core/guide.lua | 14 | ||||
-rw-r--r-- | script/core/hover/init.lua | 6 | ||||
-rw-r--r-- | script/parser/ast.lua | 14 | ||||
-rw-r--r-- | test/type_inference/init.lua | 12 |
6 files changed, 26 insertions, 32 deletions
diff --git a/script/core/completion.lua b/script/core/completion.lua index 60dbea7c..fb7d2122 100644 --- a/script/core/completion.lua +++ b/script/core/completion.lua @@ -1282,9 +1282,6 @@ local function getFuncParamByCallIndex(func, index) if not func.args or #func.args == 0 then return nil end - if func.parent.type == 'setmethod' then - return func.args[index - 1] - end if index > #func.args then if func.args[#func.args].type == '...' then return func.args[#func.args] diff --git a/script/core/diagnostics/redundant-parameter.lua b/script/core/diagnostics/redundant-parameter.lua index fc446f7c..6eb04f26 100644 --- a/script/core/diagnostics/redundant-parameter.lua +++ b/script/core/diagnostics/redundant-parameter.lua @@ -10,18 +10,12 @@ local function countCallArgs(source) if not source.args then return 0 end - if source.node and source.node.type == 'getmethod' then - result = result + 1 - end result = result + #source.args return result end local function countFuncArgs(source) local result = 0 - if source.parent and source.parent.type == 'setmethod' then - result = result + 1 - end if not source.args or #source.args == 0 then return result end @@ -34,9 +28,6 @@ end local function countOverLoadArgs(source, doc) local result = 0 - if source.parent and source.parent.type == 'setmethod' then - result = result + 1 - end local func = doc.overload if not func.args or #func.args == 0 then return result diff --git a/script/core/guide.lua b/script/core/guide.lua index e23fbf0e..b2f13a80 100644 --- a/script/core/guide.lua +++ b/script/core/guide.lua @@ -1399,10 +1399,6 @@ function m.getCallAndArgIndex(callarg) end end local call = callargs.parent - local node = call.node - if node.type == 'getmethod' then - index = index + 1 - end return call, index end @@ -1429,16 +1425,6 @@ function m.getCallValue(source) or call.node.special == 'xpcall' then return call.args and call.args[1], call.args, index - 1 end - if call.node.type == 'getmethod' then - local args = {} - args[1] = call.node.node - if call.args then - for _, arg in ipairs(call.args) do - args[#args+1] = arg - end - end - return call.node, args, index - end return call.node, call.args, index end diff --git a/script/core/hover/init.lua b/script/core/hover/init.lua index 9c08ad7e..81285ef2 100644 --- a/script/core/hover/init.lua +++ b/script/core/hover/init.lua @@ -21,9 +21,6 @@ local function eachFunctionAndOverload(value, callback) end local function getHoverAsValue(source) - local oop = source.type == 'method' - or source.type == 'getmethod' - or source.type == 'setmethod' local label = getLabel(source) local desc = getDesc(source) if not desc then @@ -49,9 +46,6 @@ local function getHoverAsFunction(source) local defs = 0 local protos = 0 local other = 0 - local oop = source.type == 'method' - or source.type == 'getmethod' - or source.type == 'setmethod' local mark = {} for _, def in ipairs(values) do def = guide.getObjectValue(def) or def diff --git a/script/parser/ast.lua b/script/parser/ast.lua index 45801cf6..9acdb06b 100644 --- a/script/parser/ast.lua +++ b/script/parser/ast.lua @@ -6,6 +6,7 @@ local mathType = math.type local tableRemove = table.remove local pairs = pairs local tableSort = table.sort +local tableInsert = table.insert _ENV = nil @@ -701,6 +702,14 @@ local Defs = { finish = call.finish, } end + if call.type == 'call' + and call.node + and call.node.type == 'getmethod' then + if not call.args then + call.args = {} + end + tableInsert(call.args, 1, call.node) + end return call end, BinaryOp = function (start, op) @@ -1017,6 +1026,11 @@ local Defs = { elseif name.type == 'getmethod' then name.type = 'setmethod' name.value = actions + if not args then + args = {} + actions.args = args + end + tableInsert(args, 1, name.node) elseif name.type == 'getindex' then name.type = 'setfield' name.value = actions diff --git a/test/type_inference/init.lua b/test/type_inference/init.lua index 08bac1eb..dde3f319 100644 --- a/test/type_inference/init.lua +++ b/test/type_inference/init.lua @@ -618,3 +618,15 @@ function Cls.new(self) return self end local <?test?> = Cls:new() ]] + +TEST 'Cls' [[ +---@class Cls +local Cls = {} + +---@generic T +---@param self T +---@return T +function Cls:new() return self end + +local <?test?> = Cls:new() +]] |