{"version":3,"names":["ruleComposer","require","eslint","eslintVersion","ESLint","version","OPT_OUT_PATTERN","rule","parseInt","builtinRules","Linter","getRules","get","isSemicolon","token","type","value","isUnnecessarySemicolon","context","lastToken","nextToken","getSourceCode","getTokenAfter","lastTokenLine","loc","end","line","nextTokenLine","start","isOptOutToken","test","isDivider","isOneLinerBlock","node","parent","report","missing","getLastToken","message","fix","fixer","insertTextAfter","remove","module","exports","joinReports","ClassProperty, ClassPrivateProperty, PropertyDefinition","options","exceptOneLine","omitLastInOneLineBlock","sourceCode"],"sources":["../../src/rules/semi.cjs"],"sourcesContent":["const ruleComposer = require(\"eslint-rule-composer\");\nconst eslint = require(\"eslint\");\nconst eslintVersion = eslint.ESLint.version;\n\nconst OPT_OUT_PATTERN = /^[-[(/+`]/; // One of [(/+-`\n\nconst rule = (\n  parseInt(eslintVersion, 10) >= 9\n    ? require(\"eslint/use-at-your-own-risk\").builtinRules\n    : new eslint.Linter().getRules()\n).get(\"semi\");\n\nfunction isSemicolon(token) {\n  return token.type === \"Punctuator\" && token.value === \";\";\n}\n\nfunction isUnnecessarySemicolon(context, lastToken) {\n  if (!isSemicolon(lastToken)) {\n    return false;\n  }\n\n  const nextToken = context.getSourceCode().getTokenAfter(lastToken);\n\n  if (!nextToken) {\n    return true;\n  }\n\n  const lastTokenLine = lastToken.loc.end.line;\n  const nextTokenLine = nextToken.loc.start.line;\n  const isOptOutToken =\n    OPT_OUT_PATTERN.test(nextToken.value) &&\n    nextToken.value !== \"++\" &&\n    nextToken.value !== \"--\";\n  const isDivider = nextToken.value === \"}\" || nextToken.value === \";\";\n\n  return (lastTokenLine !== nextTokenLine && !isOptOutToken) || isDivider;\n}\n\nfunction isOneLinerBlock(context, node) {\n  const nextToken = context.getSourceCode().getTokenAfter(node);\n\n  if (!nextToken || nextToken.value !== \"}\") {\n    return false;\n  }\n\n  const parent = node.parent;\n\n  return (\n    parent &&\n    parent.type === \"BlockStatement\" &&\n    parent.loc.start.line === parent.loc.end.line\n  );\n}\n\nfunction report(context, node, missing) {\n  const lastToken = context.getSourceCode().getLastToken(node);\n\n  let message,\n    fix,\n    loc = lastToken.loc;\n\n  if (!missing) {\n    message = \"Missing semicolon.\";\n    loc = loc.end;\n    fix = function (fixer) {\n      return fixer.insertTextAfter(lastToken, \";\");\n    };\n  } else {\n    message = \"Extra semicolon.\";\n    loc = loc.start;\n    fix = function (fixer) {\n      return fixer.remove(lastToken);\n    };\n  }\n\n  context.report({\n    node,\n    loc,\n    message,\n    fix,\n  });\n}\n\nif (parseInt(eslintVersion, 10) >= 8) {\n  // ESLint 8 supports class properties / private methods natively\n  // so we simply forward the original rule\n  module.exports = rule;\n} else {\n  module.exports = ruleComposer.joinReports([\n    rule,\n    context => ({\n      \"ClassProperty, ClassPrivateProperty, PropertyDefinition\"(node) {\n        const options = context.options[1];\n        const exceptOneLine =\n          options && options.omitLastInOneLineBlock === true;\n        const sourceCode = context.getSourceCode();\n        const lastToken = sourceCode.getLastToken(node);\n\n        if (context.options[0] === \"never\") {\n          if (isUnnecessarySemicolon(context, lastToken)) {\n            report(context, node, true);\n          }\n        } else {\n          if (!isSemicolon(lastToken)) {\n            if (!exceptOneLine || !isOneLinerBlock(context, node)) {\n              report(context, node);\n            }\n          } else {\n            if (exceptOneLine && isOneLinerBlock(context, node)) {\n              report(context, node, true);\n            }\n          }\n        }\n      },\n    }),\n  ]);\n}\n"],"mappings":"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","ignoreList":[]}