blob: 37466a50a28b3dba33287098b0014b14d2fd9c48 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
local fs = require 'bee.filesystem'
local uric = require 'uri'
local fn = require 'filename'
local FileChangeType = {
Created = 1,
Changed = 2,
Deleted = 3,
}
--- @param lsp LSP
--- @param params table
return function (lsp, params)
local needReset = {}
local needRescan
for _, change in ipairs(params.changes) do
local ws = lsp:findWorkspaceFor(change.uri)
if not ws then
goto CONTINUE
end
local path = uric.decode(change.uri)
if not path then
goto CONTINUE
end
if change.type == FileChangeType.Created then
ws:addFile(path)
if lsp:getVM(change.uri) then
needReset[ws] = true
end
elseif change.type == FileChangeType.Deleted then
ws:removeFile(path)
if lsp:getVM(change.uri) then
needReset[ws] = true
end
end
-- 排除类文件发生更改需要重新扫描
local filename = path:filename():string()
if fn.fileNameEq(filename, '.gitignore')
or fn.fileNameEq(filename, '.gitmodules')
then
needRescan = true
end
::CONTINUE::
end
if needRescan then
lsp:reScanFiles()
end
-- 缓存过的文件发生变化后,重新计算
for ws, _ in pairs(needReset) do
ws:reset()
end
end
|