@truenine/eslint9-config
Version:
ESLint 9 configuration package for Compose Client projects with TypeScript, Vue, and modern JavaScript support
1 lines • 4.13 kB
Source Map (JSON)
{"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"}