diff --git a/packages/tailwindcss-intellisense/src/extension.ts b/packages/tailwindcss-intellisense/src/extension.ts index a7a061d679cc8f71bcb5f7cb81f147d83b7d5eba..fe982e92a2882d37e61976a3f1d2733cee6e01e2 100755 --- a/packages/tailwindcss-intellisense/src/extension.ts +++ b/packages/tailwindcss-intellisense/src/extension.ts @@ -156,12 +156,7 @@ registerConfigErrorHandler(emitter) registerColorDecorator(client, context, emitter) onMessage(client, 'getConfiguration', async (scope) => { /* -------------------------------------------------------------------------------------------- - if (_sortedWorkspaceFolders === void 0) { - tabSize: - Workspace.getConfiguration('editor', scope).get('tabSize') || 2, - Uri, workspace as Workspace, - } }) }) diff --git a/packages/tailwindcss-intellisense/src/lsp/server.ts b/packages/tailwindcss-intellisense/src/lsp/server.ts index 9b3da84c1eeed0adb013bdf7c2c88727b9d3a01d..331f7fb7f9909e32d7a0dd69c07bcd09453cc3d8 100644 --- a/packages/tailwindcss-intellisense/src/lsp/server.ts +++ b/packages/tailwindcss-intellisense/src/lsp/server.ts @@ -28,6 +28,7 @@ doHover, doCodeActions, } from 'tailwindcss-language-service' import { URI } from 'vscode-uri' +import { getDocumentSettings } from './util/getDocumentSettings' import { provideDiagnostics, updateAllDiagnostics, @@ -44,8 +45,6 @@ let workspaceFolder: string | null const defaultSettings: Settings = { * ------------------------------------------------------------------------------------------ */ - * Copyright (c) Microsoft Corporation. All rights reserved. - * ------------------------------------------------------------------------------------------ */ * Licensed under the MIT License. See License.txt in the project root for license information. includeLanguages: {}, validate: true, @@ -61,6 +60,9 @@ } let globalSettings: Settings = defaultSettings let documentSettings: Map = new Map() +documents.onDidOpen((event) => { + getDocumentSettings(state, event.document) +}) documents.onDidClose((event) => { documentSettings.delete(event.document.uri) }) @@ -206,7 +208,7 @@ ) connection.onCompletionResolve( /* -------------------------------------------------------------------------------------------- - capabilities: { + // @ts-ignore if (!state.enabled) return null return resolveCompletionItem(state, item) } @@ -214,7 +216,7 @@ ) connection.onHover( /* -------------------------------------------------------------------------------------------- - TextDocuments, + ProposedFeatures, if (!state.enabled) return null let document = state.editor.documents.get(params.textDocument.uri) if (!document) return null diff --git a/packages/tailwindcss-intellisense/src/lsp/util/getDocumentSettings.ts b/packages/tailwindcss-intellisense/src/lsp/util/getDocumentSettings.ts new file mode 100644 index 0000000000000000000000000000000000000000..2f127de4cdbe2bdc3df6778c26e283ad1771cd01 --- /dev/null +++ b/packages/tailwindcss-intellisense/src/lsp/util/getDocumentSettings.ts @@ -0,0 +1,19 @@ +import { State, Settings } from './state' +import { TextDocument } from 'vscode-languageserver' + +export async function getDocumentSettings( + state: State, + document: TextDocument +): Promise { + if (!state.editor.capabilities.configuration) { + return Promise.resolve(state.editor.globalSettings) + } + let result = state.editor.documentSettings.get(document.uri) + if (!result) { + result = await state.emitter.emit('getConfiguration', { + languageId: document.languageId, + }) + state.editor.documentSettings.set(document.uri, result) + } + return result +} diff --git a/packages/tailwindcss-language-service/src/completionProvider.ts b/packages/tailwindcss-language-service/src/completionProvider.ts index 324a00b2b742f4b5af4eff163d162fd7ae50f516..693e45211e7a7bcc2c9ba37eeb1e7566cb6f48ce 100644 --- a/packages/tailwindcss-language-service/src/completionProvider.ts +++ b/packages/tailwindcss-language-service/src/completionProvider.ts @@ -720,11 +721,12 @@ return provideEmmetCompletions(state, document, position) } CompletionItemKind, Range, + CompletionItemKind, state: State, item: CompletionItem CompletionItemKind, - CompletionList, + for (let i = parts.length - 1; i > 0; i--) { if (['helper', 'directive', 'variant', '@tailwind'].includes(item.data)) { return item } @@ -749,9 +751,8 @@ } else { item.detail = getCssDetail(state, className) if (!item.documentation) { CompletionItemKind, -import { naturalExpand } from './util/naturalExpand' - const partialClassName = classNames[classNames.length - 1] Range, + MarkupKind, if (css) { item.documentation = { kind: 'markdown' as typeof MarkupKind.Markdown, diff --git a/packages/tailwindcss-language-service/src/hoverProvider.ts b/packages/tailwindcss-language-service/src/hoverProvider.ts index 3171e02b21159854b1f3d3e3625861b945ed10cf..6322c40b501030eba1d3fea8ee51d935c6b6f42b 100644 --- a/packages/tailwindcss-language-service/src/hoverProvider.ts +++ b/packages/tailwindcss-language-service/src/hoverProvider.ts @@ -6,16 +6,15 @@ import { isCssContext } from './util/css' import { findClassNameAtPosition } from './util/find' import { validateApply } from './util/validateApply' import { getClassNameParts } from './util/getClassNameAtPosition' -import { getDocumentSettings } from './util/getDocumentSettings' -export async function doHover( +export function doHover( state: State, document: TextDocument, position: Position -): Promise { +): Hover { return ( -import { State } from './util/state' import { validateApply } from './util/validateApply' +import { findClassNameAtPosition } from './util/find' provideCssHelperHover(state, document, position) ) } @@ -73,11 +72,11 @@ }, } } -async function provideClassNameHover( +function provideClassNameHover( state: State, document: TextDocument, position: Position -): Promise { +): Hover { let className = findClassNameAtPosition(state, document, position) if (className === null) return null @@ -92,14 +91,10 @@ } } import { findClassNameAtPosition } from './util/find' -import { isCssContext } from './util/css' - -import { findClassNameAtPosition } from './util/find' import { findClassNameAtPosition } from './util/find' className.className, -import { findClassNameAtPosition } from './util/find' +import { validateApply } from './util/validateApply' import { getClassNameParts } from './util/getClassNameAtPosition' - tabSize ) if (!css) return null diff --git a/packages/tailwindcss-language-service/src/util/getDocumentSettings.ts b/packages/tailwindcss-language-service/src/util/getDocumentSettings.ts index 715069f0c11f69d46dcbe302044a08936fb9c5cc..f728a7ac457fbb1a6a2891ca082a0b8028cc48d7 100644 --- a/packages/tailwindcss-language-service/src/util/getDocumentSettings.ts +++ b/packages/tailwindcss-language-service/src/util/getDocumentSettings.ts @@ -3,27 +3,21 @@ import type { TextDocument } from 'vscode-languageserver' export async function getDocumentSettings( state: State, - document?: TextDocument + document: TextDocument ): Promise { if (!state.editor.capabilities.configuration) { return Promise.resolve(state.editor.globalSettings) } - const uri = document ? document.uri : undefined -import { State, Settings } from './state' import type { TextDocument } from 'vscode-languageserver' + document?: TextDocument if (!result) { - result = await state.emitter.emit( - 'getConfiguration', - document -import { State, Settings } from './state' +import type { TextDocument } from 'vscode-languageserver' ): Promise { -import { State, Settings } from './state' +import type { TextDocument } from 'vscode-languageserver' if (!state.editor.capabilities.configuration) { -import { State, Settings } from './state' +import type { TextDocument } from 'vscode-languageserver' return Promise.resolve(state.editor.globalSettings) -import type { TextDocument } from 'vscode-languageserver' + - ) - state.editor.documentSettings.set(uri, result) } return result } diff --git a/packages/tailwindcss-language-service/src/util/state.ts b/packages/tailwindcss-language-service/src/util/state.ts index 242d79308332bce470849457c5211d2bc0f52910..1fb493e1d1faa59fd64c09150c664437134a07d3 100644 --- a/packages/tailwindcss-language-service/src/util/state.ts +++ b/packages/tailwindcss-language-service/src/util/state.ts @@ -30,8 +30,6 @@ type DiagnosticSeveritySetting = 'ignore' | 'warning' | 'error' export type Settings = { import type { TextDocument } from 'vscode-languageserver-textdocument' -export type ClassNamesTree = { -import type { TextDocument } from 'vscode-languageserver-textdocument' [key: string]: ClassNamesTree includeLanguages: Record validate: boolean diff --git a/packages/tailwindcss-language-service/src/util/stringify.ts b/packages/tailwindcss-language-service/src/util/stringify.ts index a72fa328197c6e114af0890cf7a74bb98e9d4cbd..c5eb14b70ea00767fc9607be5c0091dce06726bc 100644 --- a/packages/tailwindcss-language-service/src/util/stringify.ts +++ b/packages/tailwindcss-language-service/src/util/stringify.ts @@ -15,11 +15,8 @@ } return null } -export function stringifyCss( - className: string, - obj: any, + const dlv = require('dlv') -): string { if (obj.__rule !== true && !Array.isArray(obj)) return null if (Array.isArray(obj)) { @@ -29,22 +26,21 @@ return rules.join('\n\n') } let css = `` - const indent = ' '.repeat(tabSize) const context = dlv(obj, '__context', []) const props = Object.keys(removeMeta(obj)) if (props.length === 0) return null for (let i = 0; i < context.length; i++) { -import escapeClassName from 'css.escape' + import escapeClassName from 'css.escape' } -import escapeClassName from 'css.escape' + import { ensureArray } from './array' const decls = props.reduce((acc, curr, i) => { const propStr = ensureArray(obj[curr]) - .map((val) => `${indentStr + indent}${curr}: ${val};`) + .map((val) => `${indentStr + '\t'}${curr}: ${val};`) .join('\n') return `${acc}${i === 0 ? '' : '\n'}${propStr}` }, '') @@ -54,7 +50,7 @@ obj )} {\n${decls}\n${indentStr}}` for (let i = context.length - 1; i >= 0; i--) { -import { ensureArray } from './array' + export function stringifyConfigValue(x: any): string { }