first working prototype
This commit is contained in:
parent
39a437474b
commit
31e602e8c9
149
lua/ansible/init.lua
Normal file
149
lua/ansible/init.lua
Normal file
@ -0,0 +1,149 @@
|
||||
-- TODO
|
||||
-- reuse existing split
|
||||
-- use fqcn as buffer name
|
||||
-- add function to convert to fqcn, with telescope dropdown if there are multiple options
|
||||
-- telescope window to search through all available module names, enter inserts, other key opens doc in split
|
||||
|
||||
|
||||
local ts_utils = require("nvim-treesitter.ts_utils")
|
||||
|
||||
local M = {}
|
||||
|
||||
M.example = function()
|
||||
local lines = {}
|
||||
|
||||
local current_line_nr = 1
|
||||
local buf_handle = vim.api.nvim_win_get_buf(0)
|
||||
local last_line_nr = vim.api.nvim_buf_line_count(buf_handle)
|
||||
while (current_line_nr <= last_line_nr) do
|
||||
-- skip empty lines
|
||||
if vim.fn.getline(current_line_nr) == '' then
|
||||
print('skipping ' .. current_line_nr)
|
||||
current_line_nr = current_line_nr + 1
|
||||
else
|
||||
vim.api.nvim_win_set_cursor(0, {current_line_nr, 1})
|
||||
local node = ts_utils.get_node_at_cursor(0)
|
||||
local parent = node:parent()
|
||||
while (parent ~= nil and node:type() ~= 'block_mapping_pair') do
|
||||
node = parent
|
||||
parent = node:parent()
|
||||
end
|
||||
-- ts_utils.update_selection(0, node)
|
||||
local start_row, start_column, end_row, end_column = node:range()
|
||||
-- vim.api.nvim_command(start_row + 1 .. ',' .. end_row + 1 .. 's/\\n/`')
|
||||
-- print(start_row)
|
||||
-- print(end_row)
|
||||
|
||||
lines[current_line_nr] = vim.fn.getline(start_row + 1, end_row + 1)
|
||||
|
||||
current_line_nr = current_line_nr + 1 + (end_row - start_row)
|
||||
end
|
||||
end
|
||||
|
||||
-- sort does not work if the index is not a continuous integer, so lets make sure it is. if we are sure that we dont need the original line number, we can do this from the start in `lines`
|
||||
a = {}
|
||||
for i,v in pairs(lines) do table.insert(a, v) end
|
||||
table.sort(
|
||||
a,
|
||||
function(k1, k2)
|
||||
return k1[1] < k2[1]
|
||||
end
|
||||
)
|
||||
|
||||
insert_row = 1
|
||||
last_prefix = vim.split(a[1][1], '__')[1]
|
||||
for _, lines in ipairs(a) do
|
||||
current_prefix = vim.split(lines[1], '__')[1]
|
||||
if current_prefix ~= last_prefix then
|
||||
vim.fn.setline(insert_row, '')
|
||||
insert_row = insert_row + 1
|
||||
end
|
||||
last_prefix = current_prefix
|
||||
for i, line in ipairs(lines) do
|
||||
vim.fn.setline(insert_row, line)
|
||||
insert_row = insert_row + 1
|
||||
end
|
||||
end
|
||||
|
||||
-- nvim_put()
|
||||
-- *nvim_set_current_line()*
|
||||
|
||||
-- if multiline:
|
||||
-- vim.api.nvim_command("'<,'>s/\\n/`")
|
||||
end
|
||||
|
||||
|
||||
M.display_ansible_doc = function(keyword)
|
||||
|
||||
local Job = require'plenary.job'
|
||||
|
||||
-- local keyword = 'get_url'
|
||||
local doc = {}
|
||||
|
||||
Job:new({
|
||||
command = 'ansible-doc',
|
||||
args = { keyword },
|
||||
on_exit = function(j, return_val)
|
||||
-- print(return_val)
|
||||
-- print(vim.inspect(j:result()))
|
||||
doc = j:result()
|
||||
end,
|
||||
}):sync() -- or start()
|
||||
|
||||
-- TODO unlisted / scratch buffer?
|
||||
local fqcn = string.lower(vim.split(doc[1], ' ')[2])
|
||||
|
||||
vim.api.nvim_command('vsplit ' .. fqcn)
|
||||
|
||||
local win_handle = vim.api.nvim_tabpage_get_win(0)
|
||||
local buf_handle = vim.api.nvim_win_get_buf(0)
|
||||
|
||||
vim.api.nvim_buf_set_lines(buf_handle, 0, -1, false, doc)
|
||||
|
||||
vim.api.nvim_buf_set_option(buf_handle, 'readonly', true)
|
||||
vim.api.nvim_buf_set_option(buf_handle, 'modifiable', false)
|
||||
|
||||
-- Now we set some options for our buffer.
|
||||
-- nofile prevent mark buffer as modified so we never get warnings about not saved changes.
|
||||
-- Also some plugins treat nofile buffers different.
|
||||
-- For example coc.nvim don't triggers aoutcompletation for these.
|
||||
vim.api.nvim_buf_set_option(buf_handle, 'buftype', 'nofile')
|
||||
-- We do not need swapfile for this buffer.
|
||||
vim.api.nvim_buf_set_option(buf_handle, 'swapfile', false)
|
||||
-- And we would rather prefer that this buffer will be destroyed when hide.
|
||||
vim.api.nvim_buf_set_option(buf_handle, 'bufhidden', 'wipe')
|
||||
-- It's not necessary but it is good practice to set custom filetype.
|
||||
-- This allows users to create their own autocommand or colorschemes on filetype.
|
||||
-- and prevent collisions with other plugins.
|
||||
vim.api.nvim_buf_set_option(buf_handle, 'filetype', 'ansible-doc')
|
||||
|
||||
-- vim.api.nvim_command('wincmd p') -- go back to previous window
|
||||
end
|
||||
|
||||
|
||||
M.replace_fqcn = function()
|
||||
|
||||
local Job = require'plenary.job'
|
||||
|
||||
-- keyword = 'get_url'
|
||||
doc = {}
|
||||
|
||||
Job:new({
|
||||
command = 'ansible-doc',
|
||||
args = { keyword },
|
||||
on_exit = function(j, return_val)
|
||||
-- print(return_val)
|
||||
-- print(vim.inspect(j:result()))
|
||||
doc = j:result()
|
||||
end,
|
||||
}):sync() -- or start()
|
||||
|
||||
fqcn = string.lower(vim.split(doc[1], ' ')[2])
|
||||
cur_pos = vim.api.nvim_win_get_cursor(0)
|
||||
|
||||
buf_handle = vim.api.nvim_win_get_buf(0)
|
||||
vim.api.nvim_buf_set_lines(buf_handle, 0, -1, false, doc)
|
||||
|
||||
end
|
||||
|
||||
return M
|
Loading…
x
Reference in New Issue
Block a user