diff --git a/README.md b/README.md index 6c3589a..09dd42e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ +NOTE: I forked to add node.js support for node 8 and later +currently the debugger stops at the first line. I'll fix this eventually. and then see if I can get this merged back into the original + + INTRODUCTION ============ - Screencast - https://vimeo.com/95775461 Vebugger is yet another debugger frontend plugin for Vim, created because I @@ -21,6 +24,7 @@ interactive shell debugger, and comes with implementations for: * Mdbg - a .NET debugger(Windows only) * PDB - a Python module for debugging Python scripts * RDebug - a Ruby command line option for debugging Ruby scripts + * NInspect - node inspect for using node.js with the inspect protocal (tested with node.8) Other implementations can be added with ease, and I will accept pull requests that add such implementations as long as they use Vim's |license|. diff --git a/autoload/vebugger/ninspect.vim b/autoload/vebugger/ninspect.vim new file mode 100644 index 0000000..38cc453 --- /dev/null +++ b/autoload/vebugger/ninspect.vim @@ -0,0 +1,134 @@ +function! vebugger#ninspect#start(entryFile,args) + let l:debugger=vebugger#std#startDebugger(shellescape(vebugger#util#getToolFullPath('node',get(a:args,'version'),'node')) + \.' inspect '.a:entryFile.' '.vebugger#util#commandLineArgsForProgram(a:args)) + let l:debugger.state.ninspect={} + let l:debugger.state.std.config.externalFileStop_flowCommand='stepover' "skip external modules + + + call l:debugger.writeLine("$stdout=$stderr") + let l:debugger.pipes.err.annotation = "err&prg\t\t" + if !has('win32') + call vebugger#std#openShellBuffer(l:debugger) + endif + + call l:debugger.addReadHandler(function('vebugger#ninspect#_readProgramOutput')) + call l:debugger.addReadHandler(function('vebugger#ninspect#_readWhere')) + " call l:debugger.addReadHandler(function('vebugger#ninspect#_readEvaluatedExpressions')) + call l:debugger.addReadHandler(function('vebugger#ninspect#_readFinish')) + + call l:debugger.setWriteHandler('std','flow',function('vebugger#ninspect#_writeFlow')) + call l:debugger.setWriteHandler('std','breakpoints',function('vebugger#ninspect#_writeBreakpoints')) + call l:debugger.setWriteHandler('std','evaluateExpressions',function('vebugger#ninspect#_requestEvaluateExpression')) + " call l:debugger.setWriteHandler('std','executeStatements',function('vebugger#ninspect#_executeStatements')) + call l:debugger.setWriteHandler('std','removeAfterDisplayed',function('vebugger#ninspect#_removeAfterDisplayed')) + + call l:debugger.setWriteHandler('std','closeDebugger',function('vebugger#ninspect#_closeDebugger')) + + call l:debugger.generateWriteActionsFromTemplate() + + call l:debugger.std_addAllBreakpointActions(g:vebugger_breakpoints) + + " Don't stop at the beginning + " call l:debugger.writeLine('cont') + + return l:debugger +endfunction + +function! vebugger#ninspect#_readProgramOutput(pipeName,line,readResult,debugger) + if 'err'==a:pipeName + let a:readResult.std.programOutput={'line':a:line} + else + let l:matches=matchlist(a:line,'\v(^........debug\>.............|^........|^)\<\s(.*)$') + if 3.............\<\sWaiting\sfor\sthe\sdebugger\sto\sdisconnect...') + if 1 + call vebugger#ninspect#start('test.js',{'args':['hello','world']}) +< +The supported extra arguments are: +* "args": Command line arguments for the debugged script +* "version": The version of the debugger to run + +NInspect can also be launched with the *VBGstartRDebug* command: +> + VBGstartNInspect script.js hello world +< + USING THE DEBUGGERS *vebugger-usage* *vebugger-commands* diff --git a/plugin/vebugger.vim b/plugin/vebugger.vim index 6ea2076..bb53086 100644 --- a/plugin/vebugger.vim +++ b/plugin/vebugger.vim @@ -24,6 +24,7 @@ command! -range -nargs=0 VBGrawWriteSelectedText call vebugger#writeLine(vebugge command! -nargs=+ -complete=file VBGstartGDB call vebugger#gdb#start([][0],{'args':[][1:]}) command! -nargs=1 -complete=file VBGattachGDB call vebugger#gdb#searchAndAttach() command! -nargs=+ -complete=file VBGstartRDebug call vebugger#rdebug#start([][0],{'args':[][1:]}) +command! -nargs=+ -complete=file VBGstartNInspect call vebugger#ninspect#start([][0],{'args':[][1:]}) command! -nargs=+ -complete=file VBGstartPDB call vebugger#pdb#start([][0],{'args':[][1:]}) command! -nargs=+ -complete=file VBGstartPDB2 call vebugger#pdb#start([][0],{'args':[][1:],'version':'2'}) command! -nargs=+ -complete=file VBGstartPDB3 call vebugger#pdb#start([][0],{'args':[][1:],'version':'3'})