Skip to content

Commit 080fc3c

Browse files
committed
Add document links and completions for @plugin
1 parent 6862fdd commit 080fc3c

File tree

4 files changed

+97
-1
lines changed

4 files changed

+97
-1
lines changed

packages/tailwindcss-language-server/tests/completions/at-config.test.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,4 +163,66 @@ withFixture('v4/dependencies', (c) => {
163163
],
164164
})
165165
})
166+
167+
test.concurrent('@plugin', async ({ expect }) => {
168+
let result = await completion({
169+
text: '@plugin "',
170+
lang: 'css',
171+
position: {
172+
line: 0,
173+
character: 9,
174+
},
175+
})
176+
177+
expect(result).toEqual({
178+
isIncomplete: false,
179+
items: [
180+
{
181+
label: 'sub-dir/',
182+
kind: 19,
183+
command: { command: 'editor.action.triggerSuggest', title: '' },
184+
data: expect.anything(),
185+
textEdit: {
186+
newText: 'sub-dir/',
187+
range: { start: { line: 0, character: 9 }, end: { line: 0, character: 9 } },
188+
},
189+
},
190+
{
191+
label: 'tailwind.config.js',
192+
kind: 17,
193+
data: expect.anything(),
194+
textEdit: {
195+
newText: 'tailwind.config.js',
196+
range: { start: { line: 0, character: 9 }, end: { line: 0, character: 9 } },
197+
},
198+
},
199+
],
200+
})
201+
})
202+
203+
test.concurrent('@plugin directory', async ({ expect }) => {
204+
let result = await completion({
205+
text: '@plugin "./sub-dir/',
206+
lang: 'css',
207+
position: {
208+
line: 0,
209+
character: 19,
210+
},
211+
})
212+
213+
expect(result).toEqual({
214+
isIncomplete: false,
215+
items: [
216+
{
217+
label: 'colors.js',
218+
kind: 17,
219+
data: expect.anything(),
220+
textEdit: {
221+
newText: 'colors.js',
222+
range: { start: { line: 0, character: 19 }, end: { line: 0, character: 19 } },
223+
},
224+
},
225+
],
226+
})
227+
})
166228
})

packages/tailwindcss-language-server/tests/document-links/document-links.test.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,30 @@ withFixture('v4/basic', (c) => {
7878
},
7979
],
8080
})
81+
82+
testDocumentLinks('plugin: file exists', {
83+
text: '@plugin "plugin.js";',
84+
lang: 'css',
85+
expected: [
86+
{
87+
target: `file://${path
88+
.resolve('./tests/fixtures/v4/basic/plugin.js')
89+
.replace(/@/g, '%40')}`,
90+
range: { start: { line: 0, character: 8 }, end: { line: 0, character: 19 } },
91+
},
92+
],
93+
})
94+
95+
testDocumentLinks('plugin: file does not exist', {
96+
text: '@plugin "does-not-exist.js";',
97+
lang: 'css',
98+
expected: [
99+
{
100+
target: `file://${path
101+
.resolve('./tests/fixtures/v4/basic/does-not-exist.js')
102+
.replace(/@/g, '%40')}`,
103+
range: { start: { line: 0, character: 8 }, end: { line: 0, character: 27 } },
104+
},
105+
],
106+
})
81107
})

packages/tailwindcss-language-service/src/completionProvider.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1536,7 +1536,9 @@ async function provideFileDirectiveCompletions(
15361536
return null
15371537
}
15381538

1539-
let pattern = /@config\s*(?<partial>'[^']*|"[^"]*)$/
1539+
let pattern = state.v4
1540+
? /@(config|plugin)\s*(?<partial>'[^']*|"[^"]*)$/
1541+
: /@config\s*(?<partial>'[^']*|"[^"]*)$/
15401542

15411543
let text = document.getText({ start: { line: position.line, character: 0 }, end: position })
15421544
let match = text.match(pattern)

packages/tailwindcss-language-service/src/documentLinksProvider.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ export function getDocumentLinks(
1717
/@config\s*(?<path>'[^']+'|"[^"]+")/g,
1818
]
1919

20+
if (state.v4) {
21+
patterns.push(
22+
/@plugin\s*(?<path>'[^']+'|"[^"]+")/g,
23+
)
24+
}
25+
2026
return getDirectiveLinks(state, document, patterns, resolveTarget)
2127
}
2228

0 commit comments

Comments
 (0)