44 lines
959 B
Lua
44 lines
959 B
Lua
local Map = require('opus.map')
|
|
|
|
local fs = _G.fs
|
|
|
|
local commands = Map.transpose {
|
|
'packages/moonscript/moon',
|
|
'packages/moonscript/moonc'
|
|
}
|
|
|
|
local function compatEnv(source)
|
|
local env = Map.shallowCopy(source._G)
|
|
Map.merge(env, source)
|
|
env._G = env
|
|
_G.requireInjector(env, 'packages/moonscript')
|
|
return env
|
|
end
|
|
|
|
local function fix(env, args)
|
|
if #args > 0 then
|
|
args[1] = env.shell.resolve(args[1])
|
|
end
|
|
return args
|
|
end
|
|
|
|
_ENV.shell.registerHandler(function(env, command, args)
|
|
if command:match('(.+)%.moon$') then
|
|
return {
|
|
title = fs.getName(command):match('([^%.]+)'),
|
|
path = 'packages/moonscript/moon',
|
|
args = { env.shell.resolveProgram(command), table.unpack(args) },
|
|
load = loadfile,
|
|
env = compatEnv(env),
|
|
}
|
|
end
|
|
command = env.shell.resolveProgram(command) or ''
|
|
return commands[command] and {
|
|
title = fs.getName(command),
|
|
path = command,
|
|
args = fix(env, args),
|
|
load = loadfile,
|
|
env = compatEnv(env),
|
|
}
|
|
end)
|