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