cb424d7448
verify-patch-sanity.py validates every active recipe .patch has internally- consistent hunk line counts — catching the 'malformed patch at line N' failure at commit/CI/preflight time instead of hours into a cook. This cycle hit that class three times (qtwaylandscanner, sddm, xwayland), each only discovered when cookbook tried to apply the patch. Running it across the repo found 29 latent malformed patches (validated against GNU patch: e.g. relibc/P3-sysv-ipc reproduces 'malformed patch at line 22'). They were harmless only because they sit in vendored recipes (baked, not re- applied) — but would fail on any version-bump re-derivation. --fix recounts the hunk headers (body untouched) and repaired all 29. Wired into build-preflight.sh (Phase 1.0D) and redbear-ci.yml, with a unit test (test-patch-sanity.sh). Skips archived/legacy trees and unvalidatable formats (empty placeholders, bare-@@ git hunks).
229 lines
7.0 KiB
VimL
229 lines
7.0 KiB
VimL
" LLVM coding guidelines conformance for VIM
|
|
" $Revision$
|
|
"
|
|
" Maintainer: The LLVM Team, http://llvm.org
|
|
" WARNING: Read before you source in all these commands and macros! Some
|
|
" of them may change VIM behavior that you depend on.
|
|
"
|
|
" You can run VIM with these settings without changing your current setup with:
|
|
" $ vim -u /path/to/llvm/utils/vim/vimrc
|
|
|
|
" It's VIM, not VI
|
|
set nocompatible
|
|
|
|
" A tab produces a 2-space indentation
|
|
set softtabstop=2
|
|
set shiftwidth=2
|
|
set expandtab
|
|
|
|
" Highlight trailing whitespace and lines longer than 80 columns.
|
|
highlight LongLine ctermbg=DarkYellow guibg=DarkYellow
|
|
highlight WhitespaceEOL ctermbg=DarkYellow guibg=DarkYellow
|
|
if v:version >= 702
|
|
" Lines longer than 80 columns.
|
|
au BufWinEnter * let w:m0=matchadd('LongLine', '\%>80v.\+', -1)
|
|
|
|
" Whitespace at the end of a line. This little dance suppresses
|
|
" whitespace that has just been typed.
|
|
au BufWinEnter * let w:m1=matchadd('WhitespaceEOL', '\s\+$', -1)
|
|
au InsertEnter * call matchdelete(w:m1)
|
|
au InsertEnter * let w:m2=matchadd('WhitespaceEOL', '\s\+\%#\@<!$', -1)
|
|
au InsertLeave * call matchdelete(w:m2)
|
|
au InsertLeave * let w:m1=matchadd('WhitespaceEOL', '\s\+$', -1)
|
|
else
|
|
au BufRead,BufNewFile * syntax match LongLine /\%>80v.\+/
|
|
au InsertEnter * syntax match WhitespaceEOL /\s\+\%#\@<!$/
|
|
au InsertLeave * syntax match WhitespaceEOL /\s\+$/
|
|
endif
|
|
|
|
" Enable filetype detection
|
|
filetype on
|
|
|
|
" Optional
|
|
" C/C++ programming helpers
|
|
augroup csrc
|
|
au!
|
|
autocmd FileType * set nocindent smartindent
|
|
autocmd FileType c,cpp set cindent
|
|
augroup END
|
|
" Set a few indentation parameters. See the VIM help for cinoptions-values for
|
|
" details. These aren't absolute rules; they're just an approximation of
|
|
" common style in LLVM source.
|
|
set cinoptions=:0,g0,(0,Ws,l1
|
|
" Add and delete spaces in increments of `shiftwidth' for tabs
|
|
set smarttab
|
|
|
|
" Highlight syntax in programming languages
|
|
syntax on
|
|
|
|
" LLVM Makefiles can have names such as Makefile.rules or TEST.nightly.Makefile,
|
|
" so it's important to categorize them as such.
|
|
augroup filetype
|
|
au! BufRead,BufNewFile *Makefile* set filetype=make
|
|
augroup END
|
|
|
|
" In Makefiles, don't expand tabs to spaces, since we need the actual tabs
|
|
autocmd FileType make set noexpandtab
|
|
|
|
" Useful macros for cleaning up code to conform to LLVM coding guidelines
|
|
|
|
" Delete trailing whitespace and tabs at the end of each line
|
|
command! DeleteTrailingWs :%s/\s\+$//
|
|
|
|
" Convert all tab characters to two spaces
|
|
command! Untab :%s/\t/ /g
|
|
|
|
" Enable syntax highlighting for LLVM files. To use, copy
|
|
" utils/vim/syntax/llvm.vim to ~/.vim/syntax .
|
|
augroup filetype
|
|
au! BufRead,BufNewFile *.ll set filetype=llvm
|
|
augroup END
|
|
|
|
" Enable syntax highlighting for tablegen files. To use, copy
|
|
" utils/vim/syntax/tablegen.vim to ~/.vim/syntax .
|
|
augroup filetype
|
|
au! BufRead,BufNewFile *.td set filetype=tablegen
|
|
augroup END
|
|
|
|
" Enable syntax highlighting for reStructuredText files. To use, copy
|
|
" rest.vim (http://www.vim.org/scripts/script.php?script_id=973)
|
|
" to ~/.vim/syntax .
|
|
augroup filetype
|
|
au! BufRead,BufNewFile *.rst set filetype=rest
|
|
augroup END
|
|
|
|
" Additional vim features to optionally uncomment.
|
|
"set showcmd
|
|
"set showmatch
|
|
"set showmode
|
|
"set incsearch
|
|
"set ruler
|
|
|
|
" Clang code-completion support. This is somewhat experimental!
|
|
|
|
" A path to a clang executable.
|
|
let g:clang_path = "clang++"
|
|
|
|
" A list of options to add to the clang commandline, for example to add
|
|
" include paths, predefined macros, and language options.
|
|
let g:clang_opts = [
|
|
\ "-x","c++",
|
|
\ "-D__STDC_LIMIT_MACROS=1","-D__STDC_CONSTANT_MACROS=1",
|
|
\ "-Iinclude" ]
|
|
|
|
function! ClangComplete(findstart, base)
|
|
if a:findstart == 1
|
|
" In findstart mode, look for the beginning of the current identifier.
|
|
let l:line = getline('.')
|
|
let l:start = col('.') - 1
|
|
while l:start > 0 && l:line[l:start - 1] =~ '\i'
|
|
let l:start -= 1
|
|
endwhile
|
|
return l:start
|
|
endif
|
|
|
|
" Get the current line and column numbers.
|
|
let l:l = line('.')
|
|
let l:c = col('.')
|
|
|
|
" Build a clang commandline to do code completion on stdin.
|
|
let l:the_command = shellescape(g:clang_path) .
|
|
\ " -cc1 -code-completion-at=-:" . l:l . ":" . l:c
|
|
for l:opt in g:clang_opts
|
|
let l:the_command .= " " . shellescape(l:opt)
|
|
endfor
|
|
|
|
" Copy the contents of the current buffer into a string for stdin.
|
|
" TODO: The extra space at the end is for working around clang's
|
|
" apparent inability to do code completion at the very end of the
|
|
" input.
|
|
" TODO: Is it better to feed clang the entire file instead of truncating
|
|
" it at the current line?
|
|
let l:process_input = join(getline(1, l:l), "\n") . " "
|
|
|
|
" Run it!
|
|
let l:input_lines = split(system(l:the_command, l:process_input), "\n")
|
|
|
|
" Parse the output.
|
|
for l:input_line in l:input_lines
|
|
" Vim's substring operator is annoyingly inconsistent with python's.
|
|
if l:input_line[:11] == 'COMPLETION: '
|
|
let l:value = l:input_line[12:]
|
|
|
|
" Chop off anything after " : ", if present, and move it to the menu.
|
|
let l:menu = ""
|
|
let l:spacecolonspace = stridx(l:value, " : ")
|
|
if l:spacecolonspace != -1
|
|
let l:menu = l:value[l:spacecolonspace+3:]
|
|
let l:value = l:value[:l:spacecolonspace-1]
|
|
endif
|
|
|
|
" Chop off " (Hidden)", if present, and move it to the menu.
|
|
let l:hidden = stridx(l:value, " (Hidden)")
|
|
if l:hidden != -1
|
|
let l:menu .= " (Hidden)"
|
|
let l:value = l:value[:l:hidden-1]
|
|
endif
|
|
|
|
" Handle "Pattern". TODO: Make clang less weird.
|
|
if l:value == "Pattern"
|
|
let l:value = l:menu
|
|
let l:pound = stridx(l:value, "#")
|
|
" Truncate the at the first [#, <#, or {#.
|
|
if l:pound != -1
|
|
let l:value = l:value[:l:pound-2]
|
|
endif
|
|
endif
|
|
|
|
" Filter out results which don't match the base string.
|
|
if a:base != ""
|
|
if l:value[:strlen(a:base)-1] != a:base
|
|
continue
|
|
end
|
|
endif
|
|
|
|
" TODO: Don't dump the raw input into info, though it's nice for now.
|
|
" TODO: The kind string?
|
|
let l:item = {
|
|
\ "word": l:value,
|
|
\ "menu": l:menu,
|
|
\ "info": l:input_line,
|
|
\ "dup": 1 }
|
|
|
|
" Report a result.
|
|
if complete_add(l:item) == 0
|
|
return []
|
|
endif
|
|
if complete_check()
|
|
return []
|
|
endif
|
|
|
|
elseif l:input_line[:9] == "OVERLOAD: "
|
|
" An overload candidate. Use a crazy hack to get vim to
|
|
" display the results. TODO: Make this better.
|
|
let l:value = l:input_line[10:]
|
|
let l:item = {
|
|
\ "word": " ",
|
|
\ "menu": l:value,
|
|
\ "info": l:input_line,
|
|
\ "dup": 1}
|
|
|
|
" Report a result.
|
|
if complete_add(l:item) == 0
|
|
return []
|
|
endif
|
|
if complete_check()
|
|
return []
|
|
endif
|
|
|
|
endif
|
|
endfor
|
|
|
|
|
|
return []
|
|
endfunction ClangComplete
|
|
|
|
" This to enables the somewhat-experimental clang-based
|
|
" autocompletion support.
|
|
set omnifunc=ClangComplete
|