From be952938130bd3892656473252cd0444f240e117 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Tue, 18 Jul 2023 19:12:49 +0930 Subject: [PATCH] feat(eslint-plugin): sync getFunctionHeadLoc implementation with upstream --- .../src/util/getFunctionHeadLoc.ts | 230 ++++++++++++++---- .../explicit-function-return-type.test.ts | 170 ++++++------- .../explicit-module-boundary-types.test.ts | 148 +++++------ 3 files changed, 340 insertions(+), 208 deletions(-) diff --git a/packages/eslint-plugin/src/util/getFunctionHeadLoc.ts b/packages/eslint-plugin/src/util/getFunctionHeadLoc.ts index ddc004d0397..a8f6bc40afb 100644 --- a/packages/eslint-plugin/src/util/getFunctionHeadLoc.ts +++ b/packages/eslint-plugin/src/util/getFunctionHeadLoc.ts @@ -1,5 +1,9 @@ +// adapted from https://github.com/eslint/eslint/blob/5bdaae205c3a0089ea338b382df59e21d5b06436/lib/rules/utils/ast-utils.js#L1668-L1787 + import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; -import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils'; + +import { isArrowToken, isOpeningParenToken } from './astUtils'; type FunctionNode = | TSESTree.ArrowFunctionExpression @@ -7,65 +11,193 @@ type FunctionNode = | TSESTree.FunctionExpression; /** - * Creates a report location for the given function. - * The location only encompasses the "start" of the function, and not the body - * - * eg. - * - * ``` - * function foo(args) {} - * ^^^^^^^^^^^^^^^^^^ - * - * get y(args) {} - * ^^^^^^^^^^^ - * - * const x = (args) => {} - * ^^^^^^^^^ - * ``` + * Gets the `(` token of the given function node. + * @param node The function node to get. + * @param sourceCode The source code object to get tokens. + * @returns `(` token. */ -export function getFunctionHeadLoc( +function getOpeningParenOfParams( node: FunctionNode, sourceCode: TSESLint.SourceCode, -): TSESTree.SourceLocation { - function getLocStart(): TSESTree.Position { - if (node.parent.type === AST_NODE_TYPES.MethodDefinition) { - // return the start location for class method - - if (node.parent.decorators && node.parent.decorators.length > 0) { - // exclude decorators - return sourceCode.getTokenAfter( - node.parent.decorators[node.parent.decorators.length - 1], - )!.loc.start; - } +): TSESTree.Token { + // If the node is an arrow function and doesn't have parens, this returns the identifier of the first param. + if ( + node.type === AST_NODE_TYPES.ArrowFunctionExpression && + node.params.length === 1 + ) { + const argToken = ESLintUtils.nullThrows( + sourceCode.getFirstToken(node.params[0]), + ESLintUtils.NullThrowsReasons.MissingToken('parameter', 'arrow function'), + ); + const maybeParenToken = sourceCode.getTokenBefore(argToken); - return node.parent.loc.start; - } + return maybeParenToken && isOpeningParenToken(maybeParenToken) + ? maybeParenToken + : argToken; + } - if (node.parent.type === AST_NODE_TYPES.Property && node.parent.method) { - // return the start location for object method shorthand - return node.parent.loc.start; - } + // Otherwise, returns paren. + return node.id != null + ? ESLintUtils.nullThrows( + sourceCode.getTokenAfter(node.id, isOpeningParenToken), + ESLintUtils.NullThrowsReasons.MissingToken('id', 'function'), + ) + : ESLintUtils.nullThrows( + sourceCode.getFirstToken(node, isOpeningParenToken), + ESLintUtils.NullThrowsReasons.MissingToken( + 'opening parenthesis', + 'function', + ), + ); +} - // return the start location for a regular function - return node.loc.start; - } +/** + * Gets the location of the given function node for reporting. + * + * - `function foo() {}` + * ^^^^^^^^^^^^ + * - `(function foo() {})` + * ^^^^^^^^^^^^ + * - `(function() {})` + * ^^^^^^^^ + * - `function* foo() {}` + * ^^^^^^^^^^^^^ + * - `(function* foo() {})` + * ^^^^^^^^^^^^^ + * - `(function*() {})` + * ^^^^^^^^^ + * - `() => {}` + * ^^ + * - `async () => {}` + * ^^ + * - `({ foo: function foo() {} })` + * ^^^^^^^^^^^^^^^^^ + * - `({ foo: function() {} })` + * ^^^^^^^^^^^^^ + * - `({ ['foo']: function() {} })` + * ^^^^^^^^^^^^^^^^^ + * - `({ [foo]: function() {} })` + * ^^^^^^^^^^^^^^^ + * - `({ foo() {} })` + * ^^^ + * - `({ foo: function* foo() {} })` + * ^^^^^^^^^^^^^^^^^^ + * - `({ foo: function*() {} })` + * ^^^^^^^^^^^^^^ + * - `({ ['foo']: function*() {} })` + * ^^^^^^^^^^^^^^^^^^ + * - `({ [foo]: function*() {} })` + * ^^^^^^^^^^^^^^^^ + * - `({ *foo() {} })` + * ^^^^ + * - `({ foo: async function foo() {} })` + * ^^^^^^^^^^^^^^^^^^^^^^^ + * - `({ foo: async function() {} })` + * ^^^^^^^^^^^^^^^^^^^ + * - `({ ['foo']: async function() {} })` + * ^^^^^^^^^^^^^^^^^^^^^^^ + * - `({ [foo]: async function() {} })` + * ^^^^^^^^^^^^^^^^^^^^^ + * - `({ async foo() {} })` + * ^^^^^^^^^ + * - `({ get foo() {} })` + * ^^^^^^^ + * - `({ set foo(a) {} })` + * ^^^^^^^ + * - `class A { constructor() {} }` + * ^^^^^^^^^^^ + * - `class A { foo() {} }` + * ^^^ + * - `class A { *foo() {} }` + * ^^^^ + * - `class A { async foo() {} }` + * ^^^^^^^^^ + * - `class A { ['foo']() {} }` + * ^^^^^^^ + * - `class A { *['foo']() {} }` + * ^^^^^^^^ + * - `class A { async ['foo']() {} }` + * ^^^^^^^^^^^^^ + * - `class A { [foo]() {} }` + * ^^^^^ + * - `class A { *[foo]() {} }` + * ^^^^^^ + * - `class A { async [foo]() {} }` + * ^^^^^^^^^^^ + * - `class A { get foo() {} }` + * ^^^^^^^ + * - `class A { set foo(a) {} }` + * ^^^^^^^ + * - `class A { static foo() {} }` + * ^^^^^^^^^^ + * - `class A { static *foo() {} }` + * ^^^^^^^^^^^ + * - `class A { static async foo() {} }` + * ^^^^^^^^^^^^^^^^ + * - `class A { static get foo() {} }` + * ^^^^^^^^^^^^^^ + * - `class A { static set foo(a) {} }` + * ^^^^^^^^^^^^^^ + * - `class A { foo = function() {} }` + * ^^^^^^^^^^^^^^ + * - `class A { static foo = function() {} }` + * ^^^^^^^^^^^^^^^^^^^^^ + * - `class A { foo = (a, b) => {} }` + * ^^^^^^ + * @param node The function node to get. + * @param sourceCode The source code object to get tokens. + * @returns The location of the function node for reporting. + */ +export function getFunctionHeadLoc( + node: FunctionNode, + sourceCode: TSESLint.SourceCode, +): TSESTree.SourceLocation { + const parent = node.parent; + let start = null; + let end = null; - function getLocEnd(): TSESTree.Position { - if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) { - // find the end location for arrow function expression - return sourceCode.getTokenBefore( - node.body, - token => - token.type === AST_TOKEN_TYPES.Punctuator && token.value === '=>', - )!.loc.end; + if ( + parent.type === AST_NODE_TYPES.MethodDefinition || + parent.type === AST_NODE_TYPES.PropertyDefinition + ) { + // the decorator's range is included within the member + // however it's usually irrelevant to the member itself - so we don't want + // to highlight it ever. + if (parent.decorators.length > 0) { + const lastDecorator = parent.decorators[parent.decorators.length - 1]; + const firstTokenAfterDecorator = ESLintUtils.nullThrows( + sourceCode.getTokenAfter(lastDecorator), + ESLintUtils.NullThrowsReasons.MissingToken( + 'modifier or member name', + 'class member', + ), + ); + start = firstTokenAfterDecorator.loc.start; + } else { + start = parent.loc.start; } + end = getOpeningParenOfParams(node, sourceCode).loc.start; + } else if (parent.type === AST_NODE_TYPES.Property) { + start = parent.loc.start; + end = getOpeningParenOfParams(node, sourceCode).loc.start; + } else if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) { + const arrowToken = ESLintUtils.nullThrows( + sourceCode.getTokenBefore(node.body, isArrowToken), + ESLintUtils.NullThrowsReasons.MissingToken( + 'arrow token', + 'arrow function', + ), + ); - // return the end location for a regular function - return sourceCode.getTokenBefore(node.body)!.loc.end; + start = arrowToken.loc.start; + end = arrowToken.loc.end; + } else { + start = node.loc.start; + end = getOpeningParenOfParams(node, sourceCode).loc.start; } return { - start: getLocStart(), - end: getLocEnd(), + start: Object.assign({}, start), + end: Object.assign({}, end), }; } diff --git a/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts b/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts index a17a27dec17..d65263a9c02 100644 --- a/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts @@ -680,7 +680,7 @@ function test(a: number, b: number) { line: 2, endLine: 2, column: 1, - endColumn: 36, + endColumn: 14, }, ], }, @@ -696,7 +696,7 @@ function test() { line: 2, endLine: 2, column: 1, - endColumn: 16, + endColumn: 14, }, ], }, @@ -712,7 +712,7 @@ var fn = function () { line: 2, endLine: 2, column: 10, - endColumn: 21, + endColumn: 19, }, ], }, @@ -725,7 +725,7 @@ var arrowFn = () => 'test'; messageId: 'missingReturnType', line: 2, endLine: 2, - column: 15, + column: 18, endColumn: 20, }, ], @@ -751,30 +751,30 @@ class Test { { messageId: 'missingReturnType', line: 4, - endLine: 4, column: 3, - endColumn: 13, + endLine: 4, + endColumn: 11, }, { messageId: 'missingReturnType', line: 8, - endLine: 8, column: 3, - endColumn: 11, + endLine: 8, + endColumn: 9, }, { messageId: 'missingReturnType', line: 11, + column: 3, endLine: 11, - column: 11, - endColumn: 16, + endColumn: 11, }, { messageId: 'missingReturnType', line: 12, - endLine: 12, column: 3, - endColumn: 19, + endLine: 12, + endColumn: 17, }, ], }, @@ -791,7 +791,7 @@ function test() { line: 2, endLine: 2, column: 1, - endColumn: 16, + endColumn: 14, }, ], }, @@ -803,7 +803,7 @@ function test() { messageId: 'missingReturnType', line: 1, endLine: 1, - column: 13, + column: 16, endColumn: 18, }, ], @@ -817,7 +817,7 @@ function test() { line: 1, endLine: 1, column: 13, - endColumn: 24, + endColumn: 22, }, ], }, @@ -829,7 +829,7 @@ function test() { messageId: 'missingReturnType', line: 1, endLine: 1, - column: 16, + column: 19, endColumn: 21, }, ], @@ -843,7 +843,7 @@ function test() { line: 1, endLine: 1, column: 16, - endColumn: 27, + endColumn: 25, }, ], }, @@ -863,37 +863,37 @@ class Foo { { messageId: 'missingReturnType', line: 3, + column: 3, endLine: 3, - column: 14, - endColumn: 19, + endColumn: 14, }, { messageId: 'missingReturnType', line: 4, + column: 3, endLine: 4, - column: 14, - endColumn: 25, + endColumn: 23, }, { messageId: 'missingReturnType', line: 5, + column: 3, endLine: 5, - column: 14, - endColumn: 29, + endColumn: 27, }, { messageId: 'missingReturnType', line: 7, + column: 3, endLine: 7, - column: 14, - endColumn: 19, + endColumn: 14, }, { messageId: 'missingReturnType', line: 8, + column: 3, endLine: 8, - column: 14, - endColumn: 25, + endColumn: 23, }, ], }, @@ -905,7 +905,7 @@ class Foo { messageId: 'missingReturnType', line: 1, endLine: 1, - column: 15, + column: 18, endColumn: 20, }, ], @@ -923,7 +923,7 @@ var funcExpr = function () { line: 2, endLine: 2, column: 16, - endColumn: 27, + endColumn: 25, }, ], }, @@ -936,7 +936,7 @@ var funcExpr = function () { messageId: 'missingReturnType', line: 1, endLine: 1, - column: 12, + column: 15, endColumn: 17, }, ], @@ -954,8 +954,8 @@ const x = { messageId: 'missingReturnType', line: 4, endLine: 4, - column: 8, - endColumn: 13, + column: 3, + endColumn: 8, }, ], }, @@ -972,8 +972,8 @@ const x: Foo = { messageId: 'missingReturnType', line: 4, endLine: 4, - column: 8, - endColumn: 13, + column: 3, + endColumn: 8, }, ], }, @@ -985,7 +985,7 @@ const x: Foo = { messageId: 'missingReturnType', line: 1, endLine: 1, - column: 7, + column: 10, endColumn: 12, }, ], @@ -999,7 +999,7 @@ const x: Foo = { line: 1, endLine: 1, column: 7, - endColumn: 18, + endColumn: 16, }, ], }, @@ -1015,7 +1015,7 @@ const x: Foo = { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 10, + column: 13, endColumn: 15, }, ], @@ -1033,7 +1033,7 @@ const x: Foo = { line: 3, endLine: 3, column: 10, - endColumn: 21, + endColumn: 19, }, ], }, @@ -1049,7 +1049,7 @@ function fn() { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 10, + column: 13, endColumn: 15, }, ], @@ -1067,7 +1067,7 @@ function fn() { line: 3, endLine: 3, column: 10, - endColumn: 21, + endColumn: 19, }, ], }, @@ -1093,7 +1093,7 @@ function FunctionDeclaration() { messageId: 'missingReturnType', line: 9, endLine: 9, - column: 11, + column: 14, endColumn: 16, }, ], @@ -1112,7 +1112,7 @@ function FunctionDeclaration() { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 10, + column: 13, endColumn: 15, }, ], @@ -1136,36 +1136,36 @@ foo(() => ''); { messageId: 'missingReturnType', line: 3, + column: 8, endLine: 3, - column: 5, endColumn: 10, }, { messageId: 'missingReturnType', line: 4, + column: 8, endLine: 4, - column: 5, endColumn: 10, }, { messageId: 'missingReturnType', line: 5, + column: 8, endLine: 5, - column: 5, endColumn: 10, }, { messageId: 'missingReturnType', line: 6, + column: 8, endLine: 6, - column: 5, endColumn: 10, }, { messageId: 'missingReturnType', line: 7, + column: 8, endLine: 7, - column: 5, endColumn: 10, }, ], @@ -1192,7 +1192,7 @@ new Accumulator().accumulate(() => 1); messageId: 'missingReturnType', line: 10, endLine: 10, - column: 30, + column: 33, endColumn: 35, }, ], @@ -1209,7 +1209,7 @@ new Accumulator().accumulate(() => 1); messageId: 'missingReturnType', line: 1, endLine: 1, - column: 2, + column: 5, endColumn: 7, }, ], @@ -1242,23 +1242,23 @@ foo({ { messageId: 'missingReturnType', line: 4, - endLine: 4, column: 3, - endColumn: 9, + endLine: 4, + endColumn: 7, }, { messageId: 'missingReturnType', line: 9, + column: 3, endLine: 9, - column: 9, - endColumn: 20, + endColumn: 18, }, { messageId: 'missingReturnType', line: 14, + column: 3, endLine: 14, - column: 9, - endColumn: 14, + endColumn: 9, }, ], }, @@ -1278,7 +1278,7 @@ const x: HigherOrderType = () => arg1 => arg2 => 'foo'; messageId: 'missingReturnType', line: 3, endLine: 3, - column: 42, + column: 47, endColumn: 49, }, ], @@ -1299,21 +1299,21 @@ const x: HigherOrderType = () => arg1 => arg2 => 'foo'; messageId: 'missingReturnType', line: 3, endLine: 3, - column: 28, + column: 31, endColumn: 33, }, { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 34, + column: 39, endColumn: 41, }, { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 42, + column: 47, endColumn: 49, }, ], @@ -1333,14 +1333,14 @@ const func = (value: number) => ({ type: 'X', value } as Action); messageId: 'missingReturnType', line: 2, endLine: 2, - column: 14, + column: 30, endColumn: 32, }, { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 14, + column: 30, endColumn: 32, }, ], @@ -1359,7 +1359,7 @@ const func = (value: number) => ({ type: 'X', value } as const); messageId: 'missingReturnType', line: 2, endLine: 2, - column: 14, + column: 30, endColumn: 32, }, ], @@ -1374,7 +1374,7 @@ const func = (value: number) => ({ type: 'X', value } as const); messageId: 'missingReturnType', line: 1, endLine: 1, - column: 13, + column: 31, endColumn: 33, }, ], @@ -1391,7 +1391,7 @@ const func = (value: number) => ({ type: 'X', value } as const); messageId: 'missingReturnType', line: 2, endLine: 2, - column: 21, + column: 39, endColumn: 41, }, ], @@ -1451,46 +1451,46 @@ const x = { `, errors: [ { - messageId: 'missingReturnType', line: 2, - endLine: 2, column: 1, - endColumn: 16, + messageId: 'missingReturnType', + endLine: 2, + endColumn: 14, }, { - messageId: 'missingReturnType', line: 5, + column: 16, + messageId: 'missingReturnType', endLine: 5, - column: 13, endColumn: 18, }, { - messageId: 'missingReturnType', line: 8, - endLine: 8, column: 13, - endColumn: 24, + messageId: 'missingReturnType', + endLine: 8, + endColumn: 22, }, { - messageId: 'missingReturnType', line: 11, - endLine: 11, column: 20, - endColumn: 31, + messageId: 'missingReturnType', + endLine: 11, + endColumn: 29, }, { line: 15, - column: 12, + column: 3, messageId: 'missingReturnType', endLine: 15, - endColumn: 23, + endColumn: 21, }, { - messageId: 'missingReturnType', line: 20, + column: 3, + messageId: 'missingReturnType', endLine: 20, - column: 6, - endColumn: 17, + endColumn: 15, }, ], }, @@ -1508,7 +1508,7 @@ class Foo { line: 4, endLine: 4, column: 3, - endColumn: 18, + endColumn: 16, }, ], }, @@ -1529,7 +1529,7 @@ const foo = (function () { line: 2, endLine: 2, column: 14, - endColumn: 25, + endColumn: 23, }, ], }, @@ -1551,7 +1551,7 @@ const foo = (function () { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 10, + column: 13, endColumn: 15, }, ], @@ -1573,7 +1573,7 @@ let foo = function () { line: 2, endLine: 2, column: 11, - endColumn: 22, + endColumn: 20, }, ], }, @@ -1591,7 +1591,7 @@ let foo = (() => () => {})()(); messageId: 'missingReturnType', line: 2, endLine: 2, - column: 18, + column: 21, endColumn: 23, }, ], diff --git a/packages/eslint-plugin/tests/rules/explicit-module-boundary-types.test.ts b/packages/eslint-plugin/tests/rules/explicit-module-boundary-types.test.ts index 854aa1bfe34..ce9176c136b 100644 --- a/packages/eslint-plugin/tests/rules/explicit-module-boundary-types.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-module-boundary-types.test.ts @@ -753,7 +753,7 @@ export function test(a: number, b: number) { line: 2, endLine: 2, column: 8, - endColumn: 43, + endColumn: 21, }, ], }, @@ -769,7 +769,7 @@ export function test() { line: 2, endLine: 2, column: 8, - endColumn: 23, + endColumn: 21, }, ], }, @@ -785,7 +785,7 @@ export var fn = function () { line: 2, endLine: 2, column: 17, - endColumn: 28, + endColumn: 26, }, ], }, @@ -798,7 +798,7 @@ export var arrowFn = () => 'test'; messageId: 'missingReturnType', line: 2, endLine: 2, - column: 22, + column: 25, endColumn: 27, }, ], @@ -825,15 +825,15 @@ export class Test { { messageId: 'missingReturnType', line: 4, - endLine: 4, column: 3, - endColumn: 13, + endLine: 4, + endColumn: 11, }, { messageId: 'missingArgType', line: 7, - endLine: 7, column: 12, + endLine: 7, endColumn: 17, data: { name: 'value', @@ -842,22 +842,22 @@ export class Test { { messageId: 'missingReturnType', line: 8, - endLine: 8, column: 3, - endColumn: 11, + endLine: 8, + endColumn: 9, }, { messageId: 'missingReturnType', line: 11, + column: 3, endLine: 11, - column: 11, - endColumn: 17, + endColumn: 11, }, { messageId: 'missingArgType', line: 11, - endLine: 11, column: 11, + endLine: 11, endColumn: 14, data: { name: 'arg', @@ -897,37 +897,37 @@ export class Foo { { messageId: 'missingReturnType', line: 3, + column: 3, endLine: 3, - column: 14, - endColumn: 19, + endColumn: 14, }, { messageId: 'missingReturnType', line: 4, + column: 3, endLine: 4, - column: 14, - endColumn: 25, + endColumn: 23, }, { messageId: 'missingReturnType', line: 5, + column: 3, endLine: 5, - column: 14, - endColumn: 29, + endColumn: 27, }, { messageId: 'missingReturnType', line: 7, + column: 3, endLine: 7, - column: 14, - endColumn: 19, + endColumn: 14, }, { messageId: 'missingReturnType', line: 8, + column: 3, endLine: 8, - column: 14, - endColumn: 25, + endColumn: 23, }, ], }, @@ -938,7 +938,7 @@ export class Foo { messageId: 'missingReturnType', line: 1, endLine: 1, - column: 16, + column: 19, endColumn: 21, }, ], @@ -951,7 +951,7 @@ export class Foo { messageId: 'missingReturnType', line: 1, endLine: 1, - column: 22, + column: 25, endColumn: 27, }, ], @@ -969,7 +969,7 @@ export var funcExpr = function () { line: 2, endLine: 2, column: 23, - endColumn: 34, + endColumn: 32, }, ], }, @@ -986,8 +986,8 @@ export const x: Foo = { messageId: 'missingReturnType', line: 4, endLine: 4, - column: 8, - endColumn: 13, + column: 3, + endColumn: 8, }, ], }, @@ -999,7 +999,7 @@ export const x: Foo = { messageId: 'missingReturnType', line: 1, endLine: 1, - column: 22, + column: 25, endColumn: 27, }, ], @@ -1013,7 +1013,7 @@ export const x: Foo = { line: 1, endLine: 1, column: 22, - endColumn: 33, + endColumn: 31, }, ], }, @@ -1029,7 +1029,7 @@ export default () => { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 10, + column: 13, endColumn: 15, }, ], @@ -1047,7 +1047,7 @@ export default () => { line: 3, endLine: 3, column: 10, - endColumn: 21, + endColumn: 19, }, ], }, @@ -1063,7 +1063,7 @@ export function fn() { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 10, + column: 13, endColumn: 15, }, ], @@ -1081,7 +1081,7 @@ export function fn() { line: 3, endLine: 3, column: 10, - endColumn: 21, + endColumn: 19, }, ], }, @@ -1107,7 +1107,7 @@ export function FunctionDeclaration() { messageId: 'missingReturnType', line: 9, endLine: 9, - column: 11, + column: 14, endColumn: 16, }, ], @@ -1126,7 +1126,7 @@ export default () => () => { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 10, + column: 13, endColumn: 15, }, ], @@ -1146,14 +1146,14 @@ export const func2 = (value: number) => ({ type: 'X', value } as Action); messageId: 'missingReturnType', line: 2, endLine: 2, - column: 22, + column: 38, endColumn: 40, }, { messageId: 'missingReturnType', line: 3, endLine: 3, - column: 22, + column: 38, endColumn: 40, }, ], @@ -1172,7 +1172,7 @@ export const func = (value: number) => ({ type: 'X', value } as const); messageId: 'missingReturnType', line: 2, endLine: 2, - column: 21, + column: 37, endColumn: 39, }, ], @@ -1203,14 +1203,14 @@ export class Test { line: 8, endLine: 8, column: 3, - endColumn: 11, + endColumn: 9, }, { messageId: 'missingReturnType', line: 12, endLine: 12, - column: 9, - endColumn: 14, + column: 3, + endColumn: 9, }, ], }, @@ -1254,7 +1254,7 @@ export const func2 = (value: number) => value; messageId: 'missingReturnType', line: 2, endLine: 2, - column: 22, + column: 38, endColumn: 40, }, ], @@ -1342,10 +1342,6 @@ const foo = arg => arg; export default foo; `, errors: [ - { - messageId: 'missingReturnType', - line: 2, - }, { messageId: 'missingArgType', line: 2, @@ -1353,6 +1349,10 @@ export default foo; name: 'arg', }, }, + { + messageId: 'missingReturnType', + line: 2, + }, ], }, { @@ -1361,10 +1361,6 @@ const foo = arg => arg; export = foo; `, errors: [ - { - messageId: 'missingReturnType', - line: 2, - }, { messageId: 'missingArgType', line: 2, @@ -1372,6 +1368,10 @@ export = foo; name: 'arg', }, }, + { + messageId: 'missingReturnType', + line: 2, + }, ], }, { @@ -1381,10 +1381,6 @@ foo = arg => arg; export default foo; `, errors: [ - { - messageId: 'missingReturnType', - line: 3, - }, { messageId: 'missingArgType', line: 3, @@ -1392,6 +1388,10 @@ export default foo; name: 'arg', }, }, + { + messageId: 'missingReturnType', + line: 3, + }, ], }, { @@ -1400,10 +1400,6 @@ const foo = arg => arg; export default [foo]; `, errors: [ - { - messageId: 'missingReturnType', - line: 2, - }, { messageId: 'missingArgType', line: 2, @@ -1411,6 +1407,10 @@ export default [foo]; name: 'arg', }, }, + { + messageId: 'missingReturnType', + line: 2, + }, ], }, { @@ -1419,10 +1419,6 @@ const foo = arg => arg; export default { foo }; `, errors: [ - { - messageId: 'missingReturnType', - line: 2, - }, { messageId: 'missingArgType', line: 2, @@ -1430,6 +1426,10 @@ export default { foo }; name: 'arg', }, }, + { + messageId: 'missingReturnType', + line: 2, + }, ], }, { @@ -1617,10 +1617,6 @@ test = (): void => { export default test; `, errors: [ - { - messageId: 'missingReturnType', - line: 2, - }, { messageId: 'missingArgType', line: 2, @@ -1628,6 +1624,10 @@ export default test; name: 'arg', }, }, + { + messageId: 'missingReturnType', + line: 2, + }, ], }, { @@ -1639,10 +1639,6 @@ test = (): void => { export { test }; `, errors: [ - { - messageId: 'missingReturnType', - line: 2, - }, { messageId: 'missingArgType', line: 2, @@ -1650,6 +1646,10 @@ export { test }; name: 'arg', }, }, + { + messageId: 'missingReturnType', + line: 2, + }, ], }, { @@ -1667,7 +1667,7 @@ export const foo = { messageId: 'missingReturnType', line: 3, - column: 3, + column: 6, }, ], }, @@ -1680,7 +1680,7 @@ export var arrowFn = () => () => {}; { messageId: 'missingReturnType', line: 2, - column: 28, + column: 31, }, ], }, @@ -1889,14 +1889,14 @@ export const foo = { line: 2, endLine: 2, column: 8, - endColumn: 24, + endColumn: 22, }, { messageId: 'missingReturnType', line: 6, endLine: 6, column: 3, - endColumn: 10, + endColumn: 8, }, ], },