No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

58 líneas
1.8 KiB

  1. /**
  2. * @fileoverview Rule to flag when regex literals are not wrapped in parens
  3. * @author Matt DuVall <http://www.mattduvall.com>
  4. */
  5. "use strict";
  6. //------------------------------------------------------------------------------
  7. // Rule Definition
  8. //------------------------------------------------------------------------------
  9. module.exports = {
  10. meta: {
  11. docs: {
  12. description: "require parenthesis around regex literals",
  13. category: "Stylistic Issues",
  14. recommended: false,
  15. url: "https://eslint.org/docs/rules/wrap-regex"
  16. },
  17. schema: [],
  18. fixable: "code",
  19. messages: {
  20. requireParens: "Wrap the regexp literal in parens to disambiguate the slash."
  21. }
  22. },
  23. create(context) {
  24. const sourceCode = context.getSourceCode();
  25. return {
  26. Literal(node) {
  27. const token = sourceCode.getFirstToken(node),
  28. nodeType = token.type;
  29. if (nodeType === "RegularExpression") {
  30. const beforeToken = sourceCode.getTokenBefore(node);
  31. const afterToken = sourceCode.getTokenAfter(node);
  32. const ancestors = context.getAncestors();
  33. const grandparent = ancestors[ancestors.length - 1];
  34. if (grandparent.type === "MemberExpression" && grandparent.object === node &&
  35. !(beforeToken && beforeToken.value === "(" && afterToken && afterToken.value === ")")) {
  36. context.report({
  37. node,
  38. messageId: "requireParens",
  39. fix: fixer => fixer.replaceText(node, `(${sourceCode.getText(node)})`)
  40. });
  41. }
  42. }
  43. }
  44. };
  45. }
  46. };