build: migrate custom ESLint rules to modern APIs (gh54 part I) by Planeshifter · Pull Request #10950 · stdlib-js/stdlib

@stdlib-bot added the Tools

Issue or pull request related to project tooling.

label

Mar 15, 2026

@Planeshifter

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
---

@Planeshifter Planeshifter changed the title refactor: migrate custom ESLint rules to modern APIs bench: migrate custom ESLint rules to modern APIs

Mar 15, 2026

@Planeshifter

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
---

@Planeshifter Planeshifter changed the title bench: migrate custom ESLint rules to modern APIs build: migrate custom ESLint rules to modern APIs

Mar 15, 2026

@Planeshifter Planeshifter changed the title build: migrate custom ESLint rules to modern APIs build: migrate custom ESLint rules to modern APIs (gh54 part I)

Mar 15, 2026