From 8aad412c9ecf30323f77a8cda4fa25392c8d2b7b Mon Sep 17 00:00:00 2001 From: Reinhard Hillefeld Date: Fri, 14 Aug 2020 16:23:25 -0400 Subject: [PATCH 1/3] Added zero-padding to timestamp output --- src/jsTyping/shared.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jsTyping/shared.ts b/src/jsTyping/shared.ts index ce6004f251d..a8ca30961b9 100644 --- a/src/jsTyping/shared.ts +++ b/src/jsTyping/shared.ts @@ -57,6 +57,6 @@ namespace ts.server { export function nowString() { // E.g. "12:34:56.789" const d = new Date(); - return `${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}.${d.getMilliseconds()}`; + return `${("00" + d.getHours()).slice(-2)}:${("00" + d.getMinutes()).slice(-2)}:${("00" + d.getSeconds()).slice(-2)}.${("000" + d.getMilliseconds()).slice(-3)}`; } } From 07c92e8fcaa50d6c1866403469b8ba25780f0128 Mon Sep 17 00:00:00 2001 From: Reinhard Hillefeld Date: Fri, 11 Sep 2020 09:27:27 -0400 Subject: [PATCH 2/3] Modified existing padLeft() and padRight() functions to support strings other than a single space as padding. Used this new functionality to zero-pad the timestamp created by nowString(). --- src/compiler/core.ts | 40 +++++++++++++++++++++++++++++++--------- src/jsTyping/shared.ts | 2 +- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 753af89b590..235c0f3a304 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -2250,18 +2250,40 @@ namespace ts { } } - export function padLeft(s: string, length: number) { - while (s.length < length) { - s = " " + s; + + /** + * Returns 's' left-padded with copies of 'padString' until it reaches the given 'length'. + * If omitted, 'padString' defaults to a single space. + * If 'length' is less than or equal to 's.length' or 'padString' is empty, returns 's' unchanged. + */ + export function padLeft(s: string, length: number, padString = " ") { + if (length <= s.length || padString.length === 0) { + return s; + } + else { + length -= s.length; // how much padding we need + if (length > padString.length) { // need more than one copy of padString + padString += padString.repeat(length / padString.length); + } + return padString.slice(0, length) + s; } - return s; } - export function padRight(s: string, length: number) { - while (s.length < length) { - s = s + " "; + /** + * Returns 's' right-padded with copies of 'padString' until it reaches the given 'length'. + * If omitted, 'padString' defaults to a single space. + * If 'length' is less than or equal to 's.length' or 'padString' is empty, returns 's' unchanged. + */ + export function padRight(s: string, length: number, padString = " ") { + if (length <= s.length || padString.length === 0) { + return s; + } + else { + length -= s.length; + if (length > padString.length) { // need more than one copy of padString + padString += padString.repeat(length / padString.length); + } + return s + padString.slice(0, length); } - - return s; } } diff --git a/src/jsTyping/shared.ts b/src/jsTyping/shared.ts index a8ca30961b9..b41d3d0c455 100644 --- a/src/jsTyping/shared.ts +++ b/src/jsTyping/shared.ts @@ -57,6 +57,6 @@ namespace ts.server { export function nowString() { // E.g. "12:34:56.789" const d = new Date(); - return `${("00" + d.getHours()).slice(-2)}:${("00" + d.getMinutes()).slice(-2)}:${("00" + d.getSeconds()).slice(-2)}.${("000" + d.getMilliseconds()).slice(-3)}`; + return `${padLeft(d.getHours().toString(), 2, "0")}:${padLeft(d.getMinutes().toString(), 2, "0")}:${padLeft(d.getSeconds().toString(), 2, "0")}.${padLeft(d.getMilliseconds().toString(), 3, "0")}`; } } From 4c5e463e1216e0b696fb0c3bf50efecb1fe86252 Mon Sep 17 00:00:00 2001 From: Reinhard Hillefeld Date: Fri, 11 Sep 2020 20:16:43 -0400 Subject: [PATCH 3/3] Simplifying padLeft() to only allow spaces or zeros for padding. Updated padRight() to mirror padLeft() but without the option to use zeros since that would be an unlikely use case. --- src/compiler/core.ts | 42 ++++++++++++++---------------------------- 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 197fd3de346..249aededcdd 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -2252,38 +2252,24 @@ namespace ts { /** - * Returns 's' left-padded with copies of 'padString' until it reaches the given 'length'. - * If omitted, 'padString' defaults to a single space. - * If 'length' is less than or equal to 's.length' or 'padString' is empty, returns 's' unchanged. + * Returns string left-padded with spaces or zeros until it reaches the given length. + * + * @param s String to pad. + * @param length Final padded length. If less than or equal to 's.length', returns 's' unchanged. + * @param padString Character to use as padding (default " "). */ - export function padLeft(s: string, length: number, padString = " ") { - if (length <= s.length || padString.length === 0) { - return s; - } - else { - length -= s.length; // how much padding we need - if (length > padString.length) { // need more than one copy of padString - padString += padString.repeat(length / padString.length); - } - return padString.slice(0, length) + s; - } + export function padLeft(s: string, length: number, padString: " " | "0" = " ") { + return length <= s.length ? s : padString.repeat(length - s.length) + s; } /** - * Returns 's' right-padded with copies of 'padString' until it reaches the given 'length'. - * If omitted, 'padString' defaults to a single space. - * If 'length' is less than or equal to 's.length' or 'padString' is empty, returns 's' unchanged. + * Returns string right-padded with spaces until it reaches the given length. + * + * @param s String to pad. + * @param length Final padded length. If less than or equal to 's.length', returns 's' unchanged. + * @param padString Character to use as padding (default " "). */ - export function padRight(s: string, length: number, padString = " ") { - if (length <= s.length || padString.length === 0) { - return s; - } - else { - length -= s.length; - if (length > padString.length) { // need more than one copy of padString - padString += padString.repeat(length / padString.length); - } - return s + padString.slice(0, length); - } + export function padRight(s: string, length: number, padString: " " = " ") { + return length <= s.length ? s : s + padString.repeat(length - s.length); } }