pax_global_header00006660000000000000000000000064142240575510014517gustar00rootroot0000000000000052 comment=0a229746e4a8e9c5b3b4666e9452dec2cbe69c9b kergoth-vim-bitbake-0a22974/000077500000000000000000000000001422405755100156245ustar00rootroot00000000000000kergoth-vim-bitbake-0a22974/LICENSE.txt000066400000000000000000000020261422405755100174470ustar00rootroot00000000000000The MIT License (MIT) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. kergoth-vim-bitbake-0a22974/ftdetect/000077500000000000000000000000001422405755100174265ustar00rootroot00000000000000kergoth-vim-bitbake-0a22974/ftdetect/bitbake.vim000066400000000000000000000013271422405755100215470ustar00rootroot00000000000000" Vim filetype detection file " Language: BitBake " Author: Ricardo Salveti " Copyright: Copyright (C) 2008 Ricardo Salveti " Licence: You may redistribute this under the same terms as Vim itself " " This sets up the syntax highlighting for BitBake files, like .bb, .bbclass and .inc if &compatible || version < 600 || exists("b:loaded_bitbake_plugin") finish endif " .bb, .bbappend and .bbclass au BufNewFile,BufRead *.{bb,bbappend,bbclass} set filetype=bitbake " .inc au BufNewFile,BufRead *.inc set filetype=bitbake " .conf au BufNewFile,BufRead *.conf \ if (match(expand("%:p:h"), "conf") > 0) | \ set filetype=bitbake | \ endif kergoth-vim-bitbake-0a22974/ftplugin/000077500000000000000000000000001422405755100174545ustar00rootroot00000000000000kergoth-vim-bitbake-0a22974/ftplugin/bitbake.vim000066400000000000000000000005041422405755100215710ustar00rootroot00000000000000" Only do this when not done yet for this buffer if exists("b:did_ftplugin") finish endif " Don't load another plugin for this buffer let b:did_ftplugin = 1 let b:undo_ftplugin = "setl cms< sts< sw< et< sua<" setlocal commentstring=#\ %s setlocal softtabstop=4 shiftwidth=4 expandtab setlocal suffixesadd+=.bb,.bbclass kergoth-vim-bitbake-0a22974/indent/000077500000000000000000000000001422405755100171055ustar00rootroot00000000000000kergoth-vim-bitbake-0a22974/indent/bitbake.vim000066400000000000000000000247441422405755100212360ustar00rootroot00000000000000" Vim indent file " Language: BitBake " Copyright: Copyright (C) 2019 Agilent Technologies, Inc. " Maintainer: Chris Laplante " License: You may redistribute this under the same terms as Vim itself if exists("b:did_indent") finish endif if exists("*BitbakeIndent") finish endif runtime! indent/sh.vim unlet b:did_indent setlocal indentexpr=BitbakeIndent(v:lnum) setlocal autoindent nolisp function s:is_bb_python_func_def(lnum) let stack = synstack(a:lnum, 1) if len(stack) == 0 return 0 endif let top = synIDattr(stack[0], "name") echo top return synIDattr(stack[0], "name") == "bbPyFuncDef" endfunction """" begin modified from indent/python.vim, upstream commit 7a9bd7c1e0ce1baf5a02daf36eeae3638aa315c7 """" This copied code is licensed the same as Vim itself. setlocal indentkeys+=<:>,=elif,=except let s:keepcpo= &cpo set cpo&vim let s:maxoff = 50 " maximum number of lines to look backwards for () function GetBitbakePythonIndent(lnum) " If this line is explicitly joined: If the previous line was also joined, " line it up with that one, otherwise add two 'shiftwidth' if getline(a:lnum - 1) =~ '\\$' if a:lnum > 1 && getline(a:lnum - 2) =~ '\\$' return indent(a:lnum - 1) endif return indent(a:lnum - 1) + (exists("g:pyindent_continue") ? eval(g:pyindent_continue) : (shiftwidth() * 2)) endif " If the start of the line is in a string don't change the indent. if has('syntax_items') \ && synIDattr(synID(a:lnum, 1, 1), "name") =~ "String$" return -1 endif " Search backwards for the previous non-empty line. let plnum = prevnonblank(v:lnum - 1) if plnum == 0 " This is the first non-empty line, use zero indent. return 0 endif call cursor(plnum, 1) " Identing inside parentheses can be very slow, regardless of the searchpair() " timeout, so let the user disable this feature if he doesn't need it let disable_parentheses_indenting = get(g:, "pyindent_disable_parentheses_indenting", 0) if disable_parentheses_indenting == 1 let plindent = indent(plnum) let plnumstart = plnum else " searchpair() can be slow sometimes, limit the time to 150 msec or what is " put in g:pyindent_searchpair_timeout let searchpair_stopline = 0 let searchpair_timeout = get(g:, 'pyindent_searchpair_timeout', 150) " If the previous line is inside parenthesis, use the indent of the starting " line. " Trick: use the non-existing "dummy" variable to break out of the loop when " going too far back. let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', \ "line('.') < " . (plnum - s:maxoff) . " ? dummy :" \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')" \ . " =~ '\\(Comment\\|Todo\\|String\\)$'", \ searchpair_stopline, searchpair_timeout) if parlnum > 0 " We may have found the opening brace of a BitBake Python task, e.g. 'python do_task {' " If so, ignore it here - it will be handled later. if s:is_bb_python_func_def(parlnum) let parlnum = 0 let plindent = indent(plnum) let plnumstart = plnum else let plindent = indent(parlnum) let plnumstart = parlnum endif else let plindent = indent(plnum) let plnumstart = plnum endif " When inside parenthesis: If at the first line below the parenthesis add " two 'shiftwidth', otherwise same as previous line. " i = (a " + b " + c) call cursor(a:lnum, 1) let p = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW', \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')" \ . " =~ '\\(Comment\\|Todo\\|String\\)$'", \ searchpair_stopline, searchpair_timeout) if p > 0 if s:is_bb_python_func_def(p) " Handle first non-empty line inside a BB Python task if p == plnum return shiftwidth() endif " Handle the user actually trying to close a BitBake Python task let line = getline(a:lnum) if line =~ '^\s*}' return -2 endif " Otherwise ignore the brace let p = 0 else if p == plnum " When the start is inside parenthesis, only indent one 'shiftwidth'. let pp = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW', \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')" \ . " =~ '\\(Comment\\|Todo\\|String\\)$'", \ searchpair_stopline, searchpair_timeout) if pp > 0 return indent(plnum) + (exists("g:pyindent_nested_paren") ? eval(g:pyindent_nested_paren) : shiftwidth()) endif return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : (shiftwidth() * 2)) endif if plnumstart == p return indent(plnum) endif return plindent endif endif endif " Get the line and remove a trailing comment. " Use syntax highlighting attributes when possible. let pline = getline(plnum) let pline_len = strlen(pline) if has('syntax_items') " If the last character in the line is a comment, do a binary search for " the start of the comment. synID() is slow, a linear search would take " too long on a long line. if synIDattr(synID(plnum, pline_len, 1), "name") =~ "\\(Comment\\|Todo\\)$" let min = 1 let max = pline_len while min < max let col = (min + max) / 2 if synIDattr(synID(plnum, col, 1), "name") =~ "\\(Comment\\|Todo\\)$" let max = col else let min = col + 1 endif endwhile let pline = strpart(pline, 0, min - 1) endif else let col = 0 while col < pline_len if pline[col] == '#' let pline = strpart(pline, 0, col) break endif let col = col + 1 endwhile endif " If the previous line ended with a colon, indent this line if pline =~ ':\s*$' return plindent + shiftwidth() endif " If the previous line was a stop-execution statement... " TODO: utilize this logic to deindent when ending a bbPyDefRegion if getline(plnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\|bb\.fatal\)\>' " See if the user has already dedented if indent(a:lnum) > indent(plnum) - shiftwidth() " If not, recommend one dedent return indent(plnum) - shiftwidth() endif " Otherwise, trust the user return -1 endif " If the current line begins with a keyword that lines up with "try" if getline(a:lnum) =~ '^\s*\(except\|finally\)\>' let lnum = a:lnum - 1 while lnum >= 1 if getline(lnum) =~ '^\s*\(try\|except\)\>' let ind = indent(lnum) if ind >= indent(a:lnum) return -1 " indent is already less than this endif return ind " line up with previous try or except endif let lnum = lnum - 1 endwhile return -1 " no matching "try"! endif " If the current line begins with a header keyword, dedent if getline(a:lnum) =~ '^\s*\(elif\|else\)\>' " Unless the previous line was a one-liner if getline(plnumstart) =~ '^\s*\(for\|if\|try\)\>' return plindent endif " Or the user has already dedented if indent(a:lnum) <= plindent - shiftwidth() return -1 endif return plindent - shiftwidth() endif " When after a () construct we probably want to go back to the start line. " a = (b " + c) " here if parlnum > 0 return plindent endif return -1 endfunction let &cpo = s:keepcpo unlet s:keepcpo """ end of stuff from indent/python.vim let b:did_indent = 1 setlocal indentkeys+=0\" function BitbakeIndent(lnum) if !has('syntax_items') return -1 endif let stack = synstack(a:lnum, 1) if len(stack) == 0 return -1 endif let name = synIDattr(stack[0], "name") " TODO: support different styles of indentation for assignments. For now, " we only support like this: " VAR = " \ " value1 \ " value2 \ " " " " i.e. each value indented by shiftwidth(), with the final quote " completely unindented. if name == "bbVarValue" " Quote handling is tricky. kernel.bbclass has this line for instance: " EXTRA_OEMAKE = " HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" " HOSTCPP="${BUILD_CPP}"" " Instead of trying to handle crazy cases like that, just assume that a " double-quote on a line by itself (following an assignment) means the " user is closing the assignment, and de-dent. if getline(a:lnum) =~ '^\s*"$' return 0 endif let prevstack = synstack(a:lnum - 1, 1) if len(prevstack) == 0 return -1 endif let prevname = synIDattr(prevstack[0], "name") " Only indent if there was actually a continuation character on " the previous line, to avoid misleading indentation. let prevlinelastchar = synIDattr(synID(a:lnum - 1, col([a:lnum - 1, "$"]) - 1, 1), "name") let prev_continued = prevlinelastchar == "bbContinue" " Did the previous line introduce an assignment? if index(["bbVarDef", "bbVarFlagDef"], prevname) != -1 if prev_continued return shiftwidth() endif endif if !prev_continued return 0 endif " Autoindent can take it from here return -1 endif if index(["bbPyDefRegion", "bbPyFuncRegion"], name) != -1 let ret = GetBitbakePythonIndent(a:lnum) " Should normally always be indented by at least one shiftwidth; but allow " return of -1 (defer to autoindent) or -2 (force indent to 0) if ret == 0 return shiftwidth() elseif ret == -2 return 0 endif return ret endif " TODO: GetShIndent doesn't detect tasks prepended with 'fakeroot' " Need to submit a patch upstream to Vim to provide an extension point. " Unlike the Python indenter, the Sh indenter is way too large to copy and " modify here. if name == "bbShFuncRegion" return GetShIndent() endif " TODO: " + heuristics for de-denting out of a bbPyDefRegion? e.g. when the user " types an obvious BB keyword like addhandler or addtask, or starts " writing a shell task. Maybe too hard to implement... return -1 endfunction kergoth-vim-bitbake-0a22974/plugin/000077500000000000000000000000001422405755100171225ustar00rootroot00000000000000kergoth-vim-bitbake-0a22974/plugin/newbb.vim000066400000000000000000000040461422405755100207400ustar00rootroot00000000000000" Vim plugin file " Purpose: Create a template for new bb files " Author: Ricardo Salveti " Copyright: Copyright (C) 2008 Ricardo Salveti " " This file is licensed under the MIT license, see COPYING.MIT in " this source distribution for the terms. " " Based on the gentoo-syntax package " " Will try to use git to find the user name and email if &compatible || v:version < 600 || exists("b:loaded_bitbake_plugin") finish endif fun! GetUserName() let l:user_name = system("git config --get user.name") if v:shell_error return "Unknown User" else return substitute(l:user_name, "\n", "", "") endfun fun! GetUserEmail() let l:user_email = system("git config --get user.email") if v:shell_error return "unknown@user.org" else return substitute(l:user_email, "\n", "", "") endfun fun! BBHeader() let l:current_year = strftime("%Y") let l:user_name = GetUserName() let l:user_email = GetUserEmail() 0 put ='# Copyright (C) ' . l:current_year . \ ' ' . l:user_name . ' <' . l:user_email . '>' put ='# Released under the MIT license (see COPYING.MIT for the terms)' $ endfun fun! NewBBTemplate() if line2byte(line('$') + 1) != -1 return endif let l:paste = &paste set nopaste " Get the header call BBHeader() " New the bb template put ='SUMMARY = \"\"' put ='HOMEPAGE = \"\"' put ='LICENSE = \"\"' put ='SECTION = \"\"' put ='DEPENDS = \"\"' put ='' put ='SRC_URI = \"\"' " Go to the first place to edit 0 /^SUMMARY =/ exec "normal 2f\"" if paste == 1 set paste endif endfun if !exists("g:bb_create_on_empty") let g:bb_create_on_empty = 1 endif " disable in case of vimdiff if v:progname =~ "vimdiff" let g:bb_create_on_empty = 0 endif augroup NewBB au BufNewFile,BufReadPost *.bb \ if g:bb_create_on_empty | \ call NewBBTemplate() | \ endif augroup END kergoth-vim-bitbake-0a22974/plugin/newbbappend.vim000066400000000000000000000020061422405755100221220ustar00rootroot00000000000000" Vim plugin file " Purpose: Create a template for new bbappend file " Author: Joshua Watt " Copyright: Copyright (C) 2017 Joshua Watt " " This file is licensed under the MIT license, see COPYING.MIT in " this source distribution for the terms. " if &compatible || v:version < 600 || exists("b:loaded_bitbake_plugin") finish endif fun! NewBBAppendTemplate() if line2byte(line('$') + 1) != -1 return endif let l:paste = &paste set nopaste " New bbappend template 0 put ='FILESEXTRAPATHS:prepend := \"${THISDIR}/${PN}:\"' 2 if paste == 1 set paste endif endfun if !exists("g:bb_create_on_empty") let g:bb_create_on_empty = 1 endif " disable in case of vimdiff if v:progname =~ "vimdiff" let g:bb_create_on_empty = 0 endif augroup NewBBAppend au BufNewFile,BufReadPost *.bbappend \ if g:bb_create_on_empty | \ call NewBBAppendTemplate() | \ endif augroup END kergoth-vim-bitbake-0a22974/syntax/000077500000000000000000000000001422405755100171525ustar00rootroot00000000000000kergoth-vim-bitbake-0a22974/syntax/bitbake.vim000066400000000000000000000134141422405755100212730ustar00rootroot00000000000000" Vim syntax file " Language: BitBake bb/bbclasses/inc " Author: Chris Larson " Ricardo Salveti " Copyright: Copyright (C) 2004 Chris Larson " Copyright (C) 2008 Ricardo Salveti " " This file is licensed under the MIT license, see COPYING.MIT in " this source distribution for the terms. " " Syntax highlighting for bb, bbclasses and inc files. " " It's an entirely new type, just has specific syntax in shell and python code if &compatible || v:version < 600 || exists("b:loaded_bitbake_plugin") finish endif if exists("b:current_syntax") finish endif syn include @python syntax/python.vim if exists("b:current_syntax") unlet b:current_syntax endif " BitBake syntax " Matching case syn case match " Indicates the error when nothing is matched syn match bbUnmatched "." " Comments syn cluster bbCommentGroup contains=bbTodo,@Spell syn keyword bbTodo COMBAK FIXME TODO XXX contained syn match bbComment "#.*$" contains=@bbCommentGroup " String helpers syn match bbQuote +['"]+ contained syn match bbDelimiter "[(){}=]" contained syn match bbArrayBrackets "[\[\]]" contained " BitBake strings syn match bbContinue "\\$" syn region bbString matchgroup=bbQuote start=+"+ skip=+\\$+ end=+"+ contained contains=bbTodo,bbContinue,bbVarDeref,bbVarPyValue,@Spell syn region bbString matchgroup=bbQuote start=+'+ skip=+\\$+ end=+'+ contained contains=bbTodo,bbContinue,bbVarDeref,bbVarPyValue,@Spell " Vars definition syn match bbExport "^export" nextgroup=bbIdentifier skipwhite syn keyword bbExportFlag export contained nextgroup=bbIdentifier skipwhite syn match bbIdentifier "[a-zA-Z0-9\-_\.\/\+]\+" display contained syn match bbVarDeref "${[a-zA-Z0-9\-_\.\/\+]\+}" contained syn match bbVarEq "\(:=\|+=\|=+\|\.=\|=\.\|?=\|??=\|=\)" contained nextgroup=bbVarValue syn match bbVarDef "^\(export\s*\)\?\([a-zA-Z0-9\-_:\.\/\+]\+\([_:][${}a-zA-Z0-9\-_:\.\/\+]\+\)\?\)\s*\(:=\|+=\|=+\|\.=\|=\.\|?=\|??=\|=\)\@=" contains=bbExportFlag,bbIdentifier,bbVarDeref nextgroup=bbVarEq syn match bbVarValue ".*$" contained contains=bbString,bbVarDeref,bbVarPyValue syn region bbVarPyValue start=+${@+ skip=+\\$+ end=+}+ contained contains=@python " Vars metadata flags syn match bbVarFlagDef "^\([a-zA-Z0-9\-_\.]\+\)\(\[[a-zA-Z0-9\-_\.+]\+\]\)\@=" contains=bbIdentifier nextgroup=bbVarFlagFlag syn region bbVarFlagFlag matchgroup=bbArrayBrackets start="\[" end="\]\s*\(:=\|=\|.=\|=.|+=\|=+\|?=\)\@=" contained contains=bbIdentifier nextgroup=bbVarEq " Includes and requires syn keyword bbInclude inherit include require contained syn match bbIncludeRest ".*$" contained contains=bbString,bbVarDeref syn match bbIncludeLine "^\(inherit\|include\|require\)\s\+" contains=bbInclude nextgroup=bbIncludeRest " Add taks and similar syn keyword bbStatement addtask deltask addhandler after before EXPORT_FUNCTIONS contained syn match bbStatementRest ".*$" skipwhite contained contains=bbStatement syn match bbStatementLine "^\(addtask\|deltask\|addhandler\|after\|before\|EXPORT_FUNCTIONS\)\s\+" contains=bbStatement nextgroup=bbStatementRest " OE Important Functions syn keyword bbOEFunctions do_fetch do_unpack do_patch do_configure do_compile do_stage do_install do_package contained " Generic Functions syn match bbFunction "\h[0-9A-Za-z_\-\.]*" display contained contains=bbOEFunctions " BitBake shell metadata syn include @shell syntax/sh.vim if exists("b:current_syntax") unlet b:current_syntax endif syn keyword bbShFakeRootFlag fakeroot contained syn match bbShFuncDef "^\(fakeroot\s*\)\?\([\.0-9A-Za-z_${}\-\:\.]\+\)\(python\)\@