58 lines
1.2 KiB
Lua
58 lines
1.2 KiB
Lua
---@class schema_companion.Source
|
|
local M = {}
|
|
|
|
M.name = "Kubernetes"
|
|
|
|
M.config = {}
|
|
|
|
---@param config {}
|
|
---@return schema_companion.Source
|
|
function M.setup(config)
|
|
setmetatable(M, {})
|
|
M.config = vim.tbl_deep_extend("force", {}, M.config, config)
|
|
|
|
return M
|
|
end
|
|
|
|
function M:match(_, bufnr)
|
|
local resources = {}
|
|
|
|
local current = {}
|
|
for _, line in pairs(vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)) do
|
|
local _, _, group, version = line:find([[^apiVersion:%s*["']?([^%s"'/]*)/?([^%s"']*)]])
|
|
local _, _, kind = line:find([[^kind:%s*["']?([^%s"'/]*)]])
|
|
|
|
if group and group ~= "" then
|
|
current.group = group
|
|
end
|
|
if version and version ~= "" then
|
|
current.version = version
|
|
end
|
|
if kind and kind ~= "" then
|
|
current.kind = kind
|
|
end
|
|
|
|
if current.group and current.kind then
|
|
table.insert(resources, current)
|
|
current = {}
|
|
end
|
|
end
|
|
|
|
local schemas = {}
|
|
for _, resource in pairs(resources) do
|
|
local api = resource.version and ("%s/%s"):format(resource.group, resource.version) or resource.group
|
|
local schema = {
|
|
name = ("%s@%s"):format(resource.kind, api),
|
|
source = M.name,
|
|
uri = require("kubernetes").yamlls_schema(),
|
|
}
|
|
if schema then
|
|
table.insert(schemas, schema)
|
|
end
|
|
end
|
|
|
|
return schemas
|
|
end
|
|
|
|
return M
|