# HG changeset patch # User Christian Brabandt # Date 1721470503 -7200 # Node ID 2e12af92befecd14f08c3345336c85664496dbca # Parent 955fc30b0bce63882681c889d46db1c3c2d195bf patch 9.1.0607: termdebug: uses inconsistent style Commit: https://github.com/vim/vim/commit/a90b0b4ba22a42f06a079f7903694b7f8be03619 Author: Ubaldo Tiberi Date: Sat Jul 20 12:00:44 2024 +0200 patch 9.1.0607: termdebug: uses inconsistent style Problem: termdebug: uses inconsistent style Solution: termdebug: deprecate numeric values for v:true/false, fix white space style in the plugin (Ubaldo Tiberi) closes: #15304 Signed-off-by: Ubaldo Tiberi Signed-off-by: Christian Brabandt diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt --- a/runtime/doc/terminal.txt +++ b/runtime/doc/terminal.txt @@ -1,4 +1,4 @@ -*terminal.txt* For Vim version 9.1. Last change: 2024 Jul 14 +*terminal.txt* For Vim version 9.1. Last change: 2024 Jul 20 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1530,9 +1530,9 @@ in a buffer with 'buftype' set to "promp *termdebug_use_prompt* Prompt mode can be used even when the |+terminal| feature is present with: > - let g:termdebug_config['use_prompt'] = 1 + let g:termdebug_config['use_prompt'] = v:true If there is no g:termdebug_config you can use: > - let g:termdebug_use_prompt = 1 + let g:termdebug_use_prompt = v:true < However, the latter form will be deprecated in future releases. @@ -1544,26 +1544,26 @@ are reset to their original values once *termdebug_map_K* *termdebug-mappings* The K key is normally mapped to |:Evaluate| unless a buffer local (|:map-local|) mapping to K already exists. If you do not want this use: > - let g:termdebug_config['map_K'] = 0 + let g:termdebug_config['map_K'] = v:false If there is no g:termdebug_config you can use: > - let g:termdebug_map_K = 0 + let g:termdebug_map_K = v:false < However, the latter form will be deprecated in future releases. *termdebug_map_minus* The - key is normally mapped to |:Down| unless a buffer local mapping to the - key already exists. If you do not want this use: > - let g:termdebug_config['map_minus'] = 0 + let g:termdebug_config['map_minus'] = v:false < *termdebug_map_plus* The + key is normally mapped to |:Up| unless a buffer local mapping to the + key already exists. If you do not want this use: > - let g:termdebug_config['map_plus'] = 0 + let g:termdebug_config['map_plus'] = v:false < *termdebug_disasm_window* If you want the Asm window shown by default, set the "disasm_window" flag to 1. The "disasm_window_height" entry can be used to set the window height: > - let g:termdebug_config['disasm_window'] = 1 + let g:termdebug_config['disasm_window'] = v:true let g:termdebug_config['disasm_window_height'] = 15 If there is no g:termdebug_config you can use: > let g:termdebug_disasm_window = 15 @@ -1579,7 +1579,7 @@ the height option won't be used). If you want the Var window shown by default, set the "variables_window" flag to 1. The "variables_window_height" entry can be used to set the window height: > - let g:termdebug_config['variables_window'] = 1 + let g:termdebug_config['variables_window'] = v:true let g:termdebug_config['variables_window_height'] = 15 If there is no g:termdebug_config you can use: > let g:termdebug_variables_window = 15 diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -15,7 +15,7 @@ vim9script # There are two ways to run gdb: # - In a terminal window; used if possible, does not work on MS-Windows -# Not used when g:termdebug_use_prompt is set to 1. +# Not used when g:termdebug_use_prompt is set to true. # - Using a "prompt" buffer; may use a terminal window for the program # For both the current window is used to view source code and shows the @@ -49,8 +49,8 @@ enddef # Variables to keep their status among multiple instances of Termdebug # Avoid to source the script twice. if exists('g:termdebug_loaded') - Echoerr('Termdebug already loaded.') - finish + Echoerr('Termdebug already loaded.') + finish endif g:termdebug_loaded = true g:termdebug_is_running = false @@ -90,7 +90,7 @@ var varbufname: string var asmbufnr: number var asmbufname: string var promptbufnr: number -# This is for the "debugged-program" thing +# 'pty' refers to the "debugged-program" pty var ptybufnr: number var ptybufname: string var commbufnr: number @@ -276,6 +276,18 @@ def DeprecationWarnings() \ is deprecated and will be removed in the future. See ':h g:termdebug_config' for alternatives.") endif + # termdebug config types + if exists('g:termdebug_config') && !empty(g:termdebug_config) + for key in keys(g:termdebug_config) + if index(['disasm_window', 'variables_window', 'use_prompt', 'map_K', 'map_minus', 'map_plus'], key) != -1 + if typename(g:termdebug_config[key]) == 'number' + var val = g:termdebug_config[key] + Echowarn($"Deprecation Warning: 'g:termdebug_config[\"{key}\"] = {val}' will be deprecated. + \ Please use 'g:termdebug_config[\"{key}\"] = {val != 0}'" ) + endif + endif + endfor + endif enddef # Take a breakpoint number as used by GDB and turn it into an integer. @@ -353,7 +365,7 @@ def StartDebug_internal(dict: dict) endif # Uncomment this line to write logging in "debuglog". - # call ch_logfile('debuglog', 'w') + # ch_logfile('debuglog', 'w') # Assume current window is the source code window sourcewin = win_getid() @@ -444,7 +456,7 @@ def CreateCommunicationPty(): string # Create a hidden terminal window to communicate with gdb commbufnr = term_start('NONE', { term_name: commbufname, - out_cb: function('CommOutput'), + out_cb: CommOutput, hidden: 1 }) if commbufnr == 0 @@ -489,9 +501,9 @@ def CreateGdbConsole(dict: dict, pt ch_log($'executing "{join(gdb_cmd)}"') gdbbufnr = term_start(gdb_cmd, { - term_name: gdbbufname, - term_finish: 'close', - }) + term_name: gdbbufname, + term_finish: 'close', + }) if gdbbufnr == 0 return 'Failed to open the gdb terminal window' endif @@ -603,7 +615,7 @@ def StartDebug_term(dict: dict) return endif - job_setoptions(term_getjob(gdbbufnr), {exit_cb: function('EndDebug')}) + job_setoptions(term_getjob(gdbbufnr), {exit_cb: EndDebug}) # Set the filetype, this can be used to add mappings. set filetype=termdebug @@ -627,8 +639,8 @@ def StartDebug_prompt(dict: dict) set buftype=prompt exe $"file {gdbbufname}" - prompt_setcallback(promptbufnr, function('PromptCallback')) - prompt_setinterrupt(promptbufnr, function('PromptInterrupt')) + prompt_setcallback(promptbufnr, PromptCallback) + prompt_setinterrupt(promptbufnr, PromptInterrupt) if vvertical # Assuming the source code window will get a signcolumn, use two more @@ -655,8 +667,8 @@ def StartDebug_prompt(dict: dict) ch_log($'executing "{join(gdb_cmd)}"') gdbjob = job_start(gdb_cmd, { - exit_cb: function('EndDebug'), - out_cb: function('GdbOutCallback'), + exit_cb: EndDebug, + out_cb: GdbOutCallback }) if job_status(gdbjob) != "run" Echoerr('Failed to start gdb') @@ -664,7 +676,7 @@ def StartDebug_prompt(dict: dict) return endif exe $'au BufUnload ++once ' .. - 'call job_stop(gdbjob, ''kill'')' + 'call job_stop(gdbjob, ''kill'')' # Mark the buffer modified so that it's not easy to close. set modified gdb_channel = job_getchannel(gdbjob) @@ -847,7 +859,7 @@ def GdbOutCallback(channel: channel, tex # Drop the gdb prompt, we have our own. # Drop status and echo'd commands. if text == '(gdb) ' || text == '^done' || - (text[0] == '&' && text !~ '^&"disassemble') + (text[0] == '&' && text !~ '^&"disassemble') return endif @@ -890,18 +902,18 @@ def DecodeMessage(quotedText: string, li return '' endif var msg = quotedText - ->substitute('^"\|[^\\]\zs".*', '', 'g') - ->substitute('\\"', '"', 'g') - #\ multi-byte characters arrive in octal form - #\ NULL-values must be kept encoded as those break the string otherwise - ->substitute('\\000', NullRepl, 'g') - ->substitute('\\\(\o\o\o\)', (m) => nr2char(str2nr(m[1], 8)), 'g') - # You could also use ->substitute('\\\\\(\o\o\o\)', '\=nr2char(str2nr(submatch(1), 8))', "g") - #\ Note: GDB docs also mention hex encodings - the translations below work - #\ but we keep them out for performance-reasons until we actually see - #\ those in mi-returns - ->substitute('\\\\', '\', 'g') - ->substitute(NullRepl, '\\000', 'g') + ->substitute('^"\|[^\\]\zs".*', '', 'g') + ->substitute('\\"', '"', 'g') + #\ multi-byte characters arrive in octal form + #\ NULL-values must be kept encoded as those break the string otherwise + ->substitute('\\000', NullRepl, 'g') + ->substitute('\\\(\o\o\o\)', (m) => nr2char(str2nr(m[1], 8)), 'g') + # You could also use ->substitute('\\\\\(\o\o\o\)', '\=nr2char(str2nr(submatch(1), 8))', "g") + #\ Note: GDB docs also mention hex encodings - the translations below work + #\ but we keep them out for performance-reasons until we actually see + #\ those in mi-returns + ->substitute('\\\\', '\', 'g') + ->substitute(NullRepl, '\\000', 'g') if !literal return msg ->substitute('\\t', "\t", 'g') @@ -1039,11 +1051,11 @@ def HandleDisasmMsg(msg: string) endif elseif msg !~ '^&"disassemble' var value = substitute(msg, '^\~\"[ ]*', '', '') - ->substitute('^=>[ ]*', '', '') - ->substitute('\\n\"\r$', '', '') - ->substitute('\\n\"$', '', '') - ->substitute('\r', '', '') - ->substitute('\\t', ' ', 'g') + ->substitute('^=>[ ]*', '', '') + ->substitute('\\n\"\r$', '', '') + ->substitute('\\n\"$', '', '') + ->substitute('\r', '', '') + ->substitute('\\t', ' ', 'g') if value != '' || !empty(asm_lines) add(asm_lines, value) @@ -1119,9 +1131,9 @@ def CommOutput(chan: channel, message: s if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)' HandleCursor(msg) elseif msg =~ '^\^done,bkpt=' || msg =~ '^=breakpoint-created,' - HandleNewBreakpoint(msg, 0) + HandleNewBreakpoint(msg, false) elseif msg =~ '^=breakpoint-modified,' - HandleNewBreakpoint(msg, 1) + HandleNewBreakpoint(msg, true) elseif msg =~ '^=breakpoint-deleted,' HandleBreakpointDelete(msg) elseif msg =~ '^=thread-group-started' @@ -1225,10 +1237,10 @@ def InstallCommands() if pup &mousemodel = 'popup_setpos' an 1.200 PopUp.-SEP3- - an 1.210 PopUp.Set\ breakpoint :Break - an 1.220 PopUp.Clear\ breakpoint :Clear - an 1.230 PopUp.Run\ until :Until - an 1.240 PopUp.Evaluate :Evaluate + an 1.210 PopUp.Set\ breakpoint Break + an 1.220 PopUp.Clear\ breakpoint Clear + an 1.230 PopUp.Run\ until Until + an 1.240 PopUp.Evaluate Evaluate endif endif @@ -1311,7 +1323,6 @@ def DeleteCommands() endif endfor win_gotoid(curwinid) - # winbar_winids = [] &mousemodel = saved_mousemodel try @@ -1526,18 +1537,18 @@ enddef def HandleEvaluate(msg: string) var value = msg - ->substitute('.*value="\(.*\)"', '\1', '') - ->substitute('\\"', '"', 'g') - ->substitute('\\\\', '\\', 'g') - #\ multi-byte characters arrive in octal form, replace everything but NULL values - ->substitute('\\000', NullRepl, 'g') - ->substitute('\\\(\o\o\o\)', (m) => nr2char(str2nr(m[1], 8)), 'g') - #\ Note: GDB docs also mention hex encodings - the translations below work - #\ but we keep them out for performance-reasons until we actually see - #\ those in mi-returns - #\ ->substitute('\\0x00', NullRep, 'g') - #\ ->substitute('\\0x\(\x\x\)', {-> eval('"\x' .. submatch(1) .. '"')}, 'g') - ->substitute(NullRepl, '\\000', 'g') + ->substitute('.*value="\(.*\)"', '\1', '') + ->substitute('\\"', '"', 'g') + ->substitute('\\\\', '\\', 'g') + #\ multi-byte characters arrive in octal form, replace everything but NULL values + ->substitute('\\000', NullRepl, 'g') + ->substitute('\\\(\o\o\o\)', (m) => nr2char(str2nr(m[1], 8)), 'g') + #\ Note: GDB docs also mention hex encodings - the translations below work + #\ but we keep them out for performance-reasons until we actually see + #\ those in mi-returns + #\ ->substitute('\\0x00', NullRep, 'g') + #\ ->substitute('\\0x\(\x\x\)', {-> eval('"\x' .. submatch(1) .. '"')}, 'g') + ->substitute(NullRepl, '\\000', 'g') if evalFromBalloonExpr if empty(evalFromBalloonExprResult) evalFromBalloonExprResult = $'{evalexpr}: {value}' @@ -1599,14 +1610,17 @@ def GotoSourcewinOrCreateIt() enddef -def GetDisasmWindow(): number - if exists('g:termdebug_config') - return get(g:termdebug_config, 'disasm_window', 0) +def GetDisasmWindow(): bool + # TODO Remove the deprecated features after 1 Jan 2025. + var val: any + if exists('g:termdebug_config') && has_key(g:termdebug_config, 'disasm_window') + val = g:termdebug_config['disasm_window'] + elseif exists('g:termdebug_disasm_window') + val = g:termdebug_disasm_window + else + val = false endif - if exists('g:termdebug_disasm_window') - return g:termdebug_disasm_window - endif - return 0 + return typename(val) == 'number' ? val != 0 : val enddef def GetDisasmWindowHeight(): number @@ -1669,14 +1683,17 @@ def GotoAsmwinOrCreateIt() endif enddef -def GetVariablesWindow(): number - if exists('g:termdebug_config') - return get(g:termdebug_config, 'variables_window', 0) +def GetVariablesWindow(): bool + # TODO Remove the deprecated features after 1 Jan 2025. + var val: any + if exists('g:termdebug_config') && has_key(g:termdebug_config, 'variables_window') + val = g:termdebug_config['variables_window'] + elseif exists('g:termdebug_variables_window') + val = g:termdebug_variables_window + else + val = false endif - if exists('g:termdebug_disasm_window') - return g:termdebug_variables_window - endif - return 0 + return typename(val) == 'number' ? val != 0 : val enddef def GetVariablesWindowHeight(): number @@ -1810,7 +1827,7 @@ def HandleCursor(msg: string) normal! zv sign_unplace('TermDebug', {id: pc_id}) sign_place(pc_id, 'TermDebug', 'debugPC', fname, - {lnum: str2nr(lnum), priority: 110}) + {lnum: str2nr(lnum), priority: 110}) if !exists('b:save_signcolumn') b:save_signcolumn = &signcolumn add(signcolumn_buflist, bufnr()) @@ -1857,7 +1874,7 @@ enddef # Handle setting a breakpoint # Will update the sign that shows the breakpoint -def HandleNewBreakpoint(msg: string, modifiedFlag: any) +def HandleNewBreakpoint(msg: string, modifiedFlag: bool) var nr = '' if msg !~ 'fullname=' diff --git a/src/testdir/test_termdebug.vim b/src/testdir/test_termdebug.vim --- a/src/testdir/test_termdebug.vim +++ b/src/testdir/test_termdebug.vim @@ -160,7 +160,7 @@ func Test_termdebug_basic() call WaitForAssert({-> assert_equal(1, winnr('$'))}) call assert_equal([], sign_getplaced('', #{group: 'TermDebug'})[0].signs) - for use_prompt in [0, 1] + for use_prompt in [v:true, v:false] let g:termdebug_config = {} let g:termdebug_config['use_prompt'] = use_prompt TermdebugCommand ./XTD_basic arg args @@ -365,7 +365,7 @@ function Test_termdebug_save_restore_var " We want termdebug to overwrite 'K' map but not '+' map. let g:termdebug_config = {} - let g:termdebug_config['map_K'] = 1 + let g:termdebug_config['map_K'] = v:true Termdebug call WaitForAssert({-> assert_equal(3, winnr('$'))}) @@ -394,7 +394,7 @@ function Test_termdebug_sanity_check() for key in keys(s:dict) let s:filename = s:dict[key] - let g:termdebug_config[key] = 1 + let g:termdebug_config[key] = v:true let s:error_message = "You have a file/folder named '" .. s:filename .. "'" " Write dummy file with bad name @@ -422,4 +422,49 @@ function Test_termdebug_double_termdebug :%bw! endfunction +function Test_termdebug_config_types() + " TODO Remove the deprecated features after 1 Jan 2025. + let g:termdebug_config = {} + let s:error_message = 'Deprecation Warning:' + call assert_true(maparg('K', 'n', 0, 1)->empty()) + + for key in ['disasm_window', 'variables_window', 'map_K'] + for val in [0, 1, v:true, v:false] + let g:termdebug_config[key] = val + Termdebug + + " Type check: warning is displayed + if typename(val) == 'number' + call WaitForAssert({-> assert_true(execute('messages') =~ s:error_message)}) + endif + + " Test on g:termdebug_config keys + if val && key != 'map_K' + call WaitForAssert({-> assert_equal(4, winnr('$'))}) + call remove(g:termdebug_config, key) + else + call WaitForAssert({-> assert_equal(3, winnr('$'))}) + endif + + " Test on mapping + if key == 'map_K' + if val + call assert_equal(':Evaluate', maparg('K', 'n', 0, 1).rhs) + else + call assert_true(maparg('K', 'n', 0, 1)->empty()) + endif + endif + + " Shutoff termdebug + wincmd t + quit! + call WaitForAssert({-> assert_equal(1, winnr('$'))}) + :%bw! + + endfor + endfor + + unlet g:termdebug_config +endfunction + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -705,6 +705,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 607, +/**/ 606, /**/ 605,