extract.lua
Branches > main > cf38a7a > files / nvim / pack / plugins / opt / conjure / lua / conjure / extract.lua
-- [nfnl] fnl/conjure/extract.fnl
local _local_1_ = require("conjure.nfnl.module")
local autoload = _local_1_.autoload
local define = _local_1_.define
local core = autoload("conjure.nfnl.core")
local str = autoload("conjure.nfnl.string")
local config = autoload("conjure.config")
local client = autoload("conjure.client")
local ts = autoload("conjure.tree-sitter")
local searchpair = autoload("conjure.extract.searchpair")
local M = define("conjure.extract")
M.form = function(opts)
if ts["enabled?"]() then
local function _2_()
if opts["root?"] then
return ts["get-root"]()
else
return ts["get-form"]()
end
end
return ts["node->table"](_2_())
else
return searchpair.form(opts)
end
end
M["legacy-word"] = function()
local cword = vim.fn.expand("<cword>")
local line = vim.fn.getline(".")
local cword_index = vim.fn.strridx(line, cword, (vim.fn.col(".") - 1))
local line_num = vim.fn.line(".")
return {content = cword, range = {start = {line_num, cword_index}, ["end"] = {line_num, (cword_index + #cword + -1)}}}
end
M.word = function()
if ts["enabled?"]() then
local node = ts["get-leaf"]()
if node then
return {range = ts.range(node), content = ts["node->str"](node)}
else
return {range = nil, content = nil}
end
else
return M["legacy-word"]()
end
end
M["file-path"] = function()
return vim.fn.expand("%:p")
end
local function buf_last_line_length(buf)
return core.count(core.first(vim.api.nvim_buf_get_lines(buf, core.dec(vim.api.nvim_buf_line_count(buf)), -1, false)))
end
M.range = function(start, _end)
return {content = str.join("\n", vim.api.nvim_buf_get_lines(0, start, _end, false)), range = {start = {core.inc(start), 0}, ["end"] = {_end, buf_last_line_length(0)}}}
end
M.buf = function()
return M.range(0, -1)
end
local function getpos(expr)
local _let_6_ = vim.fn.getpos(expr)
local _ = _let_6_[1]
local start = _let_6_[2]
local _end = _let_6_[3]
local _0 = _let_6_[4]
return {start, core.dec(_end)}
end
local function nu_normal(keys)
return vim.cmd(("silent exe \"normal! " .. keys .. "\""))
end
M.selection = function(_7_)
local kind = _7_.kind
local visual_3f = _7_["visual?"]
local sel_backup = vim.o.selection
vim.cmd("let g:conjure_selection_reg_backup = @@")
vim.o.selection = "inclusive"
if visual_3f then
nu_normal(("`<" .. kind .. "`>y"))
elseif (kind == "line") then
nu_normal("'[V']y")
elseif (kind == "block") then
nu_normal("`[\22`]y")
else
nu_normal("`[v`]y")
end
local content = vim.api.nvim_eval("@@")
vim.o.selection = sel_backup
vim.cmd("let @@ = g:conjure_selection_reg_backup")
return {content = content, range = {start = getpos("'<"), ["end"] = getpos("'>")}}
end
M.context = function()
local pat = client.get("context-pattern")
local f
if pat then
local function _9_(_241)
return string.match(_241, pat)
end
f = _9_
else
f = client.get("context")
end
if f then
return f(str.join("\n", vim.api.nvim_buf_get_lines(0, 0, config["get-in"]({"extract", "context_header_lines"}), false)))
else
return nil
end
end
M.prompt = function(prefix)
local ok_3f, val
local function _12_()
return vim.fn.input((prefix or ""))
end
ok_3f, val = pcall(_12_)
if ok_3f then
return val
else
return nil
end
end
M["prompt-char"] = function()
return vim.fn.nr2char(vim.fn.getchar())
end
return M