Skip to content

Commit bd12c1d

Browse files
v3.2.0 (#5870)
1 parent 55c05ad commit bd12c1d

File tree

13 files changed

+108
-168
lines changed

13 files changed

+108
-168
lines changed

CHANGELOG.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,63 @@
11
# Changelog
22

3+
## 3.2.0 (2025-12-20)
4+
5+
### vscode
6+
7+
- **fix:** Vue TS highlighting when trailing type alias is missing semicolon (#5853) - Thanks to @serkodev!
8+
- **perf:** replace `fast-diff` with custom character-by-character alignment algorithm (#5849) (#5851)
9+
- **refactor:** update Vue grammar scope name to "text.html.vue" (#5856)
10+
- **test:** add test for embedded grammars (#5861) - Thanks to @serkodev!
11+
12+
### language-service
13+
14+
- **feat:** rich hover message (#5881)
15+
- **feat:** support markdown JSDoc for rich hover message description (#5890) - Thanks to @serkodev!
16+
- **chore:** adjust rich hover message title layout (#5889) - Thanks to @serkodev!
17+
18+
### component-meta
19+
20+
- **feat:** add `tags` to slots and exposed (#5862) - Thanks to @aj-dev!
21+
- **feat:** filter out irrelevant properties from `exposed` (#5868) - Thanks to @aj-dev!
22+
- **refactor:** redundant logic between deduplication and language-core (#5875)
23+
- **refactor:** de-dependency from component-type-helpers (#5876)
24+
- **refactor:** search prop defaults with symbol declarations (#5879)
25+
- **refactor:** deprecate "noDeclarations" and "forceUseTs" options (#5887)
26+
27+
### typescript-plugin
28+
29+
- **feat:** include leading dot when finding references to CSS classes (#5852)
30+
- **fix:** missing module error after file rename (#5839) - Thanks to @serkodev!
31+
- **fix:** prioritize non-warning completion entries over warning ones (#5847)
32+
- **fix:** always pass rest parameters for future compatibility (#5859) - Thanks to @KazariEX!
33+
- **fix:** add nullish guards before accessing `ts.CompletionEntryData` (#5869) - Thanks to @KazariEX!
34+
- **fix:** handle import type nodes in definition proxy (#5873)
35+
- **fix:** handle type imports in component auto-import(#5874)
36+
37+
### language-core
38+
39+
- **feat:** revert overcorrection of `v-for` type inference (#5836)
40+
- **feat:** align `v-for` key type with `Object.keys` (#5837) - Thanks to @serkodev!
41+
- **feat:** narrow component and directive types (#5841)
42+
- **feat:** support `<!-- @strictTemplates -->` magic comment (#5845)
43+
- **fix:** correctly resolve `<script src="">` (#5838)
44+
- **fix:** preserve template slot wrappers during `createIfBranch` (#5844) - Thanks to @serkodev!
45+
- **fix:** include end tag locations when renaming global components
46+
- **refactor:** replace dynamic types generation with static files (#5872)
47+
- **refactor:** improve Vue version detection and plugin resolution
48+
49+
### component-type-helpers
50+
51+
- **refactor:** remove `ComponentType` helper
52+
53+
### workspace
54+
55+
- **chore:** update testing infrastructure (#5848)
56+
- **chore:** use tsgo in development (#5860)
57+
- **chore:** reduce local dependencies and update workflows (#5863)
58+
- **chore:** upgrade tsslint and vite to pre-release versions
59+
- **chore:** delete tests for Vue 3.4 (#5871)
60+
361
## 3.1.8 (2025-12-09)
462

563
### Features

extensions/vscode/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"private": true,
33
"name": "volar",
4-
"version": "3.1.8",
4+
"version": "3.2.0",
55
"repository": {
66
"type": "git",
77
"url": "https://github.com/vuejs/language-tools.git",

extensions/vscode/src/generated-meta.ts

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
// Meta info
55
export const publisher = 'Vue';
66
export const name = 'volar';
7-
export const version = '3.1.5';
7+
export const version = '3.2.0';
88
export const displayName = 'Vue (Official)';
99
export const description = 'Language Support for Vue';
1010
export const extensionId = `${publisher}.${name}`;
@@ -17,7 +17,7 @@ export type CommandKey =
1717
| 'vue.action.restartServer';
1818

1919
/**
20-
* Commands map registed by `Vue.volar`
20+
* Commands map registered by `Vue.volar`
2121
*/
2222
export const commands = {
2323
/**
@@ -32,6 +32,25 @@ export const commands = {
3232
actionRestartServer: 'vue.action.restartServer',
3333
} satisfies Record<string, CommandKey>;
3434

35+
/**
36+
* Type union of all languages
37+
*/
38+
export type LanguageKey =
39+
| 'vue'
40+
| 'markdown'
41+
| 'html'
42+
| 'jade';
43+
44+
/**
45+
* Languages map registed by `Vue.volar`
46+
*/
47+
export const languages = {
48+
vue: 'vue',
49+
markdown: 'markdown',
50+
html: 'html',
51+
jade: 'jade',
52+
} satisfies Record<string, LanguageKey>;
53+
3554
/**
3655
* Type union of all configs
3756
*/

extensions/vscode/src/welcome.ts

Lines changed: 19 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as vscode from 'vscode';
22

3-
const popVersion = '3.1.0';
3+
const popVersion = '3.2.0';
44

55
let panel: vscode.WebviewPanel | undefined;
66

@@ -31,6 +31,9 @@ export function execute(context: vscode.ExtensionContext) {
3131
case 'toggleShowUpdates':
3232
context.globalState.update('vue.showUpdates', message.value);
3333
break;
34+
case 'openUrl':
35+
vscode.env.openExternal(vscode.Uri.parse(message.url));
36+
break;
3437
}
3538
});
3639
panel.onDidDispose(() => panel = undefined);
@@ -131,12 +134,6 @@ function getWelcomeHtml(context: vscode.ExtensionContext) {
131134
box-shadow: 0 2px 8px var(--vscode-widget-shadow);
132135
}
133136
134-
.whats-new-card {
135-
max-height: 250px;
136-
overflow-y: auto;
137-
overflow-x: hidden;
138-
}
139-
140137
.sponsors-card #sponsors-container svg {
141138
width: 100% !important;
142139
height: auto !important;
@@ -327,138 +324,23 @@ function getWelcomeHtml(context: vscode.ExtensionContext) {
327324
<input type="checkbox" onchange="toggleShowUpdates(this.checked)" ${
328325
context.globalState.get<boolean>('vue.showUpdates', true) ? 'checked' : ''
329326
}>
330-
<span>Show release notes on update</span>
327+
<span>Show this page on update</span>
331328
</label>
332329
</div>
333330
334-
<div class="card whats-new-card">
335-
<h3>3.1.0</h3>
336-
<ul style="margin: 0; padding-left: 1.25rem;">
337-
<li>🚀 Significantly improve the TypeScript performance of virtual code (<a href="https://github.com/vuejs/language-tools/pull/5532" target="_blank">Learn More</a>)</li>
338-
</ul>
339-
<div
340-
style="margin-top: 1rem; padding: 0.75rem; background-color: var(--vscode-inputValidation-warningBackground); border-radius: 4px;">
341-
<strong>⚠️ Vue 2 and vue-class-component support has been removed, please refer to <a href="https://github.com/vuejs/language-tools/discussions/5455" target="_blank">Discussion #5455</a> for detail.</strong>
342-
</div>
343-
<div
344-
style="margin-top: 1.5rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem;">
345-
<a href="https://github.com/vuejs/language-tools/releases/tag/v3.1.0" target="_blank"
346-
style="display: inline-flex; align-items: center; gap: 0.5rem; color: var(--vscode-textLink-foreground);">
347-
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
348-
<path
349-
d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z" />
350-
</svg>
351-
Full Release Notes
352-
</a>
353-
<div style="display: flex; gap: 0.5rem; font-size: 0.9em; color: var(--vscode-descriptionForeground);">
354-
<span>Released: October 2025</span>
355-
<span>•</span>
356-
<span>v3.1.0</span>
357-
</div>
358-
</div>
359-
<br>
360-
361-
<h3>3.0.7</h3>
362-
<ul style="margin: 0; padding-left: 1.25rem;">
363-
<li>✨ The following features are now available for free:</li>
364-
<ul style="margin: 0; padding-left: 1.25rem;">
365-
<li>🧩 Interpolation Highlight</li>
366-
<li>🧩 Focus Mode (disabled by default)</li>
367-
<li>🧩 Reactivity Visualization</li>
368-
</ul>
369-
<li>🐛 4+ bug fixes</li>
370-
</ul>
371-
<div
372-
style="margin-top: 1.5rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem;">
373-
<a href="https://github.com/vuejs/language-tools/releases/tag/v3.0.7" target="_blank"
374-
style="display: inline-flex; align-items: center; gap: 0.5rem; color: var(--vscode-textLink-foreground);">
375-
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
376-
<path
377-
d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z" />
378-
</svg>
379-
Full Release Notes
380-
</a>
381-
<div style="display: flex; gap: 0.5rem; font-size: 0.9em; color: var(--vscode-descriptionForeground);">
382-
<span>Released: September 2025</span>
383-
<span>•</span>
384-
<span>v3.0.7</span>
385-
</div>
386-
</div>
387-
<br>
388-
389-
<h3>3.0.6</h3>
390-
<ul style="margin: 0; padding-left: 1.25rem;">
391-
<li>🚀 Expandable Hovers support for TypeScript (<a href="https://code.visualstudio.com/updates/v1_100#_expandable-hovers-for-javascript-and-typescript-experimental" target="_blank">Learn More</a>)</li>
392-
<li>🐛 8+ bug fixes</li>
393-
</ul>
394-
<div
395-
style="margin-top: 1.5rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem;">
396-
<a href="https://github.com/vuejs/language-tools/releases/tag/v3.0.6" target="_blank"
397-
style="display: inline-flex; align-items: center; gap: 0.5rem; color: var(--vscode-textLink-foreground);">
398-
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
399-
<path
400-
d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z" />
401-
</svg>
402-
Full Release Notes
403-
</a>
404-
<div style="display: flex; gap: 0.5rem; font-size: 0.9em; color: var(--vscode-descriptionForeground);">
405-
<span>Released: August 2025</span>
406-
<span>•</span>
407-
<span>v3.0.6</span>
408-
</div>
409-
</div>
410-
<br>
411-
412-
<h3>3.0.2</h3>
413-
<ul style="margin: 0; padding-left: 1.25rem;">
414-
<li>🚀 Improve memory usage in extreme cases</li>
415-
<li>🐛 15+ bug fixes</li>
416-
</ul>
417-
<div
418-
style="margin-top: 1.5rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem;">
419-
<a href="https://github.com/vuejs/language-tools/releases/tag/v3.0.2" target="_blank"
420-
style="display: inline-flex; align-items: center; gap: 0.5rem; color: var(--vscode-textLink-foreground);">
421-
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
422-
<path
423-
d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z" />
424-
</svg>
425-
Full Release Notes
426-
</a>
427-
<div style="display: flex; gap: 0.5rem; font-size: 0.9em; color: var(--vscode-descriptionForeground);">
428-
<span>Released: July 2025</span>
429-
<span>•</span>
430-
<span>v3.0.2</span>
431-
</div>
432-
</div>
433-
<br>
434-
435-
<h3>3.0.0</h3>
436-
<ul style="margin: 0; padding-left: 1.25rem;">
437-
<li>🚀 Significantly improved Hybrid Mode stability</li>
438-
<li>✨ Introduced several new DX enhancement features</li>
439-
<li>🌍 Expanded support for additional localizations</li>
440-
<li>🎨 UI tweaks: removed all Vue-related status bar items</li>
441-
<li>🐛 Squashed numerous bugs throughout the extension</li>
442-
</ul>
443-
<div
444-
style="margin-top: 1.5rem; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem;">
445-
<a href="https://github.com/vuejs/language-tools/releases/tag/v3.0.0" target="_blank"
446-
style="display: inline-flex; align-items: center; gap: 0.5rem; color: var(--vscode-textLink-foreground);">
447-
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
448-
<path
449-
d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zm2 16H8v-2h8v2zm0-4H8v-2h8v2zm-3-5V3.5L18.5 9H13z" />
450-
</svg>
451-
Full Release Notes
452-
</a>
453-
<div style="display: flex; gap: 0.5rem; font-size: 0.9em; color: var(--vscode-descriptionForeground);">
454-
<span>Released: July 2025</span>
455-
<span>•</span>
456-
<span>v3.0.0</span>
457-
</div>
458-
</div>
331+
<div style="position: relative; width: 100%; padding-bottom: 52%; height: 0; overflow: hidden;">
332+
<iframe id="blog" src="https://vue-language-tools.pages.dev/v3-2/" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none;"></iframe>
459333
</div>
334+
<script>
335+
const iframe = document.getElementById('blog');
336+
window.addEventListener('message', event => {
337+
if (event.data.url) {
338+
vscode.postMessage({ command: 'openUrl', url: event.data.url });
339+
}
340+
});
341+
</script>
460342
461-
<h2>🎥 Learn More Features</h2>
343+
<h2>Learn More Features</h2>
462344
<p>Discover advanced capabilities of the extension:</p>
463345
<div class="video-container">
464346
<a href="https://www.youtube.com/watch?v=RcPcO4_Ct_U" target="_blank">
@@ -482,26 +364,7 @@ function getWelcomeHtml(context: vscode.ExtensionContext) {
482364
}
483365
</script>
484366
485-
<h2>✨ Core Features</h2>
486-
<div class="features">
487-
<div class="feature">
488-
<div class="feature-icon">🧩</div>
489-
<h3>Template Intelligence</h3>
490-
<p>Smart completions for directives, components and props in Vue templates with type inference</p>
491-
</div>
492-
<div class="feature">
493-
<div class="feature-icon">🔍</div>
494-
<h3>Type Checking</h3>
495-
<p>Full TypeScript support with type inference across SFCs and reactive type checking</p>
496-
</div>
497-
<div class="feature">
498-
<div class="feature-icon">🎨</div>
499-
<h3>Syntax Highlighting</h3>
500-
<p>Comprehensive syntax highlighting for Single File Components and template expressions</p>
501-
</div>
502-
</div>
503-
504-
<h2>📚 Resources</h2>
367+
<h2>Resources</h2>
505368
<ul>
506369
<li><a href="https://vuejs.org/guide/typescript/overview.html" target="_blank">Vue with TypeScript Guide</a> -
507370
Official documentation</li>
@@ -511,7 +374,7 @@ function getWelcomeHtml(context: vscode.ExtensionContext) {
511374
and get help</li>
512375
</ul>
513376
514-
<h2>🔧 Troubleshooting</h2>
377+
<h2>Troubleshooting</h2>
515378
<details>
516379
<summary>Why are some features not working?</summary>
517380
<div>
@@ -537,7 +400,7 @@ function getWelcomeHtml(context: vscode.ExtensionContext) {
537400
</div>
538401
</details>
539402
540-
<h2>❤️ Thanks to Our Sponsors</h2>
403+
<h2>Our Sponsors ❤️</h2>
541404
<div class="card sponsors-card" style="text-align: center; padding: 1.5rem;">
542405
<p style="margin-top: 0;">This project is made possible thanks to our generous sponsors:</p>
543406
<div id="sponsors-container" style="max-width: 100%; margin: 0 auto;"></div>

lerna.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
"extensions/**",
66
"packages/**"
77
],
8-
"version": "3.1.8"
8+
"version": "3.2.0"
99
}

packages/component-meta/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-component-meta",
3-
"version": "3.1.8",
3+
"version": "3.2.0",
44
"license": "MIT",
55
"files": [
66
"**/*.js",

packages/component-type-helpers/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-component-type-helpers",
3-
"version": "3.1.8",
3+
"version": "3.2.0",
44
"license": "MIT",
55
"files": [
66
"**/*.js",

packages/language-core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue/language-core",
3-
"version": "3.1.8",
3+
"version": "3.2.0",
44
"license": "MIT",
55
"files": [
66
"**/*.js",

packages/language-plugin-pug/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue/language-plugin-pug",
3-
"version": "3.1.8",
3+
"version": "3.2.0",
44
"license": "MIT",
55
"files": [
66
"**/*.js",

packages/language-server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vue/language-server",
3-
"version": "3.1.8",
3+
"version": "3.2.0",
44
"license": "MIT",
55
"files": [
66
"**/*.js",

0 commit comments

Comments
 (0)