mirror of
https://github.com/neovim/neovim.git
synced 2025-10-26 12:27:24 +00:00
Merge branch 'master' into luaviml'/lua
This commit is contained in:
@@ -106,20 +106,33 @@ local uname = (function()
|
||||
end)
|
||||
end)()
|
||||
|
||||
local function tmpname()
|
||||
local fname = os.tmpname()
|
||||
if uname() == 'Windows' and fname:sub(1, 2) == '\\s' then
|
||||
-- In Windows tmpname() returns a filename starting with
|
||||
-- special sequence \s, prepend $TEMP path
|
||||
local tmpdir = os.getenv('TEMP')
|
||||
return tmpdir..fname
|
||||
elseif fname:match('^/tmp') and uname() == 'Darwin' then
|
||||
-- In OS X /tmp links to /private/tmp
|
||||
return '/private'..fname
|
||||
else
|
||||
return fname
|
||||
end
|
||||
end
|
||||
local tmpname = (function()
|
||||
local seq = 0
|
||||
local tmpdir = os.getenv('TMPDIR') and os.getenv('TMPDIR') or os.getenv('TEMP')
|
||||
-- Is $TMPDIR defined local to the project workspace?
|
||||
local in_workspace = not not (tmpdir and string.find(tmpdir, 'Xtest'))
|
||||
return (function()
|
||||
if in_workspace then
|
||||
-- Cannot control os.tmpname() dir, so hack our own tmpname() impl.
|
||||
seq = seq + 1
|
||||
local fname = tmpdir..'/nvim-test-lua-'..seq
|
||||
io.open(fname, 'w'):close()
|
||||
return fname
|
||||
else
|
||||
local fname = os.tmpname()
|
||||
if uname() == 'Windows' and fname:sub(1, 2) == '\\s' then
|
||||
-- In Windows tmpname() returns a filename starting with
|
||||
-- special sequence \s, prepend $TEMP path
|
||||
return tmpdir..fname
|
||||
elseif fname:match('^/tmp') and uname() == 'Darwin' then
|
||||
-- In OS X /tmp links to /private/tmp
|
||||
return '/private'..fname
|
||||
else
|
||||
return fname
|
||||
end
|
||||
end
|
||||
end)
|
||||
end)()
|
||||
|
||||
local function map(func, tab)
|
||||
local rettab = {}
|
||||
@@ -233,6 +246,41 @@ local function shallowcopy(orig)
|
||||
return copy
|
||||
end
|
||||
|
||||
local function concat_tables(...)
|
||||
local ret = {}
|
||||
for i = 1, select('#', ...) do
|
||||
local tbl = select(i, ...)
|
||||
if tbl then
|
||||
for _, v in ipairs(tbl) do
|
||||
ret[#ret + 1] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
local function dedent(str)
|
||||
-- find minimum common indent across lines
|
||||
local indent = nil
|
||||
for line in str:gmatch('[^\n]+') do
|
||||
local line_indent = line:match('^%s+') or ''
|
||||
if indent == nil or #line_indent < #indent then
|
||||
indent = line_indent
|
||||
end
|
||||
end
|
||||
if indent == nil or #indent == 0 then
|
||||
-- no minimum common indent
|
||||
return str
|
||||
end
|
||||
-- create a pattern for the indent
|
||||
indent = indent:gsub('%s', '[ \t]')
|
||||
-- strip it from the first line
|
||||
str = str:gsub('^'..indent, '')
|
||||
-- strip it from the remaining lines
|
||||
str = str:gsub('[\n]'..indent, '\n')
|
||||
return str
|
||||
end
|
||||
|
||||
return {
|
||||
eq = eq,
|
||||
neq = neq,
|
||||
@@ -247,4 +295,6 @@ return {
|
||||
hasenv = hasenv,
|
||||
which = which,
|
||||
shallowcopy = shallowcopy,
|
||||
concat_tables = concat_tables,
|
||||
dedent = dedent,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user