local platform = vim.uv.os_uname() local deps_install_dir = table.remove(_G.arg, 1) local subcommand = table.remove(_G.arg, 1) local suffix = (platform and platform.sysname:lower():find'windows') and '.dll' or '.so' package.path = deps_install_dir.."/share/lua/5.1/?.lua;"..deps_install_dir.."/share/lua/5.1/?/init.lua;"..package.path package.cpath = deps_install_dir.."/lib/lua/5.1/?"..suffix..";"..package.cpath; local uv = vim.uv -- we use busted and luacheck and their lua dependencies -- But installing their binary dependencies with luarocks is very -- slow, replace them with vim.uv wrappers local system = {} package.loaded['system.core'] = system function system.monotime() uv.update_time() return uv.now()*1e-3 end function system.gettime() local sec, usec = uv.gettimeofday() return sec+usec*1e-6 end function system.sleep(sec) uv.sleep(sec*1e3) end local term = {} package.loaded['term.core'] = term function term.isatty(_) return uv.guess_handle(1) == 'tty' end local lfs = {_VERSION = 'fake'} package.loaded['lfs'] = lfs function lfs.attributes(path, attr) local stat = uv.fs_stat(path) if attr == 'mode' then return stat and stat.type or '' elseif attr == 'modification' then if not stat then return nil end local mtime = stat.mtime return mtime.sec + mtime.nsec*1e-9 else error('not implemented') end end function lfs.currentdir() return uv.cwd() end function lfs.chdir(dir) local status, err = pcall(uv.chdir, dir) if status then return true else return nil, err end end function lfs.dir(path) local fs = uv.fs_scandir(path) return function() if not fs then return end return uv.fs_scandir_next(fs) end end function lfs.mkdir(dir) return uv.fs_mkdir(dir, 493) -- octal 755 end if subcommand == "busted" then require 'busted.runner'({ standalone = false }) elseif subcommand == "luacheck" then require 'luacheck.main' else error 'unknown subcommand' end