{"version":3,"file":"prefer-separate-try-catch.mjs","names":[],"sources":["../../../src/rules/code-style/prefer-separate-try-catch.ts"],"sourcesContent":["import type {Rule} from 'eslint'\n\nconst rule: Rule.RuleModule = {\n  meta: {\n    type: 'layout',\n    docs: {\n      description: 'Enforce try, catch, and finally blocks to be on separate lines',\n      recommended: false\n    },\n    fixable: 'whitespace',\n    messages: {\n      separateCatch: 'Catch clause should be on a new line after the try block',\n      separateFinally: 'Finally clause should be on a new line after the previous block'\n    },\n    schema: []\n  },\n  create(context) {\n    const {sourceCode} = context\n\n    return {\n      TryStatement(node) {\n        const tryBlock = node.block\n        const {handler} = node\n        const {finalizer} = node\n\n        if (handler) {\n          const tryCloseBrace = sourceCode.getLastToken(tryBlock)\n          const catchToken = sourceCode.getFirstToken(handler)\n\n          if (tryCloseBrace && catchToken && tryBlock.loc && handler.body.loc) {\n            const isTryMultiLine = tryBlock.loc.start.line !== tryBlock.loc.end.line\n            const isCatchMultiLine = handler.body.loc.start.line !== handler.body.loc.end.line\n\n            if (!isTryMultiLine || !isCatchMultiLine) {\n              if (tryCloseBrace.loc.end.line === catchToken.loc.start.line) { // Handled by compact-try-catch\n                context.report({node: handler, messageId: 'separateCatch', fix(fixer) { return fixer.replaceTextRange([tryCloseBrace.range[1], catchToken.range[0]], '\\n') }})\n              }\n            }\n          }\n        }\n\n        if (!finalizer) return\n\n        const previousBlock = handler ? handler.body : tryBlock\n        const prevCloseBrace = sourceCode.getLastToken(previousBlock)\n        const finallyToken = sourceCode.getFirstTokenBetween(\n          handler ?? tryBlock,\n          finalizer,\n          token => token.value === 'finally'\n        )\n        if (prevCloseBrace && finallyToken && previousBlock.loc && finalizer.loc) {\n          if (prevCloseBrace.loc.end.line === finallyToken.loc.start.line) {\n            const isPrevMultiLine = previousBlock.loc.start.line !== previousBlock.loc.end.line\n            const isFinallyMultiLine = finalizer.loc.start.line !== finalizer.loc.end.line\n\n            if (!isPrevMultiLine || !isFinallyMultiLine) {\n              context.report({ // Handled by compact-try-catch\n                node: finalizer,\n                loc: finallyToken.loc,\n                messageId: 'separateFinally',\n                fix(fixer) {\n                  return fixer.replaceTextRange([prevCloseBrace.range[1], finallyToken.range[0]], '\\n')\n                }\n              })\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\nexport default rule\n"],"mappings":";AAEA,MAAM,OAAwB;CAC5B,MAAM;EACJ,MAAM;EACN,MAAM;GACJ,aAAa;GACb,aAAa;GACd;EACD,SAAS;EACT,UAAU;GACR,eAAe;GACf,iBAAiB;GAClB;EACD,QAAQ,EAAE;EACX;CACD,OAAO,SAAS;EACd,MAAM,EAAC,eAAc;AAErB,SAAO,EACL,aAAa,MAAM;GACjB,MAAM,WAAW,KAAK;GACtB,MAAM,EAAC,YAAW;GAClB,MAAM,EAAC,cAAa;AAEpB,OAAI,SAAS;IACX,MAAM,gBAAgB,WAAW,aAAa,SAAS;IACvD,MAAM,aAAa,WAAW,cAAc,QAAQ;AAEpD,QAAI,iBAAiB,cAAc,SAAS,OAAO,QAAQ,KAAK,KAAK;KACnE,MAAM,iBAAiB,SAAS,IAAI,MAAM,SAAS,SAAS,IAAI,IAAI;KACpE,MAAM,mBAAmB,QAAQ,KAAK,IAAI,MAAM,SAAS,QAAQ,KAAK,IAAI,IAAI;AAE9E,SAAI,CAAC,kBAAkB,CAAC,kBACtB;UAAI,cAAc,IAAI,IAAI,SAAS,WAAW,IAAI,MAAM,KACtD,SAAQ,OAAO;OAAC,MAAM;OAAS,WAAW;OAAiB,IAAI,OAAO;AAAE,eAAO,MAAM,iBAAiB,CAAC,cAAc,MAAM,IAAI,WAAW,MAAM,GAAG,EAAE,KAAK;;OAAG,CAAC;;;;AAMtK,OAAI,CAAC,UAAW;GAEhB,MAAM,gBAAgB,UAAU,QAAQ,OAAO;GAC/C,MAAM,iBAAiB,WAAW,aAAa,cAAc;GAC7D,MAAM,eAAe,WAAW,qBAC9B,WAAW,UACX,YACA,UAAS,MAAM,UAAU,UAC1B;AACD,OAAI,kBAAkB,gBAAgB,cAAc,OAAO,UAAU,KACnE;QAAI,eAAe,IAAI,IAAI,SAAS,aAAa,IAAI,MAAM,MAAM;KAC/D,MAAM,kBAAkB,cAAc,IAAI,MAAM,SAAS,cAAc,IAAI,IAAI;KAC/E,MAAM,qBAAqB,UAAU,IAAI,MAAM,SAAS,UAAU,IAAI,IAAI;AAE1E,SAAI,CAAC,mBAAmB,CAAC,mBACvB,SAAQ,OAAO;MACb,MAAM;MACN,KAAK,aAAa;MAClB,WAAW;MACX,IAAI,OAAO;AACT,cAAO,MAAM,iBAAiB,CAAC,eAAe,MAAM,IAAI,aAAa,MAAM,GAAG,EAAE,KAAK;;MAExF,CAAC;;;KAKX;;CAEJ"}