Mercurial > vim
view runtime/autoload/bitbake.vim @ 33532:f99f5a56ff27 v9.0.2015
patch 9.0.2015: Vim9: does not handle islocked() from a method correctly
Commit: https://github.com/vim/vim/commit/4c8da025ef8140168b7a09d9fe922ce4bb40f19d
Author: Ernie Rael <errael@raelity.com>
Date: Wed Oct 11 21:35:11 2023 +0200
patch 9.0.2015: Vim9: does not handle islocked() from a method correctly
Problem: Vim9: does not handle islocked() from a method correctly
Solution: Handle islocked() builtin from a method.
- Setup `lval_root` from `f_islocked()`.
- Add function `fill_exec_lval_root()` to get info about executing method.
- `sync_root` added in get_lval to handle method member access.
- Conservative approach to reference counting.
closes: #13309
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Ernie Rael <errael@raelity.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 11 Oct 2023 21:45:04 +0200 |
parents | 67f31c24291b |
children |
line wrap: on
line source
" Support for bitbake indenting, see runtime/indent/bitbake.vim function s:is_bb_python_func_def(lnum) let stack = synstack(a:lnum, 1) if len(stack) == 0 return 0 endif return synIDattr(stack[0], "name") == "bbPyFuncDef" endfunction function bitbake#Indent(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 = python#GetIndent(a:lnum, function('s:is_bb_python_func_def')) " 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