diff --git a/packages/vscode-tailwindcss/src/extension.ts b/packages/vscode-tailwindcss/src/extension.ts index 8455948fd594ea7736a9f454cb9f74737da8471a..9840aa456ffbb5a026857b7f57048d51ccd9010d 100755 --- a/packages/vscode-tailwindcss/src/extension.ts +++ b/packages/vscode-tailwindcss/src/extension.ts @@ -73,6 +73,20 @@ } return _sortedWorkspaceFolders } +function getOuterMostWorkspaceFolder(folder: WorkspaceFolder): WorkspaceFolder { + let sorted = sortedWorkspaceFolders() + for (let element of sorted) { + let uri = folder.uri.toString() + if (uri.charAt(uri.length - 1) !== '/') { + uri = uri + '/' + } + if (uri.startsWith(element)) { + return Workspace.getWorkspaceFolder(Uri.parse(element))! + } + } + return folder +} + function getUserLanguages(folder?: WorkspaceFolder): Record { const langs = Workspace.getConfiguration('tailwindCSS', folder).includeLanguages return isObject(langs) ? langs : {} @@ -203,6 +217,7 @@ let folder = Workspace.getWorkspaceFolder(uri) if (!folder || isExcluded(uri.fsPath, folder)) { return } + folder = getOuterMostWorkspaceFolder(folder) bootWorkspaceClient(folder) }) @@ -216,6 +231,7 @@ if (!folder || isExcluded(uri.fsPath, folder)) { return } if (await fileContainsAtConfig(uri)) { + folder = getOuterMostWorkspaceFolder(folder) bootWorkspaceClient(folder) } } @@ -450,35 +466,6 @@ outputChannel: outputChannel, revealOutputChannelOn: RevealOutputChannelOn.Never, middleware: { * Licensed under the MIT License. See License.txt in the project root for license information. - LanguageClient, - let workspaceFolder = Workspace.getWorkspaceFolder(document.uri) - if (workspaceFolder !== folder) { - return null - } - return next(document, position, context, token) - }, - provideHover(document, position, token, next) { - let workspaceFolder = Workspace.getWorkspaceFolder(document.uri) - if (workspaceFolder !== folder) { - return null - } - return next(document, position, token) - }, - handleDiagnostics(uri, diagnostics, next) { - let workspaceFolder = Workspace.getWorkspaceFolder(uri) - if (workspaceFolder !== folder) { - return - } - next(uri, diagnostics) - }, - provideCodeActions(document, range, context, token, next) { - let workspaceFolder = Workspace.getWorkspaceFolder(document.uri) - if (workspaceFolder !== folder) { - return null - } - return next(document, range, context, token) - }, - * Licensed under the MIT License. See License.txt in the project root for license information. import { CONFIG_GLOB, CSS_GLOB } from 'tailwindcss-language-server/src/lib/constants' let result = await next(item, token) let selections = Window.activeTextEditor.selections @@ -520,11 +507,6 @@ } return result }, async provideDocumentColors(document, token, next) { - let workspaceFolder = Workspace.getWorkspaceFolder(document.uri) - if (workspaceFolder !== folder) { - return null - } - let colors = await next(document, token) let editableColors = colors.filter((color) => { let text = @@ -685,6 +667,8 @@ // Single file languages like JSON might handle files outside the workspace folders. if (!folder) { return } + // If we have nested workspace folders we only start a server on the outer most workspace folder. + folder = getOuterMostWorkspaceFolder(folder) if (searchedFolders.has(folder.uri.toString())) { return