function removeProxyRules(ast, options, session) {
  function isProxyRule(node) {
    return node.type === "rule" && node.expression.type === "rule_ref";
  }

  function replaceRuleRefs(ast, from, to) {
    const replace = visitor.build({
      rule_ref(node) {
        if (node.name === from) {
          node.name = to;

          session.info(
            `Proxy rule "${from}" replaced by the rule "${to}"`,
            node.location,
            [{
              message: "This rule will be used",
              location: asts.findRule(ast, to).nameLocation,
            }]
          );
        }
      },
    });

    replace(ast);
  }

  const indices = [];

  ast.rules.forEach((rule, i) => {
    if (isProxyRule(rule)) {
      replaceRuleRefs(ast, rule.name, rule.expression.name);
      if (options.allowedStartRules.indexOf(rule.name) === -1) {
        indices.push(i);
      }
    }
  });

  indices.reverse();

  indices.forEach(i => { ast.rules.splice(i, 1); });
}
// Removes proxy rules -- that is, rules that only delegate to other rule.
Removes proxy rules -- that is, rules that only delegate to other rule.
Removes proxy rules -- that is rules that only delegate to other rule .
function removeProxyRules(ast, options, session) {
  function isProxyRule(node) {
    return node.type === "rule" && node.expression.type === "rule_ref";
  }
  function replaceRuleRefs(ast, from, to) {
    const replace = visitor.build({
      rule_ref(node) {
        if (node.name === from) {
          node.name = to;
          session.info(
            `Proxy rule "${from}" replaced by the rule "${to}"`,
            node.location,
            [{
              message: "This rule will be used",
              location: asts.findRule(ast, to).nameLocation,
            }]
          );
        }
      },
    });
    replace(ast);
  }
  const indices = [];
  ast.rules.forEach((rule, i) => {
    if (isProxyRule(rule)) {
      replaceRuleRefs(ast, rule.name, rule.expression.name);
      if (options.allowedStartRules.indexOf(rule.name) === -1) {
        indices.push(i);
      }
    }
  });
  indices.reverse();
  indices.forEach(i => { ast.rules.splice(i, 1); });
}
function removeProxyRules ( ast , options , session ) { function isProxyRule ( node ) { return node . type === "rule" && node . expression . type === "rule_ref" ; } function replaceRuleRefs ( ast , from , to ) { const replace = visitor . build ( { rule_ref ( node ) { if ( node . name === from ) { node . name = to ; session . info ( ` ${ from } ${ to } ` , node . location , [ { message : "This rule will be used" , location : asts . findRule ( ast , to ) . nameLocation , } ] ) ; } } , } ) ; replace ( ast ) ; } const indices = [ ] ; ast . rules . forEach ( ( rule , i ) => { if ( isProxyRule ( rule ) ) { replaceRuleRefs ( ast , rule . name , rule . expression . name ) ; if ( options . allowedStartRules . indexOf ( rule . name ) === - 1 ) { indices . push ( i ) ; } } } ) ; indices . reverse ( ) ; indices . forEach ( i => { ast . rules . splice ( i , 1 ) ; } ) ; }
Removes proxy rules -- that is, rules that only delegate to other rule.
Removes proxy rules -- that is rules that only delegate to other rule .