Mercurial > vim
view runtime/import/dist/vimhighlight.vim @ 33297:6340c608ca54 v9.0.1914
patch 9.0.1914: Vim9: few issues when accessing object members
Commit: https://github.com/vim/vim/commit/1db151436541a3e64cdd5e3d9eb3ace1ce1e1ad0
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Tue Sep 19 20:34:05 2023 +0200
patch 9.0.1914: Vim9: few issues when accessing object members
Problem: Vim9: few issues when accessing object members
Solution: When calling an object method, check for null object.
Accessing a Dict object member doesn't work.
closes: #13119
closes: #13123
closes: #13124
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 19 Sep 2023 20:45:06 +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