mirror of
https://github.com/neovim/neovim.git
synced 2024-09-17 20:58:20 -04:00
vim-patch:150b507: runtime(hcl,terraform): Add runtime files for HCL and Terraform (#30266)
closes: vim/vim#15618
150b5078ac
This commit is contained in:
parent
b6e350a6b4
commit
51088b67cb
40
runtime/autoload/hcl.vim
Normal file
40
runtime/autoload/hcl.vim
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
" Language: HCL
|
||||||
|
" Maintainer: Gregory Anders
|
||||||
|
" Last Change: 2024-09-03
|
||||||
|
" Based on: https://github.com/hashivim/vim-terraform
|
||||||
|
|
||||||
|
function! hcl#indentexpr(lnum)
|
||||||
|
" Beginning of the file should have no indent
|
||||||
|
if a:lnum == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Usual case is to continue at the same indent as the previous non-blank line.
|
||||||
|
let prevlnum = prevnonblank(a:lnum-1)
|
||||||
|
let thisindent = indent(prevlnum)
|
||||||
|
|
||||||
|
" If that previous line is a non-comment ending in [ { (, increase the
|
||||||
|
" indent level.
|
||||||
|
let prevline = getline(prevlnum)
|
||||||
|
if prevline !~# '^\s*\(#\|//\)' && prevline =~# '[\[{\(]\s*$'
|
||||||
|
let thisindent += &shiftwidth
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If the current line ends a block, decrease the indent level.
|
||||||
|
let thisline = getline(a:lnum)
|
||||||
|
if thisline =~# '^\s*[\)}\]]'
|
||||||
|
let thisindent -= &shiftwidth
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If the previous line starts a block comment /*, increase by one
|
||||||
|
if prevline =~# '/\*'
|
||||||
|
let thisindent += 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
" If the previous line ends a block comment */, decrease by one
|
||||||
|
if prevline =~# '\*/'
|
||||||
|
let thisindent -= 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
return thisindent
|
||||||
|
endfunction
|
10
runtime/ftplugin/hcl.vim
Normal file
10
runtime/ftplugin/hcl.vim
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
" Vim filetype plugin
|
||||||
|
" Language: HCL
|
||||||
|
" Maintainer: Gregory Anders
|
||||||
|
" Last Change: 2024-09-03
|
||||||
|
|
||||||
|
if exists('b:did_ftplugin')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! ftplugin/terraform.vim
|
16
runtime/indent/hcl.vim
Normal file
16
runtime/indent/hcl.vim
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
" Vim indent file
|
||||||
|
" Language: HCL
|
||||||
|
" Maintainer: Gregory Anders
|
||||||
|
" Upstream: https://github.com/hashivim/vim-terraform
|
||||||
|
" Last Change: 2024-09-03
|
||||||
|
|
||||||
|
if exists('b:did_indent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let b:did_indent = 1
|
||||||
|
|
||||||
|
setlocal autoindent shiftwidth=2 tabstop=2 softtabstop=2 expandtab
|
||||||
|
setlocal indentexpr=hcl#indentexpr(v:lnum)
|
||||||
|
setlocal indentkeys+=<:>,0=},0=)
|
||||||
|
|
||||||
|
let b:undo_indent = 'setlocal ai< sw< ts< sts< et< inde< indk<'
|
11
runtime/indent/terraform.vim
Normal file
11
runtime/indent/terraform.vim
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
" Vim indent file
|
||||||
|
" Language: Terraform
|
||||||
|
" Maintainer: Gregory Anders
|
||||||
|
" Upstream: https://github.com/hashivim/vim-terraform
|
||||||
|
" Last Change: 2024-09-03
|
||||||
|
|
||||||
|
if exists('b:did_indent')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! indent/hcl.vim
|
66
runtime/syntax/hcl.vim
Normal file
66
runtime/syntax/hcl.vim
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
" 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'
|
17
runtime/syntax/terraform.vim
Normal file
17
runtime/syntax/terraform.vim
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
" Vim syntax file
|
||||||
|
" Language: Terraform
|
||||||
|
" Maintainer: Gregory Anders
|
||||||
|
" Upstream: https://github.com/hashivim/vim-terraform
|
||||||
|
" Last Change: 2024-09-03
|
||||||
|
|
||||||
|
if exists('b:current_syntax')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
runtime! syntax/hcl.vim
|
||||||
|
|
||||||
|
syn keyword terraType string bool number object tuple list map set any
|
||||||
|
|
||||||
|
hi def link terraType Type
|
||||||
|
|
||||||
|
let b:current_syntax = 'terraform'
|
Loading…
Reference in New Issue
Block a user