Skip to content

Commit 10febec

Browse files
author
Brad Cornes
committed
add includeLanguages setting
1 parent a13290c commit 10febec

File tree

13 files changed

+241
-84
lines changed

13 files changed

+241
-84
lines changed

packages/tailwindcss-language-server/src/providers/completionProvider.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,13 @@ function provideClassNameCompletions(
190190
let doc = state.editor.documents.get(params.textDocument.uri)
191191

192192
if (
193-
isHtmlContext(doc, params.position) ||
194-
isJsContext(doc, params.position)
193+
isHtmlContext(state, doc, params.position) ||
194+
isJsContext(state, doc, params.position)
195195
) {
196196
return provideClassAttributeCompletions(state, params)
197197
}
198198

199-
if (isCssContext(doc, params.position)) {
199+
if (isCssContext(state, doc, params.position)) {
200200
return provideAtApplyCompletions(state, params)
201201
}
202202

@@ -209,7 +209,7 @@ function provideCssHelperCompletions(
209209
): CompletionList {
210210
let doc = state.editor.documents.get(textDocument.uri)
211211

212-
if (!isCssContext(doc, position)) {
212+
if (!isCssContext(state, doc, position)) {
213213
return null
214214
}
215215

@@ -317,7 +317,7 @@ function provideTailwindDirectiveCompletions(
317317
): CompletionList {
318318
let doc = state.editor.documents.get(textDocument.uri)
319319

320-
if (!isCssContext(doc, position)) {
320+
if (!isCssContext(state, doc, position)) {
321321
return null
322322
}
323323

@@ -408,7 +408,7 @@ function provideVariantsDirectiveCompletions(
408408
): CompletionList {
409409
let doc = state.editor.documents.get(textDocument.uri)
410410

411-
if (!isCssContext(doc, position)) {
411+
if (!isCssContext(state, doc, position)) {
412412
return null
413413
}
414414

@@ -456,7 +456,7 @@ function provideScreenDirectiveCompletions(
456456
): CompletionList {
457457
let doc = state.editor.documents.get(textDocument.uri)
458458

459-
if (!isCssContext(doc, position)) {
459+
if (!isCssContext(state, doc, position)) {
460460
return null
461461
}
462462

@@ -504,7 +504,7 @@ function provideCssDirectiveCompletions(
504504
): CompletionList {
505505
let doc = state.editor.documents.get(textDocument.uri)
506506

507-
if (!isCssContext(doc, position)) {
507+
if (!isCssContext(state, doc, position)) {
508508
return null
509509
}
510510

@@ -599,9 +599,9 @@ async function provideEmmetCompletions(
599599

600600
let doc = state.editor.documents.get(textDocument.uri)
601601

602-
const syntax = isHtmlContext(doc, position)
602+
const syntax = isHtmlContext(state, doc, position)
603603
? 'html'
604-
: isJsContext(doc, position)
604+
: isJsContext(state, doc, position)
605605
? 'jsx'
606606
: null
607607

packages/tailwindcss-language-server/src/providers/hoverProvider.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ function provideCssHelperHover(
2727
): Hover {
2828
let doc = state.editor.documents.get(textDocument.uri)
2929

30-
if (!isCssContext(doc, position)) return null
30+
if (!isCssContext(state, doc, position)) return null
3131

3232
const line = doc.getText({
3333
start: { line: position.line, character: 0 },
@@ -81,7 +81,11 @@ function provideClassAttributeHover(
8181
): Hover {
8282
let doc = state.editor.documents.get(textDocument.uri)
8383

84-
if (!isHtmlContext(doc, position) && !isJsContext(doc, position)) return null
84+
if (
85+
!isHtmlContext(state, doc, position) &&
86+
!isJsContext(state, doc, position)
87+
)
88+
return null
8589

8690
let hovered = getClassNameAtPosition(doc, position)
8791
if (!hovered) return null
@@ -111,7 +115,7 @@ function provideAtApplyHover(
111115
): Hover {
112116
let doc = state.editor.documents.get(textDocument.uri)
113117

114-
if (!isCssContext(doc, position)) return null
118+
if (!isCssContext(state, doc, position)) return null
115119

116120
const classNames = findClassNamesInRange(doc, {
117121
start: { line: Math.max(position.line - 10, 0), character: 0 },

packages/tailwindcss-language-server/src/server.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ let connection = createConnection(ProposedFeatures.all)
3232
let documents = new TextDocuments()
3333
let workspaceFolder: string | null
3434

35-
const defaultSettings: Settings = { emmetCompletions: false }
35+
const defaultSettings: Settings = {
36+
emmetCompletions: false,
37+
includeLanguages: {},
38+
}
3639
let globalSettings: Settings = defaultSettings
3740
let documentSettings: Map<string, Settings> = new Map()
3841

@@ -53,6 +56,11 @@ connection.onInitialize(
5356
documents,
5457
documentSettings,
5558
globalSettings,
59+
userLanguages:
60+
params.initializationOptions &&
61+
params.initializationOptions.userLanguages
62+
? params.initializationOptions.userLanguages
63+
: {},
5664
capabilities: {
5765
configuration:
5866
capabilities.workspace && !!capabilities.workspace.configuration,

packages/tailwindcss-language-server/src/util/css.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TextDocument, Position } from 'vscode-languageserver'
22
import { isInsideTag, isVueDoc, isSvelteDoc } from './html'
3+
import { State } from './state'
34

45
export const CSS_LANGUAGES = [
56
'css',
@@ -10,12 +11,20 @@ export const CSS_LANGUAGES = [
1011
'stylus',
1112
]
1213

13-
function isCssDoc(doc: TextDocument): boolean {
14-
return CSS_LANGUAGES.indexOf(doc.languageId) !== -1
14+
function isCssDoc(state: State, doc: TextDocument): boolean {
15+
const userCssLanguages = Object.keys(
16+
state.editor.userLanguages
17+
).filter((lang) => CSS_LANGUAGES.includes(state.editor.userLanguages[lang]))
18+
19+
return [...CSS_LANGUAGES, ...userCssLanguages].indexOf(doc.languageId) !== -1
1520
}
1621

17-
export function isCssContext(doc: TextDocument, position: Position): boolean {
18-
if (isCssDoc(doc)) {
22+
export function isCssContext(
23+
state: State,
24+
doc: TextDocument,
25+
position: Position
26+
): boolean {
27+
if (isCssDoc(state, doc)) {
1928
return true
2029
}
2130

packages/tailwindcss-language-server/src/util/html.ts

+15-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { TextDocument, Position } from 'vscode-languageserver'
2+
import { State } from './state'
23

34
export const HTML_LANGUAGES = [
45
'aspnetcorerazor',
@@ -26,8 +27,14 @@ export const HTML_LANGUAGES = [
2627
'twig',
2728
]
2829

29-
export function isHtmlDoc(doc: TextDocument): boolean {
30-
return HTML_LANGUAGES.indexOf(doc.languageId) !== -1
30+
export function isHtmlDoc(state: State, doc: TextDocument): boolean {
31+
const userHtmlLanguages = Object.keys(
32+
state.editor.userLanguages
33+
).filter((lang) => HTML_LANGUAGES.includes(state.editor.userLanguages[lang]))
34+
35+
return (
36+
[...HTML_LANGUAGES, ...userHtmlLanguages].indexOf(doc.languageId) !== -1
37+
)
3138
}
3239

3340
export function isVueDoc(doc: TextDocument): boolean {
@@ -38,13 +45,17 @@ export function isSvelteDoc(doc: TextDocument): boolean {
3845
return doc.languageId === 'svelte'
3946
}
4047

41-
export function isHtmlContext(doc: TextDocument, position: Position): boolean {
48+
export function isHtmlContext(
49+
state: State,
50+
doc: TextDocument,
51+
position: Position
52+
): boolean {
4253
let str = doc.getText({
4354
start: { line: 0, character: 0 },
4455
end: position,
4556
})
4657

47-
if (isHtmlDoc(doc) && !isInsideTag(str, ['script', 'style'])) {
58+
if (isHtmlDoc(state, doc) && !isInsideTag(str, ['script', 'style'])) {
4859
return true
4960
}
5061

packages/tailwindcss-language-server/src/util/js.ts

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { TextDocument, Position } from 'vscode-languageserver'
22
import { isHtmlDoc, isInsideTag, isVueDoc, isSvelteDoc } from './html'
3+
import { State } from './state'
34

45
export const JS_LANGUAGES = [
56
'javascript',
@@ -8,12 +9,20 @@ export const JS_LANGUAGES = [
89
'typescriptreact',
910
]
1011

11-
export function isJsDoc(doc: TextDocument): boolean {
12-
return JS_LANGUAGES.indexOf(doc.languageId) !== -1
12+
export function isJsDoc(state: State, doc: TextDocument): boolean {
13+
const userJsLanguages = Object.keys(
14+
state.editor.userLanguages
15+
).filter((lang) => JS_LANGUAGES.includes(state.editor.userLanguages[lang]))
16+
17+
return [...JS_LANGUAGES, ...userJsLanguages].indexOf(doc.languageId) !== -1
1318
}
1419

15-
export function isJsContext(doc: TextDocument, position: Position): boolean {
16-
if (isJsDoc(doc)) {
20+
export function isJsContext(
21+
state: State,
22+
doc: TextDocument,
23+
position: Position
24+
): boolean {
25+
if (isJsDoc(state, doc)) {
1726
return true
1827
}
1928

@@ -22,7 +31,7 @@ export function isJsContext(doc: TextDocument, position: Position): boolean {
2231
end: position,
2332
})
2433

25-
if (isHtmlDoc(doc) && isInsideTag(str, ['script'])) {
34+
if (isHtmlDoc(state, doc) && isInsideTag(str, ['script'])) {
2635
return true
2736
}
2837

packages/tailwindcss-language-server/src/util/state.ts

+2
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@ export type EditorState = {
1818
documents: TextDocuments
1919
documentSettings: Map<string, Settings>
2020
globalSettings: Settings
21+
userLanguages: Record<string, string>
2122
capabilities: {
2223
configuration: boolean
2324
}
2425
}
2526

2627
export type Settings = {
2728
emmetCompletions: boolean
29+
includeLanguages: Record<string, string>
2830
}
2931

3032
export type State = null | {

packages/tailwindcss-vscode/package.json

+4
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@
5555
"type": "boolean",
5656
"default": false,
5757
"description": ""
58+
},
59+
"tailwindCSS.includeLanguages": {
60+
"type": "object",
61+
"default": {}
5862
}
5963
}
6064
}

0 commit comments

Comments
 (0)