Skip to content

Commit 7dd65d8

Browse files
committed
add @screen completions (#7)
1 parent 67045bf commit 7dd65d8

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

src/extension.ts

+56
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,14 @@ class TailwindIntellisense {
674674
)
675675
)
676676

677+
// @screen
678+
this._providers.push(
679+
createScreenCompletionItemProvider({
680+
config: tailwind.config,
681+
languages: [...CSS_TYPES, 'postcss', 'vue']
682+
})
683+
)
684+
677685
this._disposable = vscode.Disposable.from(...this._providers)
678686
}
679687

@@ -732,3 +740,51 @@ function getColorFromValue(value: string) {
732740
return
733741
}
734742
}
743+
744+
function createScreenCompletionItemProvider({
745+
languages,
746+
config
747+
}): vscode.Disposable {
748+
return vscode.languages.registerCompletionItemProvider(
749+
languages,
750+
{
751+
provideCompletionItems: (
752+
document: vscode.TextDocument,
753+
position: vscode.Position
754+
): vscode.CompletionItem[] => {
755+
let range: vscode.Range = new vscode.Range(
756+
new vscode.Position(0, 0),
757+
position
758+
)
759+
let text: string = document.getText(range)
760+
761+
if (
762+
document.languageId === 'vue' &&
763+
!(text.indexOf('<style') !== -1 && text.indexOf('</style>') === -1)
764+
)
765+
return []
766+
767+
let line = text.split(/[\n\r]/).pop()
768+
769+
if (/@screen $/.test(line)) {
770+
return Object.keys(dlv(config, 'screens', {})).map((screen, i) => {
771+
let item = new vscode.CompletionItem(
772+
screen,
773+
vscode.CompletionItemKind.Constant
774+
)
775+
item.insertText = new vscode.SnippetString(`${screen} {\n\t$0\n}`)
776+
item.detail =
777+
typeof config.screens[screen] === 'string'
778+
? config.screens[screen]
779+
: ''
780+
item.sortText = naturalExpand(i.toString())
781+
return item
782+
})
783+
}
784+
785+
return []
786+
}
787+
},
788+
' '
789+
)
790+
}

0 commit comments

Comments
 (0)