From 6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Sat, 23 Nov 2019 00:05:30 +0800 Subject: =?UTF-8?q?=E6=AD=A3=E8=B7=AF=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/method/workspace/didChangeWatchedFiles.lua | 44 +++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 script/method/workspace/didChangeWatchedFiles.lua (limited to 'script/method/workspace/didChangeWatchedFiles.lua') diff --git a/script/method/workspace/didChangeWatchedFiles.lua b/script/method/workspace/didChangeWatchedFiles.lua new file mode 100644 index 00000000..3ce68924 --- /dev/null +++ b/script/method/workspace/didChangeWatchedFiles.lua @@ -0,0 +1,44 @@ +local fs = require 'bee.filesystem' +local uric = require 'uri' + +local FileChangeType = { + Created = 1, + Changed = 2, + Deleted = 3, +} + +return function (lsp, params) + if not lsp.workspace then + return + end + local needReset + for _, change in ipairs(params.changes) do + local path = uric.decode(change.uri) + if not path then + goto CONTINUE + end + if change.type == FileChangeType.Created then + lsp.workspace:addFile(path) + if lsp:getVM(change.uri) then + needReset = true + end + elseif change.type == FileChangeType.Deleted then + lsp.workspace:removeFile(path) + if lsp:getVM(change.uri) then + needReset = true + end + end + -- 排除类文件发生更改需要重新扫描 + local filename = path:filename():string() + if lsp.workspace:fileNameEq(filename, '.gitignore') + or lsp.workspace:fileNameEq(filename, '.gitmodules') + then + lsp:reScanFiles() + end + ::CONTINUE:: + end + -- 缓存过的文件发生变化后,重新计算 + if needReset then + lsp.workspace:reset() + end +end -- cgit v1.2.3