blob: 5f6640767f6a3e94762c5af6a3e1e90ba5813442 [file] [log] [blame]
Bram Moolenaar6ee8d892012-01-10 14:55:01 +01001" ninja build file syntax.
2" Language: ninja build file as described at
3" http://martine.github.com/ninja/manual.html
Bram Moolenaar30b65812012-07-12 22:01:11 +02004" Version: 1.2
5" Last Change: 2012/06/01
Bram Moolenaar6ee8d892012-01-10 14:55:01 +01006" Maintainer: Nicolas Weber <nicolasweber@gmx.de>
7
8" ninja lexer and parser are at
9" https://github.com/martine/ninja/blob/master/src/lexer.in.cc
10" https://github.com/martine/ninja/blob/master/src/parsers.cc
11
12if exists("b:current_syntax")
13 finish
14endif
15
16syn case match
17
Bram Moolenaar30b65812012-07-12 22:01:11 +020018syn match ninjaComment /#.*/ contains=@Spell
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +020019
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010020" Toplevel statements are the ones listed here and
21" toplevel variable assignments (ident '=' value).
22" lexer.in.cc, ReadToken() and parsers.cc, Parse()
23syn match ninjaKeyword "^build\>"
24syn match ninjaKeyword "^rule\>"
25syn match ninjaKeyword "^default\>"
26syn match ninjaKeyword "^include\>"
27syn match ninjaKeyword "^subninja\>"
28
29" Both 'build' and 'rule' begin a variable scope that ends
30" on the first line without indent. 'rule' allows only a
31" limited set of magic variables, 'build' allows general
32" let assignments.
33" parsers.cc, ParseRule()
34syn region ninjaRule start="^rule" end="^\ze\S" contains=ALL transparent
35syn keyword ninjaRuleCommand contained command depfile description generator restat
36
37" Strings are parsed as follows:
38" lexer.in.cc, ReadEvalString()
39" simple_varname = [a-zA-Z0-9_-]+;
40" varname = [a-zA-Z0-9_.-]+;
41" $$ -> $
42" $\n -> line continuation
43" '$ ' -> escaped space
44" $simple_varname -> variable
45" ${varname} -> variable
46
47syn match ninjaWrapLineOperator "\$$"
48syn match ninjaSimpleVar "\$[a-zA-Z0-9_-]\+"
49syn match ninjaVar "\${[a-zA-Z0-9_.-]\+}"
50
51" operators are:
52" variable assignment =
53" rule definition :
54" implicit dependency |
55" order-only dependency ||
56syn match ninjaOperator "\(=\|:\||\|||\)\ze\s"
57
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +020058hi def link ninjaComment Comment
Bram Moolenaar6ee8d892012-01-10 14:55:01 +010059hi def link ninjaKeyword Keyword
60hi def link ninjaRuleCommand Statement
61hi def link ninjaWrapLineOperator ninjaOperator
62hi def link ninjaOperator Operator
63hi def link ninjaSimpleVar ninjaVar
64hi def link ninjaVar Identifier
65
66let b:current_syntax = "ninja"