рд▓рдВрдмреА рдХрд╣рд╛рдиреА рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдореЗрдВ рдмрддрд╛рдирд╛: рдпрджрд┐ рдХреЛрдб рдмрджрд▓рддреЗ рд╣реА рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЪрд▓рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ: рд▓рд╛рдЗрди рд╣реИрдВрдбрд▓ рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╕рдВрдкрд╛рджрди рдЕрдиреБрднрд╡ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣рдж рддрдХ рдореВрд▓ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЛрдиреЛрдВ рд▓рд╛рдЗрди рд╣реИрдВрдбрд▓ рд╕реЗ рдмрдВрдзреЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
Cloud9 рдореЗрдВ рд╣рдордиреЗ рдПрдХ рдЕрд▓рдЧ рд╕рд░рдгреА рдореЗрдВ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреЗрдВрдЬ рд╢реНрд░реЛрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ https://github.com/ajaxorg/cloud9/blob/master/plugins-client/ext.debugger/breakpoints.js#L170
рдЪреВрдВрдХрд┐ рдРрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рд╣реИрдВрдбрд▓ рдХреЛ рд╕рд░реНрд╡реЛрддреНрддрдо рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╛ рддреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдореЗрдВ рд░рдЦреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреА рдкреВрд░реА рд╕рд░рдгреА, рдпрд╛ рдПрдбрд┐рдЯ_рд╕реЗрд╢рди рдореЗрдВ рдлреЛрд▓реНрдбрд▓рд╛рдЗрди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдорд╛рди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдЙрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдпрд╛ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдореБрд╢реНрдХрд┐рд▓ рд╣рд┐рд╕реНрд╕рд╛ рдЙрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдпрд╛ рд╡рд┐рд▓рдп рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рд▓рд╛рдЗрди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ> рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╣рдореНрдо.. рдореИрдВ рдПрдХ рднреА рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ред рдЕрдЧрд░ рдЖрдк рдХреБрдЫ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ :)
рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реВрдВред рдХреБрдЫ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рднреА рдлрд┐рдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕рдВрдкрд╛рджрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╢реНрд░реЛрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдШрдЯрдирд╛ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдпрджрд┐ рдпреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ рддреЛ рд╣рдо рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ рдЬрдм рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реА рдпрд╛ рд╣рдЯрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдШрдЯрдирд╛ рдХрд╛ рдХреНрд░рд┐рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИрдВред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдореИрдВ рдЬрд╛рдВрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрд╢реЛрдзрди рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рдкрдВрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдЧрд░ рдпрд╣ рдЗрд╕ рд╕реАрдорд╛ рдореЗрдВ рд╣реИ рддреЛ рдореБрдЭреЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдХреЛрдб (рдЬрд▓реНрджреА рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
aceEditor.on("change", function (e) {
var breakpointsArray = aceEditor.session.getBreakpoints();
if(Object.keys(aceEditor.session.getBreakpoints()).length>0){
if(e.lines.length>1){
var breakpoint = parseInt(Object.keys(breakpointsArray)[0]);
var lines = e.lines.length -1;
var start = e.start.row;
var end = e.end.row;
if(e.action==='insert'){
console.log('new lines',breakpoint, start , end );
if(breakpoint>start ){
console.log('breakpoint forward');
aceEditor.session.clearBreakpoint(breakpoint);
aceEditor.session.setBreakpoint(breakpoint + lines);
}
} else if(e.action==='remove'){
console.log('removed lines',breakpoint, start , end);
if(breakpoint>start && breakpoint<end ){
console.log('breakpoint remove');
aceEditor.session.clearBreakpoint(breakpoint);
}
if(breakpoint>=end ){
console.log('breakpoint behind');
aceEditor.session.clearBreakpoint(breakpoint);
aceEditor.session.setBreakpoint(breakpoint - lines);
}
}
}
}
});
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдорджрдж рдХреА рд╣реЛрдЧреА!
рдореИрдВрдиреЗ рдХрдИ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдПрд▓реЗрд╕реЗрдВрдбреНрд░реЛрдХреИрдкреНрд░рд╛рд░реЗрд▓реА рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛, рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
editor.on("change", function (e) {
if (e.lines.length > 1 && (e.action==='insert' || e.action==='remove')){
const breakpointsArrayOld = editor.session.getBreakpoints();
let breakpointsArrayNew = [];
const amountOfLinesAffected = e.lines.length - 1;
const startRow = e.start.row;
const endRow = e.end.row;
for (const key of Object.keys(breakpointsArrayOld)) {
let breakpointRow = parseInt(key)
if (e.action==='insert') { // new lines
if (breakpointRow > startRow ){
// breakpoint forward
breakpointsArrayNew[breakpointRow + amountOfLinesAffected] = "ace_breakpoint"
}
else {
// unaffected by insert
breakpointsArrayNew[breakpointRow] = "ace_breakpoint"
}
}
else if (e.action==='remove') { // removed lines
if (breakpointRow > startRow && breakpointRow <= endRow ){
// breakpoint removed
}
else if (breakpointRow >= endRow ){
// breakpoint behind
breakpointsArrayNew[breakpointRow - amountOfLinesAffected] = "ace_breakpoint"
}
else {
// unaffected by remove
breakpointsArrayNew[breakpointRow] = "ace_breakpoint"
}
}
}
// remove all old breakpoints
for (const key of Object.keys(breakpointsArrayOld)) {
let breakpointRow = parseInt(key)
editor.session.clearBreakpoint(breakpointRow);
}
// add all new breakpoints
for (const key of Object.keys(breakpointsArrayNew)) {
let breakpointRow = parseInt(key)
editor.session.setBreakpoint(breakpointRow);
}
}
})
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реВрдВред рдХреБрдЫ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рднреА рдлрд┐рдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рд╕рдВрдкрд╛рджрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдкрд░рд┐рд╡рд░реНрддрди рд╢реНрд░реЛрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдШрдЯрдирд╛ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рд▓рд╛рдЗрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдпрджрд┐ рдпреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ рддреЛ рд╣рдо рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ рдЬрдм рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реА рдпрд╛ рд╣рдЯрд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдШрдЯрдирд╛ рдХрд╛ рдХреНрд░рд┐рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИрдВред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдореИрдВ рдЬрд╛рдВрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрд╢реЛрдзрди рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдФрд░ рд╕рдорд╛рдкреНрддрд┐ рдкрдВрдХреНрддрд┐ рдХреЗ рдмреАрдЪ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдЧрд░ рдпрд╣ рдЗрд╕ рд╕реАрдорд╛ рдореЗрдВ рд╣реИ рддреЛ рдореБрдЭреЗ рдЖрдЧреЗ рдмрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдХреЛрдб (рдЬрд▓реНрджреА рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛) рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдорджрдж рдХреА рд╣реЛрдЧреА!