160cce2fbSBram Moolenaar" Vim filetype plugin file 260cce2fbSBram Moolenaar" Language: Bazel (http://bazel.io) 360cce2fbSBram Moolenaar" Maintainer: David Barnett (https://github.com/google/vim-ft-bzl) 4*e0e39175SBram Moolenaar" Last Change: 2021 Jan 19 560cce2fbSBram Moolenaar 660cce2fbSBram Moolenaar"" 760cce2fbSBram Moolenaar" @section Introduction, intro 860cce2fbSBram Moolenaar" Core settings for the bzl filetype, used for BUILD and *.bzl files for the 960cce2fbSBram Moolenaar" Bazel build system (http://bazel.io/). 1060cce2fbSBram Moolenaar 1160cce2fbSBram Moolenaarif exists('b:did_ftplugin') 1260cce2fbSBram Moolenaar finish 1360cce2fbSBram Moolenaarendif 1460cce2fbSBram Moolenaar 1560cce2fbSBram Moolenaar 1660cce2fbSBram Moolenaar" Vim 7.4.051 has opinionated settings in ftplugin/python.vim that try to force 1760cce2fbSBram Moolenaar" PEP8 conventions on every python file, but these conflict with Google's 1860cce2fbSBram Moolenaar" indentation guidelines. As a workaround, we explicitly source the system 1960cce2fbSBram Moolenaar" ftplugin, but save indentation settings beforehand and restore them after. 2060cce2fbSBram Moolenaarlet s:save_expandtab = &l:expandtab 2160cce2fbSBram Moolenaarlet s:save_shiftwidth = &l:shiftwidth 2260cce2fbSBram Moolenaarlet s:save_softtabstop = &l:softtabstop 2360cce2fbSBram Moolenaarlet s:save_tabstop = &l:tabstop 2460cce2fbSBram Moolenaar 2560cce2fbSBram Moolenaar" NOTE: Vim versions before 7.3.511 had a ftplugin/python.vim that was broken 2660cce2fbSBram Moolenaar" for compatible mode. 2760cce2fbSBram Moolenaarlet s:save_cpo = &cpo 2860cce2fbSBram Moolenaarset cpo&vim 2960cce2fbSBram Moolenaar 3060cce2fbSBram Moolenaar" Load base python ftplugin (also defines b:did_ftplugin). 3160cce2fbSBram Moolenaarsource $VIMRUNTIME/ftplugin/python.vim 3260cce2fbSBram Moolenaar 3360cce2fbSBram Moolenaar" NOTE: Vim versions before 7.4.104 and later set this in ftplugin/python.vim. 3460cce2fbSBram Moolenaarsetlocal comments=b:#,fb:- 3560cce2fbSBram Moolenaar 3660cce2fbSBram Moolenaar" Restore pre-existing indentation settings. 3760cce2fbSBram Moolenaarlet &l:expandtab = s:save_expandtab 3860cce2fbSBram Moolenaarlet &l:shiftwidth = s:save_shiftwidth 3960cce2fbSBram Moolenaarlet &l:softtabstop = s:save_softtabstop 4060cce2fbSBram Moolenaarlet &l:tabstop = s:save_tabstop 4160cce2fbSBram Moolenaar 4260cce2fbSBram Moolenaarsetlocal formatoptions-=t 4360cce2fbSBram Moolenaar 4460cce2fbSBram Moolenaar" Make gf work with imports in BUILD files. 4560cce2fbSBram Moolenaarsetlocal includeexpr=substitute(v:fname,'//','','') 4660cce2fbSBram Moolenaar 4760cce2fbSBram Moolenaar" Enable syntax-based folding, if specified. 4860cce2fbSBram Moolenaarif get(g:, 'ft_bzl_fold', 0) 4960cce2fbSBram Moolenaar setlocal foldmethod=syntax 5060cce2fbSBram Moolenaar setlocal foldtext=BzlFoldText() 5160cce2fbSBram Moolenaarendif 5260cce2fbSBram Moolenaar 5360cce2fbSBram Moolenaarif exists('*BzlFoldText') 54*e0e39175SBram Moolenaar let &cpo = s:save_cpo 55*e0e39175SBram Moolenaar unlet s:save_cpo 5660cce2fbSBram Moolenaar finish 5760cce2fbSBram Moolenaarendif 5860cce2fbSBram Moolenaar 5960cce2fbSBram Moolenaarfunction BzlFoldText() abort 6060cce2fbSBram Moolenaar let l:start_num = nextnonblank(v:foldstart) 6160cce2fbSBram Moolenaar let l:end_num = prevnonblank(v:foldend) 6260cce2fbSBram Moolenaar 6360cce2fbSBram Moolenaar if l:end_num <= l:start_num + 1 6460cce2fbSBram Moolenaar " If the fold is empty, don't print anything for the contents. 6560cce2fbSBram Moolenaar let l:content = '' 6660cce2fbSBram Moolenaar else 6760cce2fbSBram Moolenaar " Otherwise look for something matching the content regex. 6860cce2fbSBram Moolenaar " And if nothing matches, print an ellipsis. 6960cce2fbSBram Moolenaar let l:content = '...' 7060cce2fbSBram Moolenaar for l:line in getline(l:start_num + 1, l:end_num - 1) 7160cce2fbSBram Moolenaar let l:content_match = matchstr(l:line, '\m\C^\s*name = \zs.*\ze,$') 7260cce2fbSBram Moolenaar if !empty(l:content_match) 7360cce2fbSBram Moolenaar let l:content = l:content_match 7460cce2fbSBram Moolenaar break 7560cce2fbSBram Moolenaar endif 7660cce2fbSBram Moolenaar endfor 7760cce2fbSBram Moolenaar endif 7860cce2fbSBram Moolenaar 7960cce2fbSBram Moolenaar " Enclose content with start and end 8060cce2fbSBram Moolenaar let l:start_text = getline(l:start_num) 8160cce2fbSBram Moolenaar let l:end_text = substitute(getline(l:end_num), '^\s*', '', '') 8260cce2fbSBram Moolenaar let l:text = l:start_text . ' ' . l:content . ' ' . l:end_text 8360cce2fbSBram Moolenaar 8460cce2fbSBram Moolenaar " Compute the available width for the displayed text. 8560cce2fbSBram Moolenaar let l:width = winwidth(0) - &foldcolumn - (&number ? &numberwidth : 0) 8660cce2fbSBram Moolenaar let l:lines_folded = ' ' . string(1 + v:foldend - v:foldstart) . ' lines' 8760cce2fbSBram Moolenaar 8860cce2fbSBram Moolenaar " Expand tabs, truncate, pad, and concatenate 8960cce2fbSBram Moolenaar let l:text = substitute(l:text, '\t', repeat(' ', &tabstop), 'g') 9060cce2fbSBram Moolenaar let l:text = strpart(l:text, 0, l:width - len(l:lines_folded)) 9160cce2fbSBram Moolenaar let l:padding = repeat(' ', l:width - len(l:lines_folded) - len(l:text)) 9260cce2fbSBram Moolenaar return l:text . l:padding . l:lines_folded 9360cce2fbSBram Moolenaarendfunction 9460cce2fbSBram Moolenaar 9560cce2fbSBram Moolenaarlet &cpo = s:save_cpo 9660cce2fbSBram Moolenaarunlet s:save_cpo 97