commit 2ea14c0cf4f5244a8ee17cd6243d37b82f5638c2
parent 1dbede5b932f7fd34bb3499a81ce8813fbb5e1a1
Author: Christian Clason <c.clason@uni-graz.at>
Date: Tue, 22 Apr 2025 23:24:25 +0200
vim-patch:7bc9880: runtime(make): do not automatically indent after a special target
prevent indentation if the previous line starts with e.g. `.PHONY:`
closes: vim/vim#17183
https://github.com/vim/vim/commit/7bc988067eff6657e6f047491cadb32e0829544d
Co-authored-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
Diffstat:
3 files changed, 49 insertions(+), 6 deletions(-)
diff --git a/runtime/indent/make.vim b/runtime/indent/make.vim
@@ -3,6 +3,7 @@
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Last Change: 2022 Apr 06
+" 2025 Apr 22 by Vim Project: do not indent after special targets #17183
if exists("b:did_indent")
finish
@@ -21,6 +22,8 @@ endif
let s:comment_rx = '^\s*#'
let s:rule_rx = '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)'
+" .PHONY, .DELETE_ON_ERROR, etc
+let s:rule_special = '^\.[A-Z_]\+\s*:'
let s:continued_rule_rx = '^[^#:]*:\{1,2}\%([^=:]\|$\)'
let s:continuation_rx = '\\$'
let s:assignment_rx = '^\s*\h\w*\s*[+:?]\==\s*\zs.*\\$'
@@ -50,7 +53,7 @@ function GetMakeIndent()
if prev_line =~ s:continuation_rx
if prev_prev_line =~ s:continuation_rx
return indent(prev_lnum)
- elseif prev_line =~ s:rule_rx
+ elseif prev_line =~ s:rule_rx && prev_line !~ s:rule_special
return shiftwidth()
elseif prev_line =~ s:assignment_rx
call cursor(prev_lnum, 1)
@@ -81,15 +84,15 @@ function GetMakeIndent()
let line = getline(lnum)
endwhile
let folded_lnum = lnum + 1
- if folded_line =~ s:rule_rx
- if getline(v:lnum) =~ s:rule_rx
+ if folded_line =~ s:rule_rx && prev_line !~ s:rule_special
+ if getline(v:lnum) =~ s:rule_rx && prev_line !~ s:rule_special
return 0
else
return &ts
endif
else
" elseif folded_line =~ s:folded_assignment_rx
- if getline(v:lnum) =~ s:rule_rx
+ if getline(v:lnum) =~ s:rule_rx && prev_line !~ s:rule_special
return 0
else
return indent(folded_lnum)
@@ -98,8 +101,8 @@ function GetMakeIndent()
" " TODO: ?
" return indent(prev_lnum)
endif
- elseif prev_line =~ s:rule_rx
- if getline(v:lnum) =~ s:rule_rx
+ elseif prev_line =~ s:rule_rx && prev_line !~ s:rule_special
+ if getline(v:lnum) =~ s:rule_rx && prev_line !~ s:rule_special
return 0
else
return &ts
diff --git a/runtime/indent/testdir/make.in b/runtime/indent/testdir/make.in
@@ -0,0 +1,20 @@
+# vim:ft=make
+# START_INDENT
+.POSIX :
+MAKEFLAGS += -rR
+
+.SUFFIXES: .F .f
+FC = f95
+FFLAGS =
+CPPFLAGS =
+
+.PHONY: help
+help:
+@echo indentation test
+
+.F.f:
+$(FC) $(CPPFLAGS) -E $< > $@
+
+.f.o:
+$(FC) $(FFLAGS) -c -o $@ $<
+# END_INDENT
diff --git a/runtime/indent/testdir/make.ok b/runtime/indent/testdir/make.ok
@@ -0,0 +1,20 @@
+# vim:ft=make
+# START_INDENT
+.POSIX :
+MAKEFLAGS += -rR
+
+.SUFFIXES: .F .f
+FC = f95
+FFLAGS =
+CPPFLAGS =
+
+.PHONY: help
+help:
+ @echo indentation test
+
+.F.f:
+ $(FC) $(CPPFLAGS) -E $< > $@
+
+.f.o:
+ $(FC) $(FFLAGS) -c -o $@ $<
+# END_INDENT