| 
									
										
										
										
											2024-09-04 22:19:45 +02:00
										 |  |  | " Vim syntax file | 
					
						
							|  |  |  | " Language:    HCL | 
					
						
							|  |  |  | " Maintainer:  Gregory Anders | 
					
						
							|  |  |  | " Upstream:    https://github.com/hashivim/vim-terraform | 
					
						
							|  |  |  | " Last Change: 2024-09-03 | 
					
						
							| 
									
										
										
										
											2025-05-25 17:01:45 +02:00
										 |  |  | " License:     ISC | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " Copyright (c) 2014-2016 Mark Cornick <mark@markcornick.com> | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " Permission to use, copy, modify, and/or distribute this software for any purpose | 
					
						
							|  |  |  | " with or without fee is hereby granted, provided that the above copyright notice | 
					
						
							|  |  |  | " and this permission notice appear in all copies. | 
					
						
							|  |  |  | " | 
					
						
							|  |  |  | " THE SOFTWARE IS PROVIDED 'AS IS' AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH | 
					
						
							|  |  |  | " REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND | 
					
						
							|  |  |  | " FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, | 
					
						
							|  |  |  | " INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS | 
					
						
							|  |  |  | " OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER | 
					
						
							|  |  |  | " TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF | 
					
						
							|  |  |  | " THIS SOFTWARE. | 
					
						
							| 
									
										
										
										
											2024-09-04 22:19:45 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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' |