build: migrate custom ESLint rules to modern APIs (gh54 part I)#10950
Draft
Planeshifter wants to merge 2 commits intodevelopfrom
Draft
build: migrate custom ESLint rules to modern APIs (gh54 part I)#10950Planeshifter wants to merge 2 commits intodevelopfrom
Planeshifter wants to merge 2 commits intodevelopfrom
Conversation
Replace deprecated ESLint rule APIs with their modern equivalents to prepare for the ESLint v9 migration (see [1][2]): - `context.getSourceCode()` → `context.sourceCode` (100 files) - `context.getScope()` → `sourceCode.getScope(node)` (4 files) The `context.getSourceCode()` method was deprecated in ESLint v8.40.0 in favor of the `context.sourceCode` property. The `context.getScope()` method was deprecated in ESLint v8.38.0 in favor of `sourceCode.getScope(node)`, which takes an explicit node argument rather than relying on implicit traversal state. For `no-builtin-big-int`, the scope acquisition was moved from the `create` function (which previously captured the global scope once) into the `CallExpression` visitor, and `isImportedBigInt` was updated to walk up the scope chain to find `BigInt` declarations in outer scopes. Also fixes pre-existing lint violations in touched files: - Move `copyLocationInfo`, `locationInfo`, `checkComment`, `extractPackagePath`, `getAlias`, and `sortExpressions` from nested functions to module scope - Replace `.toUpperCase()`, `.toLowerCase()`, `.trim()` with stdlib equivalents - Fix variable declaration ordering No other deprecated APIs (`context.getAncestors`, `context.getDeclaredVariables`, `context.markVariableAsUsed`, deprecated comment/token access patterns) were found in the codebase. All rules with `context.options` already have proper `meta.schema`. [1]: https://eslint.org/blog/2023/09/preparing-custom-rules-eslint-v9/ [2]: https://eslint.org/docs/latest/use/migrate-to-9.0.0 Ref: stdlib-js/metr-issue-tracker#54 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
56f2f39 to
485bf9b
Compare
7 tasks
Fix 9 pre-existing test failures across custom ESLint rules to ensure all 123 rule tests pass cleanly on ESLint v8: Rule fixes: - `doctest-marker`: replace `acorn-walk` with ESLint `sourceCode` APIs (`getTokenBefore`, `getNodeByRangeIndex`) to avoid deprecated `node.start`/`node.end` property access; add line-proximity check for orphaned annotation detection - `jsdoc-require-throws-tags`: replace `node.start`/`node.end` with `node.range[0]`/`node.range[1]` - `jsdoc-no-space-aligned-asterisks`: fix autofix regex replacement that incorrectly turned trailing whitespace into asterisks (use `$1` back-reference instead of literal `*`) Test fixture fixes: - `no-redeclare`: add `ecmaVersion: 2015` for `sourceType: 'module'` test case - `namespace-index-order`: reorder fixture entries to match alphabetical package path order - `require-last-path-relative`: match error message backtick quoting - `jsdoc-ordered-list-marker-value`: expect 4 errors (not 3) for newer `remark-lint-ordered-list-marker-value` - `jsdoc-doctest-marker`: remove undefined `stdlib/require-globals` from `eslint-disable-line` comments - `doctest-marker`: remove undefined `stdlib/no-builtin-math` from `eslint-disable-line` comments - `jsdoc-no-blockquote-without-marker`: use lazy continuation pattern and update error message for `remark-lint` v2 Ref: stdlib-js/metr-issue-tracker#54 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed ---
7 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Progresses stdlib-js/metr-issue-tracker#54.
Description
This pull request:
context.getSourceCode()→context.sourceCodeacross 100 rule files and 1 utility example (deprecated in ESLint v8.40.0).context.getScope()→sourceCode.getScope(node)in 4 rules (no-builtin-big-int,no-redeclare,capitalized-comments,require-globals) (deprecated in ESLint v8.38.0).To ensure passing tests and linting (all issues below were verified to be present before the changes of this PR)
copyLocationInfo,locationInfo,checkComment,extractPackagePath,getAlias,sortExpressions) from nested closures to module scope.String.prototype.toUpperCase/toLowerCase/trimwith@stdlib/string/base/*equivalents.stdlib/vars-order).context.optionsalready definemeta.schema.context.getAncestors,context.getDeclaredVariables,context.markVariableAsUsed, deprecated comment/token access patterns).doctest-marker: replacesacorn-walkwith ESLintsourceCodeAPIs to avoid deprecatednode.start/node.endaccessjsdoc-require-throws-tags: replacesnode.start/node.endwithnode.range[0]/node.range[1]jsdoc-no-space-aligned-asterisks: fixes autofix regex that incorrectly turned trailing whitespace into asterisksno-redeclare,namespace-index-order,require-last-path-relative,jsdoc-ordered-list-marker-value,jsdoc-doctest-marker,doctest-marker, andjsdoc-no-blockquote-without-markerTo confirm that all tests pass:
npx tape 'lib/node_modules/@stdlib/_tools/eslint/rules/*/test/test.js'(the make recipes cause trouble with
_tools, I think)Related Issues
This pull request has the following related issues:
Questions
No.
Other
References:
For
no-builtin-big-int, the scope acquisition was moved from thecreatefunction (which previously captured the global scope once) into theCallExpressionvisitor, andisImportedBigIntwas updated to walk up the scope chain to findBigIntdeclarations in outer scopes.For
doctest-marker,acorn-walk.findNodeAtwas replaced withsourceCode.getTokenBefore+sourceCode.getNodeByRangeIndex+ afindStatementhelper to walk up to the nearest statement ancestor, plus a line-proximity check for orphaned annotation detection.Checklist
AI Assistance
If you answered "yes" above, how did you use AI assistance?
Disclosure
Implementation plan was written in tandem with Claude Code and ChatGPT under my review and refinement.
This PR was written primarily by Claude Code. The mechanical API replacements were applied via scripted bulk edits, and the scope-related changes and test fixes were authored with manual review.
@stdlib-js/reviewers