Skip to content

Commit 6aabc3d

Browse files
committed
short-circuit re-initialisation
1 parent f729d57 commit 6aabc3d

File tree

2 files changed

+42
-28
lines changed

2 files changed

+42
-28
lines changed

packages/tailwindcss-language-service/src/util/state.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export interface FeatureFlags {
6060
export interface State {
6161
enabled: boolean
6262
configPath?: string
63+
configModified?: number
6364
config?: any
6465
version?: string
6566
separator?: string

src/server.ts

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,35 @@ async function createProjectService(
142142
params: InitializeParams,
143143
documentService: DocumentService
144144
): Promise<ProjectService> {
145-
const state: State = { enabled: false }
145+
const state: State = {
146+
enabled: false,
147+
editor: {
148+
connection,
149+
globalSettings: params.initializationOptions.configuration as Settings,
150+
userLanguages: {},
151+
// TODO
152+
capabilities: {
153+
configuration: true,
154+
diagnosticRelatedInformation: true,
155+
},
156+
documents: documentService.documents,
157+
getConfiguration: async (uri?: string) => {
158+
if (documentSettingsCache.has(uri)) {
159+
return documentSettingsCache.get(uri)
160+
}
161+
let config = await connection.workspace.getConfiguration({
162+
section: 'tailwindCSS',
163+
scopeUri: uri,
164+
})
165+
documentSettingsCache.set(uri, config)
166+
return config
167+
},
168+
getDocumentSymbols: (uri: string) => {
169+
return connection.sendRequest('@/tailwindCSS/getDocumentSymbols', { uri })
170+
},
171+
},
172+
}
173+
146174
const documentSettingsCache: Map<string, Settings> = new Map()
147175
let registrations: Promise<BulkUnregistration>
148176

@@ -255,33 +283,6 @@ async function createProjectService(
255283
async function init() {
256284
clearRequireCache()
257285

258-
// TODO
259-
state.editor = {
260-
connection,
261-
globalSettings: params.initializationOptions.configuration as Settings,
262-
userLanguages: {},
263-
// TODO
264-
capabilities: {
265-
configuration: true,
266-
diagnosticRelatedInformation: true,
267-
},
268-
documents: documentService.documents,
269-
getConfiguration: async (uri?: string) => {
270-
if (documentSettingsCache.has(uri)) {
271-
return documentSettingsCache.get(uri)
272-
}
273-
let config = await connection.workspace.getConfiguration({
274-
section: 'tailwindCSS',
275-
scopeUri: uri,
276-
})
277-
documentSettingsCache.set(uri, config)
278-
return config
279-
},
280-
getDocumentSymbols: (uri: string) => {
281-
return connection.sendRequest('@/tailwindCSS/getDocumentSymbols', { uri })
282-
},
283-
}
284-
285286
let [configPath] = (
286287
await glob([`**/${CONFIG_FILE_GLOB}`], {
287288
cwd: folder,
@@ -325,6 +326,7 @@ async function createProjectService(
325326
setPnpApi(pnpApi)
326327
}
327328

329+
const configModified = fs.statSync(configPath).mtimeMs
328330
const configDir = path.dirname(configPath)
329331
let tailwindcss: any
330332
let postcss: any
@@ -356,6 +358,16 @@ async function createProjectService(
356358
tailwindcssVersion = tailwindcssPkg.version
357359
console.log(`Loaded tailwindcss v${tailwindcssVersion}: ${tailwindDir}`)
358360

361+
if (
362+
state.enabled &&
363+
postcssVersion === state.modules.postcss.version &&
364+
tailwindcssVersion === state.modules.tailwindcss.version &&
365+
configPath === state.configPath &&
366+
configModified === state.configModified
367+
) {
368+
return
369+
}
370+
359371
try {
360372
resolveConfigFn = __non_webpack_require__(resolveFrom(tailwindDir, './resolveConfig.js'))
361373
} catch (_) {
@@ -432,6 +444,7 @@ async function createProjectService(
432444
}
433445

434446
state.configPath = configPath
447+
state.configModified = configModified
435448
state.modules = {
436449
tailwindcss: { version: tailwindcssVersion, module: tailwindcss },
437450
postcss: { version: postcssVersion, module: postcss },

0 commit comments

Comments
 (0)