Updated vim with puppet helpers

- follow puppet classes, opening in new tab
  - follow puppet templates, opening in new tab
  - created a testmode for puppet
This commit is contained in:
Ben Vincent 2023-09-02 01:19:43 +10:00
parent 2d6bcd9ff7
commit d6140a9f15
3 changed files with 120 additions and 1 deletions

View File

@ -12,6 +12,7 @@ require('opts') -- Options
require('keys') -- Keymaps
require('auto') -- Automaps
require('plug') -- Plugins
require('func') -- Functions
-- nvim-tree
require("nvim-tree").setup({
@ -182,7 +183,7 @@ require("block").setup({
percent = 1.1,
depth = 4,
colors = nil,
automatic = true,
automatic = false,
})
-- require("dracula").setup{

10
.config/nvim/lua/func.lua Normal file
View File

@ -0,0 +1,10 @@
-- FUNCTIONS --
-- puppet language functions
vim.cmd [[
augroup lang_puppet
autocmd!
autocmd FileType puppet luafile ~/.config/nvim/lua/func/puppet.lua
augroup END
]]

View File

@ -0,0 +1,108 @@
-- puppet functions
--
--
-- enter testmode
vim.cmd([[
function! OpenPuppetTestMode()
echo "Test mode active."
echo "Keybindings:"
echo " v - puppet-validate"
echo " l - puppet-lint"
echo " q - quit test mode"
" Keybinding to run tests on the current buffer
nnoremap <buffer> v :!/usr/local/bin/puppet-validate %<CR>
nnoremap <buffer> l :!/usr/local/bin/puppet-lint %<CR>
" Keybinding to quit test mode
let keys_to_exit = ['q', ':', 'i', 'a', 'c', 'r', 'w', '<ESC>']
for key in keys_to_exit
execute "silent! nnoremap <buffer> " . key . " :call LeavePuppetTestMode()<CR>"
endfor
endfunction
function! LeavePuppetTestMode()
" Unmap the keybindings we defined for test mode
let keys_to_exit = ['l', 'v', 'q', ':', 'i', 'a', 'c', 'r', 'w', '<ESC>']
for key in keys_to_exit
execute "silent! unmap <buffer> " . key
endfor
echo "Test Mode Exited!"
endfunction
]])
-- follow links to classes
vim.cmd([[
function! OpenPuppetClass()
" Get the line under the cursor
let line = getline(".")
" Use a regex to find the full class name
let classname = tolower(matchstr(line, '\v\w+(\:\:\w+)+'))
" Initialize an empty variable for the directory
let dirpath = ""
" Check if the class name starts with 'profiles::' or 'roles::'
if classname =~ '^profiles::'
let dirpath = "site/profiles/manifests/"
let classname = substitute(classname, 'profiles::', '', '')
elseif classname =~ '^roles::'
let dirpath = "site/roles/manifests/"
let classname = substitute(classname, 'roles::', '', '')
else
echo "Unknown class prefix, should be profiles:: or roles::"
return
endif
" Replace :: with / to convert class name to file path
let filepath = substitute(classname, '::', '/', 'g')
" Create the full file path
let fullpath = dirpath . filepath . ".pp"
" Open the file in a new tab
execute "tabedit " . fullpath
endfunction
]])
-- follow links to templates
vim.cmd([[
function! OpenPuppetTemplate()
" Get the line under the cursor
let line = getline(".")
" Use regex to find the full template name
let template = matchstr(line, 'profiles\/.*\.erb')
" Initialize an empty variable for the new directory path
let newpath = ""
" Check if the template name starts with 'profiles/'
if template =~ '^profiles\/'
let newpath = substitute(template, '^profiles/', 'site/profiles/templates/', '')
else
echo "Unknown template prefix, should be profiles/, line is: " . template
return
endif
" Create the full file path
let fullpath = newpath
" Open the file in a new tab
execute "tabedit " . fullpath
endfunction
]])
-- keybindings
vim.cmd([[
nnoremap <Leader>g :call OpenPuppetClass()<CR>
nnoremap <Leader>h :call OpenPuppetTemplate()<CR>
nnoremap <Leader>t :call OpenPuppetTestMode()<CR>
]])