@@ -5,7 +5,8 @@ import type { TextlintResult, TextlintFixResult } from '@textlint/kernel'
5
5
import { cosmiconfig } from 'cosmiconfig'
6
6
import type { CosmiconfigResult } from 'cosmiconfig/dist/types'
7
7
import { extractProperties , runAsWorker } from 'synckit'
8
- import { textlint } from 'textlint'
8
+ import { TextLintCore } from 'textlint'
9
+ import { Config } from 'textlint/lib/src/config/config'
9
10
import type { FrozenProcessor , Plugin } from 'unified'
10
11
import type { VFileMessage } from 'vfile-message'
11
12
@@ -93,6 +94,8 @@ export const isTextlintFixResult = (
93
94
result : TextlintResult ,
94
95
) : result is TextlintFixResult => 'output' in result
95
96
97
+ const textlintCache = new Map < string , TextLintCore > ( )
98
+
96
99
runAsWorker (
97
100
async ( {
98
101
text,
@@ -124,6 +127,19 @@ runAsWorker(
124
127
}
125
128
}
126
129
case 'textlint' : {
130
+ let textlint : TextLintCore
131
+
132
+ if ( textlintCache . has ( filename ) ) {
133
+ textlint = textlintCache . get ( filename ) !
134
+ } else {
135
+ const textlintConfig = Config . initWithAutoLoading ( {
136
+ cwd : path . dirname ( filename ) ,
137
+ } )
138
+
139
+ textlint = new TextLintCore ( textlintConfig )
140
+ textlintCache . set ( filename , textlint )
141
+ }
142
+
127
143
const result : TextlintFixResult | TextlintResult = await textlint [
128
144
fix ? 'fixText' : 'lintText'
129
145
] ( text , path . extname ( filename ) )
0 commit comments