1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /**
- * The MIT License (MIT)
- * Copyright (c) 2017-present Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
- */
- 'use strict';
- /**
- * A regexp-tree plugin to replace different range-based quantifiers
- * with their symbol equivalents.
- *
- * a{0,} -> a*
- * a{1,} -> a+
- * a{1} -> a
- *
- * NOTE: the following is automatically handled in the generator:
- *
- * a{3,3} -> a{3}
- */
- module.exports = {
- Quantifier: function Quantifier(path) {
- var node = path.node;
- if (node.kind !== 'Range') {
- return;
- }
- // a{0,} -> a*
- rewriteOpenZero(path);
- // a{1,} -> a+
- rewriteOpenOne(path);
- // a{1} -> a
- rewriteExactOne(path);
- }
- };
- function rewriteOpenZero(path) {
- var node = path.node;
- if (node.from !== 0 || node.to) {
- return;
- }
- node.kind = '*';
- delete node.from;
- }
- function rewriteOpenOne(path) {
- var node = path.node;
- if (node.from !== 1 || node.to) {
- return;
- }
- node.kind = '+';
- delete node.from;
- }
- function rewriteExactOne(path) {
- var node = path.node;
- if (node.from !== 1 || node.to !== 1) {
- return;
- }
- path.parentPath.replace(path.parentPath.node.expression);
- }
|