mirror of
				https://github.com/vim/vim.git
				synced 2025-10-31 09:57:14 -04:00 
			
		
		
		
	
		
			
	
	
		
			67 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:    HCL | ||
|  | " Maintainer:  Gregory Anders | ||
|  | " Upstream:    https://github.com/hashivim/vim-terraform | ||
|  | " Last Change: 2024-09-03 | ||
|  | 
 | ||
|  | if exists('b:current_syntax') | ||
|  |   finish | ||
|  | endif | ||
|  | 
 | ||
|  | syn iskeyword a-z,A-Z,48-57,_,- | ||
|  | 
 | ||
|  | syn case match | ||
|  | 
 | ||
|  | " A block is introduced by a type, some number of labels - which are either | ||
|  | " strings or identifiers - and an opening curly brace.  Match the type. | ||
|  | syn match hclBlockType /^\s*\zs\K\k*\ze\s\+\(\("\K\k*"\|\K\k*\)\s\+\)*{/ | ||
|  | 
 | ||
|  | " An attribute name is an identifier followed by an equals sign. | ||
|  | syn match hclAttributeAssignment /\(\K\k*\.\)*\K\k*\s\+=\s/ contains=hclAttributeName | ||
|  | syn match hclAttributeName /\<\K\k*\>/ contained | ||
|  | 
 | ||
|  | syn keyword hclValueBool true false | ||
|  | 
 | ||
|  | syn keyword hclTodo         contained TODO FIXME XXX BUG | ||
|  | syn region  hclComment      start="/\*" end="\*/" contains=hclTodo,@Spell | ||
|  | syn region  hclComment      start="#" end="$" contains=hclTodo,@Spell | ||
|  | syn region  hclComment      start="//" end="$" contains=hclTodo,@Spell | ||
|  | 
 | ||
|  | """ misc. | ||
|  | syn match hclValueDec      "\<[0-9]\+\([kKmMgG]b\?\)\?\>" | ||
|  | syn match hclValueHexaDec  "\<0x[0-9a-f]\+\([kKmMgG]b\?\)\?\>" | ||
|  | syn match hclBraces        "[\[\]]" | ||
|  | 
 | ||
|  | """ skip \" and \\ in strings. | ||
|  | syn region hclValueString   start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=hclStringInterp | ||
|  | syn region hclStringInterp  matchgroup=hclBraces start=/\(^\|[^$]\)\$\zs{/ end=/}/ contained contains=ALLBUT,hclAttributeName | ||
|  | syn region hclHereDocText   start=/<<-\?\z([a-z0-9A-Z]\+\)/ end=/^\s*\z1/ contains=hclStringInterp | ||
|  | 
 | ||
|  | "" Functions. | ||
|  | syn match hclFunction "[a-z0-9]\+(\@=" | ||
|  | 
 | ||
|  | """ HCL2 | ||
|  | syn keyword hclRepeat         for in | ||
|  | syn keyword hclConditional    if | ||
|  | syn keyword hclValueNull      null | ||
|  | 
 | ||
|  | " enable block folding | ||
|  | syn region hclBlockBody matchgroup=hclBraces start="{" end="}" fold transparent | ||
|  | 
 | ||
|  | hi def link hclComment           Comment | ||
|  | hi def link hclTodo              Todo | ||
|  | hi def link hclBraces            Delimiter | ||
|  | hi def link hclAttributeName     Identifier | ||
|  | hi def link hclBlockType         Type | ||
|  | hi def link hclValueBool         Boolean | ||
|  | hi def link hclValueDec          Number | ||
|  | hi def link hclValueHexaDec      Number | ||
|  | hi def link hclValueString       String | ||
|  | hi def link hclHereDocText       String | ||
|  | hi def link hclFunction          Function | ||
|  | hi def link hclRepeat            Repeat | ||
|  | hi def link hclConditional       Conditional | ||
|  | hi def link hclValueNull         Constant | ||
|  | 
 | ||
|  | let b:current_syntax = 'hcl' |