Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
make.vim123 linesDownload Raw Back to indent
1" Vim indent file2" Language:		Makefile3" Maintainer:		Doug Kearns <dougkearns@gmail.com>4" Previous Maintainer:	Nikolai Weibull <now@bitwi.se>5" Last Change:		2022 Apr 066" 2025 Apr 22 by Vim Project: do not indent after special targets #171837 8if exists("b:did_indent")9  finish10endif11let b:did_indent = 112 13setlocal indentexpr=GetMakeIndent()14setlocal indentkeys=!^F,o,O,<:>,=else,=endif15setlocal nosmartindent16 17let b:undo_indent = "setl inde< indk< si<"18 19if exists("*GetMakeIndent")20  finish21endif22 23let s:comment_rx = '^\s*#'24let s:rule_rx = '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)'25" .PHONY, .DELETE_ON_ERROR, etc26let s:rule_special = '^\.[A-Z_]\+\s*:'27let s:continued_rule_rx = '^[^#:]*:\{1,2}\%([^=:]\|$\)'28let s:continuation_rx = '\\$'29let s:assignment_rx = '^\s*\h\w*\s*[+:?]\==\s*\zs.*\\$'30let s:folded_assignment_rx = '^\s*\h\w*\s*[+:?]\=='31" TODO: This needs to be a lot more restrictive in what it matches.32let s:just_inserted_rule_rx = '^\s*[^#:]\+:\{1,2}$'33let s:conditional_directive_rx = '^ *\%(ifn\=\%(eq\|def\)\|else\)\>'34let s:end_conditional_directive_rx = '^\s*\%(else\|endif\)\>'35 36function s:remove_continuation(line)37  return substitute(a:line, s:continuation_rx, "", "")38endfunction39 40function GetMakeIndent()41  " TODO: Should this perhaps be v:lnum -1?42"  let prev_lnum = prevnonblank(v:lnum - 1)43  let prev_lnum = v:lnum - 144  if prev_lnum == 045    return 046  endif47  let prev_line = getline(prev_lnum)48 49  let prev_prev_lnum = prev_lnum - 150  let prev_prev_line = prev_prev_lnum != 0 ? getline(prev_prev_lnum) : ""51 52  " TODO: Deal with comments.  In comments, continuations aren't interesting.53  if prev_line =~ s:continuation_rx54    if prev_prev_line =~ s:continuation_rx55      return indent(prev_lnum)56    elseif prev_line =~ s:rule_rx && prev_line !~ s:rule_special57      return shiftwidth()58    elseif prev_line =~ s:assignment_rx59      call cursor(prev_lnum, 1)60      if search(s:assignment_rx, 'W') != 061        return virtcol('.') - 162      else63        " TODO: ?64        return shiftwidth()65      endif66    else67      " TODO: OK, this might be a continued shell command, so perhaps indent68      " properly here?  Leave this out for now, but in the next release this69      " should be using indent/sh.vim somehow.70      "if prev_line =~ '^\t' " s:rule_command_rx71      "  if prev_line =~ '^\s\+[@-]\%(if\)\>'72      "    return indent(prev_lnum) + 273      "  endif74      "endif75      return indent(prev_lnum) + shiftwidth()76    endif77  elseif prev_prev_line =~ s:continuation_rx78    let folded_line = s:remove_continuation(prev_prev_line) . ' ' . s:remove_continuation(prev_line)79    let lnum = prev_prev_lnum - 180    let line = getline(lnum)81    while line =~ s:continuation_rx82      let folded_line = s:remove_continuation(line) . ' ' . folded_line83      let lnum -= 184      let line = getline(lnum)85    endwhile86    let folded_lnum = lnum + 187    if folded_line =~ s:rule_rx && prev_line !~ s:rule_special88      if getline(v:lnum) =~ s:rule_rx && prev_line !~ s:rule_special89        return 090      else91        return &ts92      endif93    else94"    elseif folded_line =~ s:folded_assignment_rx95      if getline(v:lnum) =~ s:rule_rx && prev_line !~ s:rule_special96        return 097      else98        return indent(folded_lnum)99      endif100"    else101"      " TODO: ?102"      return indent(prev_lnum)103    endif104  elseif prev_line =~ s:rule_rx && prev_line !~ s:rule_special105    if getline(v:lnum) =~ s:rule_rx && prev_line !~ s:rule_special106      return 0107    else108      return &ts109    endif110  elseif prev_line =~ s:conditional_directive_rx111    return shiftwidth()112  else113    let line = getline(v:lnum)114    if line =~ s:just_inserted_rule_rx115      return 0116    elseif line =~ s:end_conditional_directive_rx117      return v:lnum - 1 == 0 ? 0 : indent(v:lnum - 1) - shiftwidth()118    else119      return v:lnum - 1 == 0 ? 0 : indent(v:lnum - 1)120    endif121  endif122endfunction123 
codekingpro/portable-devtools · Team Ai