ΠΠΎΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ: Π±ΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π»ΠΈΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°.
ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ: Π±ΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ ΠΈΠΌΠ΅ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π΄Π»Ρ ΡΡΡΠΎΠΊ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΉ Π΄Π»Ρ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΊΠ°ΠΊ ΡΠΎΡΠΊΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²Π°, ΡΠ°ΠΊ ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Ρ ΠΊ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°ΠΌ ΡΡΡΠΎΠΊ.
Π cloud9 ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΡΠ΅ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅ https://github.com/ajaxorg/cloud9/blob/master/plugins-client/ext.debugger/breakpoints.js#L170 .
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ace ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΡΡΠΎΠΊ, Ρ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½, ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΡΡΡΠΎΠΊ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Ρ Π»ΠΈΠ½ΠΈΡΠΌΠΈ, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π»ΠΈΠ½ΠΈΠΉ ΡΠ³ΠΈΠ±Π° Π² edit_session. Π‘Π»ΠΎΠΆΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΡ ΡΡΡΠΎΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΡΡΡΠΎΠΊ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π·Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π²Π°ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΡΠ΅ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²Π° Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ Π΄Π»Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ.
Π‘Π»ΠΎΠΆΠ½ΠΎΠΉ ΡΠ°ΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ ΡΡΡΠΎΠΊ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ°Π·Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
Π₯ΠΌ.. Π― Π½Π΅ ΠΌΠΎΠ³Ρ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°. Π― Π±ΡΠ» Π±Ρ ΠΏΡΠΈΠ·Π½Π°ΡΠ΅Π»Π΅Π½, Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΠ΄Π΅Π»ΠΈΠ»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ :)
Π― Π½Π°ΡΠ΅Π» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΠ°Π·ΡΠ΅ΡΠ°Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π°. Π‘ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΎΠΉΡΠΈ ΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ» ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ, Π²ΡΠ·Π²Π°Π²ΡΠΈΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅. ΠΡΠ»ΠΈ ΠΈΡ
Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉ, ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΡΡΠΎΠΊ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΠΌΡΡ.
Π§ΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΠΌΠ½Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΡΠΊΡ (ΡΠΎΡΠΊΠΈ) ΠΎΡΡΠ°Π½ΠΎΠ²Π°, Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡ, Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΠΎΠ½Π° ΠΌΠ΅ΠΆΠ΄Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΎΠ½ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ.
ΠΠΎΠ΄ (Π±ΡΡΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ) ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ:
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);
}
}
}
}
});
ΠΠ°Π΄Π΅ΡΡΡ ΠΊΠΎΠΌΡ-ΡΠΎ ΠΏΠΎΠΌΠΎΠ³!
Π― ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ alessandrocaprarelli Π²ΡΡΠ΅, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π΄Π»Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΎΡΠ΅ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ :
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);
}
}
})
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π― Π½Π°ΡΠ΅Π» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΠ°Π·ΡΠ΅ΡΠ°Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΡΠΎΡΠΊΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π°. Π‘ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΎΠΉΡΠΈ ΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠ»ΡΡΠ°Ρ.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠ» ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠΎΠΊ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΠΌ, Π²ΡΠ·Π²Π°Π²ΡΠΈΠΌ ΡΠΎΠ±ΡΡΠΈΠ΅. ΠΡΠ»ΠΈ ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉ, ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ.
Π§ΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΠΌΠ½Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ ΡΠΎΡΠΊΡ (ΡΠΎΡΠΊΠΈ) ΠΎΡΡΠ°Π½ΠΎΠ²Π°, Ρ ΠΏΡΠΎΠ²Π΅ΡΡΡ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈ ΠΎΠ½Π° ΠΌΠ΅ΠΆΠ΄Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ.
ΠΠΎΠ΄ (Π±ΡΡΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ) ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ:
ΠΠ°Π΄Π΅ΡΡΡ ΠΊΠΎΠΌΡ-ΡΠΎ ΠΏΠΎΠΌΠΎΠ³!