CI: add Makefile target to verify default highlighting groups are present

Commit: 
https://github.com/vim/vim/commit/6a15942bc275dc59814f44064e2984b831f7a03d
Author: Christ van Willegen <cvwille...@gmail.com>
Date:   Fri Feb 21 20:23:26 2025 +0100

    CI: add Makefile target to verify default highlighting groups are present
    
    When adding new highlight groups, one needs to make sure to also add a
    "default link NewHlGroup ExistingHlGroup" in highlight.c code, so that
    when resetting a color scheme the old color won't be left behind.
    
    So add a Makefile in the 'ci' directory that verifies that all
    documented '*hl-<groupname>' from the documentation are either reflected
    in the source code, or belong to a list of 'known to be ignored'
    highlight groups and let that check run as part of the CI test suite.
    
    related: #16676
    closes: #16678
    
    Signed-off-by: Christ van Willegen <cvwille...@gmail.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a4eccf07f..2dbf922c5 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -96,6 +96,13 @@ jobs:
           # exit with an error code and list the missing entries.
           make -f ci/unlisted.make
 
+      - name: Check hlgroups (are any new hlgroups added, but not handled in 
highlight.c)
+        run: |
+          # If any highlight groups have been documented, but not handled in
+          # highlight.c, nor listed as 'intentionally left out' in 
hlgroups.ignore,
+          # exit with an error code and list the missing entries.
+          make -C ci -f hlgroups.make
+
       - run: sudo dpkg --add-architecture i386
         if: matrix.architecture == 'i386'
 
diff --git a/Filelist b/Filelist
index 22a987c4d..07560e5db 100644
--- a/Filelist
+++ b/Filelist
@@ -1148,6 +1148,8 @@ IGNORE = \
                .github/workflows/label.yml \
                SECURITY.md \
                ci/unlisted.make \
+               ci/hlgroups.make \
+               ci/hlgroups.ignore \
                src/libvterm/CODE-MAP \
                runtime/syntax/testdir/input/html_html \
 
diff --git a/ci/hlgroups.ignore b/ci/hlgroups.ignore
new file mode 100644
index 000000000..41e06f1bd
--- /dev/null
+++ b/ci/hlgroups.ignore
@@ -0,0 +1,66 @@
+ColorColumn
+ComplMatchIns
+Conceal
+Cursor
+CursorColumn
+CursorIM
+CursorLine
+CursorLineNr
+debugBreakpoint
+debugPC
+DiffAdd
+DiffChange
+DiffDelete
+DiffText
+Directory
+ErrorMsg
+FoldColumn
+Folded
+Ignore
+IncSearch
+lCursor
+LineNr
+LineNrAbove
+LineNrBelow
+MatchParen
+Menu
+ModeMsg
+MoreMsg
+MsgArea
+NonText
+Normal
+Pmenu
+PmenuSbar
+PmenuSel
+PmenuThumb
+Question
+Scrollbar
+Search
+SignColumn
+SpecialKey
+SpellBad
+SpellCap
+SpellLocal
+SpellRare
+StatusLine
+StatusLineNC
+StatusLineTerm
+StatusLineTermNC
+TabLine
+TabLineFill
+TabLineSel
+Terminal
+Title
+TOhtmlProgress
+TOhtml-progress-color
+ToolbarButton
+ToolbarLine
+Tooltip
+User1
+User1..9
+User9
+VertSplit
+Visual
+VisualNOS
+WarningMsg
+WildMenu
diff --git a/ci/hlgroups.make b/ci/hlgroups.make
new file mode 100644
index 000000000..65b39a8c1
--- /dev/null
+++ b/ci/hlgroups.make
@@ -0,0 +1,18 @@
+# vim: ft=make
+SHELL = /bin/bash
+
+# Default target to actually run the comparison:
+.PHONY: check
+.INTERMEDIATE: hlgroups deflinks hlgroups.stripped
+
+check: hlgroups.stripped deflinks
+       diff hlgroups.stripped deflinks
+
+hlgroups:
+       grep '\*hl-' ../runtime/doc/*txt | sed -E -e 's/.*:<?\s*//' -e 
's/hl-//g' -e 's/\*//g' -e 's/ /
/g' | sort > hlgroups
+
+deflinks: ../src/highlight.c
+       grep '"default link'  $< | sed 's/.*default link\s*\(.*\)\s.*/ /' | 
sort > deflinks
+
+hlgroups.stripped: hlgroups.ignore hlgroups
+       grep -v -x -F -f hlgroups.ignore hlgroups > hlgroups.stripped
diff --git a/ci/unlisted.make b/ci/unlisted.make
index 04dfcb53f..6d506eb79 100644
--- a/ci/unlisted.make
+++ b/ci/unlisted.make
@@ -21,7 +21,7 @@ $(eval all_patterns := $(shell \
                        p; \
                }'))
 
-# In Makefile's `prepeare` target, all the IN_README_DIR files are moved from
+# In Makefile's `prepare` target, all the IN_README_DIR files are moved from
 # READMEdir to the root, so add those files in their Git-tracked location:
 all_patterns := $(all_patterns) \
        $(foreach readme, $(IN_README_DIR), READMEdir/$(readme))

-- 
-- 
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/E1tlYir-004yrc-9P%40256bit.org.

Raspunde prin e-mail lui