From def423a7fe35f67532a4568a93b3306573f8ab68 Mon Sep 17 00:00:00 2001 From: Brad Cornes Date: Sun, 16 Dec 2018 14:58:21 +0000 Subject: [PATCH] custom seperator --- src/extension.ts | 55 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 3fd68c4..e1822e6 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -3,7 +3,8 @@ import * as vscode from 'vscode' import { dirname } from 'path' const htmlElements = require('./htmlElements.js') -const tailwindClassNames = require('tailwind-class-names') +// const tailwindClassNames = require('tailwind-class-names') +const tailwindClassNames = require('/Users/brad/Code/tailwind-class-names/dist') const dlv = require('dlv') const Color = require('color') @@ -172,29 +173,55 @@ function createCompletionItemProvider({ } } + let screens = Object.keys(dlv(config, 'screens', {})) + let states = ['hover', 'focus', 'active', 'group-hover'] + if (typeof str !== 'undefined') { + console.log(str) const pth = str - .replace(new RegExp(`${separator}`, 'g'), '.') + .replace( + new RegExp( + `^(${[...screens, ...states].join('|')})${separator}`, + 'g' + ), + '$1.' + ) + .replace(new RegExp(`\\.(${states.join('|')})${separator}`), '.$1.') .replace(/\.$/, '') .replace(/^\./, '') .replace(/\./g, '.children.') + let hasSep = new RegExp( + `^(${[...screens, ...states].join('|')})${separator}` + ).test(str) + if (!hasSep && str.endsWith(separator)) { + // token.cancel() + return getItemsWithRange( + items, + new vscode.Range(position.translate(0, -str.length), position) + ) + let mobNav = new vscode.CompletionItem( + 'mob-nav-', + vscode.CompletionItemKind.Constant + ) + mobNav.range = new vscode.Range(position.translate(0, -4), position) + return [mobNav] + } + if (pth !== '') { const itms = - prefixedItems && - str.indexOf('.') === 0 && - str.indexOf(separator) === -1 + prefixedItems && str.indexOf('.') === 0 && !hasSep ? dlv(prefixedItems, pth) : dlv(items, pth) if (itms) { - return Object.keys(itms.children).map(x => itms.children[x].item) + return getItemsWithRange(itms.children) } } - if (str.indexOf(separator) === -1) { + if (!hasSep) { return prefixedItems && str.indexOf('.') === 0 - ? Object.keys(prefixedItems).map(x => prefixedItems[x].item) - : Object.keys(items).map(x => items[x].item) + ? getItemsWithRange(prefixedItems) + : getItemsWithRange(items) } return [] @@ -207,6 +234,14 @@ function createCompletionItemProvider({ ) } +function getItemsWithRange(items, range: vscode.Range = undefined) { + return Object.keys(items).map(x => { + let i = items[x].item + i.range = range + return i + }) +} + function createConfigItemProvider({ languages, items, @@ -419,7 +454,7 @@ class TailwindIntellisense { const separator = dlv(tailwind.config, 'options.separator', ':') - if (separator !== ':') return + // if (separator !== ':') return this._items = createItems(tailwind.classNames, separator, tailwind.config) this._prefixedItems = createItems(