diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2021-08-23 14:58:17 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2021-08-23 14:58:17 +0800 |
commit | 22d7f6c23be209c7b5de149f18efa850f84915f1 (patch) | |
tree | eb5d6feeba3f37bb9c704c2c8f418cff40c8da3f /test/crossfile | |
parent | fdab3eaed0f5e3e85252d5126e1f1927b633c80d (diff) | |
download | lua-language-server-22d7f6c23be209c7b5de149f18efa850f84915f1.zip |
resolve #624 `different-requires`
Diffstat (limited to 'test/crossfile')
-rw-r--r-- | test/crossfile/diagnostic.lua | 137 | ||||
-rw-r--r-- | test/crossfile/init.lua | 1 |
2 files changed, 138 insertions, 0 deletions
diff --git a/test/crossfile/diagnostic.lua b/test/crossfile/diagnostic.lua new file mode 100644 index 00000000..3d4eb552 --- /dev/null +++ b/test/crossfile/diagnostic.lua @@ -0,0 +1,137 @@ +local files = require 'files' +local furi = require 'file-uri' +local core = require 'core.diagnostics' +local config = require 'config' +local platform = require 'bee.platform' + +config.get 'Lua.diagnostics.neededFileStatus'['deprecated'] = 'Any' + +rawset(_G, 'TEST', true) + +local function catch_target(script, sep) + local list = {} + local cur = 1 + local cut = 0 + while true do + local start, finish = script:find(('<%%%s.-%%%s>'):format(sep, sep), cur) + if not start then + break + end + list[#list+1] = { start - cut, finish - 4 - cut } + cur = finish + 1 + cut = cut + 4 + end + local new_script = script:gsub(('<%%%s(.-)%%%s>'):format(sep, sep), '%1') + return new_script, list +end + +local function founded(targets, results) + if #targets ~= #results then + return false + end + for _, target in ipairs(targets) do + for _, result in ipairs(results) do + if target[1] == result[1] + and target[2] == result[2] + and target[3] == result[3] + then + goto NEXT + end + end + do return false end + ::NEXT:: + end + return true +end + +function TEST(datas) + files.removeAll() + + local targetList = {} + local sourceUri + for _, data in ipairs(datas) do + local uri = furi.encode(data.path) + local new, list = catch_target(data.content, '!') + for _, position in ipairs(list) do + targetList[#targetList+1] = { + position[1], + position[2], + uri, + } + end + data.content = new + files.setText(uri, new) + end + + local result = {} + for _, data in ipairs(datas) do + local uri = furi.encode(data.path) + local results = {} + core(uri, function (result) + for _, res in ipairs(result) do + results[#results+1] = res + end + end) + for i, position in ipairs(results) do + result[i] = { + position.start, + position.finish, + uri, + } + end + end + assert(founded(targetList, result)) +end + +TEST { + { + path = 'f/a.lua', + content = '', + }, + { + path = 'b.lua', + content = 'require "a"', + }, + { + path = 'c.lua', + content = 'require <!"f.a"!>', + }, +} + +TEST { + { + path = 'f/a.lua', + content = '', + }, + { + path = 'a.lua', + content = '', + }, + { + path = 'b.lua', + content = 'require "a"', + }, + { + path = 'c.lua', + content = 'require "f.a"', + }, +} + +TEST { + { + path = 'a.lua', + content = '', + }, + { + path = 'f/a.lua', + content = '', + }, + { + path = 'b.lua', + content = 'require "a"', + }, + { + path = 'c.lua', + content = 'require "f.a"', + }, +} diff --git a/test/crossfile/init.lua b/test/crossfile/init.lua index a7402815..1ed2a943 100644 --- a/test/crossfile/init.lua +++ b/test/crossfile/init.lua @@ -3,3 +3,4 @@ require 'crossfile.references' require 'crossfile.allreferences' require 'crossfile.hover' require 'crossfile.completion' +require 'crossfile.diagnostic' |