diff --git a/script/core/command/autoRequire.lua b/script/core/command/autoRequire.lua index 63ff784e5501d71d744ea3839efe0a43dda5c367..2cb6a8f88dac9051c5fabab1cdfe839120400346 100644 --- a/script/core/command/autoRequire.lua +++ b/script/core/command/autoRequire.lua @@ -107,7 +107,6 @@ return function (data) return end - local offset, fmt = findInsertOffset(uri) local path = furi.decode(target) local visiblePaths = rpath.getVisiblePath(path, config.get 'Lua.runtime.path') if not visiblePaths or #visiblePaths == 0 then @@ -122,5 +121,6 @@ return function (data) return end + local offset, fmt = findInsertOffset(uri) applyAutoRequire(uri, offset, name, result, fmt) end diff --git a/script/utility.lua b/script/utility.lua index f62c7af3cd5984a3af1d53ce8960f3965fe33161..8d377708c0a506126b341501bcca7fc3b9330f9f 100644 --- a/script/utility.lua +++ b/script/utility.lua @@ -17,6 +17,7 @@ local mathRandom = math.random local ioOpen = io.open local utf8Len = utf8.len local getenv = os.getenv +local getupvalue = debug.getupvalue local mathHuge = math.huge local inf = 1 / 0 local nan = 0 / 0 @@ -684,4 +685,17 @@ function m.switch() return obj end +function m.getUpvalue(f, name) + for i = 1, 999 do + local uname, value = getupvalue(f, i) + if not uname then + break + end + if name == uname then + return value, true + end + end + return nil, false +end + return m diff --git a/script/vm/eachDef.lua b/script/vm/eachDef.lua index 65cae73e98b3f88c141e8759bd13b5e274624986..2bfad4bf367927bb2301f8460b7458207a761086 100644 --- a/script/vm/eachDef.lua +++ b/script/vm/eachDef.lua @@ -1,5 +1,4 @@ ----@diagnostic disable-next-line ----@class vm +---@type vm local vm = require 'vm.vm' local searcher = require 'core.searcher' diff --git a/script/vm/eachRef.lua b/script/vm/eachRef.lua index 6e008e2a0a27564ebcf9cfdb6a69d215d50c64c7..35425818502464283f889270378ad2233ed7252c 100644 --- a/script/vm/eachRef.lua +++ b/script/vm/eachRef.lua @@ -1,5 +1,4 @@ ----@diagnostic disable-next-line ----@class vm +---@type vm local vm = require 'vm.vm' local searcher = require 'core.searcher' diff --git a/script/vm/getDocs.lua b/script/vm/getDocs.lua index 8ee942d1bb886eee798ce93c40ae17d7754b4682..c0205654240cbd97a10594a08f37b5a3f834b22a 100644 --- a/script/vm/getDocs.lua +++ b/script/vm/getDocs.lua @@ -1,7 +1,6 @@ local files = require 'files' local guide = require 'parser.guide' ----@diagnostic disable-next-line ----@class vm +---@type vm local vm = require 'vm.vm' local config = require 'config' local collector = require 'core.collector' diff --git a/script/vm/getGlobals.lua b/script/vm/getGlobals.lua index d794a394f9a6064d28a7cc3e97405fc6844c89c6..6dacda43a50f7f6b0471666531232f36ed0c34e3 100644 --- a/script/vm/getGlobals.lua +++ b/script/vm/getGlobals.lua @@ -1,7 +1,6 @@ local collector = require 'core.collector' local guide = require 'parser.guide' ----@diagnostic disable-next-line ----@class vm +---@type vm local vm = require 'vm.vm' local noder = require 'core.noder' diff --git a/script/vm/getLibrary.lua b/script/vm/getLibrary.lua index 1002babba990d0045a315613cba9ba4f0bd433eb..1a8d8ffde41e981082edde4dd31a5ffd13be9a3a 100644 --- a/script/vm/getLibrary.lua +++ b/script/vm/getLibrary.lua @@ -1,4 +1,3 @@ ----@diagnostic disable-next-line ---@class vm local vm = require 'vm.vm' diff --git a/script/vm/getLinks.lua b/script/vm/getLinks.lua index 8df79dcae7d468f3b697418b0b5babcf5618e8f2..161396f6a61257d5dcc8d88c51248b4c30c131a8 100644 --- a/script/vm/getLinks.lua +++ b/script/vm/getLinks.lua @@ -1,6 +1,5 @@ local guide = require 'parser.guide' ----@diagnostic disable-next-line ----@class vm +---@type vm local vm = require 'vm.vm' local files = require 'files' diff --git a/script/vm/vm.lua b/script/vm/vm.lua index f51def71cedb73b1fafde7b87bd7863624a1da0e..6abaaa0e795e5af3d862c038b07f5ada003b6b83 100644 --- a/script/vm/vm.lua +++ b/script/vm/vm.lua @@ -13,8 +13,8 @@ local mathHuge = math.huge local weakMT = { __mode = 'kv' } _ENV = nil ----@diagnostic disable-next-line ----@class vm + +---@type vm local m = {} function m.getArgInfo(source) diff --git a/test.lua b/test.lua index 70993a702555f4cf84764354d998a9dbaf9b503a..d2e2c38a371821e2b9fc6578a9e10c136bfd9741 100644 --- a/test.lua +++ b/test.lua @@ -74,6 +74,7 @@ local function testAll() test 'highlight' test 'rename' test 'signature' + test 'command' test 'document_symbol' test 'code_action' test 'type_formatting' diff --git a/test/command/auto-require.lua b/test/command/auto-require.lua new file mode 100644 index 0000000000000000000000000000000000000000..94bb5069353db2e995219e3cd65dd8efa634b4b7 --- /dev/null +++ b/test/command/auto-require.lua @@ -0,0 +1,36 @@ +local util = require 'utility' +local files = require 'files' +local autoRequire = require 'core.command.autoRequire' +local client = require 'client' + +local findInsertOffset = util.getUpvalue(autoRequire, 'findInsertOffset') +local applyAutoRequire = util.getUpvalue(autoRequire, 'applyAutoRequire') + +local originEditText = client.editText +local EditResult + +client.editText = function (uri, edits) + EditResult = edits[1] +end + +function TEST(text) + return function (name) + return function (expect) + files.removeAll() + files.setText('', text) + EditResult = nil + local offset, fmt = findInsertOffset('') + applyAutoRequire('', offset, name, name, fmt) + assert(util.equal(EditResult, expect)) + end + end +end + +-- TODO change to position +TEST '' 'test' { + start = 0, + finish = -1, + text = '\nlocal test = require "test"\n' +} + +client.editText = originEditText diff --git a/test/command/init.lua b/test/command/init.lua new file mode 100644 index 0000000000000000000000000000000000000000..85d7f0d89ff0aba423a7b639a7a89e70386b0e09 --- /dev/null +++ b/test/command/init.lua @@ -0,0 +1 @@ +require 'command.auto-require'