runtime(hcl,terraform): Add runtime files for HCL and Terraform

Commit: 
https://github.com/vim/vim/commit/150b5078ac886519083576124090489c3a21bd3b
Author: Gregory Anders <g...@gpanders.com>
Date:   Wed Sep 4 22:19:45 2024 +0200

    runtime(hcl,terraform): Add runtime files for HCL and Terraform
    
    closes: https://github.com/vim/vim/issues/15618
    
    Signed-off-by: Gregory Anders <g...@gpanders.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS
index 9c2923fc3..9cb50fe96 100644
--- a/.github/MAINTAINERS
+++ b/.github/MAINTAINERS
@@ -13,6 +13,7 @@ nsis/lang/russian.nsi                 @RestorerZ
 runtime/autoload/freebasic.vim         @dkearns
 runtime/autoload/hare.vim              @selenebun
 runtime/autoload/haskell.vim           @alx741
+runtime/autoload/hcl.vim               @gpanders
 runtime/autoload/javascript.vim                @jsit
 runtime/autoload/modula2.vim           @dkearns
 runtime/autoload/php.vim               @david-szabo97
@@ -170,6 +171,7 @@ runtime/ftplugin/haml.vim           @tpope
 runtime/ftplugin/hare.vim              @selenebun
 runtime/ftplugin/haredoc.vim           @selenebun
 runtime/ftplugin/heex.vim              @cvincent
+runtime/ftplugin/hcl.vim               @gpanders
 runtime/ftplugin/hgcommit.vim          @k-takata
 runtime/ftplugin/hlsplaylist.vim               @avidseeker
 runtime/ftplugin/hog.vim               @wtfbbqhax
@@ -316,6 +318,7 @@ runtime/indent/go.vim                       @dbarnett
 runtime/indent/gyp.vim                 @ObserverOfTime
 runtime/indent/haml.vim                        @tpope
 runtime/indent/hare.vim                        @selenebun
+runtime/indent/hcl.vim                 @gpanders
 runtime/indent/hog.vim                 @wtfbbqhax
 runtime/indent/idlang.vim              @dkearns
 runtime/indent/j.vim                   @glts
@@ -360,6 +363,7 @@ runtime/indent/systemverilog.vim    @Kocha
 runtime/indent/tcl.vim                 @dkearns
 runtime/indent/tcsh.vim                        @dkearns
 runtime/indent/teraterm.vim            @k-takata
+runtime/indent/terraform.vim           @gpanders.com
 runtime/indent/thrift.vim              @jiangyinzuo
 runtime/indent/typescript.vim          @HerringtonDarkholme
 runtime/indent/typst.vim               @gpanders
@@ -459,6 +463,7 @@ runtime/syntax/haml.vim                     @tpope
 runtime/syntax/hare.vim                        @selenebun
 runtime/syntax/haredoc.vim             @selenebun
 runtime/syntax/haskell.vim             @coot
+runtime/syntax/hcl.vim                 @gpanders
 runtime/syntax/help_ru.vim             @RestorerZ
 runtime/syntax/hgcommit.vim            @k-takata
 runtime/syntax/hitest.vim              @lacygoill
@@ -566,6 +571,7 @@ runtime/syntax/systemverilog.vim    @Kocha
 runtime/syntax/tap.vim                 @petdance
 runtime/syntax/tcsh.vim                        @dkearns
 runtime/syntax/teraterm.vim            @k-takata
+runtime/syntax/terraform.vim           @gpanders
 runtime/syntax/thrift.vim              @jiangyinzuo
 runtime/syntax/tidy.vim                        @dkearns
 runtime/syntax/tmux.vim                        @ericpruitt
diff --git a/runtime/autoload/hcl.vim b/runtime/autoload/hcl.vim
new file mode 100644
index 000000000..2215fc8f2
--- /dev/null
+++ b/runtime/autoload/hcl.vim
@@ -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
diff --git a/runtime/ftplugin/hcl.vim b/runtime/ftplugin/hcl.vim
new file mode 100644
index 000000000..c47a0378d
--- /dev/null
+++ b/runtime/ftplugin/hcl.vim
@@ -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
diff --git a/runtime/indent/hcl.vim b/runtime/indent/hcl.vim
new file mode 100644
index 000000000..b13d2c564
--- /dev/null
+++ b/runtime/indent/hcl.vim
@@ -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<'
diff --git a/runtime/indent/terraform.vim b/runtime/indent/terraform.vim
new file mode 100644
index 000000000..d62813d6a
--- /dev/null
+++ b/runtime/indent/terraform.vim
@@ -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
diff --git a/runtime/syntax/hcl.vim b/runtime/syntax/hcl.vim
new file mode 100644
index 000000000..5e9349ab3
--- /dev/null
+++ b/runtime/syntax/hcl.vim
@@ -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'
diff --git a/runtime/syntax/terraform.vim b/runtime/syntax/terraform.vim
new file mode 100644
index 000000000..559dc7956
--- /dev/null
+++ b/runtime/syntax/terraform.vim
@@ -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'

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1slwdh-00Bw3l-RJ%40256bit.org.

Raspunde prin e-mail lui