summaryrefslogtreecommitdiff
path: root/script/async/scanfiles.lua
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2019-11-23 00:05:30 +0800
committer最萌小汐 <sumneko@hotmail.com>2019-11-23 00:05:30 +0800
commit6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444 (patch)
treefdc22d78150fd1c5edc46732c8b151ccfefb519f /script/async/scanfiles.lua
parentd0ff66c9abe9d6abbca12fd811e0c3cb69c1033a (diff)
downloadlua-language-server-6da2b175e20ed3c03b0dfcfc9046de1e0e5d4444.zip
正路目录
Diffstat (limited to 'script/async/scanfiles.lua')
-rw-r--r--script/async/scanfiles.lua55
1 files changed, 55 insertions, 0 deletions
diff --git a/script/async/scanfiles.lua b/script/async/scanfiles.lua
new file mode 100644
index 00000000..f5249c8e
--- /dev/null
+++ b/script/async/scanfiles.lua
@@ -0,0 +1,55 @@
+local args = ...
+
+require 'utility'
+local fs = require 'bee.filesystem'
+local glob = require 'glob'
+
+local function scan(mode, root, pattern, options)
+ OUT:push('log', 'Scanning:', root:string())
+ OUT:push('log', 'Scan pattern:', table.dump(pattern))
+ OUT:push('log', 'Scan options:', table.dump(options))
+ local session = glob.gitignore(pattern, options)
+
+ session:setInterface('type', function (path)
+ local fullpath = root / path
+ if not fs.exists(fullpath) then
+ return nil
+ end
+ if fs.is_directory(fullpath) then
+ return 'directory'
+ else
+ return 'file'
+ end
+ return nil
+ end)
+ session:setInterface('list', function (path)
+ local fullpath = root / path
+ if not fs.exists(fullpath) then
+ return nil
+ end
+ local list = {}
+ for child in fullpath:list_directory() do
+ list[#list+1] = child:string()
+ end
+ return list
+ end)
+
+ session:scan(function (path)
+ local ok, msg = IN:pop()
+ if ok and msg == 'stop' then
+ OUT:push 'stop'
+ return
+ end
+ OUT:push(mode, fs.absolute(root / path):string())
+ end)
+end
+
+for _, data in ipairs(args) do
+ local root = fs.path(data.root)
+ local suc, err = xpcall(scan, debug.traceback, data.mode, root, data.pattern, data.options)
+ if not suc then
+ ERR:push(err)
+ end
+end
+
+OUT:push 'ok'