On exit, augment the stacktrace and link it to the editors
This commit is contained in:
@ -19,6 +19,15 @@ $(function() {
|
|||||||
var SERVER_SEND_EVENT = 2;
|
var SERVER_SEND_EVENT = 2;
|
||||||
|
|
||||||
var editors = [];
|
var editors = [];
|
||||||
|
var editor_for_file = new Map();
|
||||||
|
|
||||||
|
var tracepositions_regexes = {
|
||||||
|
python: /File "(.+?)", line (\d+)/g,
|
||||||
|
java: /(.*\.java):(\d):/g
|
||||||
|
};
|
||||||
|
|
||||||
|
var tracepositions_regex;
|
||||||
|
|
||||||
var active_file = undefined;
|
var active_file = undefined;
|
||||||
var active_frame = undefined;
|
var active_frame = undefined;
|
||||||
var running = false;
|
var running = false;
|
||||||
@ -404,12 +413,23 @@ $(function() {
|
|||||||
editor.setTheme(THEME);
|
editor.setTheme(THEME);
|
||||||
editor.commands.bindKey("ctrl+alt+0", null);
|
editor.commands.bindKey("ctrl+alt+0", null);
|
||||||
editors.push(editor);
|
editors.push(editor);
|
||||||
|
editor_for_file.set($(element).parent().data('filename'), editor);
|
||||||
var session = editor.getSession();
|
var session = editor.getSession();
|
||||||
session.setMode($(element).data('mode'));
|
session.setMode($(element).data('mode'));
|
||||||
session.setTabSize($(element).data('indent-size'));
|
session.setTabSize($(element).data('indent-size'));
|
||||||
session.setUseSoftTabs(true);
|
session.setUseSoftTabs(true);
|
||||||
session.setUseWrapMode(true);
|
session.setUseWrapMode(true);
|
||||||
|
|
||||||
|
// set regex for parsing error traces based on the mode of the main file.
|
||||||
|
if( $(element).parent().data('role') == "main_file"){
|
||||||
|
var mode = $(element).data('mode');
|
||||||
|
if(mode == "ace/mode/python"){
|
||||||
|
tracepositions_regex = tracepositions_regexes.python;
|
||||||
|
} else if (mode = "ace/mode/java"){
|
||||||
|
tracepositions_regex = tracepositions_regexes.java;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var file_id = $(element).data('id');
|
var file_id = $(element).data('id');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -876,7 +896,9 @@ $(function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var showWorkspaceTab = function(event) {
|
var showWorkspaceTab = function(event) {
|
||||||
event.preventDefault();
|
if(event){
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
showTab(0);
|
showTab(0);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1036,6 +1058,7 @@ $(function() {
|
|||||||
case 'exit':
|
case 'exit':
|
||||||
killWebsocketAndContainer();
|
killWebsocketAndContainer();
|
||||||
handleStderrOutputForFlowr();
|
handleStderrOutputForFlowr();
|
||||||
|
augmentStacktraceInOutput();
|
||||||
break;
|
break;
|
||||||
case 'timeout':
|
case 'timeout':
|
||||||
// just show the timeout message here. Another exit command is sent by the rails backend when the socket to the docker container closes.
|
// just show the timeout message here. Another exit command is sent by the rails backend when the socket to the docker container closes.
|
||||||
@ -1047,6 +1070,41 @@ $(function() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var jumpToSourceLine = function(event){
|
||||||
|
var file = $(event.target).data('file');
|
||||||
|
var line = $(event.target).data('line');
|
||||||
|
|
||||||
|
showWorkspaceTab(null);
|
||||||
|
// set active file ?!?!
|
||||||
|
|
||||||
|
var frame = $('div.frame[data-filename="' + file + '"]');
|
||||||
|
showFrame(frame);
|
||||||
|
|
||||||
|
var editor = editor_for_file.get(file);
|
||||||
|
editor.gotoLine(line, 0);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
var augmentStacktraceInOutput = function() {
|
||||||
|
if(tracepositions_regex){
|
||||||
|
var element = $('#output>pre');
|
||||||
|
var text = element.text();
|
||||||
|
element.on( "click", "a", jumpToSourceLine);
|
||||||
|
|
||||||
|
var matches;
|
||||||
|
|
||||||
|
while(matches = tracepositions_regex.exec(text)){
|
||||||
|
var frame = $('div.frame[data-filename="' + matches[1] + '"]')
|
||||||
|
|
||||||
|
if(frame.length > 0){
|
||||||
|
element.html(text.replace(matches[0], "<a href='#' data-file='" + matches[1] + "' data-line='" + matches[2] + "'>" + matches[0] + "</a>"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
var renderWebsocketOutput = function(msg){
|
var renderWebsocketOutput = function(msg){
|
||||||
var element = findOrCreateRenderElement(0);
|
var element = findOrCreateRenderElement(0);
|
||||||
element.append(msg.data);
|
element.append(msg.data);
|
||||||
|
Reference in New Issue
Block a user