From 307dd0fd6874f4951b677ab94b131c9a00ba987b Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Wed, 17 Jan 2018 10:32:35 -0800 Subject: [PATCH] Add several tslint rules --- src/InputHandler.ts | 14 +++++++------- src/SelectionModel.test.ts | 2 +- src/Terminal.integration.ts | 36 ++++++++++++++++++------------------ src/Terminal.ts | 8 ++++---- src/addons/zmodem/zmodem.ts | 8 ++++---- src/utils/Sounds.ts | 2 +- tslint.json | 19 +++++++++++++------ 7 files changed, 48 insertions(+), 41 deletions(-) diff --git a/src/InputHandler.ts b/src/InputHandler.ts index 1ba6dc7a..7d3a4d24 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -26,7 +26,7 @@ export class InputHandler implements IInputHandler { if (char >= ' ') { // calculate print space // expensive call, therefore we save width in line buffer - const ch_width = wcwidth(code); + const chWidth = wcwidth(code); if (this._terminal.charset && this._terminal.charset[char]) { char = this._terminal.charset[char]; @@ -36,7 +36,7 @@ export class InputHandler implements IInputHandler { // insert combining char in last cell // FIXME: needs handling after cursor jumps - if (!ch_width && this._terminal.buffer.x) { + if (!chWidth && this._terminal.buffer.x) { // dont overflow left if (this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1]) { if (!this._terminal.buffer.lines.get(row)[this._terminal.buffer.x - 1][CHAR_DATA_WIDTH_INDEX]) { @@ -56,7 +56,7 @@ export class InputHandler implements IInputHandler { // goto next line if ch would overflow // TODO: needs a global min terminal width of 2 - if (this._terminal.buffer.x + ch_width - 1 >= this._terminal.cols) { + if (this._terminal.buffer.x + chWidth - 1 >= this._terminal.cols) { // autowrap - DECAWM if (this._terminal.wraparoundMode) { this._terminal.buffer.x = 0; @@ -70,7 +70,7 @@ export class InputHandler implements IInputHandler { (this._terminal.buffer.lines.get(this._terminal.buffer.y)).isWrapped = true; } } else { - if (ch_width === 2) // FIXME: check for xterm behavior + if (chWidth === 2) // FIXME: check for xterm behavior return; } } @@ -79,7 +79,7 @@ export class InputHandler implements IInputHandler { // insert mode: move characters to right if (this._terminal.insertMode) { // do this twice for a fullwidth char - for (let moves = 0; moves < ch_width; ++moves) { + for (let moves = 0; moves < chWidth; ++moves) { // remove last cell, if it's width is 0 // we have to adjust the second last cell as well const removed = this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).pop(); @@ -94,12 +94,12 @@ export class InputHandler implements IInputHandler { } } - this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, char, ch_width, char.charCodeAt(0)]; + this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, char, chWidth, char.charCodeAt(0)]; this._terminal.buffer.x++; this._terminal.updateRange(this._terminal.buffer.y); // fullwidth char - set next cell width to zero and advance cursor - if (ch_width === 2) { + if (chWidth === 2) { this._terminal.buffer.lines.get(row)[this._terminal.buffer.x] = [this._terminal.curAttr, '', 0, undefined]; this._terminal.buffer.x++; } diff --git a/src/SelectionModel.test.ts b/src/SelectionModel.test.ts index e195d6bd..eda94718 100644 --- a/src/SelectionModel.test.ts +++ b/src/SelectionModel.test.ts @@ -6,7 +6,7 @@ import { assert } from 'chai'; import { ITerminal } from './Interfaces'; import { SelectionModel } from './SelectionModel'; -import {BufferSet} from './BufferSet'; +import { BufferSet } from './BufferSet'; import { MockTerminal } from './utils/TestUtils.test'; class TestSelectionModel extends SelectionModel { diff --git a/src/Terminal.integration.ts b/src/Terminal.integration.ts index 00db4dd6..283c5bc0 100644 --- a/src/Terminal.integration.ts +++ b/src/Terminal.integration.ts @@ -15,17 +15,17 @@ import { assert } from 'chai'; import { Terminal } from './Terminal'; import { CHAR_DATA_CHAR_INDEX } from './Buffer'; -let primitive_pty: any; +let primitivePty: any; // fake sychronous pty write - read // we just pipe the data from slave to master as a child program would do // pty.js opens pipe fds with O_NONBLOCK // just wait 10ms instead of setting fds to blocking mode function ptyWriteRead(data: string, cb: (result: string) => void): void { - fs.writeSync(primitive_pty.slave, data); + fs.writeSync(primitivePty.slave, data); setTimeout(() => { let b = new Buffer(64000); - let bytes = fs.readSync(primitive_pty.master, b, 0, 64000, null); + let bytes = fs.readSync(primitivePty.master, b, 0, 64000, null); cb(b.toString('utf8', 0, bytes)); }); } @@ -37,7 +37,7 @@ function ptyReset(cb: (result: string) => void): void { /* debug helpers */ // generate colorful noisy output to compare xterm and emulator cell states -function formatError(in_: string, out_: string, expected: string): string { +function formatError(input: string, output: string, expected: string): string { function addLineNumber(start: number, color: string): (s: string) => string { let counter = start || 0; return function(s: string): string { @@ -47,9 +47,9 @@ function formatError(in_: string, out_: string, expected: string): string { } let line80 = '12345678901234567890123456789012345678901234567890123456789012345678901234567890'; let s = ''; - s += '\n\x1b[34m' + JSON.stringify(in_); + s += '\n\x1b[34m' + JSON.stringify(input); s += '\n\x1b[33m ' + line80 + '\n'; - s += out_.split('\n').map(addLineNumber(0, '\x1b[31m')).join('\n'); + s += output.split('\n').map(addLineNumber(0, '\x1b[31m')).join('\n'); s += '\n\x1b[33m ' + line80 + '\n'; s += expected.split('\n').map(addLineNumber(0, '\x1b[32m')).join('\n'); return s; @@ -58,15 +58,15 @@ function formatError(in_: string, out_: string, expected: string): string { // simple debug output of terminal cells function terminalToString(term: Terminal): string { let result = ''; - let line_s = ''; + let lineText = ''; for (let line = term.buffer.ybase; line < term.buffer.ybase + term.rows; line++) { - line_s = ''; + lineText = ''; for (let cell = 0; cell < term.cols; ++cell) { - line_s += term.buffer.lines.get(line)[cell][CHAR_DATA_CHAR_INDEX]; + lineText += term.buffer.lines.get(line)[cell][CHAR_DATA_CHAR_INDEX]; } // rtrim empty cells as xterm does - line_s = line_s.replace(/\s+$/, ''); - result += line_s; + lineText = lineText.replace(/\s+$/, ''); + result += lineText; result += '\n'; } return result; @@ -83,7 +83,7 @@ if (os.platform() !== 'win32') { /** some helpers for pty interaction */ // we need a pty in between to get the termios decorations // for the basic test cases a raw pty device is enough - primitive_pty = pty.native.open(COLS, ROWS); + primitivePty = pty.native.open(COLS, ROWS); /** tests */ describe('xterm output comparison', () => { @@ -118,24 +118,24 @@ if (os.platform() !== 'win32') { ((filename: string) => { it(filename.split('/').slice(-1)[0], done => { ptyReset(() => { - let in_file = fs.readFileSync(filename, 'utf8'); - ptyWriteRead(in_file, from_pty => { + let inFile = fs.readFileSync(filename, 'utf8'); + ptyWriteRead(inFile, fromPty => { // uncomment this to get log from terminal // console.log = function(){}; // Perform a synchronous .write(data) - xterm.writeBuffer.push(from_pty); + xterm.writeBuffer.push(fromPty); xterm.innerWrite(); - let from_emulator = terminalToString(xterm); + let fromEmulator = terminalToString(xterm); console.log = CONSOLE_LOG; let expected = fs.readFileSync(filename.split('.')[0] + '.text', 'utf8'); // Some of the tests have whitespace on the right of lines, we trim all the linex // from xterm.js so ignore this for now at least. let expectedRightTrimmed = expected.split('\n').map(l => l.replace(/\s+$/, '')).join('\n'); - if (from_emulator !== expectedRightTrimmed) { + if (fromEmulator !== expectedRightTrimmed) { // uncomment to get noisy output - throw new Error(formatError(in_file, from_emulator, expected)); + throw new Error(formatError(inFile, fromEmulator, expected)); // throw new Error('mismatch'); } done(); diff --git a/src/Terminal.ts b/src/Terminal.ts index 1a1694f4..8c0a3793 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -40,7 +40,7 @@ import { MouseHelper } from './utils/MouseHelper'; import { CHARSETS } from './Charsets'; import { CustomKeyEventHandler, Charset, LinkMatcherHandler, LinkMatcherValidationCallback, CharData, LineData } from './Types'; import { ITerminal, IBrowser, ITerminalOptions, IInputHandlingTerminal, ILinkMatcherOptions, IViewport, ICompositionHelper, ITheme, ILinkifier } from './Interfaces'; -import { BellSound } from './utils/Sounds'; +import { BELL_SOUND } from './utils/Sounds'; import { DEFAULT_ANSI_COLORS } from './renderer/ColorManager'; import { IMouseZoneManager } from './input/Interfaces'; import { MouseZoneManager } from './input/MouseZoneManager'; @@ -70,7 +70,7 @@ const DEFAULT_OPTIONS: ITerminalOptions = { termName: 'xterm', cursorBlink: false, cursorStyle: 'block', - bellSound: BellSound, + bellSound: BELL_SOUND, bellStyle: 'none', enableBold: true, fontFamily: 'courier-new, courier, monospace', @@ -181,7 +181,7 @@ export class Terminal extends EventEmitter implements ITerminal, IInputHandlingT private writeStopped: boolean; // leftover surrogate high from previous write invocation - private surrogate_high: string; + private surrogateHigh: string; // Store if user went browsing history in scrollback private userScrolling: boolean; @@ -280,7 +280,7 @@ export class Terminal extends EventEmitter implements ITerminal, IInputHandlingT this.xoffSentToCatchUp = false; this.writeStopped = false; - this.surrogate_high = ''; + this.surrogateHigh = ''; this.userScrolling = false; this.inputHandler = new InputHandler(this); diff --git a/src/addons/zmodem/zmodem.ts b/src/addons/zmodem/zmodem.ts index f1e6050f..4713f111 100644 --- a/src/addons/zmodem/zmodem.ts +++ b/src/addons/zmodem/zmodem.ts @@ -27,7 +27,7 @@ * via `detach()` and a re-`attach()`.) */ -let Zmodem; +let zmodem; export interface IZModemOptions { noTerminalWriteOutsideSession?: boolean; @@ -42,7 +42,7 @@ export function zmodemAttach(term: any, ws: WebSocket, opts: IZModemOptions = {} return !!zsentry.get_confirmed_session() || !opts.noTerminalWriteOutsideSession; } - zsentry = new Zmodem.Sentry({ + zsentry = new zmodem.Sentry({ to_terminal: (octets: ArrayLike) => { if (_shouldWrite()) { term.write( @@ -76,8 +76,8 @@ export function zmodemAttach(term: any, ws: WebSocket, opts: IZModemOptions = {} } export function apply(terminalConstructor: any): void { - Zmodem = (typeof window === 'object') ? (window).ZModem : {Browser: null}; // Nullify browser for tests + zmodem = (typeof window === 'object') ? (window).ZModem : {Browser: null}; // Nullify browser for tests terminalConstructor.prototype.zmodemAttach = zmodemAttach.bind(this, this); - terminalConstructor.prototype.zmodemBrowser = Zmodem.Browser; + terminalConstructor.prototype.zmodemBrowser = zmodem.Browser; } diff --git a/src/utils/Sounds.ts b/src/utils/Sounds.ts index 03f36f42..be26d4a5 100644 --- a/src/utils/Sounds.ts +++ b/src/utils/Sounds.ts @@ -7,4 +7,4 @@ // This sound is released under the Creative Commons Attribution 3.0 Unported // (CC BY 3.0) license. It was created by 'altemark'. No modifications have been // made, apart from the conversion to base64. -export const BellSound = 'data:audio/wav;base64,UklGRigBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQQBAADpAFgCwAMlBZoG/wdmCcoKRAypDQ8PbRDBEQQTOxRtFYcWlBePGIUZXhoiG88bcBz7HHIdzh0WHlMeZx51HmkeUx4WHs8dah0AHXwc3hs9G4saxRnyGBIYGBcQFv8U4RPAEoYRQBACD70NWwwHC6gJOwjWBloF7gOBAhABkf8b/qv8R/ve+Xf4Ife79W/0JfPZ8Z/wde9N7ijtE+wU6xvqM+lb6H7nw+YX5mrlxuQz5Mzje+Ma49fioeKD4nXiYeJy4pHitOL04j/jn+MN5IPkFOWs5U3mDefM55/ogOl36m7rdOyE7abuyu8D8Unyj/Pg9D/2qfcb+Yn6/vuK/Qj/lAAlAg=='; +export const BELL_SOUND = 'data:audio/wav;base64,UklGRigBAABXQVZFZm10IBAAAAABAAEARKwAAIhYAQACABAAZGF0YQQBAADpAFgCwAMlBZoG/wdmCcoKRAypDQ8PbRDBEQQTOxRtFYcWlBePGIUZXhoiG88bcBz7HHIdzh0WHlMeZx51HmkeUx4WHs8dah0AHXwc3hs9G4saxRnyGBIYGBcQFv8U4RPAEoYRQBACD70NWwwHC6gJOwjWBloF7gOBAhABkf8b/qv8R/ve+Xf4Ife79W/0JfPZ8Z/wde9N7ijtE+wU6xvqM+lb6H7nw+YX5mrlxuQz5Mzje+Ma49fioeKD4nXiYeJy4pHitOL04j/jn+MN5IPkFOWs5U3mDefM55/ogOl36m7rdOyE7abuyu8D8Unyj/Pg9D/2qfcb+Yn6/vuK/Qj/lAAlAg=='; diff --git a/tslint.json b/tslint.json index 4d4d4aa5..31c9ec84 100644 --- a/tslint.json +++ b/tslint.json @@ -1,5 +1,9 @@ { "rules": { + "array-type": [ + true, + "array" + ], "class-name": true, "comment-format": [ true, @@ -18,10 +22,7 @@ "no-eval": true, "no-internal-module": true, "no-trailing-whitespace": true, - "one-variable-per-declaration": [ - true, - true - ], + "one-variable-per-declaration": true, "no-unsafe-finally": true, "no-var-keyword": true, "quotemark": [ @@ -48,15 +49,21 @@ ], "variable-name": [ true, - "ban-keywords" + "ban-keywords", + "check-format", + "allow-leading-underscore" ], "whitespace": [ true, "check-branch", "check-decl", + "check-module", "check-operator", + "check-rest-spread", "check-separator", - "check-type" + "check-type", + "check-type-operator", + "check-preblock" ] } }