summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Laplante via bitbake-devel <bitbake-devel@lists.openembedded.org>2019-10-17 12:36:53 -0400
committerRichard Purdie <richard.purdie@linuxfoundation.org>2019-11-07 19:43:14 +0000
commitc426ba9afe2aef0f01baff10353ca3ed946bafb6 (patch)
tree01279fed23c1611595b15de4e187ac83a722f771
parentf45aa165f2dac3d1bf5a043c2351c9db61af3988 (diff)
downloadpoky-c426ba9afe2aef0f01baff10353ca3ed946bafb6.tar.gz
bitbake: contrib/vim: indenting for assignments; tweak Python indenting
Signed-off-by: Chris Laplante <chris.laplante@agilent.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--bitbake/bitbake/contrib/vim/indent/bitbake.vim56
1 files changed, 53 insertions, 3 deletions
diff --git a/bitbake/bitbake/contrib/vim/indent/bitbake.vim b/bitbake/bitbake/contrib/vim/indent/bitbake.vim
index 76f84e5c23..1d0a6e82d3 100644
--- a/bitbake/bitbake/contrib/vim/indent/bitbake.vim
+++ b/bitbake/bitbake/contrib/vim/indent/bitbake.vim
@@ -110,7 +110,12 @@ function GetPythonIndent(lnum)
110 \ . " =~ '\\(Comment\\|Todo\\|String\\)$'", 110 \ . " =~ '\\(Comment\\|Todo\\|String\\)$'",
111 \ searchpair_stopline, searchpair_timeout) 111 \ searchpair_stopline, searchpair_timeout)
112 if p > 0 112 if p > 0
113 if s:is_python_func_def(p) 113 if s:is_bb_python_func_def(p)
114 " Handle first non-empty line inside a BB Python task
115 if p == plnum
116 return shiftwidth()
117 endif
118
114 " Handle the user actually trying to close a BitBake Python task 119 " Handle the user actually trying to close a BitBake Python task
115 let line = getline(a:lnum) 120 let line = getline(a:lnum)
116 if line =~ '^\s*}' 121 if line =~ '^\s*}'
@@ -242,6 +247,7 @@ unlet s:keepcpo
242 247
243 248
244let b:did_indent = 1 249let b:did_indent = 1
250setlocal indentkeys+=0\"
245 251
246 252
247function BitbakeIndent(lnum) 253function BitbakeIndent(lnum)
@@ -249,13 +255,57 @@ function BitbakeIndent(lnum)
249 return -1 255 return -1
250 endif 256 endif
251 257
252 let stack = synstack(a:lnum, col(".")) 258 let stack = synstack(a:lnum, 1)
253 if len(stack) == 0 259 if len(stack) == 0
254 return -1 260 return -1
255 endif 261 endif
256 262
257 let name = synIDattr(stack[0], "name") 263 let name = synIDattr(stack[0], "name")
258 "echo name 264
265 " TODO: support different styles of indentation for assignments. For now,
266 " we only support like this:
267 " VAR = " \
268 " value1 \
269 " value2 \
270 " "
271 "
272 " i.e. each value indented by shiftwidth(), with the final quote " completely unindented.
273 if name == "bbVarValue"
274 " Quote handling is tricky. kernel.bbclass has this line for instance:
275 " EXTRA_OEMAKE = " HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" " HOSTCPP="${BUILD_CPP}""
276 " Instead of trying to handle crazy cases like that, just assume that a
277 " double-quote on a line by itself (following an assignment) means the
278 " user is closing the assignment, and de-dent.
279 if getline(a:lnum) =~ '^\s*"$'
280 return 0
281 endif
282
283 let prevstack = synstack(a:lnum - 1, 1)
284 if len(prevstack) == 0
285 return -1
286 endif
287
288 let prevname = synIDattr(prevstack[0], "name")
289
290 " Only indent if there was actually a continuation character on
291 " the previous line, to avoid misleading indentation.
292 let prevlinelastchar = synIDattr(synID(a:lnum - 1, col([a:lnum - 1, "$"]) - 1, 1), "name")
293 let prev_continued = prevlinelastchar == "bbContinue"
294
295 " Did the previous line introduce an assignment?
296 if index(["bbVarDef", "bbVarFlagDef"], prevname) != -1
297 if prev_continued
298 return shiftwidth()
299 endif
300 endif
301
302 if !prev_continued
303 return 0
304 endif
305
306 " Autoindent can take it from here
307 return -1
308 endif
259 309
260 if index(["bbPyDefRegion", "bbPyFuncRegion"], name) != -1 310 if index(["bbPyDefRegion", "bbPyFuncRegion"], name) != -1
261 let ret = GetPythonIndent(a:lnum) 311 let ret = GetPythonIndent(a:lnum)