xref: /vim-8.2.3635/runtime/syntax/make.vim (revision 8dff818e)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	Makefile
3071d4279SBram Moolenaar" Maintainer:	Claudio Fleiner <[email protected]>
4071d4279SBram Moolenaar" URL:		http://www.fleiner.com/vim/syntax/make.vim
5*8dff818eSBram Moolenaar" Last Change:	2006 Apr 5
6071d4279SBram Moolenaar
7071d4279SBram Moolenaar" For version 5.x: Clear all syntax items
8071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded
9071d4279SBram Moolenaarif version < 600
10071d4279SBram Moolenaar  syntax clear
11071d4279SBram Moolenaarelseif exists("b:current_syntax")
12071d4279SBram Moolenaar  finish
13071d4279SBram Moolenaarendif
14071d4279SBram Moolenaar
15071d4279SBram Moolenaar" some special characters
16*8dff818eSBram Moolenaarsyn match makeSpecial	"^\s*[@+-]\+"
17071d4279SBram Moolenaarsyn match makeNextLine	"\\\n\s*"
18071d4279SBram Moolenaar
19071d4279SBram Moolenaar" some directives
20*8dff818eSBram Moolenaarsyn match makePreCondit	"^ *\(ifeq\>\|else\>\|endif\>\|ifneq\>\|ifdef\>\|ifndef\>\)"
21*8dff818eSBram Moolenaarsyn match makeInclude	"^ *[-s]\=include"
22*8dff818eSBram Moolenaarsyn match makeStatement	"^ *vpath"
23*8dff818eSBram Moolenaarsyn match makeExport    "^ *\(export\|unexport\)\>"
24*8dff818eSBram Moolenaarsyn match makeOverride	"^ *override"
25071d4279SBram Moolenaarhi link makeOverride makeStatement
26071d4279SBram Moolenaarhi link makeExport makeStatement
27071d4279SBram Moolenaar
28071d4279SBram Moolenaar" Koehler: catch unmatched define/endef keywords.  endef only matches it is by itself on a line
29071d4279SBram Moolenaarsyn region makeDefine start="^\s*define\s" end="^\s*endef\s*$" contains=makeStatement,makeIdent,makePreCondit,makeDefine
30071d4279SBram Moolenaar
31071d4279SBram Moolenaar" Microsoft Makefile specials
32071d4279SBram Moolenaarsyn case ignore
33*8dff818eSBram Moolenaarsyn match makeInclude	"^! *include"
34*8dff818eSBram Moolenaarsyn match makePreCondit "! *\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|elseif\|else if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>"
35071d4279SBram Moolenaarsyn case match
36071d4279SBram Moolenaar
37071d4279SBram Moolenaar" identifiers
38071d4279SBram Moolenaarsyn region makeIdent	start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent,makeSString,makeDString
39071d4279SBram Moolenaarsyn region makeIdent	start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent,makeSString,makeDString
40071d4279SBram Moolenaarsyn match makeIdent	"\$\$\w*"
41071d4279SBram Moolenaarsyn match makeIdent	"\$[^({]"
42*8dff818eSBram Moolenaarsyn match makeIdent	"^ *\a\w*\s*[:+?!*]="me=e-2
43*8dff818eSBram Moolenaarsyn match makeIdent	"^ *\a\w*\s*="me=e-1
44071d4279SBram Moolenaarsyn match makeIdent	"%"
45071d4279SBram Moolenaar
46071d4279SBram Moolenaar" Makefile.in variables
47071d4279SBram Moolenaarsyn match makeConfig "@[A-Za-z0-9_]\+@"
48071d4279SBram Moolenaar
49071d4279SBram Moolenaar" make targets
50071d4279SBram Moolenaar" syn match makeSpecTarget	"^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>"
51071d4279SBram Moolenaarsyn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource
52071d4279SBram Moolenaarsyn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 nextgroup=makeSource
53071d4279SBram Moolenaar
54071d4279SBram Moolenaarsyn region makeTarget	transparent matchgroup=makeTarget start="^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"rs=e-1 end=";"re=e-1,me=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine skipnl nextGroup=makeCommands
55071d4279SBram Moolenaarsyn match makeTarget		"^[A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" contains=makeIdent,makeSpecTarget skipnl nextgroup=makeCommands,makeCommandError
56071d4279SBram Moolenaar
57*8dff818eSBram Moolenaarsyn region makeSpecTarget	transparent matchgroup=makeSpecTarget start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>\s*:\{1,2}[^:=]"rs=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine skipnl nextGroup=makeCommands
58*8dff818eSBram Moolenaarsyn match makeSpecTarget		"^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>\s*::\=\s*$" contains=makeIdent skipnl nextgroup=makeCommands,makeCommandError
59071d4279SBram Moolenaar
60071d4279SBram Moolenaarsyn match makeCommandError "^\s\+\S.*" contained
61071d4279SBram Moolenaarsyn region makeCommands start=";"hs=s+1 start="^\t" end="^[^\t#]"me=e-1,re=e-1 end="^$" contained contains=makeCmdNextLine,makeSpecial,makeComment,makeIdent,makePreCondit,makeDefine,makeDString,makeSString nextgroup=makeCommandError
62071d4279SBram Moolenaarsyn match makeCmdNextLine	"\\\n."he=e-1 contained
63071d4279SBram Moolenaar
64071d4279SBram Moolenaar
65071d4279SBram Moolenaar" Statements / Functions (GNU make)
66071d4279SBram Moolenaarsyn match makeStatement contained "(\(subst\|addprefix\|addsuffix\|basename\|call\|dir\|error\|filter-out\|filter\|findstring\|firstword\|foreach\|if\|join\|notdir\|origin\|patsubst\|shell\|sort\|strip\|suffix\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
67071d4279SBram Moolenaar
68071d4279SBram Moolenaar" Comment
69071d4279SBram Moolenaarif exists("make_microsoft")
70*8dff818eSBram Moolenaar   syn match  makeComment "#.*" contains=makeTodo
71*8dff818eSBram Moolenaarelseif !exists("make_no_comments")
72*8dff818eSBram Moolenaar   syn region  makeComment	start="#" end="^$" end="[^\\]$" keepend contains=makeTodo
73071d4279SBram Moolenaar   syn match   makeComment	"#$"
74071d4279SBram Moolenaarendif
75071d4279SBram Moolenaarsyn keyword makeTodo TODO FIXME XXX contained
76071d4279SBram Moolenaar
77071d4279SBram Moolenaar" match escaped quotes and any other escaped character
78071d4279SBram Moolenaar" except for $, as a backslash in front of a $ does
79071d4279SBram Moolenaar" not make it a standard character, but instead it will
80071d4279SBram Moolenaar" still act as the beginning of a variable
81071d4279SBram Moolenaar" The escaped char is not highlightet currently
82071d4279SBram Moolenaarsyn match makeEscapedChar	"\\[^$]"
83071d4279SBram Moolenaar
84071d4279SBram Moolenaar
85071d4279SBram Moolenaarsyn region  makeDString start=+\(\\\)\@<!"+  skip=+\\.+  end=+"+  contains=makeIdent
86071d4279SBram Moolenaarsyn region  makeSString start=+\(\\\)\@<!'+  skip=+\\.+  end=+'+  contains=makeIdent
87071d4279SBram Moolenaarsyn region  makeBString start=+\(\\\)\@<!`+  skip=+\\.+  end=+`+  contains=makeIdent,makeSString,makeDString,makeNextLine
88071d4279SBram Moolenaar
89071d4279SBram Moolenaar" Syncing
90071d4279SBram Moolenaarsyn sync minlines=20 maxlines=200
91071d4279SBram Moolenaar
92071d4279SBram Moolenaar" Sync on Make command block region: When searching backwards hits a line that
93071d4279SBram Moolenaar" can't be a command or a comment, use makeCommands if it looks like a target,
94071d4279SBram Moolenaar" NONE otherwise.
95071d4279SBram Moolenaarsyn sync match makeCommandSync groupthere NONE "^[^\t#]"
96071d4279SBram Moolenaarsyn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"
97071d4279SBram Moolenaarsyn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}\s*$"
98071d4279SBram Moolenaar
99071d4279SBram Moolenaar" Define the default highlighting.
100071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already
101071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet
102071d4279SBram Moolenaarif version >= 508 || !exists("did_make_syn_inits")
103071d4279SBram Moolenaar  if version < 508
104071d4279SBram Moolenaar    let did_make_syn_inits = 1
105071d4279SBram Moolenaar    command -nargs=+ HiLink hi link <args>
106071d4279SBram Moolenaar  else
107071d4279SBram Moolenaar    command -nargs=+ HiLink hi def link <args>
108071d4279SBram Moolenaar  endif
109071d4279SBram Moolenaar
110071d4279SBram Moolenaar  HiLink makeNextLine		makeSpecial
111071d4279SBram Moolenaar  HiLink makeCmdNextLine	makeSpecial
112071d4279SBram Moolenaar  HiLink makeSpecTarget		Statement
113071d4279SBram Moolenaar  if !exists("make_no_commands")
114071d4279SBram Moolenaar    HiLink makeCommands		Number
115071d4279SBram Moolenaar  endif
116071d4279SBram Moolenaar  HiLink makeImplicit		Function
117071d4279SBram Moolenaar  HiLink makeTarget		Function
118071d4279SBram Moolenaar  HiLink makeInclude		Include
119071d4279SBram Moolenaar  HiLink makePreCondit		PreCondit
120071d4279SBram Moolenaar  HiLink makeStatement		Statement
121071d4279SBram Moolenaar  HiLink makeIdent		Identifier
122071d4279SBram Moolenaar  HiLink makeSpecial		Special
123071d4279SBram Moolenaar  HiLink makeComment		Comment
124071d4279SBram Moolenaar  HiLink makeDString		String
125071d4279SBram Moolenaar  HiLink makeSString		String
126071d4279SBram Moolenaar  HiLink makeBString		Function
127071d4279SBram Moolenaar  HiLink makeError		Error
128071d4279SBram Moolenaar  HiLink makeTodo		Todo
129071d4279SBram Moolenaar  HiLink makeDefine		Define
130071d4279SBram Moolenaar  HiLink makeCommandError	Error
131071d4279SBram Moolenaar  HiLink makeConfig		PreCondit
132071d4279SBram Moolenaar  delcommand HiLink
133071d4279SBram Moolenaarendif
134071d4279SBram Moolenaar
135071d4279SBram Moolenaarlet b:current_syntax = "make"
136071d4279SBram Moolenaar
137071d4279SBram Moolenaar" vim: ts=8
138