Skip to content

Commit 3e96f72

Browse files
committed
arduino#1991: code cleanup
1 parent c5b716c commit 3e96f72

File tree

2 files changed

+27
-27
lines changed

2 files changed

+27
-27
lines changed

arduino-ide-extension/src/browser/serial/monitor/monitor-utils.ts

+21-20
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import {Line, SerialMonitorOutput} from './serial-monitor-send-output';
22

3-
function writeOverLine(line: Line, insert: string, cursorPosition: number): [number, number] {
4-
var lenBefore = line.message.length;
3+
function writeOverLine(line: Line, insert: string, cursorPosition: number, charCount: number): [number, number] {
4+
const lenBefore = line.message.length;
55
line.message = line.message.substring(0, cursorPosition) + insert + line.message.substring(cursorPosition + insert.length)
66
cursorPosition = cursorPosition + insert.length;
77
line.lineLen = line.message.length;
8-
return [line.lineLen - lenBefore, cursorPosition];
8+
return [charCount + (line.lineLen - lenBefore), cursorPosition];
99
}
1010

11-
const escapeSequenceGoHome = '\x1B[H';
12-
const escapeSequenceClearScreen = '\x1B[2J';
11+
const escape = '\x1B';
12+
const escapeSequenceGoHome = escape+'[H';
13+
const escapeSequenceClearScreen = escape+'[2J';
1314

1415
export function messagesToLines(
1516
messages: string[],
@@ -28,17 +29,21 @@ export function messagesToLines(
2829
let allMessages = messages.join('');
2930
let overflow = null;
3031

31-
if (allMessages.indexOf(escapeSequenceGoHome) >= 0) {
32-
const before = allMessages.substring(0, allMessages.indexOf(escapeSequenceGoHome));
33-
const after = allMessages.substring(allMessages.indexOf(escapeSequenceGoHome) + escapeSequenceGoHome.length);
34-
const [_lines, _charCount] = messagesToLines([before], prevLines, charCount, currentLineIndex, currentCursorPosition, separator);
35-
return messagesToLines([after], _lines, _charCount, 0, 0, separator);
36-
} else if (allMessages.indexOf(escapeSequenceClearScreen) >= 0) {
32+
let goHomeSequenceIndex = allMessages.indexOf(escapeSequenceGoHome);
33+
let clearScreenSequenceIndex = allMessages.indexOf(escapeSequenceClearScreen);
34+
let lastEscapeIndex = allMessages.lastIndexOf(escape);
35+
36+
if (goHomeSequenceIndex >= 0) {
37+
const before = allMessages.substring(0, goHomeSequenceIndex);
38+
const after = allMessages.substring(goHomeSequenceIndex + escapeSequenceGoHome.length);
39+
const [updatedLines, updatedCharCount] = messagesToLines([before], prevLines, charCount, currentLineIndex, currentCursorPosition, separator);
40+
return messagesToLines([after], updatedLines, updatedCharCount, 0, 0, separator);
41+
} else if (clearScreenSequenceIndex >= 0) {
3742
const after = allMessages.substring(allMessages.lastIndexOf(escapeSequenceClearScreen) + escapeSequenceClearScreen.length);
3843
return messagesToLines([after], [], 0, 0, 0, separator);
39-
} else if (allMessages.lastIndexOf('\x1B') >= 0) {
40-
overflow = allMessages.substring(allMessages.lastIndexOf('\x1B'));
41-
const result = messagesToLines([allMessages.substring(0, allMessages.lastIndexOf('\x1B'))], prevLines, charCount, currentLineIndex, currentCursorPosition, separator);
44+
} else if (lastEscapeIndex >= 0) {
45+
overflow = allMessages.substring(lastEscapeIndex);
46+
const result = messagesToLines([allMessages.substring(0, lastEscapeIndex)], prevLines, charCount, currentLineIndex, currentCursorPosition, separator);
4247
result[4] = overflow;
4348
return result;
4449
}
@@ -54,15 +59,11 @@ export function messagesToLines(
5459
if (currentLineIndex > prevLines.length - 1) {
5560
prevLines.push({message: '', lineLen: 0, timestamp: new Date()});
5661
}
57-
let [_addedCharacters, _currentCursorPosition] = writeOverLine(prevLines[currentLineIndex], chunk, currentCursorPosition)
58-
charCount += _addedCharacters;
59-
currentCursorPosition = _currentCursorPosition;
62+
[charCount, currentCursorPosition] = writeOverLine(prevLines[currentLineIndex], chunk, currentCursorPosition, charCount)
6063
}
6164

6265
if (i < chunks.length - 1) {
63-
let [_addedCharacters, _currentCursorPosition] = writeOverLine(prevLines[currentLineIndex], separator, currentCursorPosition)
64-
charCount += _addedCharacters;
65-
currentCursorPosition = _currentCursorPosition;
66+
[charCount, currentCursorPosition] = writeOverLine(prevLines[currentLineIndex], separator, currentCursorPosition, charCount)
6667
}
6768
}
6869

arduino-ide-extension/src/test/browser/monitor-utils.test.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ const date = new Date();
2424
const testLines: TestLine[] = [
2525
{
2626
messages: ['Hello'],
27-
expected: { lines: [{ message: 'Hello', lineLen: 5 }], charCount: 5 }
27+
expected: { lines: [{ message: 'Hello', lineLen: 5 }], charCount: 5 },
2828
},
2929
{
3030
messages: ['Hello', 'Dog!'],
31-
expected: { lines: [{ message: 'HelloDog!', lineLen: 9 }], charCount: 9 }
31+
expected: { lines: [{ message: 'HelloDog!', lineLen: 9 }], charCount: 9 },
3232
},
3333
{
3434
messages: ['Hello\n', 'Dog!'],
@@ -38,7 +38,7 @@ const testLines: TestLine[] = [
3838
{ message: 'Dog!', lineLen: 4 },
3939
],
4040
charCount: 10,
41-
}
41+
},
4242
},
4343
{
4444
messages: ['Dog!'],
@@ -49,7 +49,7 @@ const testLines: TestLine[] = [
4949
{ message: 'Dog!', lineLen: 4 },
5050
],
5151
charCount: 10,
52-
}
52+
},
5353
},
5454
{
5555
messages: [' Dog!\n', " Who's a good ", 'boy?\n', "You're a good boy!"],
@@ -69,7 +69,7 @@ const testLines: TestLine[] = [
6969
{ message: '?\n', lineLen: 2 },
7070
{ message: "You're a good boy!", lineLen: 8 },
7171
],
72-
}
72+
},
7373
},
7474
{
7575
messages: ['boy?\n', "You're a good boy!"],
@@ -95,7 +95,7 @@ const testLines: TestLine[] = [
9595
{ message: '?\n', lineLen: 2 },
9696
{ message: "You're a good boy!", lineLen: 8 },
9797
],
98-
}
98+
},
9999
},
100100
{
101101
messages: ["Who's a good boy?\n", 'Yo'],
@@ -120,7 +120,6 @@ const testLines: TestLine[] = [
120120
],
121121
}
122122
},
123-
124123
{
125124
messages: ['Dog!'],
126125
prevLines: { lines: [{ message: 'Hello\n', lineLen: 6 }], charCount: 6 },

0 commit comments

Comments
 (0)