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.