xref: /vim-8.2.3635/runtime/syntax/ninja.vim (revision cf2d8dee)
1" ninja build file syntax.
2" Language: ninja build file as described at
3"           http://martine.github.com/ninja/manual.html
4" Version: 1.4
5" Last Change: 2014/05/13
6" Maintainer: Nicolas Weber <[email protected]>
7" Version 1.4 of this script is in the upstream vim repository and will be
8" included in the next vim release. If you change this, please send your change
9" upstream.
10
11" ninja lexer and parser are at
12" https://github.com/martine/ninja/blob/master/src/lexer.in.cc
13" https://github.com/martine/ninja/blob/master/src/manifest_parser.cc
14
15if exists("b:current_syntax")
16  finish
17endif
18
19let s:cpo_save = &cpo
20set cpo&vim
21
22syn case match
23
24syn match ninjaComment /#.*/  contains=@Spell
25
26" Toplevel statements are the ones listed here and
27" toplevel variable assignments (ident '=' value).
28" lexer.in.cc, ReadToken() and manifest_parser.cc, Parse()
29syn match ninjaKeyword "^build\>"
30syn match ninjaKeyword "^rule\>"
31syn match ninjaKeyword "^pool\>"
32syn match ninjaKeyword "^default\>"
33syn match ninjaKeyword "^include\>"
34syn match ninjaKeyword "^subninja\>"
35
36" Both 'build' and 'rule' begin a variable scope that ends
37" on the first line without indent. 'rule' allows only a
38" limited set of magic variables, 'build' allows general
39" let assignments.
40" manifest_parser.cc, ParseRule()
41syn region ninjaRule start="^rule" end="^\ze\S" contains=ALL transparent
42syn keyword ninjaRuleCommand contained command deps depfile description generator
43                                     \ pool restat rspfile rspfile_content
44
45syn region ninjaPool start="^pool" end="^\ze\S" contains=ALL transparent
46syn keyword ninjaPoolCommand contained depth
47
48" Strings are parsed as follows:
49" lexer.in.cc, ReadEvalString()
50" simple_varname = [a-zA-Z0-9_-]+;
51" varname = [a-zA-Z0-9_.-]+;
52" $$ -> $
53" $\n -> line continuation
54" '$ ' -> escaped space
55" $simple_varname -> variable
56" ${varname} -> variable
57
58syn match   ninjaDollar "\$\$"
59syn match   ninjaWrapLineOperator "\$$"
60syn match   ninjaSimpleVar "\$[a-zA-Z0-9_-]\+"
61syn match   ninjaVar       "\${[a-zA-Z0-9_.-]\+}"
62
63" operators are:
64" variable assignment =
65" rule definition :
66" implicit dependency |
67" order-only dependency ||
68syn match ninjaOperator "\(=\|:\||\|||\)\ze\s"
69
70hi def link ninjaComment Comment
71hi def link ninjaKeyword Keyword
72hi def link ninjaRuleCommand Statement
73hi def link ninjaPoolCommand Statement
74hi def link ninjaDollar ninjaOperator
75hi def link ninjaWrapLineOperator ninjaOperator
76hi def link ninjaOperator Operator
77hi def link ninjaSimpleVar ninjaVar
78hi def link ninjaVar Identifier
79
80let b:current_syntax = "ninja"
81
82let &cpo = s:cpo_save
83unlet s:cpo_save
84