-
-
Notifications
You must be signed in to change notification settings - Fork 5.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
patch 9.0.1399: highlight test script has a few problems
Problem: Highlight test script has a few problems. Solution: Rewrite the script in Vim9 syntax. (closes #10379)
- Loading branch information
Showing
3 changed files
with
125 additions
and
143 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,149 +1,10 @@ | ||
" Vim syntax file | ||
" Language: none; used to see highlighting | ||
" Maintainer: Ronald Schild <rs@scutum.de> | ||
" Last Change: 2019 Jun 06 | ||
" Version: 5.4n.1 | ||
" Additional Changes By: Lifepillar, Bram | ||
" Maintainer: github user lacygoill | ||
" Last Change: 2023 Mar 08 | ||
|
||
" 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 | ||
import 'dist/vimhighlight.vim' | ||
call vimhighlight.HighlightTest() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters