Mercurial > vim
view runtime/ftplugin/debcontrol.vim @ 34684:faf891660963 v9.1.0223
patch 9.1.0223: code duplication in loop to add active text properties
Commit: https://github.com/vim/vim/commit/1134fdd1b369119d0d6992e3120bb5f7c788b697
Author: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Date: Thu Mar 28 11:49:46 2024 +0100
patch 9.1.0223: code duplication in loop to add active text properties
Problem: There are two dense conditions with duplication that needs to
be kept in sync between the while loop break condition and the
condition to skip certain text properties.
Solution: Refactor the loop by moving while loop conditions into the
body of the while loop so they can be shared with skip
conditions. `break` and an `active` variable are used to
handle the outcome of these merged conditions.
(Dylan Thacker-Smith)
closes: #14307
Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 28 Mar 2024 12:00:05 +0100 |
parents | cc751d944b7e |
children | a513a0b170e1 |
line wrap: on
line source
" Vim filetype plugin file (GUI menu and folding) " Language: Debian control files " Maintainer: Debian Vim Maintainers " Former Maintainer: Pierre Habouzit <madcoder@debian.org> " Last Change: 2023 Jan 16 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/ftplugin/debcontrol.vim " Do these settings once per buffer if exists('b:did_ftplugin') finish endif let b:did_ftplugin=1 " {{{1 Local settings (do on every load) if exists('g:debcontrol_fold_enable') setlocal foldmethod=expr setlocal foldexpr=DebControlFold(v:lnum) setlocal foldtext=DebControlFoldText() endif setlocal textwidth=0 " Clean unloading let b:undo_ftplugin = 'setlocal tw< foldmethod< foldexpr< foldtext<' " }}}1 " {{{1 folding function! s:getField(f, lnum) let line = getline(a:lnum) let fwdsteps = 0 while line !~ '^'.a:f.':' let fwdsteps += 1 let line = getline(a:lnum + fwdsteps) if line ==# '' return 'unknown' endif endwhile return substitute(line, '^'.a:f.': *', '', '') endfunction function! DebControlFoldText() if v:folddashes ==# '-' " debcontrol entry fold let type = substitute(getline(v:foldstart), ':.*', '', '') if type ==# 'Source' let ftext = substitute(foldtext(), ' *Source: *', ' ', '') return ftext . ' -- ' . s:getField('Maintainer', v:foldstart) . ' ' endif let arch = s:getField('Architecture', v:foldstart) let ftext = substitute(foldtext(), ' *Package: *', ' [' . arch . '] ', '') return ftext . ': ' . s:getField('Description', v:foldstart) . ' ' endif return foldtext() endfunction function! DebControlFold(l) " This is for not merging blank lines around folds to them if getline(a:l) =~# '^Source:' return '>1' endif if getline(a:l) =~# '^Package:' return '>1' endif return '=' endfunction " }}}1