mirror of
https://github.com/ivuorinen/nvim-shellspec.git
synced 2026-01-26 03:24:00 +00:00
feat: plugin code and updates
This commit is contained in:
56
autoload/shellspec.vim
Normal file
56
autoload/shellspec.vim
Normal file
@@ -0,0 +1,56 @@
|
||||
" ShellSpec DSL formatter functions
|
||||
|
||||
function! shellspec#format_buffer() abort
|
||||
let l:pos = getpos('.')
|
||||
let l:lines = getline(1, '$')
|
||||
let l:formatted = shellspec#format_lines(l:lines)
|
||||
|
||||
silent! %delete _
|
||||
call setline(1, l:formatted)
|
||||
call setpos('.', l:pos)
|
||||
endfunction
|
||||
|
||||
function! shellspec#format_lines(lines) abort
|
||||
let l:result = []
|
||||
let l:indent = 0
|
||||
|
||||
for l:line in a:lines
|
||||
let l:trimmed = trim(l:line)
|
||||
|
||||
" Skip empty lines and comments
|
||||
if l:trimmed == '' || l:trimmed =~ '^#'
|
||||
call add(l:result, l:line)
|
||||
continue
|
||||
endif
|
||||
|
||||
" Decrease indent for End
|
||||
if l:trimmed =~ '^End\s*$'
|
||||
let l:indent = max([0, l:indent - 1])
|
||||
endif
|
||||
|
||||
" Apply current indentation
|
||||
let l:formatted = repeat(' ', l:indent) . l:trimmed
|
||||
call add(l:result, l:formatted)
|
||||
|
||||
" Increase indent after block keywords
|
||||
if l:trimmed =~ '^\(Describe\|Context\|ExampleGroup\|It\|Specify\|Example\)'
|
||||
let l:indent += 1
|
||||
elseif l:trimmed =~ '^\([xf]\)\(Describe\|Context\|ExampleGroup\|It\|Specify\|Example\)'
|
||||
let l:indent += 1
|
||||
elseif l:trimmed =~ '^\(Data\|Parameters\)\s*$'
|
||||
let l:indent += 1
|
||||
endif
|
||||
endfor
|
||||
|
||||
return l:result
|
||||
endfunction
|
||||
|
||||
function! shellspec#format_selection() abort
|
||||
let l:start = line("'<")
|
||||
let l:end = line("'>")
|
||||
let l:lines = getline(l:start, l:end)
|
||||
let l:formatted = shellspec#format_lines(l:lines)
|
||||
|
||||
call deletebufline('%', l:start, l:end)
|
||||
call append(l:start - 1, l:formatted)
|
||||
endfunction
|
||||
Reference in New Issue
Block a user