xref: /vim-8.2.3635/runtime/syntax/ninja.vim (revision 51ad4eaa)
16ee8d89cSBram Moolenaar" ninja build file syntax.
26ee8d89cSBram Moolenaar" Language: ninja build file as described at
3*51ad4eaaSBram Moolenaar"           http://ninja-build.org/manual.html
4*51ad4eaaSBram Moolenaar" Version: 1.5
5*51ad4eaaSBram Moolenaar" Last Change: 2018/04/05
66ee8d89cSBram Moolenaar" Maintainer: Nicolas Weber <[email protected]>
7*51ad4eaaSBram Moolenaar" Version 1.5 of this script is in the upstream vim repository and will be
8ff034194SBram Moolenaar" included in the next vim release. If you change this, please send your change
9ff034194SBram Moolenaar" upstream.
106ee8d89cSBram Moolenaar
116ee8d89cSBram Moolenaar" ninja lexer and parser are at
12*51ad4eaaSBram Moolenaar" https://github.com/ninja-build/ninja/blob/master/src/lexer.in.cc
13*51ad4eaaSBram Moolenaar" https://github.com/ninja-build/ninja/blob/master/src/manifest_parser.cc
146ee8d89cSBram Moolenaar
156ee8d89cSBram Moolenaarif exists("b:current_syntax")
166ee8d89cSBram Moolenaar  finish
176ee8d89cSBram Moolenaarendif
186ee8d89cSBram Moolenaar
19ff034194SBram Moolenaarlet s:cpo_save = &cpo
20ff034194SBram Moolenaarset cpo&vim
21ff034194SBram Moolenaar
226ee8d89cSBram Moolenaarsyn case match
236ee8d89cSBram Moolenaar
24*51ad4eaaSBram Moolenaar" Comments are only matched when the # is at the beginning of the line (with
25*51ad4eaaSBram Moolenaar" optional whitespace), as long as the prior line didn't end with a $
26*51ad4eaaSBram Moolenaar" continuation.
27*51ad4eaaSBram Moolenaarsyn match ninjaComment /\(\$\n\)\@<!\_^\s*#.*$/  contains=@Spell
281aeaf8c0SBram Moolenaar
296ee8d89cSBram Moolenaar" Toplevel statements are the ones listed here and
306ee8d89cSBram Moolenaar" toplevel variable assignments (ident '=' value).
310187ca0bSBram Moolenaar" lexer.in.cc, ReadToken() and manifest_parser.cc, Parse()
326ee8d89cSBram Moolenaarsyn match ninjaKeyword "^build\>"
336ee8d89cSBram Moolenaarsyn match ninjaKeyword "^rule\>"
340187ca0bSBram Moolenaarsyn match ninjaKeyword "^pool\>"
356ee8d89cSBram Moolenaarsyn match ninjaKeyword "^default\>"
366ee8d89cSBram Moolenaarsyn match ninjaKeyword "^include\>"
376ee8d89cSBram Moolenaarsyn match ninjaKeyword "^subninja\>"
386ee8d89cSBram Moolenaar
396ee8d89cSBram Moolenaar" Both 'build' and 'rule' begin a variable scope that ends
406ee8d89cSBram Moolenaar" on the first line without indent. 'rule' allows only a
416ee8d89cSBram Moolenaar" limited set of magic variables, 'build' allows general
426ee8d89cSBram Moolenaar" let assignments.
430187ca0bSBram Moolenaar" manifest_parser.cc, ParseRule()
44*51ad4eaaSBram Moolenaarsyn region ninjaRule start="^rule" end="^\ze\S" contains=TOP transparent
45*51ad4eaaSBram Moolenaarsyn keyword ninjaRuleCommand contained containedin=ninjaRule command
46*51ad4eaaSBram Moolenaar                                     \ deps depfile description generator
47ff034194SBram Moolenaar                                     \ pool restat rspfile rspfile_content
480187ca0bSBram Moolenaar
49*51ad4eaaSBram Moolenaarsyn region ninjaPool start="^pool" end="^\ze\S" contains=TOP transparent
50*51ad4eaaSBram Moolenaarsyn keyword ninjaPoolCommand contained containedin=ninjaPool  depth
516ee8d89cSBram Moolenaar
526ee8d89cSBram Moolenaar" Strings are parsed as follows:
536ee8d89cSBram Moolenaar" lexer.in.cc, ReadEvalString()
546ee8d89cSBram Moolenaar" simple_varname = [a-zA-Z0-9_-]+;
556ee8d89cSBram Moolenaar" varname = [a-zA-Z0-9_.-]+;
566ee8d89cSBram Moolenaar" $$ -> $
576ee8d89cSBram Moolenaar" $\n -> line continuation
586ee8d89cSBram Moolenaar" '$ ' -> escaped space
596ee8d89cSBram Moolenaar" $simple_varname -> variable
606ee8d89cSBram Moolenaar" ${varname} -> variable
616ee8d89cSBram Moolenaar
62822ff866SBram Moolenaarsyn match   ninjaDollar "\$\$"
636ee8d89cSBram Moolenaarsyn match   ninjaWrapLineOperator "\$$"
646ee8d89cSBram Moolenaarsyn match   ninjaSimpleVar "\$[a-zA-Z0-9_-]\+"
656ee8d89cSBram Moolenaarsyn match   ninjaVar       "\${[a-zA-Z0-9_.-]\+}"
666ee8d89cSBram Moolenaar
676ee8d89cSBram Moolenaar" operators are:
686ee8d89cSBram Moolenaar" variable assignment =
696ee8d89cSBram Moolenaar" rule definition :
706ee8d89cSBram Moolenaar" implicit dependency |
716ee8d89cSBram Moolenaar" order-only dependency ||
726ee8d89cSBram Moolenaarsyn match ninjaOperator "\(=\|:\||\|||\)\ze\s"
736ee8d89cSBram Moolenaar
741aeaf8c0SBram Moolenaarhi def link ninjaComment Comment
756ee8d89cSBram Moolenaarhi def link ninjaKeyword Keyword
766ee8d89cSBram Moolenaarhi def link ninjaRuleCommand Statement
770187ca0bSBram Moolenaarhi def link ninjaPoolCommand Statement
78822ff866SBram Moolenaarhi def link ninjaDollar ninjaOperator
796ee8d89cSBram Moolenaarhi def link ninjaWrapLineOperator ninjaOperator
806ee8d89cSBram Moolenaarhi def link ninjaOperator Operator
816ee8d89cSBram Moolenaarhi def link ninjaSimpleVar ninjaVar
826ee8d89cSBram Moolenaarhi def link ninjaVar Identifier
836ee8d89cSBram Moolenaar
846ee8d89cSBram Moolenaarlet b:current_syntax = "ninja"
85ff034194SBram Moolenaar
86ff034194SBram Moolenaarlet &cpo = s:cpo_save
87ff034194SBram Moolenaarunlet s:cpo_save
88