From 077ed1b5be844df35b7fba554ddae579b3144787 Mon Sep 17 00:00:00 2001 From: Eliott C Date: Tue, 31 Jan 2023 17:22:40 +0100 Subject: [PATCH] fix(eslint-plugin): do not use .at(), Node 14 does not support it (#6402) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(key-spacing): do not use .at(), Node 14 does not support it * 🚨 Coverage on at() * Apply suggestions from code review --------- Co-authored-by: Josh Goldberg --- .../eslint-plugin/src/rules/key-spacing.ts | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/eslint-plugin/src/rules/key-spacing.ts b/packages/eslint-plugin/src/rules/key-spacing.ts index 587d2674f4f..2562107ee05 100644 --- a/packages/eslint-plugin/src/rules/key-spacing.ts +++ b/packages/eslint-plugin/src/rules/key-spacing.ts @@ -14,6 +14,16 @@ const baseSchema = Array.isArray(baseRule.meta.schema) ? baseRule.meta.schema[0] : baseRule.meta.schema; +/** + * TODO: replace with native .at() once Node 14 stops being supported + */ +function at(arr: T[], position: number): T | undefined { + if (position < 0) { + return arr[arr.length + position]; + } + return arr[position]; +} + export default util.createRule({ name: 'key-spacing', meta: { @@ -41,7 +51,7 @@ export default util.createRule({ function adjustedColumn(position: TSESTree.Position): number { const line = position.line - 1; // position.line is 1-indexed return util.getStringLength( - sourceCode.lines[line].slice(0, position.column), + at(sourceCode.lines, line)!.slice(0, position.column), ); } @@ -87,7 +97,7 @@ export default util.createRule({ return code.slice( 0, sourceCode.getTokenAfter( - node.parameters.at(-1)!, + at(node.parameters, -1)!, util.isClosingBracketToken, )!.range[1] - node.range[0], ); @@ -102,7 +112,7 @@ export default util.createRule({ return getLastTokenBeforeColon( node.type !== AST_NODE_TYPES.TSIndexSignature ? node.key - : node.parameters.at(-1)!, + : at(node.parameters, -1)!, ).loc.end; } @@ -202,7 +212,7 @@ export default util.createRule({ if ( leadingComments.length && leadingComments[0].loc.start.line - groupEndLine <= 1 && - candidateValueStartLine - leadingComments.at(-1)!.loc.end.line <= 1 + candidateValueStartLine - at(leadingComments, -1)!.loc.end.line <= 1 ) { for (let i = 1; i < leadingComments.length; i++) { if ( @@ -373,7 +383,7 @@ export default util.createRule({ let prevNode: TSESTree.Node | undefined = undefined; for (const node of members) { - let prevAlignedNode = currentAlignGroup.at(-1); + let prevAlignedNode = at(currentAlignGroup, -1); if (prevAlignedNode !== prevNode) { prevAlignedNode = undefined; }