Commit: patch 9.2.0934: filetype: hlsl files are not recognized

Christian Brabandt <[email protected]> Tue, 11 Aug 2026 20:15:06 +0200
Newsgroups gmane.editors.vim.devel
Message-ID <[email protected]>
patch 9.2.0934: filetype: hlsl files are not recognized

Commit: https://github.com/vim/vim/commit/11fca33162ad2e6a6365dbf6202fb1af0f21b7cb
Author: Maxim Kim <[email protected]>
Date:   Tue Aug 11 18:03:33 2026 +0000

    patch 9.2.0934: filetype: hlsl files are not recognized
    
    Problem:  filetype: hlsl files are not recognized
    Solution: Detect *.hlsl files hlsl filetype, include
              ftplugin, indent and syntax plugins, update
              gvim menu (Maxim Kim)
    
    Note to Neovim devs: runtime files are in vim9script
    
    closes: #20993
    
    Signed-off-by: Maxim Kim <[email protected]>
    Signed-off-by: Christian Brabandt <[email protected]>

diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS
index 9b221eb7a..93646aba4 100644
--- a/.github/MAINTAINERS
+++ b/.github/MAINTAINERS
@@ -222,6 +222,7 @@ runtime/ftplugin/haredoc.vim				@selenebun
 runtime/ftplugin/hcl.vim				@gpanders
 runtime/ftplugin/heex.vim				@cvincent
 runtime/ftplugin/hgcommit.vim				@k-takata
+runtime/ftplugin/hlsl.vim				@habamax
 runtime/ftplugin/hlsplaylist.vim			@avidseeker
 runtime/ftplugin/hog.vim				@wtfbbqhax
 runtime/ftplugin/html.vim				@dkearns
@@ -410,6 +411,7 @@ runtime/indent/haml.vim					@tpope
 runtime/indent/handlebars.vim				@sukima
 runtime/indent/hare.vim					@selenebun
 runtime/indent/hcl.vim					@gpanders
+runtime/indent/hlsl.vim					@habamax
 runtime/indent/hog.vim					@wtfbbqhax
 runtime/indent/idlang.vim				@dkearns
 runtime/indent/j.vim					@glts
@@ -589,6 +591,7 @@ runtime/syntax/help_ru.vim				@RestorerZ
 runtime/syntax/hgcommit.vim				@k-takata
 runtime/syntax/hip.vim					@Young-TW
 runtime/syntax/hitest.vim				@lacygoill
+runtime/syntax/hlsl.vim					@habamax
 runtime/syntax/hog.vim					@wtfbbqhax
 runtime/syntax/hollywood.vim				@sodero
 runtime/syntax/html.vim					@dkearns
diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim
index bf8a0cc36..c346bd139 100644
--- a/runtime/autoload/dist/ft.vim
+++ b/runtime/autoload/dist/ft.vim
@@ -3,7 +3,7 @@ vim9script
 # Vim functions for file type detection
 #
 # Maintainer:		The Vim Project <https://github.com/vim/vim>
-# Last Change:		2026 Aug 08
+# Last Change:		2026 Aug 10
 # Former Maintainer:	Bram Moolenaar <[email protected]>
 
 # These functions are moved here from runtime/filetype.vim to make startup
@@ -2208,6 +2208,8 @@ const ft_from_ext = {
   "hbs": "handlebars",
   # Hare
   "ha": "hare",
+  # HLSL
+  "hlsl": "hlsl",
   # Haskell
   "hs": "haskell",
   "hsc": "haskell",
diff --git a/runtime/ftplugin/hlsl.vim b/runtime/ftplugin/hlsl.vim
new file mode 100644
index 000000000..4af365ca7
--- /dev/null
+++ b/runtime/ftplugin/hlsl.vim
@@ -0,0 +1,20 @@
+vim9script
+# Language:      HLSL (High-Level Shader Language)
+# Maintainer:    Maxim Kim <[email protected]>
+# Last Change:   2026 Aug 11
+
+if exists("b:did_ftplugin")
+    finish
+endif
+b:did_ftplugin = 1
+
+var undo_opts = "setl commentstring< comments<"
+
+setlocal commentstring=//\ %s
+setlocal comments=
+
+if exists('b:undo_ftplugin')
+    b:undo_ftplugin ..= "|" .. undo_opts
+else
+    b:undo_ftplugin = undo_opts
+endif
diff --git a/runtime/indent/hlsl.vim b/runtime/indent/hlsl.vim
new file mode 100644
index 000000000..f4428536b
--- /dev/null
+++ b/runtime/indent/hlsl.vim
@@ -0,0 +1,14 @@
+vim9script
+# Language:    HLSL (High-Level Shader Language)
+# Maintainer:  Maxim Kim <[email protected]>
+# Last Change: 2026 Aug 11
+
+if exists('b:did_indent')
+  finish
+endif
+b:did_indent = 1
+
+setlocal autoindent cindent
+setlocal cinoptions&
+
+b:undo_indent = 'setl ai< ci< cino<'
diff --git a/runtime/makemenu.vim b/runtime/makemenu.vim
index 98d88e622..3497a773f 100644
--- a/runtime/makemenu.vim
+++ b/runtime/makemenu.vim
@@ -330,6 +330,7 @@ SynMenu HIJK.Hex\ dump.XXD:xxd
 SynMenu HIJK.Hex\ dump.Intel\ MCS51:hex
 SynMenu HIJK.Hg\ commit:hgcommit
 SynMenu HIJK.HIP:hip
+SynMenu HIJK.HLSL:hlsl
 SynMenu HIJK.HLSPlaylist:hlsplaylist
 SynMenu HIJK.Hollywood:hollywood
 SynMenu HIJK.HTML.HTML:html
diff --git a/runtime/synmenu.vim b/runtime/synmenu.vim
index b2259b930..93bd5731c 100644
--- a/runtime/synmenu.vim
+++ b/runtime/synmenu.vim
@@ -2,7 +2,7 @@
 " This file is normally sourced from menu.vim.
 "
 " Maintainer:		The Vim Project <https://github.com/vim/vim>
-" Last Change:		2026 Aug 06
+" Last Change:		2026 Aug 11
 " Former Maintainer:	Bram Moolenaar <[email protected]>
 
 " Define the SetSyn function, used for the Syntax menu entries.
@@ -311,75 +311,76 @@ an 50.50.220 &Syntax.HIJK.Hex\ dump.XXD :cal SetSyn("xxd")<CR>
 an 50.50.230 &Syntax.HIJK.Hex\ dump.Intel\ MCS51 :cal SetSyn("hex")<CR>
 an 50.50.240 &Syntax.HIJK.Hg\ commit :cal SetSyn("hgcommit")<CR>
 an 50.50.250 &Syntax.HIJK.HIP :cal SetSyn("hip")<CR>
-an 50.50.260 &Syntax.HIJK.HLSPlaylist :cal SetSyn("hlsplaylist")<CR>
-an 50.50.270 &Syntax.HIJK.Hollywood :cal SetSyn("hollywood")<CR>
-an 50.50.280 &Syntax.HIJK.HTML.HTML :cal SetSyn("html")<CR>
-an 50.50.290 &Syntax.HIJK.HTML.HTMLAngular :cal SetSyn("htmlangular")<CR>
-an 50.50.300 &Syntax.HIJK.HTML.HTML\ with\ M4 :cal SetSyn("htmlm4")<CR>
-an 50.50.310 &Syntax.HIJK.HTML.HTML\ with\ Ruby\ (eRuby) :cal SetSyn("eruby")<CR>
-an 50.50.320 &Syntax.HIJK.HTML.Cheetah\ HTML\ template :cal SetSyn("htmlcheetah")<CR>
-an 50.50.330 &Syntax.HIJK.HTML.Django\ HTML\ template :cal SetSyn("htmldjango")<CR>
-an 50.50.340 &Syntax.HIJK.HTML.Vue.js\ HTML\ template :cal SetSyn("vuejs")<CR>
-an 50.50.350 &Syntax.HIJK.HTML.HTML/OS :cal SetSyn("htmlos")<CR>
-an 50.50.360 &Syntax.HIJK.HTML.XHTML :cal SetSyn("xhtml")<CR>
-an 50.50.370 &Syntax.HIJK.Host\.conf :cal SetSyn("hostconf")<CR>
-an 50.50.380 &Syntax.HIJK.Hosts\ access :cal SetSyn("hostsaccess")<CR>
-an 50.50.390 &Syntax.HIJK.Hyper\ Builder :cal SetSyn("hb")<CR>
-an 50.50.400 &Syntax.HIJK.Hyprlang :cal SetSyn("hyprlang")<CR>
-an 50.50.420 &Syntax.HIJK.I3Config :cal SetSyn("i3config")<CR>
-an 50.50.430 &Syntax.HIJK.Icewm\ menu :cal SetSyn("icemenu")<CR>
-an 50.50.440 &Syntax.HIJK.Icon :cal SetSyn("icon")<CR>
-an 50.50.450 &Syntax.HIJK.IDL\Generic\ IDL :cal SetSyn("idl")<CR>
-an 50.50.460 &Syntax.HIJK.IDL\Microsoft\ IDL :cal SetSyn("msidl")<CR>
-an 50.50.470 &Syntax.HIJK.Idris2 :cal SetSyn("idris2")<CR>
-an 50.50.480 &Syntax.HIJK.Indent\ profile :cal SetSyn("indent")<CR>
-an 50.50.490 &Syntax.HIJK.Inform :cal SetSyn("inform")<CR>
-an 50.50.500 &Syntax.HIJK.Informix\ 4GL :cal SetSyn("fgl")<CR>
-an 50.50.510 &Syntax.HIJK.Initng :cal SetSyn("initng")<CR>
-an 50.50.520 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
-an 50.50.530 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
-an 50.50.540 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ dat :cal SetSyn("upstreamdat")<CR>
-an 50.50.550 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ log :cal SetSyn("upstreamlog")<CR>
-an 50.50.560 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ rpt :cal SetSyn("upstreamrpt")<CR>
-an 50.50.570 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ Install\ log :cal SetSyn("upstreaminstalllog")<CR>
-an 50.50.580 &Syntax.HIJK.Innovation\ Data\ Processing.Usserver\ log :cal SetSyn("usserverlog")<CR>
-an 50.50.590 &Syntax.HIJK.Innovation\ Data\ Processing.USW2KAgt\ log :cal SetSyn("usw2kagtlog")<CR>
-an 50.50.600 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
-an 50.50.610 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
-an 50.50.620 &Syntax.HIJK.Ipkg :cal SetSyn("ipkg")<CR>
-an 50.50.630 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
-an 50.50.650 &Syntax.HIJK.J :cal SetSyn("j")<CR>
-an 50.50.660 &Syntax.HIJK.JAL :cal SetSyn("jal")<CR>
-an 50.50.670 &Syntax.HIJK.JAM :cal SetSyn("jam")<CR>
-an 50.50.680 &Syntax.HIJK.Jargon :cal SetSyn("jargon")<CR>
-an 50.50.690 &Syntax.HIJK.Java.Java :cal SetSyn("java")<CR>
-an 50.50.700 &Syntax.HIJK.Java.JavaCC :cal SetSyn("javacc")<CR>
-an 50.50.710 &Syntax.HIJK.Java.Java\ Server\ Pages :cal SetSyn("jsp")<CR>
-an 50.50.720 &Syntax.HIJK.Java.Java\ Properties :cal SetSyn("jproperties")<CR>
-an 50.50.730 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
-an 50.50.740 &Syntax.HIJK.JavaScriptReact :cal SetSyn("javascriptreact")<CR>
-an 50.50.750 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
-an 50.50.760 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
-an 50.50.770 &Syntax.HIJK.Jinja :cal SetSyn("jinja")<CR>
-an 50.50.780 &Syntax.HIJK.JJdescription :cal SetSyn("jjdescription")<CR>
-an 50.50.790 &Syntax.HIJK.Jovial :cal SetSyn("jovial")<CR>
-an 50.50.800 &Syntax.HIJK.JQ :cal SetSyn("jq")<CR>
-an 50.50.810 &Syntax.HIJK.JSON.JSON :cal SetSyn("json")<CR>
-an 50.50.820 &Syntax.HIJK.JSON.JSON-LD :cal SetSyn("jsonld")<CR>
-an 50.50.830 &Syntax.HIJK.JSON.JSON5 :cal SetSyn("json5")<CR>
-an 50.50.840 &Syntax.HIJK.JSON.JSONC :cal SetSyn("jsonc")<CR>
-an 50.50.850 &Syntax.HIJK.Julia :cal SetSyn("julia")<CR>
-an 50.50.860 &Syntax.HIJK.Just :cal SetSyn("just")<CR>
-an 50.50.880 &Syntax.HIJK.Karel :cal SetSyn("karel")<CR>
-an 50.50.890 &Syntax.HIJK.Kconfig :cal SetSyn("kconfig")<CR>
-an 50.50.900 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
-an 50.50.910 &Syntax.HIJK.Kdl :cal SetSyn("kdl")<CR>
-an 50.50.920 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
-an 50.50.930 &Syntax.HIJK.Kitty :cal SetSyn("kitty")<CR>
-an 50.50.940 &Syntax.HIJK.Kivy :cal SetSyn("kivy")<CR>
-an 50.50.950 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
-an 50.50.960 &Syntax.HIJK.Kotlin :cal SetSyn("kotlin")<CR>
-an 50.50.970 &Syntax.HIJK.Krl :cal SetSyn("krl")<CR>
+an 50.50.260 &Syntax.HIJK.HLSL :cal SetSyn("hlsl")<CR>
+an 50.50.270 &Syntax.HIJK.HLSPlaylist :cal SetSyn("hlsplaylist")<CR>
+an 50.50.280 &Syntax.HIJK.Hollywood :cal SetSyn("hollywood")<CR>
+an 50.50.290 &Syntax.HIJK.HTML.HTML :cal SetSyn("html")<CR>
+an 50.50.300 &Syntax.HIJK.HTML.HTMLAngular :cal SetSyn("htmlangular")<CR>
+an 50.50.310 &Syntax.HIJK.HTML.HTML\ with\ M4 :cal SetSyn("htmlm4")<CR>
+an 50.50.320 &Syntax.HIJK.HTML.HTML\ with\ Ruby\ (eRuby) :cal SetSyn("eruby")<CR>
+an 50.50.330 &Syntax.HIJK.HTML.Cheetah\ HTML\ template :cal SetSyn("htmlcheetah")<CR>
+an 50.50.340 &Syntax.HIJK.HTML.Django\ HTML\ template :cal SetSyn("htmldjango")<CR>
+an 50.50.350 &Syntax.HIJK.HTML.Vue.js\ HTML\ template :cal SetSyn("vuejs")<CR>
+an 50.50.360 &Syntax.HIJK.HTML.HTML/OS :cal SetSyn("htmlos")<CR>
+an 50.50.370 &Syntax.HIJK.HTML.XHTML :cal SetSyn("xhtml")<CR>
+an 50.50.380 &Syntax.HIJK.Host\.conf :cal SetSyn("hostconf")<CR>
+an 50.50.390 &Syntax.HIJK.Hosts\ access :cal SetSyn("hostsaccess")<CR>
+an 50.50.400 &Syntax.HIJK.Hyper\ Builder :cal SetSyn("hb")<CR>
+an 50.50.410 &Syntax.HIJK.Hyprlang :cal SetSyn("hyprlang")<CR>
+an 50.50.430 &Syntax.HIJK.I3Config :cal SetSyn("i3config")<CR>
+an 50.50.440 &Syntax.HIJK.Icewm\ menu :cal SetSyn("icemenu")<CR>
+an 50.50.450 &Syntax.HIJK.Icon :cal SetSyn("icon")<CR>
+an 50.50.460 &Syntax.HIJK.IDL\Generic\ IDL :cal SetSyn("idl")<CR>
+an 50.50.470 &Syntax.HIJK.IDL\Microsoft\ IDL :cal SetSyn("msidl")<CR>
+an 50.50.480 &Syntax.HIJK.Idris2 :cal SetSyn("idris2")<CR>
+an 50.50.490 &Syntax.HIJK.Indent\ profile :cal SetSyn("indent")<CR>
+an 50.50.500 &Syntax.HIJK.Inform :cal SetSyn("inform")<CR>
+an 50.50.510 &Syntax.HIJK.Informix\ 4GL :cal SetSyn("fgl")<CR>
+an 50.50.520 &Syntax.HIJK.Initng :cal SetSyn("initng")<CR>
+an 50.50.530 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
+an 50.50.540 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
+an 50.50.550 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ dat :cal SetSyn("upstreamdat")<CR>
+an 50.50.560 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ log :cal SetSyn("upstreamlog")<CR>
+an 50.50.570 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ rpt :cal SetSyn("upstreamrpt")<CR>
+an 50.50.580 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ Install\ log :cal SetSyn("upstreaminstalllog")<CR>
+an 50.50.590 &Syntax.HIJK.Innovation\ Data\ Processing.Usserver\ log :cal SetSyn("usserverlog")<CR>
+an 50.50.600 &Syntax.HIJK.Innovation\ Data\ Processing.USW2KAgt\ log :cal SetSyn("usw2kagtlog")<CR>
+an 50.50.610 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
+an 50.50.620 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
+an 50.50.630 &Syntax.HIJK.Ipkg :cal SetSyn("ipkg")<CR>
+an 50.50.640 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
+an 50.50.660 &Syntax.HIJK.J :cal SetSyn("j")<CR>
+an 50.50.670 &Syntax.HIJK.JAL :cal SetSyn("jal")<CR>
+an 50.50.680 &Syntax.HIJK.JAM :cal SetSyn("jam")<CR>
+an 50.50.690 &Syntax.HIJK.Jargon :cal SetSyn("jargon")<CR>
+an 50.50.700 &Syntax.HIJK.Java.Java :cal SetSyn("java")<CR>
+an 50.50.710 &Syntax.HIJK.Java.JavaCC :cal SetSyn("javacc")<CR>
+an 50.50.720 &Syntax.HIJK.Java.Java\ Server\ Pages :cal SetSyn("jsp")<CR>
+an 50.50.730 &Syntax.HIJK.Java.Java\ Properties :cal SetSyn("jproperties")<CR>
+an 50.50.740 &Syntax.HIJK.JavaScript :cal SetSyn("javascript")<CR>
+an 50.50.750 &Syntax.HIJK.JavaScriptReact :cal SetSyn("javascriptreact")<CR>
+an 50.50.760 &Syntax.HIJK.Jess :cal SetSyn("jess")<CR>
+an 50.50.770 &Syntax.HIJK.Jgraph :cal SetSyn("jgraph")<CR>
+an 50.50.780 &Syntax.HIJK.Jinja :cal SetSyn("jinja")<CR>
+an 50.50.790 &Syntax.HIJK.JJdescription :cal SetSyn("jjdescription")<CR>
+an 50.50.800 &Syntax.HIJK.Jovial :cal SetSyn("jovial")<CR>
+an 50.50.810 &Syntax.HIJK.JQ :cal SetSyn("jq")<CR>
+an 50.50.820 &Syntax.HIJK.JSON.JSON :cal SetSyn("json")<CR>
+an 50.50.830 &Syntax.HIJK.JSON.JSON-LD :cal SetSyn("jsonld")<CR>
+an 50.50.840 &Syntax.HIJK.JSON.JSON5 :cal SetSyn("json5")<CR>
+an 50.50.850 &Syntax.HIJK.JSON.JSONC :cal SetSyn("jsonc")<CR>
+an 50.50.860 &Syntax.HIJK.Julia :cal SetSyn("julia")<CR>
+an 50.50.870 &Syntax.HIJK.Just :cal SetSyn("just")<CR>
+an 50.50.890 &Syntax.HIJK.Karel :cal SetSyn("karel")<CR>
+an 50.50.900 &Syntax.HIJK.Kconfig :cal SetSyn("kconfig")<CR>
+an 50.50.910 &Syntax.HIJK.KDE\ script :cal SetSyn("kscript")<CR>
+an 50.50.920 &Syntax.HIJK.Kdl :cal SetSyn("kdl")<CR>
+an 50.50.930 &Syntax.HIJK.Kimwitu++ :cal SetSyn("kwt")<CR>
+an 50.50.940 &Syntax.HIJK.Kitty :cal SetSyn("kitty")<CR>
+an 50.50.950 &Syntax.HIJK.Kivy :cal SetSyn("kivy")<CR>
+an 50.50.960 &Syntax.HIJK.KixTart :cal SetSyn("kix")<CR>
+an 50.50.970 &Syntax.HIJK.Kotlin :cal SetSyn("kotlin")<CR>
+an 50.50.980 &Syntax.HIJK.Krl :cal SetSyn("krl")<CR>
 an 50.60.100 &Syntax.L.Lace :cal SetSyn("lace")<CR>
 an 50.60.110 &Syntax.L.LambdaProlog :cal SetSyn("lprolog")<CR>
 an 50.60.120 &Syntax.L.Latte :cal SetSyn("latte")<CR>
diff --git a/runtime/syntax/hlsl.vim b/runtime/syntax/hlsl.vim
new file mode 100644
index 000000000..e6fe49a96
--- /dev/null
+++ b/runtime/syntax/hlsl.vim
@@ -0,0 +1,116 @@
+vim9script
+# Language:    HLSL (High-Level Shader Language)
+# Maintainer:  Maxim Kim <[email protected]>
+# Last Change: 2026 Aug 11
+# https://learn.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-reference
+
+if exists("b:current_syntax")
+    finish
+endif
+
+var expanded_types = [
+    'float', 'double', 'int', 'uint', 'bool',
+    'min10float', 'min16float', 'min12int', 'min16int', 'min16uint',
+    'float16_t', 'int16_t', 'uint16_t', 'uint64_t', 'int64_t',
+    'vector', 'matrix'
+]
+
+# float1, float2 ...
+# ...
+# int1x1, int1x2 ...
+exe $"syn keyword hlslType {expanded_types->join()}"
+range(1, 4)->foreach((_, idxN) => {
+    var typeN = expanded_types->mapnew((_, type) => type .. idxN)->join()
+    exe $"syn keyword hlslType {typeN}"
+    range(1, 4)->foreach((_, idxM) => {
+        var typeNxM = expanded_types
+            ->mapnew((_, type) => $"{type}{idxN}x{idxM}")->join()
+        exe $"syn keyword hlslType {typeNxM}"
+    })
+})
+syn keyword hlslType void dword half string texture sampler
+syn keyword hlslType extern nointerpolation precise shared groupshared static
+syn keyword hlslType uniform export extern volatile const row_major column_major
+syn keyword hlslType struct linear centroid noperspective sample
+syn keyword hlslType typedef namespace class interface enum
+syn keyword hlslType snorm unorm
+syn keyword hlslType vertexfragment pixelfragment
+syn keyword hlslType point line lineadj triangle triangleadj
+syn keyword hlslType technique10 technique11
+syn keyword hlslType cbuffer tbuffer
+syn keyword hlslType Buffer StructuredBuffer AppendStructuredBuffer
+syn keyword hlslType ByteAddressBuffer ConsumeStructuredBuffer
+syn keyword hlslType Texture1D Texture2D Texture3D Texture1DArray Texture2DArray
+syn keyword hlslType Texture2DMS Texture2DMSArray
+syn keyword hlslType TextureCube TextureCubeArray
+syn keyword hlslType RWBuffer RWByteAddressBuffer RWStructuredBuffer
+syn keyword hlslType RWTexture1D RWTexture1DArray RWTexture2D
+syn keyword hlslType RWTexture2DArray RWTexture3D
+syn keyword hlslType PointStream LineStream TriangleStream
+syn keyword hlslType SamplerState SamplerComparisonState
+syn keyword hlslType RasterizerState DepthStencilState BlendState
+syn keyword hlslType OutputPatch InputPatch
+# TODO: only recognize it in function parameter list
+syn keyword hlslType in out inout
+
+# legacy
+syn keyword hlslType sampler2D
+
+syn keyword hlslCondition if else switch case default
+syn keyword hlslRepeat while for do break continue
+syn keyword hlslStatement return discard compile compile_fragment packoffset
+syn keyword hlslStatement pass register fxgroup
+syn keyword hlslConstant true false NULL
+
+# simplified Semantic highlighting: SV_POSITION, SV_TARGET etc
+syn match hlslSemantic /:\s*\zs\k\+/
+
+# POSITIONT BINORMAL[n] BLENDINDICES[n] BLENDWEIGHT[n] COLOR[n] NORMAL[n]
+# POSITION[n] PSIZE[n] TANGENT[n] TEXCOORD[n]
+
+# SV_ClipDistance[n] SV_CullDistance[n] SV_Coverage SV_Depth
+# SV_DepthGreaterEqual SV_DepthLessEqual SV_DispatchThreadID SV_DomainLocation
+# SV_GroupID SV_GroupIndex SV_GroupThreadID SV_GSInstanceID SV_InnerCoverage
+# SV_InsideTessFactor SV_InstanceID SV_IsFrontFace SV_OutputControlPointID
+# SV_Position SV_PrimitiveID SV_RenderTargetArrayIndex SV_SampleIndex
+# SV_StencilRef SV_Target[n], where 0 <= n <= 7 SV_TessFactor SV_VertexID
+# SV_ViewportArrayIndex SV_ShadingRate
+
+syntax match hlslInteger " -?<[0-9]+%(_[0-9]+)*[uUlL]?>" display
+syntax match hlslFloat " -?<[0-9]+%(_[0-9]+)*%(\.[0-9]+%(_[0-9]+)*)%([eE][+-]=[0-9]+%(_[0-9]+)*)=[hHfFlL]?>" display
+syntax match hlslHex " <0[xX][0-9A-Fa-f]+%(_[0-9A-Fa-f]+)*[uUlL]?>" display
+syntax match hlslOct " <0[oO][0-7]+%(_[0-7]+)*[uUlL]?>" display
+syntax cluster hlslNumber contains=hlslInteger,hlslFloat,hlslHex,hlslOct
+
+syntax region hlslChar start=+'+ skip=+\\\|\'+ end=+'+ contains=hlslEscape
+syntax region hlslString start=+"+ skip=+\\\|\'+ end=+"+ contains=hlslEscape
+syntax match  hlslEscape display contained /\\([abefnrtv\'"]\|\o\{3}\|x\x\{2}\|u\x\{4}\|U\x\{8}\)/
+
+# TODO: better preproc
+syn region hlslPreProc start=/^\s*\zs#/ end=/$/ contains=@hlslNumber,hlslString,hlslChar,@hlslComment
+
+syntax match   hlslTodo "TODO" contained
+syntax match   hlslTodo "XXX" contained
+syntax match   hlslTodo "FIXME" contained
+syntax region  hlslLineComment start=/\/\// end=/$/  contains=@Spell,hlslTodo
+syntax region  hlslBlockComment start=/\/\*/ end=/\*\// contains=@Spell,hlslTodo
+syntax cluster hlslComment contains=hlslLineComment,hlslBlockComment
+
+hi def link hlslType         Type
+hi def link hlslStatement    Statement
+hi def link hlslCondition    Statement
+hi def link hlslRepeat       Statement
+hi def link hlslInteger      Number
+hi def link hlslFloat        Float
+hi def link hlslHex          Number
+hi def link hlslOct          Number
+hi def link hlslLineComment  Comment
+hi def link hlslBlockComment Comment
+hi def link hlslTodo         Todo
+hi def link hlslChar         Character
+hi def link hlslString       String
+hi def link hlslEscape       Special
+hi def link hlslPreProc      PreProc
+hi def link hlslSemantic     Identifier
+
+b:current_syntax = "hlsl"
diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim
index 893e3d8d0..0b8f5a2a4 100644
--- a/src/testdir/test_filetype.vim
+++ b/src/testdir/test_filetype.vim
@@ -381,6 +381,7 @@ def s:GetFilenameChecks(): dict<list<string>>
     hgcommit: ['hg-editor-file.txt'],
     hip: ['file.hip'],
     hjson: ['file.hjson'],
+    hlsl: ['file.hlsl'],
     hlsplaylist: ['file.m3u', 'file.m3u8'],
     hog: ['file.hog', 'snort.conf', 'vision.conf'],
     hollywood: ['file.hws'],
diff --git a/src/version.c b/src/version.c
index 81a7d542c..3401ba30b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -763,6 +763,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    934,
 /**/
     933,
 /**/

-- 
-- 
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 [email protected].
To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1wtr0E-007URX-Ha%40256bit.org.