From 7829753fb9951f2de05a3ebec0e94b3164eb6b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= <sumneko@hotmail.com> Date: Thu, 19 Aug 2021 20:45:51 +0800 Subject: [PATCH] improve completion --- script/core/completion.lua | 4 ++++ script/core/folding.lua | 3 +++ script/core/semantic-tokens.lua | 6 +----- script/files.lua | 2 +- script/provider/provider.lua | 8 +++++++- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/script/core/completion.lua b/script/core/completion.lua index d4f773686..a899ec5c5 100644 --- a/script/core/completion.lua +++ b/script/core/completion.lua @@ -633,6 +633,7 @@ local function checkCommon(myUri, word, text, offset, results) used[data[1]] = true end if config.get 'Lua.completion.workspaceWord' and #word >= 2 then + results.complete = true local myHead = word:sub(1, 2) for uri in files.eachFile() do if #results >= 100 then @@ -697,6 +698,9 @@ local function checkCommon(myUri, word, text, offset, results) end end end + if #results >= 100 then + results.complete = false + end end local function isInString(ast, offset) diff --git a/script/core/folding.lua b/script/core/folding.lua index dad984220..51d1be6b1 100644 --- a/script/core/folding.lua +++ b/script/core/folding.lua @@ -1,6 +1,7 @@ local files = require "files" local guide = require "parser.guide" local util = require 'utility' +local await = require 'await' local Care = { ['function'] = function (source, text, results) @@ -156,12 +157,14 @@ return function (uri) guide.eachSource(ast.ast, function (source) local tp = source.type if Care[tp] then + await.delay() Care[tp](source, text, regions) end end) for _, source in ipairs(ast.comms) do local tp = source.type if Care[tp] then + await.delay() Care[tp](source, text, regions, status) end end diff --git a/script/core/semantic-tokens.lua b/script/core/semantic-tokens.lua index ce869ed18..96cbc5e18 100644 --- a/script/core/semantic-tokens.lua +++ b/script/core/semantic-tokens.lua @@ -221,17 +221,13 @@ return function (uri, start, finish) end local results = {} - local count = 0 guide.eachSourceBetween(ast.ast, start, finish, function (source) local method = Care[source.type] if not method then return end method(source, results) - count = count + 1 - if count % 100 == 0 then - await.delay() - end + await.delay() end) for _, comm in ipairs(ast.comms) do diff --git a/script/files.lua b/script/files.lua index 93331bb50..2c8ea829d 100644 --- a/script/files.lua +++ b/script/files.lua @@ -184,7 +184,7 @@ function m.setText(uri, text, isTrust, instance) await.call(function () await.close('update:' .. uri) await.setID('update:' .. uri) - await.delay() + await.sleep(0.2) if m.exists(uri) then m.onWatch('update', uri) end diff --git a/script/provider/provider.lua b/script/provider/provider.lua index fe044fc57..09a031ccb 100644 --- a/script/provider/provider.lua +++ b/script/provider/provider.lua @@ -470,7 +470,7 @@ proto.on('textDocument/completion', function (params) items[i] = item end return { - isIncomplete = true, + isIncomplete = not result.complete, items = items, } end) @@ -682,6 +682,8 @@ end) proto.on('textDocument/semanticTokens/full', function (params) workspace.awaitReady() + await.close('textDocument/semanticTokens/full') + await.setID('textDocument/semanticTokens/full') local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_SEMANTIC_FULL, 0.5) local core = require 'core.semantic-tokens' local uri = params.textDocument.uri @@ -697,6 +699,8 @@ end) proto.on('textDocument/semanticTokens/range', function (params) workspace.awaitReady() + await.close('textDocument/semanticTokens/range') + await.setID('textDocument/semanticTokens/range') local _ <close> = progress.create(lang.script.WINDOW_PROCESSING_SEMANTIC_RANGE, 0.5) local core = require 'core.semantic-tokens' local uri = params.textDocument.uri @@ -722,6 +726,8 @@ proto.on('textDocument/foldingRange', function (params) if not files.exists(uri) then return nil end + await.close('textDocument/foldingRange') + await.setID('textDocument/foldingRange') local regions = core(uri) if not regions then return nil -- GitLab