From 3cadf4b8ba6b7bc128ebaf1e408dedf531e2db93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Mon, 23 Aug 2021 10:18:01 +0800 Subject: resolve #352 --- changelog.md | 1 + script/core/completion.lua | 6 +- script/core/hover/init.lua | 28 +-- test/crossfile/hover.lua | 438 +++++++++++++++++++++++++-------------------- 4 files changed, 269 insertions(+), 204 deletions(-) diff --git a/changelog.md b/changelog.md index a6c13f24..bd67d510 100644 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,7 @@ ## 2.4.0 * `NEW` settings: `Lua.diagnostics.libraryFiles`, `Lua.diagnostics.ignoredFiles` +* `CHG` hover: improve showing multi defines * `CHG` hint: `Lua.hint.paramName` now supports `Disable`, `Literal` and `All` * `CHG` no longer ignore file names case in Windows * `CHG` watching library changes diff --git a/script/core/completion.lua b/script/core/completion.lua index dc4ddf28..98e388c3 100644 --- a/script/core/completion.lua +++ b/script/core/completion.lua @@ -190,8 +190,12 @@ local function buildDesc(source) if source.type == 'dummy' then return end + local desc = markdown() local hover = getHover.get(source) - return hover + desc:add('md', hover) + desc:splitLine() + desc:add('lua', getSnip(source)) + return desc end local function buildFunction(results, source, value, oop, data) diff --git a/script/core/hover/init.lua b/script/core/hover/init.lua index 6e98d6c9..cf0da19d 100644 --- a/script/core/hover/init.lua +++ b/script/core/hover/init.lua @@ -13,21 +13,22 @@ local function getHover(source) local labelMark = {} local descMark = {} - local function addHover(def) + local function addHover(def, checkLable) if defMark[def] then return end defMark[def] = true - local label = getLabel(def) - local desc = getDesc(def) - - if not labelMark[tostring(label)] then - labelMark[tostring(label)] = true - md:add('lua', label) - md:splitLine() + if checkLable then + local label = getLabel(def) + if not labelMark[tostring(label)] then + labelMark[tostring(label)] = true + md:add('lua', label) + md:splitLine() + end end + local desc = getDesc(def) if not descMark[tostring(desc)] then descMark[tostring(desc)] = true md:add('md', desc) @@ -39,13 +40,18 @@ local function getHover(source) for _, def in ipairs(vm.getDefs(source)) do if def.type == 'function' or def.type == 'doc.type.function' then - addHover(def) + addHover(def, true) end end else - addHover(source) + addHover(source, true) for _, def in ipairs(vm.getDefs(source)) do - addHover(def) + local isFunction + if def.type == 'function' + or def.type == 'doc.type.function' then + isFunction = true + end + addHover(def, isFunction) end end diff --git a/test/crossfile/hover.lua b/test/crossfile/hover.lua index 08773959..f00f6e35 100644 --- a/test/crossfile/hover.lua +++ b/test/crossfile/hover.lua @@ -100,10 +100,13 @@ TEST { path = 'b.lua', content = 'require ', }, - hover = { - label = '1 个字节', - description = [[* [Folder\a.lua](file:///Folder/a.lua) (搜索路径: `Folder\?.lua`)]], - } + hover = [[ +```lua +1 个字节 +``` + +--- +* [Folder\a.lua](file:///Folder/a.lua) (搜索路径: `Folder\?.lua`)]], } else TEST { @@ -115,10 +118,13 @@ TEST { path = 'b.lua', content = 'require ', }, - hover = { - label = '1 个字节', - description = [[* [Folder/a.lua](file:///Folder/a.lua) (搜索路径: `Folder/?.lua`)]], - } + hover = [[ +```lua +1 个字节 +``` + +--- +* [Folder/a.lua](file:///Folder/a.lua) (搜索路径: `Folder/?.lua`)]], } end @@ -138,11 +144,10 @@ TEST { () ]] }, - hover = { - label = 'function f(a: any, b: any)', - name = 'f', - args = EXISTS, - } + hover = [[ +```lua +function f(a: any, b: any) +```]] } TEST { @@ -160,11 +165,10 @@ TEST { () ]] }, - hover = { - label = 'function (a: any, b: any)', - name = '', - args = EXISTS, - } + hover = [[ +```lua +function (a: any, b: any) +```]] } TEST { @@ -190,11 +194,10 @@ TEST { obj:() ]] }, - hover = { - label = 'function mt:add(a: any, b: any)', - name = 'mt:add', - args = EXISTS, - }, + hover = [[ +```lua +function mt:add(a: any, b: any) +```]] } TEST { @@ -212,13 +215,12 @@ TEST { [1] = 2 ]] }, - hover = { - label = [[ + hover = [[ +```lua global t: { [1]: integer = 1|2, -}]], - name = 't', - }, +} +```]], } TEST { @@ -236,13 +238,12 @@ TEST { [1] = 2 ]] }, - hover = { - label = [[ + hover = [[ +```lua global t: { [1]: integer = 2, -}]], - name = 't', - }, +} +```]], } TEST { @@ -261,14 +262,13 @@ TEST { local = require 'a' ]] }, - hover = { - label = [[ + hover = [[ +```lua local t: { a: integer = 1, b: integer = 2, -}]], - name = 't', - }, +} +```]], } TEST { @@ -284,13 +284,13 @@ TEST { function (x) end ]], }, - hover = { - label = [[function f(x: number)]], - name = 'f', - description = [[ - abc]], - args = EXISTS, - } + hover = [[ +```lua +function f(x: number) +``` + +--- + abc]] } TEST { @@ -305,11 +305,13 @@ TEST { = 1 ]], }, - hover = { - label = [[global x: integer = 1]], - name = 'x', - description = ' abc', - } + hover = [[ +```lua +global x: integer = 1 +``` + +--- + abc]] } TEST { @@ -326,16 +328,18 @@ TEST { function (x) end ]] }, - hover = { - label = "function f(x: string|'选项1'|'选项2')", - name = 'f', - description = [[ + hover = [[ +```lua +function f(x: string|'选项1'|'选项2') +``` + +--- + ```lua x: string | '选项1' -- 注释1 -> '选项2' -- 注释2 ```]] - } } TEST { @@ -353,16 +357,18 @@ TEST { function (x) end ]] }, - hover = { - label = "function f(x: '选项1'|'选项2')", - name = 'f', - description = [[ + hover = [[ +```lua +function f(x: '选项1'|'选项2') +``` + +--- + ```lua x: option | '选项1' -- 注释1 -> '选项2' -- 注释2 ```]] - } } TEST { @@ -380,18 +386,19 @@ TEST { function () end ]] }, - hover = { - label = [[ + hover = [[ +```lua function f() - -> x: '选项1'|'选项2']], - name = 'f', - description = [[ + -> x: '选项1'|'选项2' +``` + +--- + ```lua x: option | '选项1' -- 注释1 -> '选项2' -- 注释2 ```]] - } } TEST { @@ -409,18 +416,19 @@ TEST { function () end ]] }, - hover = { - label = [[ + hover = [[ +```lua function f() - -> '选项1'|'选项2']], - name = 'f', - description = [[ + -> '选项1'|'选项2' +``` + +--- + ```lua return #1: option | '选项1' -- 注释1 -> '选项2' -- 注释2 ```]] - } } TEST { @@ -435,11 +443,13 @@ TEST { function f() end ]] }, - hover = { - label = 'local x: string', - name = 'x', - description = 'this is comment', - } + hover = [[ +```lua +local x: string +``` + +--- +this is comment]] } TEST { @@ -457,21 +467,22 @@ TEST { function (x, y) end ]] }, - hover = { - label = [[ + hover = [[ +```lua function f(x: string, y: table) -> name: boolean - 2. number]], - name = 'f', - description = [[ + 2. number +``` + +--- + @*param* `x` — this is comment @*param* `y` — comment 1 @*return* `name` — comment 2 -@*return* — comment 3]], - } +@*return* — comment 3]] } TEST {{ path = 'a.lua', content = '', }, { @@ -483,11 +494,10 @@ TEST {{ path = 'a.lua', content = '', }, { function f() end ]] }, -hover = { - label = [[local x: string]], - name = 'x', - description = nil, -}} +hover = [[ +```lua +local x: string +```]]} TEST {{ path = 'a.lua', content = '', }, { @@ -501,18 +511,18 @@ TEST {{ path = 'a.lua', content = '', }, { function (arg1, arg2) end ]] }, -hover = { - label = [[ +hover = [[ +```lua function f(arg1: integer, arg2: integer) - -> boolean]], - name = 'f', - description = [[ + -> boolean +``` + +--- comment1 @*param* `arg2` — comment2 -comment3]] -}} +comment3]]} TEST {{ path = 'a.lua', content = '', }, { @@ -526,18 +536,27 @@ TEST {{ path = 'a.lua', content = '', }, { function (arg1, arg2) end ]] }, -hover = { - label = EXISTS, - name = 'f', - description = [[ +hover = [[ +```lua +function f(arg1: integer, arg2: integer) + -> boolean +``` + +--- + @*param* `arg3` — comment3 --- @*param* `arg1` — comment1 -@*param* `arg2` — comment2]] -}} +@*param* `arg2` — comment2 + +--- + +```lua +function f() +```]]} TEST {{ path = 'a.lua', content = '', }, { @@ -547,15 +566,16 @@ TEST {{ path = 'a.lua', content = '', }, { function () end ]] }, -hover = { - label = [[ +hover = [[ +```lua function f() -> boolean - 2. string]], - name = 'f', - description = [[ -@*return* — comment]] -}} + 2. string +``` + +--- + +@*return* — comment]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -565,17 +585,18 @@ TEST {{ path = 'a.lua', content = '', }, { function () end ]] }, -hover = { - label = [[ +hover = [[ +```lua function f() -> boolean - 2. string]], - name = 'f', - description = [[ + 2. string +``` + +--- + @*return* -@*return* — comment]] -}} +@*return* — comment]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -585,14 +606,12 @@ TEST {{ path = 'a.lua', content = '', }, { function () end ]] }, -hover = { - label = [[ +hover = [[ +```lua function f() -> boolean - 2. string]], - name = 'f', - description = '' -}} + 2. string +```]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -602,13 +621,14 @@ TEST {{ path = 'a.lua', content = '', }, { function () end ]] }, -hover = { - label = "function f()", - name = 'f', - description = [[ +hover = [[ +```lua +function f() +``` + +--- comment1 -comment2]] -}} +comment2]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -620,18 +640,20 @@ TEST {{ path = 'a.lua', content = '', }, { end ]] }, -hover = { - label = "function f(a: boolean|true|false)", - name = 'f', - description = [[ +hover = [[ +```lua +function f(a: boolean|true|false) +``` + +--- + @*param* `a` — xxx ```lua a: boolean | true -- ttt | false -- fff -```]] -}} +```]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -643,11 +665,13 @@ TEST {{ path = 'a.lua', content = '', }, { local ]] }, -hover = { - label = 'local x: A', - name = 'x', - description = 'AAA' -}} +hover = [[ +```lua +local x: A +``` + +--- +AAA]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -659,14 +683,15 @@ TEST {{ path = 'a.lua', content = '', }, { local ]] }, -hover = { - label = [[ +hover = [[ +```lua local x: A { n: string, -}]], - name = 'x', - description = 'AAA' -}} +} +``` + +--- +AAA]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -679,11 +704,16 @@ TEST {{ path = 'a.lua', content = '', }, { local ]] }, -hover = { - label = 'local x: A', - name = 'x', - description = 'BBB' -}} +hover = [[ +```lua +local x: A +``` + +--- +BBB + +--- +AAA]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -695,11 +725,16 @@ G. = 1 G.A = 1 ]] }, -hover = { - label = 'global G.A: integer = 1', - name = 'G.A', - description = 'AAA' -}} +hover = [[ +```lua +global G.A: integer = 1 +``` + +--- +AAA + +--- +BBB]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -711,11 +746,16 @@ G.A = 1 G. = 1 ]] }, -hover = { - label = 'global G.A: integer = 1', - name = 'G.A', - description = 'BBB' -}} +hover = [[ +```lua +global G.A: integer = 1 +``` + +--- +BBB + +--- +AAA]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -730,10 +770,10 @@ food. = 0 food.secondField = 2 ]] }, -hover = { - label = 'field Food.firstField: number = 0', - name = 'food.firstField', -}} +hover = [[ +```lua +field Food.firstField: number = 0 +```]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -744,11 +784,14 @@ I'm a multiline comment local ]] }, -hover = { - label = 'local food: any', - name = 'food', - description = "I'm a multiline comment\n" -}} +hover = [[ +```lua +local food: any +``` + +--- +I'm a multiline comment +]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -757,13 +800,15 @@ TEST {{ path = 'a.lua', content = '', }, { local function () end ]] }, -hover = { - label = [[ +hover = [[ +```lua function f() - -> string]], - name = 'food', - description = "@*return* — this is a tab `\t`" -}} + -> string +``` + +--- + +@*return* — this is a tab ` `]]} TEST { { @@ -792,10 +837,10 @@ for , v in pairs(t) do end ]] }, - hover = { - label = [[local k: string]], - name = 'k', - } + hover = [[ +```lua +local k: string +```]] } TEST { @@ -823,10 +868,10 @@ for , v in tpairs(t) do end ]] }, - hover = { - label = [[local k: string]], - name = 'k', - } + hover = [[ +```lua +local k: string +```]] } TEST {{ path = 'a.lua', content = '', }, { @@ -847,11 +892,13 @@ function bthci.(hcibytes, callback) end function bthci.reset(callback) end ]] }, -hover = { - label = 'function bthci.rawhci(hcibytes: any, callback: any)', - name = 'bthci.rawhci', - description = " Sends a raw HCI command to the BlueTooth controller." -}} +hover = [[ +```lua +function bthci.rawhci(hcibytes: any, callback: any) +``` + +--- + Sends a raw HCI command to the BlueTooth controller.]]} TEST {{ path = 'a.lua', content = '', }, { path = 'b.lua', @@ -860,7 +907,14 @@ TEST {{ path = 'a.lua', content = '', }, { local ]] }, -hover = { - label = 'local t: string|fun():string', - name = 't', -}} +hover = [[ +```lua +local t: string|fun():string +``` + +--- + +```lua +function t() + -> string +```]]} -- cgit v1.2.3