transform-tree.js 991 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. var recast = require('recast');
  2. var rewritePattern = require('./rewrite-pattern.js');
  3. var types = recast.types;
  4. var visitor = types.PathVisitor.fromMethodsObject({
  5. // This method is called for any AST node whose `type` is `Literal`.
  6. 'visitLiteral': function(path) {
  7. var node = path.value;
  8. if (!node.regex) {
  9. return false;
  10. }
  11. var flags = node.regex.flags;
  12. if (flags.indexOf('u') == -1) {
  13. return false;
  14. }
  15. var newPattern = rewritePattern(node.regex.pattern, flags);
  16. var newFlags = flags.replace('u', '');
  17. var result = '/' + newPattern + '/' + newFlags;
  18. node.regex = {
  19. 'pattern': newPattern,
  20. 'flags': newFlags
  21. }
  22. node.raw = result;
  23. node.value = {
  24. 'toString': function() {
  25. return result;
  26. }
  27. };
  28. // Return `false` to indicate that the traversal need not continue any
  29. // further down this subtree. (`Literal`s don’t have descendants anyway.)
  30. return false;
  31. }
  32. });
  33. module.exports = function(node) {
  34. return types.visit(node, visitor);
  35. };