view runtime/import/dist/vimhighlight.vim @ 33293:42b89193ab3e v9.0.1912

patch 9.0.1912: Cirrus-CI running out of credits Commit: https://github.com/vim/vim/commit/6f00d17e8d64ed46c85625e8ac38ed0928b32c58 Author: Christian Brabandt <cb@256bit.org> Date: Tue Sep 19 20:16:46 2023 +0200 patch 9.0.1912: Cirrus-CI running out of credits Problem: Cirrus-CI running out of credits Solution: disable Cirrus-CI for now We are running out of credits for Cirrus CI already at the middle of the month and unfortunately this means our CI now consistently fails. This all hapens because cirrus ci is not enforcing the free-tier limits (see also https://cirrus-ci.org/blog/2023/07/17/limiting-free-usage-of-cirrus-ci/). Perhaps at the beginning of the next month we can revisit and enable just a build without testing it. Hopefully this is won't take too many credits and we can at least verify that building works. Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Tue, 19 Sep 2023 20:30:10 +0200
parents 50e447c67247
children
line wrap: on
line source

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