Skip to content

Commit

Permalink
Merge pull request #95 from NoahTheDuke/indent
Browse files Browse the repository at this point in the history
Initial auto-indent support
  • Loading branch information
laniakea64 authored Jun 13, 2024
2 parents 152d4f6 + 5635f99 commit 721131f
Showing 1 changed file with 51 additions and 0 deletions.
51 changes: 51 additions & 0 deletions indent/just.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
" Vim indent file
" Language: Justfile
" Maintainer: Noah Bogart <[email protected]>
" URL: https://github.com/NoahTheDuke/vim-just.git
" Last Change: 2024 Jan 19

" Only load this indent file when no other was loaded yet.
if exists("b:did_indent")
finish
endif
let b:did_indent = 1

setlocal indentexpr=GetJustfileIndent()
setlocal indentkeys=0},0),!^F,o,O,0=''',0=\"\"\"

let b:undo_indent = "setlocal indentexpr< indentkeys<"

if exists("*GetJustfileIndent")
finish
endif

function GetJustfileIndent()
if v:lnum < 2
return 0
endif

let prev_line = getline(v:lnum - 1)
let last_indent = indent(v:lnum - 1)

if getline(v:lnum) =~ "\\v^\\s+%([})]|'''$|\"\"\"$)"
return last_indent - shiftwidth()
elseif prev_line =~ '\V#'
return last_indent
elseif prev_line =~ "\\v%([:{(]|^.*\\S.*%([^']'''|[^\"]\"\"\"))\\s*$"
return last_indent + shiftwidth()
elseif prev_line =~ '\\$'
if v:lnum == 2 || getline(v:lnum - 2) !~ '\\$'
if prev_line =~ '\v:\=@!'
return last_indent + shiftwidth() + shiftwidth()
else
return last_indent + shiftwidth()
endif
endif
elseif v:lnum > 2 && getline(v:lnum - 2) =~ '\\$'
return last_indent - shiftwidth()
elseif prev_line =~ '\v:\s*%(\h|\()' && prev_line !~ '\V:='
return last_indent + shiftwidth()
endif

return last_indent
endfunction

0 comments on commit 721131f

Please sign in to comment.