You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
4.7 KiB
126 lines
4.7 KiB
" Vim syntax file |
|
" Language: Terraform (http://terraform.io) |
|
" Maintainer: Larry Gilbert <larry@L2G.to> |
|
" Last Change: 2014-08-09 |
|
" |
|
" Thanks to OpenLogic for their syntax-highlighting primer |
|
" (http://www.openlogic.com/wazi/bid/188101/Create-Your-Own-Syntax- |
|
" Highlighting-in-Vim) |
|
|
|
" |
|
" ++ jgerry/terraform-vim-folding |
|
" |
|
|
|
if exists("b:current_syntax") |
|
finish |
|
endif |
|
|
|
syn case match |
|
|
|
syn keyword terraSection connection output provider variable |
|
syn keyword terraValueBool true false on off yes no |
|
|
|
""" resource |
|
|
|
" find . -name "resource_*.go" -not -name "resource_*_test.go" -not -name "resource_provider.go" | sed 's/.*\/resource_//; s/\.go$//' |
|
syn keyword terraResourceTypeBI |
|
\ aws_autoscaling_group aws_security_group |
|
\ aws_db_instance aws_subnet |
|
\ aws_db_security_group aws_vpc |
|
\ aws_eip cloudflare_record |
|
\ aws_elb consul_keys |
|
\ aws_instance digitalocean_domain |
|
\ aws_internet_gateway digitalocean_droplet |
|
\ aws_launch_configuration digitalocean_record |
|
\ aws_route53_record dnsimple_record |
|
\ aws_route53_zone heroku_addon |
|
\ aws_route_table heroku_app |
|
\ aws_route_table_association heroku_domain |
|
\ aws_s3_bucket heroku_drain |
|
\ |
|
\ contained |
|
|
|
syn match terraResource /resource/ nextgroup=terraResourceTypeStr skipwhite |
|
syn region terraResourceTypeStr start=/"/ end=/"/ contains=terraResourceTypeBI |
|
\ nextgroup=terraResourceName skipwhite |
|
syn region terraResourceName start=/"/ end=/"/ |
|
\ nextgroup=terraResourceBlock skipwhite |
|
syn region terraResourceBlock start=/{/ end=/}/ fold |
|
\ contains=@terraConfigItem |
|
|
|
""" provider |
|
syn match terraProvider /provider/ nextgroup=terraProviderName skipwhite |
|
syn region terraProviderName start=/"/ end=/"/ nextgroup=terraProviderBlock skipwhite |
|
syn region terraProviderBlock start=/{/ end=/}/ fold contains=@terraConfigItem |
|
|
|
""" misc. |
|
|
|
syn match terraCommentSingle "#.*$" |
|
syn match terraAssignment "\<[a-z][a-z0-9_-]*\>" contained skipwhite |
|
\ nextgroup=terraAssignmentOp |
|
syn match terraAssignmentOp "=" nextgroup=@terraValue skipwhite |
|
syn match terraValueDec "\<[0-9]\+\([kKmMgG]b\?\)\?\>" |
|
syn match terraValueHexaDec "\<0x[0-9a-f]\+\([kKmMgG]b\?\)\?\>" |
|
|
|
syn region terraCommentMulti start=/\/\*/ end=/\*\// |
|
syn region terraValueString start=/"/ end=/"/ contains=terraStringInterp |
|
syn region terraStringInterp matchgroup=terraBrackets start=/\${/ end=/}/ contained |
|
|
|
syn cluster terraConfigItem contains=terraAssignment |
|
syn cluster terraBlock contains=terraProviderBlock,terraResourceBlock |
|
syn cluster terraValue contains=terraValueBool,terraValueDec, |
|
\terraValueHexaDec,terraValueString |
|
|
|
highlight link terraCommentMulti Comment |
|
highlight link terraCommentSingle Comment |
|
highlight link terraAssignment Identifier |
|
highlight link terraAssignmentOp Operator |
|
highlight link terraBrackets Operator |
|
highlight link terraProvider Structure |
|
highlight link terraProviderBlock Delimiter |
|
highlight link terraProviderName String |
|
highlight link terraResource Structure |
|
highlight link terraResourceBlock Delimiter |
|
highlight link terraResourceName String |
|
highlight link terraResourceTypeBI Tag |
|
highlight link terraResourceTypeStr String |
|
highlight link terraSection Structure |
|
highlight link terraStringInterp Identifier |
|
highlight link terraValueBool Boolean |
|
highlight link terraValueDec Number |
|
highlight link terraValueHexaDec Number |
|
highlight link terraValueString String |
|
|
|
function! TerraformFolds() |
|
let thisline = getline(v:lnum) |
|
if match(thisline, '^resource') >= 0 |
|
return ">1" |
|
elseif match(thisline, '^provider') >= 0 |
|
return ">1" |
|
elseif match(thisline, '^module') >= 0 |
|
return ">1" |
|
elseif match(thisline, '^variable') >= 0 |
|
return ">1" |
|
elseif match(thisline, '^output') >= 0 |
|
return ">1" |
|
elseif match(thisline, '^data') >= 0 |
|
return ">1" |
|
elseif match(thisline, '^locals') >= 0 |
|
return ">1" |
|
elseif match(thisline, '^terraform') >= 0 |
|
return ">1" |
|
else |
|
return "=" |
|
endif |
|
endfunction |
|
setlocal foldmethod=expr |
|
setlocal foldexpr=TerraformFolds() |
|
setlocal foldlevel=0 |
|
|
|
function! TerraformFoldText() |
|
let foldsize = (v:foldend-v:foldstart) |
|
return getline(v:foldstart).' ('.foldsize.' lines)' |
|
endfunction |
|
setlocal foldtext=TerraformFoldText() |
|
|
|
let b:current_syntax = "terraform"
|
|
|