patch 9.1.1231: filetype: SPA JSON files are not recognized Commit: https://github.com/vim/vim/commit/4e7b4308fb92628434bd7e07ab92910c33051431 Author: David Mandelberg <da...@mandelberg.org> Date: Sun Mar 23 10:26:00 2025 +0100
patch 9.1.1231: filetype: SPA JSON files are not recognized Problem: filetype: SPA (single page application) JSON files are not recognized (used by pipewire and wireplumber) Solution: detect pipewire and wireplumber configuration files as spajson filetype, include filetype, indent and syntax scripts for this new filetype (David Mandelberg). I looked at all the files found by this command to see if the syntax highlighting looked reasonable: ``` find {~/.config,/etc,/usr/share}/{pipewire,wireplumber} -type f -name \*.conf ``` References: * pipewire config files: https://docs.pipewire.org/page_config.html * wireplumber config files: https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/conf_file.html and * https://pipewire.pages.freedesktop.org/wireplumber/daemon/locations.html closes: #16950 Signed-off-by: David Mandelberg <da...@mandelberg.org> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/.github/MAINTAINERS b/.github/MAINTAINERS index 055531afc..4b0d93a89 100644 --- a/.github/MAINTAINERS +++ b/.github/MAINTAINERS @@ -285,6 +285,7 @@ runtime/ftplugin/slint.vim @ribru17 runtime/ftplugin/snakemake.vim @ribru17 runtime/ftplugin/solidity.vim @cothi runtime/ftplugin/solution.vim @dkearns +runtime/ftplugin/spajson.vim @dseomn runtime/ftplugin/spec.vim @ignatenkobrain runtime/ftplugin/squirrel.vim @ribru17 runtime/ftplugin/ssa.vim @ObserverOfTime @@ -396,6 +397,7 @@ runtime/indent/scheme.vim @evhan runtime/indent/scss.vim @tpope runtime/indent/sh.vim @chrisbra runtime/indent/solidity.vim @cothi +runtime/indent/spajson.vim @dseomn runtime/indent/systemverilog.vim @Kocha runtime/indent/tcl.vim @dkearns runtime/indent/tcsh.vim @dkearns @@ -609,6 +611,7 @@ runtime/syntax/sed.vim @dkearns runtime/syntax/shared/debversions.vim @jamessan runtime/syntax/shaderslang.vim @mTvare6 runtime/syntax/solidity.vim @cothi +runtime/syntax/spajson.vim @dseomn runtime/syntax/spec.vim @ignatenkobrain runtime/syntax/sqloracle.vim @chrisbra runtime/syntax/squirrel.vim @zenmatic diff --git a/runtime/filetype.vim b/runtime/filetype.vim index d4ecfcb7f..4e386e9e3 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -2515,6 +2515,10 @@ au BufNewFile,BufRead *.class " SMCL au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl setf smcl +" SPA JSON +au BufNewFile,BufRead */pipewire/*.conf setf spajson +au BufNewFile,BufRead */wireplumber/*.conf setf spajson + " Stored Procedures au BufNewFile,BufRead *.stp setf stp diff --git a/runtime/ftplugin/spajson.vim b/runtime/ftplugin/spajson.vim new file mode 100644 index 000000000..d03d1d507 --- /dev/null +++ b/runtime/ftplugin/spajson.vim @@ -0,0 +1,14 @@ +" Vim filetype plugin +" Language: SPA JSON +" Maintainer: David Mandelberg <da...@mandelberg.org> +" Last Change: 2025 Mar 22 + +if exists('b:did_ftplugin') + finish +endif +let b:did_ftplugin = 1 + +setlocal comments=:###,:##,:# +setlocal commentstring=#\ %s + +let b:undo_ftplugin = "setlocal comments< commentstring<" diff --git a/runtime/indent/spajson.vim b/runtime/indent/spajson.vim new file mode 100644 index 000000000..e644a5ee6 --- /dev/null +++ b/runtime/indent/spajson.vim @@ -0,0 +1,6 @@ +" Vim indent file +" Language: SPA JSON +" Maintainer: David Mandelberg <da...@mandelberg.org> +" Last Change: 2025 Mar 22 + +runtime! indent/json.vim diff --git a/runtime/syntax/spajson.vim b/runtime/syntax/spajson.vim new file mode 100644 index 000000000..78ade5f92 --- /dev/null +++ b/runtime/syntax/spajson.vim @@ -0,0 +1,50 @@ +" Vim syntax file +" Language: SPA JSON +" Maintainer: David Mandelberg <da...@mandelberg.org> +" Last Change: 2025 Mar 22 +" +" Based on parser code: +" https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/spa/include/spa/utils/json-core.h + +if exists("b:current_syntax") + finish +endif +let b:current_syntax = "spajson" + +syn sync minlines=500 + +" Treat the __BARE parser state as a keyword, to make it easier to match +" keywords and numbers only when they're not part of a larger __BARE section. +" E.g., v4l2 and pipewire-0 probably shouldn't highlight anything as +" spajsonInt. +syn iskeyword 32-126,^ ,^",^#,^:,^,,^=,^],^},^\ + +syn match spajsonEscape "\["\/bfnrt]" contained +syn match spajsonEscape "\u[0-9A-Fa-f]\{4}" contained + +syn match spajsonError "." +syn match spajsonBare "\k\+" +syn match spajsonComment "#.*$" contains=@Spell +syn region spajsonString start=/"/ skip=/\\\|\"/ end=/"/ contains=spajsonEscape +syn match spajsonKeyDelimiter "[:=]" +syn region spajsonArray matchgroup=spajsonBracket start="\[" end="]" contains=ALLBUT,spajsonKeyDelimiter fold +syn region spajsonObject matchgroup=spajsonBrace start="{" end="}" contains=ALL fold +syn match spajsonFloat "\<[+-]\?[0-9]\+\(\.[0-9]*\)\?\([Ee][+-]\?[0-9]\+\)\?\>" +syn match spajsonFloat "\<[+-]\?\.[0-9]\+\([Ee][+-]\?[0-9]\+\)\?\>" +syn match spajsonInt "\<[+-]\?0[Xx][0-9A-Fa-f]\+\>" +syn match spajsonInt "\<[+-]\?[1-9][0-9]*\>" +syn match spajsonInt "\<[+-]\?0[0-7]*\>" +syn keyword spajsonBoolean true false +syn keyword spajsonNull null +syn match spajsonWhitespace "[\x00 ,]" + +hi def link spajsonBoolean Boolean +hi def link spajsonBrace Delimiter +hi def link spajsonBracket Delimiter +hi def link spajsonComment Comment +hi def link spajsonError Error +hi def link spajsonEscape SpecialChar +hi def link spajsonFloat Float +hi def link spajsonInt Number +hi def link spajsonNull Constant +hi def link spajsonString String diff --git a/src/testdir/test_filetype.vim b/src/testdir/test_filetype.vim index bfebea4fe..531c500af 100644 --- a/src/testdir/test_filetype.vim +++ b/src/testdir/test_filetype.vim @@ -721,6 +721,8 @@ def s:GetFilenameChecks(): dict<list<string>> snobol4: ['file.sno', 'file.spt'], solidity: ['file.sol'], solution: ['file.sln'], + spajson: ['any/pipewire/file.conf', 'any/pipewire/file.conf.d/other.conf', + 'any/wireplumber/file.conf', 'any/wireplumber/file.conf.d/other.conf'], sparql: ['file.rq', 'file.sparql'], spec: ['file.spec'], spice: ['file.sp', 'file.spice'], diff --git a/src/version.c b/src/version.c index f50c414a4..dedfd0af9 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1231, /**/ 1230, /**/ -- -- 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 visit https://groups.google.com/d/msgid/vim_dev/E1twHtA-00AP12-Vp%40256bit.org.