Skip to content

Commit 46c8f96

Browse files
committed
update
1 parent d02bb44 commit 46c8f96

File tree

235 files changed

+13860
-11456
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

235 files changed

+13860
-11456
lines changed

.gitmodules

-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +0,0 @@
1-
[submodule "test/fixtures/eslint"]
2-
path = test/fixtures/eslint
3-
url = https://github.com/eslint/eslint.git

eslint.config.mjs

+7-4
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ export default [
118118

119119
languageOptions: {
120120
parser: tsParser,
121+
globals: {
122+
process: "readonly",
123+
require: "readonly",
124+
},
121125
},
122126

123127
rules: {
@@ -248,14 +252,14 @@ export default [
248252
],
249253

250254
"no-undef": [
251-
"off",
255+
"error",
252256
{
253257
typeof: true,
254258
},
255259
],
256260

257-
"no-unused-vars": [
258-
"off",
261+
"@typescript-eslint/no-unused-vars": [
262+
"error",
259263
{
260264
args: "all",
261265
argsIgnorePattern: "^_(?:[^_].*)?$",
@@ -291,7 +295,6 @@ export default [
291295
"@typescript-eslint/no-non-null-assertion": ["off"],
292296
"@typescript-eslint/no-type-alias": ["off"],
293297
"@typescript-eslint/no-unnecessary-condition": ["off"],
294-
"@typescript-eslint/no-unused-vars": ["off"],
295298
"@typescript-eslint/no-use-before-define": ["off"],
296299
"@typescript-eslint/prefer-for-of": ["off"],
297300
"@typescript-eslint/promise-function-async": ["off"],

package.json

+8-8
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
"eslint": "^8.57.0 || ^9.0.0"
1414
},
1515
"dependencies": {
16-
"debug": "^4.3.4",
17-
"eslint-scope": "^7.1.1",
18-
"eslint-visitor-keys": "^3.3.0",
19-
"espree": "^9.3.1",
20-
"esquery": "^1.4.0",
16+
"debug": "^4.4.0",
17+
"eslint-scope": "^8.2.0",
18+
"eslint-visitor-keys": "^4.2.0",
19+
"espree": "^10.3.0",
20+
"esquery": "^1.6.0",
2121
"lodash": "^4.17.21",
22-
"semver": "^7.3.6"
22+
"semver": "^7.6.3"
2323
},
2424
"devDependencies": {
2525
"@babel/core": "^7.26.7",
@@ -60,8 +60,8 @@
6060
"rollup-plugin-node-resolve": "^5.2.0",
6161
"rollup-plugin-replace": "^2.2.0",
6262
"rollup-plugin-sourcemaps": "^0.6.3",
63-
"ts-node": "^10.4.0",
64-
"typescript": "~4.8.4",
63+
"ts-node": "^10.9.2",
64+
"typescript": "~5.7.3",
6565
"wait-on": "^6.0.0",
6666
"warun": "^1.0.0"
6767
},

scripts/ci-install-eslint.js

+10-10
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,18 @@ function sh(command) {
2929
: `^${requestedVersion}`
3030

3131
// Install ESLint of the requested version
32-
await sh(`npm install eslint@${requestedVersionSpec} --legacy-peer-deps`)
32+
await sh(`npm install eslint@${requestedVersionSpec} -f`)
3333

3434
// Install ESLint submodule of the requested version
35-
const installedVersion = require("eslint/package.json").version
36-
cd("test/fixtures/eslint")
37-
if (!installedVersion.startsWith("8.")) {
38-
await sh(`git checkout v${installedVersion}`)
39-
}
40-
if (installedVersion.startsWith("5.")) {
41-
await sh("npm install [email protected]")
42-
}
43-
await sh("npm install --legacy-peer-deps")
35+
// const installedVersion = require("eslint/package.json").version
36+
// cd("test/fixtures/eslint")
37+
// if (!installedVersion.startsWith("8.")) {
38+
// await sh(`git checkout v${installedVersion}`)
39+
// }
40+
// if (installedVersion.startsWith("5.")) {
41+
// await sh("npm install [email protected]")
42+
// }
43+
// await sh("npm install -f")
4444
})().catch((error) => {
4545
console.error(error)
4646
process.exitCode = 1

scripts/update-fixtures-ast.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ const ROOT = path.join(__dirname, "../test/fixtures/ast")
2828
const TARGETS = fs.readdirSync(ROOT)
2929
const PARSER_OPTIONS = {
3030
comment: true,
31-
ecmaVersion: 2020,
31+
ecmaVersion: "latest",
32+
sourceType: "module",
3233
loc: true,
3334
range: true,
3435
tokens: true,

scripts/update-fixtures-document-fragment.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ const ROOT = path.join(__dirname, "../test/fixtures/document-fragment")
1616
const TARGETS = fs.readdirSync(ROOT)
1717
const PARSER_OPTIONS = {
1818
comment: true,
19-
ecmaVersion: 6,
19+
ecmaVersion: "latest",
20+
sourceType: "module",
2021
loc: true,
2122
range: true,
2223
tokens: true,
23-
sourceType: "module",
2424
}
2525

2626
/**

src/common/eslint-scope.ts

+31-15
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,41 @@
11
import * as escope from "eslint-scope"
2-
import { getLinterRequire } from "./linter-require"
32
import { lte } from "semver"
3+
import { createRequire } from "./create-require"
4+
import path from "path"
45

5-
let escopeCache: typeof escope | null = null
6+
type ESLintScope = typeof escope & {
7+
version: string
8+
}
9+
let escopeCache: ESLintScope | null = null
610

711
/**
812
* Load the newest `eslint-scope` from the loaded ESLint or dependency.
913
*/
10-
export function getEslintScope(): typeof escope & {
11-
version: string
12-
} {
13-
if (!escopeCache) {
14-
escopeCache = getLinterRequire()?.("eslint-scope")
15-
if (
16-
!escopeCache ||
17-
escopeCache.version == null ||
18-
lte(escopeCache.version, escope.version)
19-
) {
20-
escopeCache = escope
21-
}
14+
export function getEslintScope(): ESLintScope {
15+
return escopeCache || (escopeCache = getNewest())
16+
}
17+
18+
/**
19+
* Load the newest `eslint-scope` from the dependency.
20+
*/
21+
function getNewest(): ESLintScope {
22+
let newest = escope
23+
const userEscope = getEslintScopeFromUser()
24+
if (userEscope.version != null && lte(newest.version, userEscope.version)) {
25+
newest = userEscope
2226
}
27+
return newest
28+
}
2329

24-
return escopeCache
30+
/**
31+
* Load `eslint-scope` from the user dir.
32+
*/
33+
function getEslintScopeFromUser(): ESLintScope {
34+
try {
35+
const cwd = process.cwd()
36+
const relativeTo = path.join(cwd, "__placeholder__.js")
37+
return createRequire(relativeTo)("eslint-scope")
38+
} catch {
39+
return escope
40+
}
2541
}

src/common/espree.ts

+8-64
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,42 @@
11
import type { ParserOptions } from "../common/parser-options"
2-
import { getLinterRequire } from "./linter-require"
32
// @ts-expect-error -- ignore
43
import * as dependencyEspree from "espree"
5-
import { lte, lt } from "semver"
4+
import { lte } from "semver"
65
import { createRequire } from "./create-require"
76
import path from "path"
87
import type { BasicParserObject } from "./parser-object"
98

109
type Espree = BasicParserObject & {
11-
latestEcmaVersion?: number
10+
latestEcmaVersion: number
1211
version: string
1312
}
1413
let espreeCache: Espree | null = null
1514

1615
/**
1716
* Gets the espree that the given ecmaVersion can parse.
1817
*/
19-
export function getEspreeFromEcmaVersion(
20-
ecmaVersion: ParserOptions["ecmaVersion"],
21-
): Espree {
22-
const linterEspree = getEspreeFromLinter()
23-
if (ecmaVersion == null) {
24-
return linterEspree
25-
}
26-
if (ecmaVersion === "latest") {
27-
return getNewestEspree()
28-
}
29-
if (
30-
normalizeEcmaVersion(ecmaVersion) <= getLatestEcmaVersion(linterEspree)
31-
) {
32-
return linterEspree
33-
}
34-
const userEspree = getEspreeFromUser()
35-
if (normalizeEcmaVersion(ecmaVersion) <= getLatestEcmaVersion(userEspree)) {
36-
return userEspree
37-
}
38-
return linterEspree
18+
export function getEspree(): Espree {
19+
return espreeCache || (espreeCache = getNewestEspree())
3920
}
4021

4122
/**
4223
* Load `espree` from the user dir.
4324
*/
44-
export function getEspreeFromUser(): Espree {
25+
function getEspreeFromUser(): Espree {
4526
try {
4627
const cwd = process.cwd()
4728
const relativeTo = path.join(cwd, "__placeholder__.js")
4829
return createRequire(relativeTo)("espree")
4930
} catch {
50-
return getEspreeFromLinter()
51-
}
52-
}
53-
54-
/**
55-
* Load `espree` from the loaded ESLint.
56-
* If the loaded ESLint was not found, just returns `require("espree")`.
57-
*/
58-
export function getEspreeFromLinter(): Espree {
59-
if (!espreeCache) {
60-
espreeCache = getLinterRequire()?.("espree")
61-
if (!espreeCache) {
62-
espreeCache = dependencyEspree
63-
}
31+
return dependencyEspree
6432
}
65-
66-
return espreeCache!
6733
}
6834

6935
/**
70-
* Load the newest `espree` from the loaded ESLint or dependency.
36+
* Load the newest `espree` from the dependency.
7137
*/
7238
function getNewestEspree(): Espree {
7339
let newest = dependencyEspree
74-
const linterEspree = getEspreeFromLinter()
75-
if (
76-
linterEspree.version != null &&
77-
lte(newest.version, linterEspree.version)
78-
) {
79-
newest = linterEspree
80-
}
8140
const userEspree = getEspreeFromUser()
8241
if (userEspree.version != null && lte(newest.version, userEspree.version)) {
8342
newest = userEspree
@@ -94,7 +53,7 @@ export function getEcmaVersionIfUseEspree(
9453
}
9554

9655
if (parserOptions.ecmaVersion === "latest") {
97-
return normalizeEcmaVersion(getLatestEcmaVersion(getNewestEspree()))
56+
return getDefaultEcmaVersion()
9857
}
9958
if (parserOptions.ecmaVersion == null) {
10059
const defVer = getDefaultEcmaVersion()
@@ -104,10 +63,6 @@ export function getEcmaVersionIfUseEspree(
10463
}
10564

10665
function getDefaultEcmaVersion(): number {
107-
if (lt(getEspreeFromLinter().version, "9.0.0")) {
108-
return 5
109-
}
110-
// Perhaps the version 9 will change the default to "latest".
11166
return normalizeEcmaVersion(getLatestEcmaVersion(getNewestEspree()))
11267
}
11368

@@ -122,16 +77,5 @@ function normalizeEcmaVersion(version: number) {
12277
}
12378

12479
function getLatestEcmaVersion(espree: Espree) {
125-
if (espree.latestEcmaVersion == null) {
126-
for (const { v, latest } of [
127-
{ v: "6.1.0", latest: 2020 },
128-
{ v: "4.0.0", latest: 2019 },
129-
]) {
130-
if (lte(v, espree.version)) {
131-
return latest
132-
}
133-
}
134-
return 2018
135-
}
13680
return normalizeEcmaVersion(espree.latestEcmaVersion)
13781
}

src/common/linter-require.ts

-26
This file was deleted.

src/script-setup/parser-options.ts

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { lte } from "semver"
2-
import { getEcmaVersionIfUseEspree, getEspreeFromUser } from "../common/espree"
1+
import { getEcmaVersionIfUseEspree, getEspree } from "../common/espree"
32
import type { ParserOptions } from "../common/parser-options"
43

54
export const DEFAULT_ECMA_VERSION = 2017
@@ -21,10 +20,6 @@ export function getScriptSetupParserOptions(
2120
}
2221
}
2322

24-
function getDefaultEcmaVersion(def: number) {
25-
if (lte("8.0.0", getEspreeFromUser().version)) {
26-
// Script setup requires top level await support, so default the ecma version to 2022.
27-
return getEspreeFromUser().latestEcmaVersion!
28-
}
29-
return Math.max(def, DEFAULT_ECMA_VERSION)
23+
function getDefaultEcmaVersion() {
24+
return getEspree().latestEcmaVersion
3025
}

src/script/index.ts

+3-7
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,7 @@ import {
4343
analyzeExternalReferences,
4444
analyzeVariablesAndExternalReferences,
4545
} from "./scope-analyzer"
46-
import {
47-
getEcmaVersionIfUseEspree,
48-
getEspreeFromUser,
49-
getEspreeFromEcmaVersion,
50-
} from "../common/espree"
46+
import { getEcmaVersionIfUseEspree, getEspree } from "../common/espree"
5147
import type { ParserOptions } from "../common/parser-options"
5248
import {
5349
fixErrorLocation,
@@ -571,7 +567,7 @@ function loadParser(parser: string) {
571567
// eslint-disable-next-line @typescript-eslint/no-require-imports
572568
return require(parser)
573569
}
574-
return getEspreeFromUser()
570+
return getEspree()
575571
}
576572

577573
/**
@@ -590,7 +586,7 @@ export function parseScript(
590586
? loadParser(parserOptions.parser)
591587
: isParserObject(parserOptions.parser)
592588
? parserOptions.parser
593-
: getEspreeFromEcmaVersion(parserOptions.ecmaVersion)
589+
: getEspree()
594590

595591
const result: any = isEnhancedParserObject(parser)
596592
? parser.parseForESLint(code, parserOptions)

0 commit comments

Comments
 (0)