PHP 8.5.2
Preview: hare.vim Size: 4.38 KB
//usr/share/vim/vim91/indent/hare.vim

" Vim indent file
" Language: Hare
" Maintainer: Amelia Clarke <me@rsaihe.dev>
" Last Change: 2022 Sep 22
"              2023 Aug 28 by Vim Project (undo_indent)

if exists("b:did_indent")
  finish
endif
let b:did_indent = 1

if !has("cindent") || !has("eval")
  finish
endif

setlocal cindent

" L0 -> don't deindent labels
" (s -> use one indent after a trailing (
" m1 -> if ) starts a line, indent it the same as its matching (
" ks -> add an extra indent to extra lines in an if expression or for expression
" j1 -> indent code inside {} one level when in parentheses
" J1 -> see j1
" *0 -> don't search for unclosed block comments
" #1 -> don't deindent lines that begin with #
setlocal cinoptions=L0,(s,m1,ks,j1,J1,*0,#1

" Controls which keys reindent the current line.
" 0{     -> { at beginning of line
" 0}     -> } at beginning of line
" 0)     -> ) at beginning of line
" 0]     -> ] at beginning of line
" !^F    -> <C-f> (not inserted)
" o      -> <CR> or `o` command
" O      -> `O` command
" e      -> else
" 0=case -> case
setlocal indentkeys=0{,0},0),0],!^F,o,O,e,0=case

setlocal cinwords=if,else,for,switch,match

setlocal indentexpr=GetHareIndent()

let b:undo_indent = "setl cin< cino< cinw< inde< indk<"

function! FloorCindent(lnum)
  return cindent(a:lnum) / shiftwidth() * shiftwidth()
endfunction

function! GetHareIndent()
  let line = getline(v:lnum)
  let prevlnum = prevnonblank(v:lnum - 1)
  let prevline = getline(prevlnum)
  let prevprevline = getline(prevnonblank(prevlnum - 1))

  " This is all very hacky and imperfect, but it's tough to do much better when
  " working with regex-based indenting rules.

  " If the previous line ended with =, indent by one shiftwidth.
  if prevline =~# '\v\=\s*(//.*)?$'
    return indent(prevlnum) + shiftwidth()
  endif

  " If the previous line ended in a semicolon and the line before that ended
  " with =, deindent by one shiftwidth.
  if prevline =~# '\v;\s*(//.*)?$' && prevprevline =~# '\v\=\s*(//.*)?$'
    return indent(prevlnum) - shiftwidth()
  endif

  " TODO: The following edge-case is still indented incorrectly:
  " case =>
  "         if (foo) {
  "                 bar;
  "         };
  " | // cursor is incorrectly deindented by one shiftwidth.
  "
  " This only happens if the {} block is the first statement in the case body.
  " If `case` is typed, the case will also be incorrectly deindented by one
  " shiftwidth. Are you having fun yet?

  " Deindent cases.
  if line =~# '\v^\s*case'
    " If the previous line was also a case, don't do any special indenting.
    if prevline =~# '\v^\s*case'
      return indent(prevlnum)
    end

    " If the previous line was a multiline case, deindent by one shiftwidth.
    if prevline =~# '\v\=\>\s*(//.*)?$'
      return indent(prevlnum) - shiftwidth()
    endif

    " If the previous line started a block, deindent by one shiftwidth.
    " This handles the first case in a switch/match block.
    if prevline =~# '\v\{\s*(//.*)?$'
      return FloorCindent(v:lnum) - shiftwidth()
    end

    " If the previous line ended in a semicolon and the line before that wasn't
    " a case, deindent by one shiftwidth.
    if prevline =~# '\v;\s*(//.*)?$' && prevprevline !~# '\v\=\>\s*(//.*)?$'
      return FloorCindent(v:lnum) - shiftwidth()
    end

    let l:indent = FloorCindent(v:lnum)

    " If a normal cindent would indent the same amount as the previous line,
    " deindent by one shiftwidth. This fixes some issues with `case let` blocks.
    if l:indent == indent(prevlnum)
      return l:indent - shiftwidth()
    endif

    " Otherwise, do a normal cindent.
    return l:indent
  endif

  " Don't indent an extra shiftwidth for cases which span multiple lines.
  if prevline =~# '\v\=\>\s*(//.*)?$' && prevline !~# '\v^\s*case\W'
    return indent(prevlnum)
  endif

  " Indent the body of a case.
  " If the previous line ended in a semicolon and the line before that was a
  " case, don't do any special indenting.
  if prevline =~# '\v;\s*(//.*)?$' && prevprevline =~# '\v\=\>\s*(//.*)?$' && line !~# '\v^\s*}'
    return indent(prevlnum)
  endif

  let l:indent = FloorCindent(v:lnum)

  " If the previous line was a case and a normal cindent wouldn't indent, indent
  " an extra shiftwidth.
  if prevline =~# '\v\=\>\s*(//.*)?$' && l:indent == indent(prevlnum)
    return l:indent + shiftwidth()
  endif

  " If everything above is false, do a normal cindent.
  return l:indent
endfunction

" vim: tabstop=2 shiftwidth=2 expandtab

Directory Contents

Dirs: 0 × Files: 160

Name Size Perms Modified Actions
331 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
11.06 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
290 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
243 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
7.68 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
390 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
250 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
346 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
583 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.86 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.86 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
391 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.26 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
556 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.18 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
264 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
731 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
11.29 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.98 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
8.63 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.17 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.67 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
395 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.88 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.77 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.74 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
371 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
605 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
411 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
414 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
336 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.35 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
11.79 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
451 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.69 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
430 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.75 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
3.24 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
3.20 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
50.74 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.95 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
743 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
207 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
13.84 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
273 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.66 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
7.72 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
891 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
237 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.26 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
841 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.29 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.73 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
169 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.19 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.65 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.38 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.85 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
33.12 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
273 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.68 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.83 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.77 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.19 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
15.13 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
109 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.54 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.74 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
462 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
15.29 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.53 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.25 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.82 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
243 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
638 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.03 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
349 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
206 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.91 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.22 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
252 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
385 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
3.48 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.81 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
5.19 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
164 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.31 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
9.72 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.70 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
3.23 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.65 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.40 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
9.09 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.63 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
5.66 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
5.91 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
25.76 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.64 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.71 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.91 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
410 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
326 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
886 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
232 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.27 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
23 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
13.96 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.87 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
3.45 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
285 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
7.97 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
786 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.83 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.25 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.10 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.82 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.19 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.90 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
30.33 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
10.26 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
5.18 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
926 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
19.30 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
372 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
191 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.76 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
9.04 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
6.42 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
12.61 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.18 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
12.96 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
796 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
10.55 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.48 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.35 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.38 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
13.52 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.57 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.11 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
785 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
14.28 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
109 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
4.69 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
8.08 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
14.43 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
675 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
379 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
385 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
458 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
786 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
325 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
1.28 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
7.60 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
253 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
297 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
858 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download
5.45 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
2.09 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
3.92 KB lrw-r--r-- 2025-09-05 19:44:46
Edit Download
411 B lrw-r--r-- 2025-09-05 19:44:46
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).