semi.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports["default"] = void 0;
  6. var schema = [{
  7. "enum": ['always', 'never'],
  8. type: 'string'
  9. }];
  10. var isSemicolon = function isSemicolon(token) {
  11. return token.type === 'Punctuator' && token.value === ';';
  12. };
  13. var create = function create(context) {
  14. var never = (context.options[0] || 'always') === 'never';
  15. var sourceCode = context.getSourceCode();
  16. var report = function report(node, missing) {
  17. var lastToken = sourceCode.getLastToken(node);
  18. var fix;
  19. var message;
  20. var loc = lastToken.loc;
  21. if (missing) {
  22. message = 'Missing semicolon.';
  23. loc = loc.end;
  24. fix = function fix(fixer) {
  25. return fixer.insertTextAfter(lastToken, ';');
  26. };
  27. } else {
  28. message = 'Extra semicolon.';
  29. loc = loc.start;
  30. fix = function fix(fixer) {
  31. return fixer.remove(lastToken);
  32. };
  33. }
  34. context.report({
  35. fix: fix,
  36. loc: loc,
  37. message: message,
  38. node: node
  39. });
  40. };
  41. var checkForSemicolon = function checkForSemicolon(node) {
  42. var lastToken = sourceCode.getLastToken(node);
  43. var isLastTokenSemicolon = isSemicolon(lastToken);
  44. if (never && isLastTokenSemicolon) {
  45. report(node, false);
  46. }
  47. if (!never && !isLastTokenSemicolon) {
  48. report(node, true);
  49. }
  50. };
  51. return {
  52. OpaqueType: checkForSemicolon,
  53. TypeAlias: checkForSemicolon,
  54. TypeAnnotation: function TypeAnnotation(node) {
  55. if (['PropertyDefinition', 'ClassProperty'].includes(node.parent.type)) {
  56. checkForSemicolon(node.parent);
  57. }
  58. }
  59. };
  60. };
  61. var _default = {
  62. create: create,
  63. meta: {
  64. fixable: 'code'
  65. },
  66. schema: schema
  67. };
  68. exports["default"] = _default;
  69. module.exports = exports.default;