<commit_before>### Estraverse Fork

This fork introduces a 'recur' callback beside 'enter' and 'leave'. recur is called with the parent
element between the traversal of its siblings.

Think of this simple graph:

```
  Parent
    /\
   /  \
  A    B
```
With recur, the overall sequence of traversal will be: Enter Parent, Enter A, Leave A, Recur Parent, Enter B, Leave B, Leave Parent
This can be useful to check, wether a node is actually a grandchild or a sibling of another node, which can be hard to detect with
enter and leave alone.

Recur only supports BREAK. Also, within replace, recur does not support replacing or removing, only BREAK.

The rest from here on is original documentation from estraverse.

Estraverse ([estraverse](http://github.com/estools/estraverse)) is
[ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)
traversal functions from [esmangle project](http://github.com/estools/esmangle).

### Documentation

You can find usage docs at [wiki page](https://github.com/estools/estraverse/wiki/Usage).

### Example Usage

The following code will output all variables declared at the root of a file.

```javascript
estraverse.traverse(ast, {
    enter: function (node, parent) {
        if (node.type == 'FunctionExpression' || node.type == 'FunctionDeclaration')
            return estraverse.VisitorOption.Skip;<commit_msg>typo.<commit_after>### Estraverse Fork

This fork introduces a 'recur' callback beside 'enter' and 'leave'. recur is called with the parent
element between the traversal of its siblings.

Think of this simple graph:

```
  Parent
    /\
   /  \
  A    B
```
With recur, the overall sequence of traversal will be: Enter Parent, Enter A, Leave A, Recur Parent, Enter B, Leave B, Leave Parent.
This can be useful to check, wether a node is actually a grandchild or a sibling of another node, which can be hard to detect with
enter and leave alone.

Recur only supports BREAK. Also, within replace, recur does not support replacing or removing, only BREAK.

The rest from here on is original documentation from estraverse.

Estraverse ([estraverse](http://github.com/estools/estraverse)) is
[ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm)
traversal functions from [esmangle project](http://github.com/estools/esmangle).

### Documentation

You can find usage docs at [wiki page](https://github.com/estools/estraverse/wiki/Usage).

### Example Usage

The following code will output all variables declared at the root of a file.

```javascript
estraverse.traverse(ast, {
    enter: function (node, parent) {
        if (node.type == 'FunctionExpression' || node.type == 'FunctionDeclaration')
            return estraverse.VisitorOption.Skip;
{'fraction_non_alphanumeric': 0.0945110868774991, 'fraction_numerical': 0.0021810250817884407, 'mean_word_length': 4.14392523364486, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '550319', 'n_tokens_mistral': 797, 'n_tokens_neox': 769, 'n_words': 319}