mirror of
https://github.com/wu736139669/Monkey-Test.git
synced 2026-08-05 05:55:46 +00:00
42 lines
991 B
JavaScript
Executable File
42 lines
991 B
JavaScript
Executable File
var recast = require('recast');
|
||
var rewritePattern = require('./rewrite-pattern.js');
|
||
var types = recast.types;
|
||
|
||
var visitor = types.PathVisitor.fromMethodsObject({
|
||
// This method is called for any AST node whose `type` is `Literal`.
|
||
'visitLiteral': function(path) {
|
||
var node = path.value;
|
||
|
||
if (!node.regex) {
|
||
return false;
|
||
}
|
||
|
||
var flags = node.regex.flags;
|
||
if (flags.indexOf('u') == -1) {
|
||
return false;
|
||
}
|
||
|
||
var newPattern = rewritePattern(node.regex.pattern, flags);
|
||
var newFlags = flags.replace('u', '');
|
||
var result = '/' + newPattern + '/' + newFlags;
|
||
node.regex = {
|
||
'pattern': newPattern,
|
||
'flags': newFlags
|
||
}
|
||
node.raw = result;
|
||
node.value = {
|
||
'toString': function() {
|
||
return result;
|
||
}
|
||
};
|
||
|
||
// Return `false` to indicate that the traversal need not continue any
|
||
// further down this subtree. (`Literal`s don’t have descendants anyway.)
|
||
return false;
|
||
}
|
||
});
|
||
|
||
module.exports = function(node) {
|
||
return types.visit(node, visitor);
|
||
};
|