From e1462062b2375dda73665d1d0b29e197ba6751eb Mon Sep 17 00:00:00 2001 From: tkhs0813 Date: Sun, 10 May 2026 20:07:58 +0900 Subject: [PATCH 1/2] fix: use pug syntax for emmet in template lang pug --- .../src/plugins/html/HTMLPlugin.ts | 14 +++++++++- .../test/plugins/html/HTMLPlugin.test.ts | 26 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/packages/language-server/src/plugins/html/HTMLPlugin.ts b/packages/language-server/src/plugins/html/HTMLPlugin.ts index c7796f6c6..192d416ac 100644 --- a/packages/language-server/src/plugins/html/HTMLPlugin.ts +++ b/packages/language-server/src/plugins/html/HTMLPlugin.ts @@ -125,6 +125,13 @@ export class HTMLPlugin return this.lang.doHover(document, position, html); } + private getEmmetSyntax(document: Document, position: Position) { + return isInTag(position, document.templateInfo) && + document.getLanguageAttribute('template') === 'pug' + ? 'pug' + : 'html'; + } + async getCompletions( document: Document, position: Position, @@ -158,7 +165,12 @@ export class HTMLPlugin this.configManager.getEmmetConfig().showExpandedAbbreviation !== 'never' ) { doEmmetCompleteInner = () => - doEmmetComplete(document, position, 'html', this.configManager.getEmmetConfig()); + doEmmetComplete( + document, + position, + this.getEmmetSyntax(document, position), + this.configManager.getEmmetConfig() + ); this.lang.setCompletionParticipants([ { diff --git a/packages/language-server/test/plugins/html/HTMLPlugin.test.ts b/packages/language-server/test/plugins/html/HTMLPlugin.test.ts index ac7e9be55..f91bf6625 100644 --- a/packages/language-server/test/plugins/html/HTMLPlugin.test.ts +++ b/packages/language-server/test/plugins/html/HTMLPlugin.test.ts @@ -201,6 +201,32 @@ describe('HTML Plugin', () => { assert.strictEqual(completions, null); }); + it('provides pug emmet completions inside template lang="pug"', async () => { + const { plugin, document } = setup(''); + + const completions = await plugin.getCompletions(document, Position.create(1, 4), { + triggerCharacter: '>', + triggerKind: CompletionTriggerKind.TriggerCharacter + }); + + assert.strictEqual(completions?.items[0]?.label, 'div>'); + assert.strictEqual(completions?.items[0]?.textEdit?.newText, 'div ${0}'); + assert.strictEqual(completions?.items[0]?.documentation, 'div |'); + }); + + it('provides html emmet completions outside template lang="pug"', async () => { + const { plugin, document } = setup('\ndiv>'); + + const completions = await plugin.getCompletions(document, Position.create(3, 4), { + triggerCharacter: '>', + triggerKind: CompletionTriggerKind.TriggerCharacter + }); + + assert.strictEqual(completions?.items[0]?.label, 'div>'); + assert.strictEqual(completions?.items[0]?.textEdit?.newText, '
${0}
'); + assert.strictEqual(completions?.items[0]?.documentation, '
|
'); + }); + it('does not provide rename for element being uppercase', async () => { const { plugin, document } = setup('
'); From efb4fd09769514bef39aa3e763e04d8c600774ea Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Fri, 22 May 2026 13:49:05 +0200 Subject: [PATCH 2/2] changeset --- .changeset/rotten-gifts-develop.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/rotten-gifts-develop.md diff --git a/.changeset/rotten-gifts-develop.md b/.changeset/rotten-gifts-develop.md new file mode 100644 index 000000000..f4a19595e --- /dev/null +++ b/.changeset/rotten-gifts-develop.md @@ -0,0 +1,5 @@ +--- +"svelte-language-server": patch +--- + +fix: use pug syntax for emmet in template lang pug