diff --git a/runtime/indent/make.vim b/runtime/indent/make.vim index 4d1838b3aa..aeea4de741 100644 --- a/runtime/indent/make.vim +++ b/runtime/indent/make.vim @@ -3,6 +3,7 @@ " Maintainer: Doug Kearns " Previous Maintainer: Nikolai Weibull " 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 new file mode 100644 index 0000000000..e9b2781bb7 --- /dev/null +++ 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 new file mode 100644 index 0000000000..3205540088 --- /dev/null +++ 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