@@ -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 ( / @ s c r e e n $ / . 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