eslint / eslint/js

Change Request: Remove `nodejsScope` option of eslint-scope

Open
#697 3 comments 0 reactions 1 assignee Claimed by @mdjermanovic View on GitHub
accepted breaking enhancement
Dominant language
JavaScript
Stars
2.4k
Forks
234
Avg merge
28m
Merged PRs (30d)
2

Description

### Which packages would you like to change?

- [ ] `espree`
- [x] `eslint-scope`
- [ ] `eslint-visitor-keys`

### What problem do you want to solve?

Currently, there are two different ways to enable commonjs scope analysis:

* `sourceType: "commonjs"`
* `nodejsScope: true`

The effect is the same.

Furthermore, when the options are `sourceType: "module"` and `nodejsScope: true`, eslint-scope creates both the `function` scope (commonjs wrapper) and the `module` scope, which seems invalid.

```js
import * as eslintScope from 'eslint-scope';
import * as espree from 'espree';

const code = "class C {}";

const options = {
ecmaVersion: 2025,
sourceType: "module",
nodejsScope: true
};

const ast = espree.parse(code, { range: true, ...options });
const scopeManager = eslintScope.analyze(ast, options);

console.log(scopeManager.scopes.map(scope => scope.type)); // [ 'global', 'function', 'module', 'class' ]
```

### What do you think is the correct solution?

Remove `nodejsScope` option as redundant for enabling commonjs scope analysis, and potentially problematic when used with `sourceType: "module"`.

### Participation

- [x] I am willing to submit a pull request for this change.

### Additional comments

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.