neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

hcl.vim (1898B)


      1 " Language:    HCL
      2 " Maintainer:  Gregory Anders
      3 " Last Change: 2024-09-03
      4 " Based on:    https://github.com/hashivim/vim-terraform
      5 " License:     ISC
      6 "
      7 " Copyright (c) 2014-2016 Mark Cornick <mark@markcornick.com>
      8 "
      9 " Permission to use, copy, modify, and/or distribute this software for any purpose
     10 " with or without fee is hereby granted, provided that the above copyright notice
     11 " and this permission notice appear in all copies.
     12 "
     13 " THE SOFTWARE IS PROVIDED 'AS IS' AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
     14 " REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
     15 " FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
     16 " INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
     17 " OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
     18 " TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
     19 " THIS SOFTWARE.
     20 
     21 function! hcl#indentexpr(lnum)
     22  " Beginning of the file should have no indent
     23  if a:lnum == 0
     24    return 0
     25  endif
     26 
     27  " Usual case is to continue at the same indent as the previous non-blank line.
     28  let prevlnum = prevnonblank(a:lnum-1)
     29  let thisindent = indent(prevlnum)
     30 
     31  " If that previous line is a non-comment ending in [ { (, increase the
     32  " indent level.
     33  let prevline = getline(prevlnum)
     34  if prevline !~# '^\s*\(#\|//\)' && prevline =~# '[\[{\(]\s*$'
     35    let thisindent += &shiftwidth
     36  endif
     37 
     38  " If the current line ends a block, decrease the indent level.
     39  let thisline = getline(a:lnum)
     40  if thisline =~# '^\s*[\)}\]]'
     41    let thisindent -= &shiftwidth
     42  endif
     43 
     44  " If the previous line starts a block comment /*, increase by one
     45  if prevline =~# '/\*'
     46    let thisindent += 1
     47  endif
     48 
     49  " If the previous line ends a block comment */, decrease by one
     50  if prevline =~# '\*/'
     51    let thisindent -= 1
     52  endif
     53 
     54  return thisindent
     55 endfunction