neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

ninja.vim (2889B)


      1 " ninja build file syntax.
      2 " Language: ninja build file as described at
      3 "           http://ninja-build.org/manual.html
      4 " Version: 1.5
      5 " Last Change: 2018/04/05
      6 " Maintainer: Nicolas Weber <nicolasweber@gmx.de>
      7 " Version 1.5 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/ninja-build/ninja/blob/master/src/lexer.in.cc
     13 " https://github.com/ninja-build/ninja/blob/master/src/manifest_parser.cc
     14 
     15 if exists("b:current_syntax")
     16  finish
     17 endif
     18 
     19 let s:cpo_save = &cpo
     20 set cpo&vim
     21 
     22 syn case match
     23 
     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
     28 
     29 " Toplevel statements are the ones listed here and
     30 " toplevel variable assignments (ident '=' value).
     31 " lexer.in.cc, ReadToken() and manifest_parser.cc, Parse()
     32 syn match ninjaKeyword "^build\>"
     33 syn match ninjaKeyword "^rule\>"
     34 syn match ninjaKeyword "^pool\>"
     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.
     43 " manifest_parser.cc, ParseRule()
     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
     47                                     \ pool restat rspfile rspfile_content
     48 
     49 syn region ninjaPool start="^pool" end="^\ze\S" contains=TOP transparent
     50 syn keyword ninjaPoolCommand contained containedin=ninjaPool  depth
     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 
     62 syn match   ninjaDollar "\$\$"
     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 
     74 hi def link ninjaComment Comment
     75 hi def link ninjaKeyword Keyword
     76 hi def link ninjaRuleCommand Statement
     77 hi def link ninjaPoolCommand Statement
     78 hi def link ninjaDollar ninjaOperator
     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"
     85 
     86 let &cpo = s:cpo_save
     87 unlet s:cpo_save