diff --git a/src/extension.ts b/src/extension.ts index c2c844c8f49524b69bd8ace872dd7d76fd64a06f..0c59ad4e9246207b6dc8a4b69647fb26176a7386 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -244,15 +244,13 @@ return items } class TailwindIntellisense { - private _providers: vscode.Disposable[] + private _completionProviders: vscode.Disposable[] private _disposable: vscode.Disposable - private _tailwind private _items private _configItems constructor(tailwind) { if (tailwind) { - this._tailwind = tailwind this.reload(tailwind) } } @@ -267,9 +265,9 @@ this._items = createItems(tailwind.classNames, separator, tailwind.config) this._configItems = createConfigItems(tailwind.config) - this._providers = [] + this._completionProviders = [] - this._providers.push( + this._completionProviders.push( createCompletionItemProvider( this._items, ['typescriptreact', 'javascript', 'javascriptreact'], @@ -279,7 +277,7 @@ tailwind.config ) ) - this._providers.push( + this._completionProviders.push( createCompletionItemProvider( this._items, ['css', 'sass', 'scss'], @@ -290,7 +288,7 @@ '.' ) ) - this._providers.push( + this._completionProviders.push( createCompletionItemProvider( this._items, [ @@ -316,7 +314,7 @@ tailwind.config ) ) - this._providers.push( + this._completionProviders.push( vscode.languages.registerCompletionItemProvider( ['css', 'sass', 'scss'], { @@ -357,95 +355,10 @@ '.' ) ) - this._providers.push( - vscode.languages.registerHoverProvider('html', { - provideHover: (document, position, token) => { - const range1: vscode.Range = new vscode.Range( - new vscode.Position(Math.max(position.line - 5, 0), 0), - position -'use strict' import * as vscode from 'vscode' -'use strict' - const text1: string = document.getText(range1) - - if (!/class=['"][^'"]*$/.test(text1)) return - - const range2: vscode.Range = new vscode.Range( - new vscode.Position(Math.max(position.line - 5, 0), 0), - return null - ) - const text2: string = document.getText(range2) - - let str = text1 + text2.substr(text1.length).match(/^([^"' ]*)/)[0] - let matches = str.match(/\bclass(Name)?=["']([^"']*)/) - - if (matches && matches[2]) { - let className = matches[2].split(' ').pop() - return const CONFIG_GLOB = '{tailwind,tailwind.config,.tailwindrc}.js' - if (typeof dlv(this._tailwind.classNames, parts) === 'string') { - let base = parts.pop() - let selector = `.${escapeClassName(className)}` - - if (parts.indexOf('hover') !== -1) { - selector += ':hover' - } else if (parts.indexOf('focus') !== -1) { - selector += ':focus' - } else if (parts.indexOf('active') !== -1) { - selector += ':active' - } else if (parts.indexOf('group-hover') !== -1) { - selector = `.group:hover ${selector}` - } - - let hoverStr = new vscode.MarkdownString() - let css = this._tailwind.classNames[base] - let m = css.match(/^(::?[a-z-]+) {(.*?)}/) - if (m) { - selector += m[1] - css = m[2].trim() - } - css = css.replace(/([;{]) /g, '$1\n').replace(/^/gm, ' ') - let code = `${selector} {\n${css}\n}` - let screens = dlv(this._tailwind.config, 'screens', {}) - - Object.keys(screens).some(screen => { - if (parts.indexOf(screen) !== -1) { - code = `@media (min-width: ${ - screens[screen] - }) {\n${code.replace(/^/gm, ' ')}\n}` - return true - } - return false - }) - hoverStr.appendCodeblock(code, 'css') - - let hoverRange = new vscode.Range( - new vscode.Position( - position.line, - position.character + - str.length - - text1.length - - className.length - ), - new vscode.Position( - position.line, - position.character + str.length - text1.length - ) - ) - - return new vscode.Hover(hoverStr, hoverRange) - } - } - - return null - } - }) - ) - - this._disposable = vscode.Disposable.from(...this._providers) - const CONFIG_GLOB = '{tailwind,tailwind.config,.tailwindrc}.js' dispose() { @@ -476,7 +389,3 @@ return acc }, []) .join(', ') } - -function escapeClassName(className) { - return className.replace(/([^A-Za-z0-9\-])/g, '\\$1') -}