Files
cave.nvim/lua/cave/python/script.lua
2024-10-02 14:58:20 +02:00

77 lines
1.9 KiB
Lua

local Runnable = require "cave.python.runnable"
local Meta = require "cave.meta"
local Path = require "cave.path"
local Context = require "cave.context"
local validate = Meta.validate
---@class cave.Python.Script : cave.Python.Runnable
---@field file cave.Path
local Script = Meta.derive("Python.Script", Runnable)
---@return cave.Python.Script
function Script:script() return self end
---@return string
function Script:valid_file()
assert(self.file:is_file())
return self.file:tostring()
end
---@class cave.Python.Script.Factory : cave.Python.Runnable.Factory
---@field file_ cave.Path
local Factory = Meta.derive("Python.Script.Factory", Runnable.Factory)
---@param file cave.Path
---@param context cave.Context
function Factory:init(file, context)
Runnable.Factory.init(self, context)
self.file_ = file
end
---@param other cave.Python.Script.Factory
function Factory:copy_from(other)
Runnable.Factory.copy_from(self, other)
self.file_ = other.file_:copy()
end
---@param file cave.Path
---@param context cave.Context
---@return cave.Python.Script.Factory
function Factory.new(file, context)
validate { file = { file, Path }, context = { context, Context } }
local factory = setmetatable({}, Factory)
factory:init(file, context)
return factory
end
---@return cave.Python.Script.Factory
function Factory:copy()
local factory = setmetatable({}, Factory)
factory:copy_from(self)
return factory
end
---@return string
function Factory:get_id() return self.id_ or ("[%s]"):format(self:get_file()) end
---@return cave.Path
function Factory:get_file() return self.file_ end
---@param script cave.Python.Script
function Factory:init_script(script)
self:init_runnable(script)
script.file = self:get_file()
end
---@return cave.Python.Script
function Factory:build()
local script = setmetatable({}, Script)
self:init_script(script)
return script
end
Script.Factory = Factory
return Script