Patch 9.0.1399
Problem:    Highlight test script has a few problems.
Solution:   Rewrite the script in Vim9 syntax. (closes #10379)
Files:      runtime/import/dist/vimhighlight.vim, runtime/syntax/hitest.vim


*** ../vim-9.0.1398/runtime/import/dist/vimhighlight.vim        2023-03-10 
18:35:03.088528709 +0000
--- runtime/import/dist/vimhighlight.vim        2023-03-10 18:30:47.872940439 
+0000
***************
*** 0 ****
--- 1,119 ----
+ vim9script
+ 
+ # Maintainer: github user lacygoill
+ # Last Change:        2023 Mar 08
+ 
+ # Init {{{1
+ 
+ const LINK: string = '->'
+ 
+ # Interface {{{1
+ export def HighlightTest() # {{{2
+     # Open a new window if the current one isn't empty
+     if line('$') != 1 || getline(1) != ''
+         new
+     endif
+ 
+     edit Highlight\ test
+ 
+     # `:help scratch-buffer`
+     &l:bufhidden = 'hide'
+     &l:buftype = 'nofile'
+     &l:swapfile = false
+ 
+     var report: list<string> =<< trim END
+         Highlighting groups for various occasions
+         -----------------------------------------
+     END
+ 
+     var various_groups: list<string> = GetVariousGroups()
+         ->filter((_, group: string): bool => group->hlexists() && 
!group->IsCleared())
+         ->sort()
+         ->uniq()
+ 
+     report->extend(various_groups->FollowChains())
+ 
+     var language_section: list<string> =<< trim END
+ 
+         Highlighting groups for language syntaxes
+         -----------------------------------------
+     END
+     report->extend(language_section)
+ 
+     var syntax_groups: list<string> = getcompletion('', 'highlight')
+         ->filter((_, group: string): bool =>
+             various_groups->index(group) == -1
+             && !group->IsCleared()
+             && group !~ '^HighlightTest')
+ 
+     # put the report
+     report
+         ->extend(syntax_groups->FollowChains())
+         ->setline(1)
+ 
+     # highlight the group names
+     execute $'silent! global /^\w\+\%(\%(\s*{LINK}\s*\)\w\+\)*$/ 
Highlight({bufnr('%')})'
+ 
+     cursor(1, 1)
+ enddef
+ # }}}1
+ # Core {{{1
+ def Highlight(buf: number) # {{{2
+     var lnum: number = line('.')
+     for group: string in getline('.')->split($'\s*{LINK}\s*')
+         silent! prop_type_add($'highlight-test-{group}', {
+             bufnr: buf,
+             highlight: group,
+             combine: false,
+         })
+         prop_add(lnum, col('.'), {
+             length: group->strlen(),
+             type: $'highlight-test-{group}'
+         })
+         search('\<\w\+\>', '', lnum)
+     endfor
+ enddef
+ # }}}1
+ # Util {{{1
+ def IsCleared(name: string): bool # {{{2
+     return name
+         ->hlget()
+         ->get(0, {})
+         ->get('cleared')
+ enddef
+ 
+ def FollowChains(groups: list<string>): list<string> # {{{2
+     # A group might be linked to another, which itself might be linked...
+     # We want the whole chain, for every group.
+     var chains: list<string>
+     for group: string in groups
+         var target: string = group->LinksTo()
+         var chain: string = group
+         while !target->empty()
+             chain ..= $' {LINK} {target}'
+             target = target->LinksTo()
+         endwhile
+         var a_link_is_cleared: bool = chain
+             ->split($'\s*{LINK}\s*')
+             ->indexof((_, g: string): bool => g->IsCleared()) >= 0
+         if a_link_is_cleared
+             continue
+         endif
+         chains->add(chain)
+     endfor
+     return chains
+ enddef
+ 
+ def LinksTo(group: string): string # {{{2
+     return group
+         ->hlget()
+         ->get(0, {})
+         ->get('linksto', '')
+ enddef
+ 
+ def GetVariousGroups(): list<string> # {{{2
+     return getcompletion('hl-', 'help')
+         ->filter((_, helptag: string): bool => helptag =~ '^hl-\w\+$')
+         ->map((_, helptag: string) => helptag->substitute('^hl-', '', ''))
+         ->extend(range(1, 9)->map((_, n: number) => $'User{n}'))
+ enddef
*** ../vim-9.0.1398/runtime/syntax/hitest.vim   2022-05-01 19:11:47.000000000 
+0100
--- runtime/syntax/hitest.vim   2023-03-10 18:30:47.872940439 +0000
***************
*** 1,149 ****
  " Vim syntax file
  " Language:   none; used to see highlighting
! " Maintainer: Ronald Schild <[email protected]>
! " Last Change:        2019 Jun 06
! " Version:    5.4n.1
! " Additional Changes By: Lifepillar, Bram
  
  " To see your current highlight settings, do
  "    :so $VIMRUNTIME/syntax/hitest.vim
  
! " save global options and registers
! let s:hidden      = &hidden
! let s:lazyredraw  = &lazyredraw
! let s:more      = &more
! let s:report      = &report
! let s:whichwrap   = &whichwrap
! let s:shortmess   = &shortmess
! let s:wrapscan    = &wrapscan
! let s:register_a  = @a
! let s:register_se = @/
! 
! " set global options
! set hidden lazyredraw nomore report=99999 shortmess=aoOstTW wrapscan
! set whichwrap&
! 
! " print current highlight settings into register a
! redir @a
! silent highlight
! redir END
! 
! " Open a new window if the current one isn't empty
! if line("$") != 1 || getline(1) != ""
!   new
! endif
! 
! " edit temporary file
! edit Highlight\ test
! 
! " set local options
! setlocal autoindent noexpandtab formatoptions=t shiftwidth=18 noswapfile 
tabstop=18
! let &textwidth=&columns
! 
! " insert highlight settings
! % delete
! put a
! 
! " remove cleared groups
! silent! g/ cleared$/d
! 
! " remove the colored xxx items
! g/xxx /s///e
! 
! " remove color settings (not needed here)
! global! /links to/ substitute /\s.*$//e
! 
! " Move split 'links to' lines to the same line
! % substitute /^\(\w\+\)\n\s*\(links to.*\)/\1\t\2/e
! 
! " move linked groups to the end of file
! global /links to/ move $
! 
! " move linked group names to the matching preferred groups
! " TODO: this fails if the group linked to isn't defined
! % substitute /^\(\w\+\)\s*\(links to\)\s*\(\w\+\)$/\3\t\2 \1/e
! silent! global /links to/ normal mz3ElD0#$p'zdd
! 
! " delete empty lines
! global /^ *$/ delete
! 
! " precede syntax command
! % substitute /^[^ ]*/syn keyword &\t&/
! 
! " execute syntax commands
! syntax clear
! % yank a
! @a
! 
! " remove syntax commands again
! % substitute /^syn keyword //
! 
! " pretty formatting
! global /^/ exe "normal Wi\<CR>\t\eAA\ex"
! global /^\S/ join
! 
! " find out first syntax highlighting
! let b:various = &highlight.',:Normal,:Cursor,:,'
! let b:i = 1
! while b:various =~ ':'.substitute(getline(b:i), '\s.*$', ',', '')
!    let b:i = b:i + 1
!    if b:i > line("$") | break | endif
! endwhile
! 
! " insert headlines
! call append(0, "Highlighting groups for various occasions")
! call append(1, "-----------------------------------------")
! 
! if b:i < line("$")-1
!    let b:synhead = "Syntax highlighting groups"
!    if exists("hitest_filetypes")
!       redir @a
!       let
!       redir END
!       let @a = substitute(@a, 'did_\(\w\+\)_syn\w*_inits\s*#1', ', \1', 'g')
!       let @a = substitute(@a, "\n\\w[^\n]*", '', 'g')
!       let @a = substitute(@a, "\n", '', 'g')
!       let @a = substitute(@a, '^,', '', 'g')
!       if @a != ""
!        let b:synhead = b:synhead." - filetype"
!        if @a =~ ','
!           let b:synhead = b:synhead."s"
!        endif
!        let b:synhead = b:synhead.":".@a
!       endif
!    endif
!    call append(b:i+1, "")
!    call append(b:i+2, b:synhead)
!    call append(b:i+3, substitute(b:synhead, '.', '-', 'g'))
! endif
! 
! " remove 'hls' highlighting
! nohlsearch
! normal 0
! 
! " we don't want to save this temporary file
! set nomodified
! 
! " the following trick avoids the "Press RETURN ..." prompt
! 0 append
! .
! 
! " restore global options and registers
! let &hidden      = s:hidden
! let &lazyredraw  = s:lazyredraw
! let &more      = s:more
! let &report    = s:report
! let &shortmess         = s:shortmess
! let &whichwrap   = s:whichwrap
! let &wrapscan  = s:wrapscan
! let @a                 = s:register_a
! 
! " restore last search pattern
! call histdel("search", -1)
! let @/ = s:register_se
! 
! " remove variables
! unlet s:hidden s:lazyredraw s:more s:report s:shortmess
! unlet s:whichwrap s:wrapscan s:register_a s:register_se
! 
! " vim: ts=8
--- 1,10 ----
  " Vim syntax file
  " Language:   none; used to see highlighting
! " Maintainer: github user lacygoill
! " Last Change:        2023 Mar 08
  
  " To see your current highlight settings, do
  "    :so $VIMRUNTIME/syntax/hitest.vim
  
! import 'dist/vimhighlight.vim'
! call vimhighlight.HighlightTest()
*** ../vim-9.0.1398/src/version.c       2023-03-10 18:28:09.065055754 +0000
--- src/version.c       2023-03-10 18:33:31.224647652 +0000
***************
*** 697,698 ****
--- 697,700 ----
  {   /* Add new patch number below this line */
+ /**/
+     1399,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
256. You are able to write down over 250 symptoms of being an internet
     addict, even though they only asked for 101.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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 on the web visit 
https://groups.google.com/d/msgid/vim_dev/20230310183746.B7D8E1C0D07%40moolenaar.net.

Raspunde prin e-mail lui