Change Request: Remove `nodejsScope` option of eslint-scope
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.
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
👋 Hi! This issue is being addressed in pull request https://github.com/eslint/js/pull/699. Thanks, @mdjermanovic!
The TSC unanimously agreed to remove nodejsScope from eslint-scope for v10.
This has been postponed to ESLint v11, for the same reasons as https://github.com/eslint/js/issues/525.