forked from aniani/vim
patch 9.1.0616: filetype: Make syntax highlighting off for MS Makefiles
Problem: filetype: Make syntax highlighting off for MS Makefiles
Solution: Try to detect MS Makefiles and adjust syntax rules to it.
(Ken Takata)
Highlighting of variable expansion in Microsoft Makefile can be broken.
E.g.:
2979cfc262/src/Make_mvc.mak (L1331)
Don't use backslash as escape characters if `make_microsoft` is set.
Also fix that `make_no_comments` was not considered if `make_microsoft`
was set.
Also add description for `make_microsoft` and `make_no_comments` to the
documentation and include a very simple filetype test
closes: #15341
Signed-off-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Ken Takata <kentkt@csc.jp>
This commit is contained in:
parent
242667ae14
commit
eb4b903c9b
19
runtime/autoload/dist/ft.vim
vendored
19
runtime/autoload/dist/ft.vim
vendored
@ -532,6 +532,25 @@ export def FTm()
|
|||||||
endif
|
endif
|
||||||
enddef
|
enddef
|
||||||
|
|
||||||
|
export def FTmake()
|
||||||
|
# Check if it is a Microsoft Makefile
|
||||||
|
unlet! b:make_microsoft
|
||||||
|
var n = 1
|
||||||
|
while n < 1000 && n <= line('$')
|
||||||
|
var line = getline(n)
|
||||||
|
if line =~? '^\s*!\s*\(ifn\=\(def\)\=\|include\|message\|error\)\>'
|
||||||
|
b:make_microsoft = 1
|
||||||
|
break
|
||||||
|
elseif line =~ '^ *ifn\=\(eq\|def\)\>' || line =~ '^ *[-s]\=include\s'
|
||||||
|
break
|
||||||
|
elseif line =~ '^ *\w\+\s*[!?:+]='
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
n += 1
|
||||||
|
endwhile
|
||||||
|
setf make
|
||||||
|
enddef
|
||||||
|
|
||||||
export def FTmms()
|
export def FTmms()
|
||||||
var n = 1
|
var n = 1
|
||||||
while n < 20
|
while n < 20
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
*syntax.txt* For Vim version 9.1. Last change: 2024 Jul 23
|
*syntax.txt* For Vim version 9.1. Last change: 2024 Jul 25
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
@ -2289,6 +2289,16 @@ feature off by using: >
|
|||||||
|
|
||||||
:let make_no_commands = 1
|
:let make_no_commands = 1
|
||||||
|
|
||||||
|
Comments are also highlighted by default. You can turn this off by using: >
|
||||||
|
|
||||||
|
:let make_no_comments = 1
|
||||||
|
|
||||||
|
Microsoft Makefile handles variable expansion and comments differently
|
||||||
|
(backslashes are not used for escape). If you see any wrong highlights
|
||||||
|
because of this, you can try this: >
|
||||||
|
|
||||||
|
:let make_microsoft = 1
|
||||||
|
|
||||||
|
|
||||||
MAPLE *maple.vim* *ft-maple-syntax*
|
MAPLE *maple.vim* *ft-maple-syntax*
|
||||||
|
|
||||||
|
@ -1387,7 +1387,7 @@ au BufNewFile,BufRead */etc/mail/aliases,*/etc/aliases setf mailaliases
|
|||||||
au BufNewFile,BufRead .mailcap,mailcap setf mailcap
|
au BufNewFile,BufRead .mailcap,mailcap setf mailcap
|
||||||
|
|
||||||
" Makefile
|
" Makefile
|
||||||
au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak setf make
|
au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak call dist#ft#FTmake()
|
||||||
au BufNewFile,BufRead Kbuild setf make
|
au BufNewFile,BufRead Kbuild setf make
|
||||||
|
|
||||||
" MakeIndex
|
" MakeIndex
|
||||||
|
@ -28,8 +28,13 @@ syn match makePreCondit "^!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\
|
|||||||
syn case match
|
syn case match
|
||||||
|
|
||||||
" identifiers
|
" identifiers
|
||||||
|
if exists("b:make_microsoft") || exists("make_microsoft")
|
||||||
|
syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent
|
||||||
|
syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent
|
||||||
|
else
|
||||||
syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent
|
syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent
|
||||||
syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent
|
syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent
|
||||||
|
endif
|
||||||
syn match makeIdent "\$\$\w*"
|
syn match makeIdent "\$\$\w*"
|
||||||
syn match makeIdent "\$[^({]"
|
syn match makeIdent "\$[^({]"
|
||||||
syn match makeIdent "^ *[^:#= \t]*\s*[:+?!*]="me=e-2
|
syn match makeIdent "^ *[^:#= \t]*\s*[:+?!*]="me=e-2
|
||||||
@ -78,12 +83,14 @@ syn match makeOverride "^ *override\>"
|
|||||||
syn match makeStatement contained "(\(abspath\|addprefix\|addsuffix\|and\|basename\|call\|dir\|error\|eval\|file\|filter-out\|filter\|findstring\|firstword\|flavor\|foreach\|guile\|if\|info\|join\|lastword\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|subst\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
|
syn match makeStatement contained "(\(abspath\|addprefix\|addsuffix\|and\|basename\|call\|dir\|error\|eval\|file\|filter-out\|filter\|findstring\|firstword\|flavor\|foreach\|guile\|if\|info\|join\|lastword\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|subst\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
|
||||||
|
|
||||||
" Comment
|
" Comment
|
||||||
if exists("make_microsoft")
|
if !exists("make_no_comments")
|
||||||
|
if exists("b:make_microsoft") || exists("make_microsoft")
|
||||||
syn match makeComment "#.*" contains=@Spell,makeTodo
|
syn match makeComment "#.*" contains=@Spell,makeTodo
|
||||||
elseif !exists("make_no_comments")
|
else
|
||||||
syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo
|
syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo
|
||||||
syn match makeComment "#$" contains=@Spell
|
syn match makeComment "#$" contains=@Spell
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
syn keyword makeTodo TODO FIXME XXX contained
|
syn keyword makeTodo TODO FIXME XXX contained
|
||||||
|
|
||||||
" match escaped quotes and any other escaped character
|
" match escaped quotes and any other escaped character
|
||||||
|
@ -2646,4 +2646,21 @@ func Test_pl_file()
|
|||||||
filetype off
|
filetype off
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_make_file()
|
||||||
|
filetype on
|
||||||
|
|
||||||
|
" Microsoft Makefile
|
||||||
|
call writefile(['# Makefile for Windows', '!if "$(VIMDLL)" == "yes"'], 'XMakefile.mak', 'D')
|
||||||
|
split XMakefile.mak
|
||||||
|
call assert_equal(1, get(b:, 'make_microsoft', 0))
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
call writefile(['# get the list of tests', 'include testdir/Make_all.mak'], 'XMakefile.mak', 'D')
|
||||||
|
split XMakefile.mak
|
||||||
|
call assert_equal(0, get(b:, 'make_microsoft', 0))
|
||||||
|
bwipe!
|
||||||
|
|
||||||
|
filetype off
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
616,
|
||||||
/**/
|
/**/
|
||||||
615,
|
615,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user