1
1
import type { ParserOptions } from "../common/parser-options"
2
- import { getLinterRequire } from "./linter-require"
3
2
// @ts -expect-error -- ignore
4
3
import * as dependencyEspree from "espree"
5
- import { lte , lt } from "semver"
4
+ import { lte } from "semver"
6
5
import { createRequire } from "./create-require"
7
6
import path from "path"
8
7
import type { BasicParserObject } from "./parser-object"
9
8
10
9
type Espree = BasicParserObject & {
11
- latestEcmaVersion ? : number
10
+ latestEcmaVersion : number
12
11
version : string
13
12
}
14
13
let espreeCache : Espree | null = null
15
14
16
15
/**
17
16
* Gets the espree that the given ecmaVersion can parse.
18
17
*/
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 ( ) )
39
20
}
40
21
41
22
/**
42
23
* Load `espree` from the user dir.
43
24
*/
44
- export function getEspreeFromUser ( ) : Espree {
25
+ function getEspreeFromUser ( ) : Espree {
45
26
try {
46
27
const cwd = process . cwd ( )
47
28
const relativeTo = path . join ( cwd , "__placeholder__.js" )
48
29
return createRequire ( relativeTo ) ( "espree" )
49
30
} 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
64
32
}
65
-
66
- return espreeCache !
67
33
}
68
34
69
35
/**
70
- * Load the newest `espree` from the loaded ESLint or dependency.
36
+ * Load the newest `espree` from the dependency.
71
37
*/
72
38
function getNewestEspree ( ) : Espree {
73
39
let newest = dependencyEspree
74
- const linterEspree = getEspreeFromLinter ( )
75
- if (
76
- linterEspree . version != null &&
77
- lte ( newest . version , linterEspree . version )
78
- ) {
79
- newest = linterEspree
80
- }
81
40
const userEspree = getEspreeFromUser ( )
82
41
if ( userEspree . version != null && lte ( newest . version , userEspree . version ) ) {
83
42
newest = userEspree
@@ -94,7 +53,7 @@ export function getEcmaVersionIfUseEspree(
94
53
}
95
54
96
55
if ( parserOptions . ecmaVersion === "latest" ) {
97
- return normalizeEcmaVersion ( getLatestEcmaVersion ( getNewestEspree ( ) ) )
56
+ return getDefaultEcmaVersion ( )
98
57
}
99
58
if ( parserOptions . ecmaVersion == null ) {
100
59
const defVer = getDefaultEcmaVersion ( )
@@ -104,10 +63,6 @@ export function getEcmaVersionIfUseEspree(
104
63
}
105
64
106
65
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".
111
66
return normalizeEcmaVersion ( getLatestEcmaVersion ( getNewestEspree ( ) ) )
112
67
}
113
68
@@ -122,16 +77,5 @@ function normalizeEcmaVersion(version: number) {
122
77
}
123
78
124
79
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
- }
136
80
return normalizeEcmaVersion ( espree . latestEcmaVersion )
137
81
}
0 commit comments