xref: /vim-8.2.3635/runtime/syntax/make.vim (revision cb03397a)
1" Vim syntax file
2" Language:	Makefile
3" Maintainer:	Claudio Fleiner <[email protected]>
4" URL:		http://www.fleiner.com/vim/syntax/make.vim
5" Last Change:	2015 Feb 28
6
7" For version 5.x: Clear all syntax items
8" For version 6.x: Quit when a syntax file was already loaded
9if version < 600
10  syntax clear
11elseif exists("b:current_syntax")
12  finish
13endif
14
15let s:cpo_save = &cpo
16set cpo&vim
17
18
19" some special characters
20syn match makeSpecial	"^\s*[@+-]\+"
21syn match makeNextLine	"\\\n\s*"
22
23" some directives
24syn match makePreCondit	"^ *\(ifeq\>\|else\>\|endif\>\|ifneq\>\|ifdef\>\|ifndef\>\)"
25syn match makeInclude	"^ *[-s]\=include"
26syn match makeStatement	"^ *vpath"
27syn match makeExport    "^ *\(export\|unexport\)\>"
28syn match makeOverride	"^ *override"
29hi link makeOverride makeStatement
30hi link makeExport makeStatement
31
32" catch unmatched define/endef keywords.  endef only matches it is by itself on a line, possibly followed by a commend
33syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$" contains=makeStatement,makeIdent,makePreCondit,makeDefine
34
35" Microsoft Makefile specials
36syn case ignore
37syn match makeInclude	"^! *include"
38syn match makePreCondit "! *\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|elseif\|else if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>"
39syn case match
40
41" identifiers
42syn region makeIdent	start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent,makeSString,makeDString
43syn region makeIdent	start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent,makeSString,makeDString
44syn match makeIdent	"\$\$\w*"
45syn match makeIdent	"\$[^({]"
46syn match makeIdent	"^ *[^:#= \t]*\s*[:+?!*]="me=e-2
47syn match makeIdent	"^ *[^:#= \t]*\s*="me=e-1
48syn match makeIdent	"%"
49
50" Makefile.in variables
51syn match makeConfig "@[A-Za-z0-9_]\+@"
52
53" make targets
54" syn match makeSpecTarget	"^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>"
55syn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 nextgroup=makeSource
56syn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource
57
58syn 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,makeComment skipnl nextGroup=makeCommands
59syn match makeTarget		"^[~A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" contains=makeIdent,makeSpecTarget,makeComment skipnl nextgroup=makeCommands,makeCommandError
60
61syn 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,makeComment skipnl nextGroup=makeCommands
62syn 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,makeComment skipnl nextgroup=makeCommands,makeCommandError
63
64syn match makeCommandError "^\s\+\S.*" contained
65syn 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
66syn match makeCmdNextLine	"\\\n."he=e-1 contained
67
68
69" Statements / Functions (GNU make)
70syn match makeStatement contained "(\(subst\|abspath\|addprefix\|addsuffix\|and\|basename\|call\|dir\|error\|eval\|filter-out\|filter\|findstring\|firstword\|flavor\|foreach\|if\|info\|join\|lastword\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
71
72" Comment
73if exists("make_microsoft")
74   syn match  makeComment "#.*" contains=@Spell,makeTodo
75elseif !exists("make_no_comments")
76   syn region  makeComment	start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo
77   syn match   makeComment	"#$" contains=@Spell
78endif
79syn keyword makeTodo TODO FIXME XXX contained
80
81" match escaped quotes and any other escaped character
82" except for $, as a backslash in front of a $ does
83" not make it a standard character, but instead it will
84" still act as the beginning of a variable
85" The escaped char is not highlightet currently
86syn match makeEscapedChar	"\\[^$]"
87
88
89syn region  makeDString start=+\(\\\)\@<!"+  skip=+\\.+  end=+"+  contains=makeIdent
90syn region  makeSString start=+\(\\\)\@<!'+  skip=+\\.+  end=+'+  contains=makeIdent
91syn region  makeBString start=+\(\\\)\@<!`+  skip=+\\.+  end=+`+  contains=makeIdent,makeSString,makeDString,makeNextLine
92
93" Syncing
94syn sync minlines=20 maxlines=200
95
96" Sync on Make command block region: When searching backwards hits a line that
97" can't be a command or a comment, use makeCommands if it looks like a target,
98" NONE otherwise.
99syn sync match makeCommandSync groupthere NONE "^[^\t#]"
100syn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"
101syn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}\s*$"
102
103" Define the default highlighting.
104" For version 5.7 and earlier: only when not done already
105" For version 5.8 and later: only when an item doesn't have highlighting yet
106if version >= 508 || !exists("did_make_syn_inits")
107  if version < 508
108    let did_make_syn_inits = 1
109    command -nargs=+ HiLink hi link <args>
110  else
111    command -nargs=+ HiLink hi def link <args>
112  endif
113
114  HiLink makeNextLine		makeSpecial
115  HiLink makeCmdNextLine	makeSpecial
116  HiLink makeSpecTarget		Statement
117  if !exists("make_no_commands")
118    HiLink makeCommands		Number
119  endif
120  HiLink makeImplicit		Function
121  HiLink makeTarget		Function
122  HiLink makeInclude		Include
123  HiLink makePreCondit		PreCondit
124  HiLink makeStatement		Statement
125  HiLink makeIdent		Identifier
126  HiLink makeSpecial		Special
127  HiLink makeComment		Comment
128  HiLink makeDString		String
129  HiLink makeSString		String
130  HiLink makeBString		Function
131  HiLink makeError		Error
132  HiLink makeTodo		Todo
133  HiLink makeDefine		Define
134  HiLink makeCommandError	Error
135  HiLink makeConfig		PreCondit
136  delcommand HiLink
137endif
138
139let b:current_syntax = "make"
140
141let &cpo = s:cpo_save
142unlet s:cpo_save
143" vim: ts=8
144