diff --git a/script/core/completion.lua b/script/core/completion.lua index d4f773686de6277797191b914b027640e1875b17..a899ec5c550cf2c6ff8d30f9c0e86ba6c68c9b0f 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 dad9842205dfd1542288779b53a17405535542df..51d1be6b1d7b94d7d113f250a41ce95fecefd8a2 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 ce869ed180f5041ce70d308aad618278025b45f4..96cbc5e18416ebd171fd458f2927dd6da33f22aa 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 93331bb5055e36614f52af418d3b055e0f8ad332..2c8ea829dfb76a50b9b3d3ebf965595d6ff704b2 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 fe044fc5702f50ec66854be70dec212f4c341011..09a031ccb8dbde43e4e9df0ec1b645f59561f323 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