@@ -3,6 +3,7 @@ const { ESLintUtils, AST_NODE_TYPES } = require('@typescript-eslint/utils');
33const utils = require ( '@typescript-eslint/type-utils' ) ;
44const {
55 createRule,
6+ findClosest,
67 hasThrowsTag,
78 getOptionsFromContext,
89 getCalleeDeclaration,
@@ -164,25 +165,32 @@ module.exports = createRule({
164165 // TODO: Better way to handle this?
165166 if ( / ^ \s * t r y \s * \{ / . test ( prevLine ) ) return ;
166167
168+ const nodeToWrap = findClosest ( node , ( n ) =>
169+ n . type === AST_NODE_TYPES . BlockStatement ||
170+ n . type === AST_NODE_TYPES . ExpressionStatement ||
171+ n . type === AST_NODE_TYPES . VariableDeclaration
172+ ) ;
173+ if ( ! nodeToWrap ) return ;
174+
167175 context . report ( {
168176 node,
169177 messageId : 'implicitPropagation' ,
170178 fix ( fixer ) {
171179 return [
172- fixer . insertTextBefore ( node , `try {\n${ newIndent } ` ) ,
173- fixer . insertTextAfter ( node , `\n${ indent } } catch {}` ) ,
180+ fixer . insertTextBefore ( nodeToWrap , `try {\n${ newIndent } ` ) ,
181+ fixer . insertTextAfter ( nodeToWrap , `\n${ indent } } catch {}` ) ,
174182 ] ;
175183 } ,
176184 } ) ;
177185 } ;
178186
179187 return {
180- 'ArrowFunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement:has(> CallExpression) ' : visitExpressionStatement ,
181- 'FunctionDeclaration :not(TryStatement[handler!=null]) ExpressionStatement:has(> CallExpression) ' : visitExpressionStatement ,
182- 'FunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement:has(> CallExpression) ' : visitExpressionStatement ,
183- 'ArrowFunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement:has(> MemberExpression) ' : visitExpressionStatement ,
184- 'FunctionDeclaration :not(TryStatement[handler!=null]) ExpressionStatement:has(> MemberExpression) ' : visitExpressionStatement ,
185- 'FunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement:has(> MemberExpression) ' : visitExpressionStatement ,
188+ 'ArrowFunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement MemberExpression[property.type="Identifier"] ' : visitExpressionStatement ,
189+ 'FunctionDeclaration :not(TryStatement[handler!=null]) ExpressionStatement MemberExpression[property.type="Identifier"] ' : visitExpressionStatement ,
190+ 'FunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement MemberExpression[property.type="Identifier"] ' : visitExpressionStatement ,
191+ 'ArrowFunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement CallExpression[callee.type="Identifier"] ' : visitExpressionStatement ,
192+ 'FunctionDeclaration :not(TryStatement[handler!=null]) ExpressionStatement CallExpression[callee.type="Identifier"] ' : visitExpressionStatement ,
193+ 'FunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement CallExpression[callee.type="Identifier"] ' : visitExpressionStatement ,
186194 'ArrowFunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement:has(> AssignmentExpression[left.type="MemberExpression"])' : visitExpressionStatement ,
187195 'FunctionDeclaration :not(TryStatement[handler!=null]) ExpressionStatement:has(> AssignmentExpression[left.type="MemberExpression"])' : visitExpressionStatement ,
188196 'FunctionExpression :not(TryStatement[handler!=null]) ExpressionStatement:has(> AssignmentExpression[left.type="MemberExpression"])' : visitExpressionStatement ,
0 commit comments