From 74c9c850cc864daaf79635382ff3c07c04855c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=90=B9=E8=89=B2=E5=BE=A1=E5=AE=88?= <85992002+KazariEX@users.noreply.github.com> Date: Tue, 1 Jul 2025 10:36:18 -0700 Subject: [PATCH 01/47] fix(language-core): remove calculation logic of element inner loc (#5460) --- .../lib/codegen/template/vSlot.ts | 35 +++---------------- .../language-server/tests/references.spec.ts | 4 +-- 2 files changed, 6 insertions(+), 33 deletions(-) diff --git a/packages/language-core/lib/codegen/template/vSlot.ts b/packages/language-core/lib/codegen/template/vSlot.ts index 09a631b6f0..30f43a5f76 100644 --- a/packages/language-core/lib/codegen/template/vSlot.ts +++ b/packages/language-core/lib/codegen/template/vSlot.ts @@ -50,10 +50,9 @@ export function* generateVSlot( } } else { // #932: reference for implicit default slot - const { start, end } = getElementInnerLoc(options, node); yield* wrapWith( - start, - end, + node.loc.start.offset, + node.loc.end.offset, ctx.codeFeatures.navigation, `default`, ); @@ -78,11 +77,10 @@ export function* generateVSlot( } if (options.vueCompilerOptions.strictSlotChildren && node.children.length) { - const { start, end } = getElementInnerLoc(options, node); yield `(): __VLS_NormalizeSlotReturns => (`; yield* wrapWith( - start, - end, + node.loc.start.offset, + node.loc.end.offset, ctx.codeFeatures.verification, `{} as [`, ...ctx.currentComponent.childTypes.map(name => `${name}, `), @@ -180,28 +178,3 @@ function* generateSlotParameters( ]; } } - -function getElementInnerLoc( - options: TemplateCodegenOptions, - node: CompilerDOM.ElementNode, -) { - if (node.children.length) { - let start = node.children[0].loc.start.offset; - let end = node.children.at(-1)!.loc.end.offset; - while (options.template.content[start - 1] !== '>') { - start--; - } - while (options.template.content[end] !== '<' && end < node.loc.end.offset) { - end++; - } - return { - start, - end, - }; - } else { - return { - start: node.loc.start.offset, - end: node.loc.end.offset, - }; - } -} diff --git a/packages/language-server/tests/references.spec.ts b/packages/language-server/tests/references.spec.ts index 51245ed420..80aa949032 100644 --- a/packages/language-server/tests/references.spec.ts +++ b/packages/language-server/tests/references.spec.ts @@ -49,7 +49,7 @@ test('Default slot', async () => { { "end": { "line": 9, - "offset": 4, + "offset": 14, }, "file": "\${testWorkspacePath}/tsconfigProject/foo.vue", "isDefinition": false, @@ -57,7 +57,7 @@ test('Default slot', async () => { "lineText": " ", "start": { "line": 7, - "offset": 13, + "offset": 4, }, }, ], From b809045c97869d5e3d60ed323b3fa4020224acb4 Mon Sep 17 00:00:00 2001 From: Andrei Elkin Date: Tue, 1 Jul 2025 21:03:54 +0200 Subject: [PATCH 02/47] docs(vscode): update Russian translation for VS Code extension (#5461) --- extensions/vscode/package.nls.ru.json | 34 +++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/extensions/vscode/package.nls.ru.json b/extensions/vscode/package.nls.ru.json index 58cce362b4..37695f5283 100644 --- a/extensions/vscode/package.nls.ru.json +++ b/extensions/vscode/package.nls.ru.json @@ -1,24 +1,24 @@ { - "configuration.trace.server": "Отслеживает коммуникацию между VS Code и языковым сервером Vue.", - "configuration.server.includeLanguages": "Конфигурирует языки, для которых должна быть активирована расширение.", - "configuration.splitEditors.icon": "Отображает иконку разделенного редактора в области заголовка редактора.", - "configuration.splitEditors.layout.left": "Блоки в левом разделенном редакторе.", - "configuration.splitEditors.layout.right": "Блоки в правом разделенном редакторе.", - "configuration.codeActions.askNewComponentName": "Запрашивает новое имя компонента при извлечении компонента.", + "configuration.trace.server": "Отслеживать коммуникацию между VS Code и языковым сервером Vue.", + "configuration.server.includeLanguages": "Языки, для которых будет включено расширение.", + "configuration.splitEditors.icon": "Отображать иконку разделенного редактора в области заголовка редактора.", + "configuration.splitEditors.layout.left": "Блоки в левой панели редактора.", + "configuration.splitEditors.layout.right": "Блоки в правой панели редактора.", + "configuration.codeActions.askNewComponentName": "Запрашивать новое имя компонента при извлечении компонента.", "configuration.suggest.componentNameCasing": "Предпочитаемый формат имени компонента.", "configuration.suggest.propNameCasing": "Предпочитаемый формат имени атрибута.", - "configuration.suggest.defineAssignment": "Автоматически добавляет `const props = ` перед `defineProps` при выборе элемента завершения `props`. (также `emit` и `slots`)", - "configuration.autoInsert.dotValue": "Автоматически добавляет `.value` при вводе ответной переменной.", - "configuration.autoInsert.bracketSpacing": "Автоматически добавляет пробелы между двойными фигурными скобками: `{{|}}` -> `{{ | }}`", - "configuration.inlayHints.destructuredProps": "Отображает подсказки для деструктуризированных props:\n\n```ts\nwatch(() => /* props. */foo, () => { ... });\n```", - "configuration.inlayHints.missingProps": "Отображает подсказки для отсутствующих обязательных атрибутов:\n\n```html\n\n\n```", - "configuration.inlayHints.inlineHandlerLeading": "Отображает подсказки для аргументов встроенных обработчиков событий:\n\n```html\n */console.log($event)\" />\n```", - "configuration.inlayHints.optionsWrapper": "Отображает подсказки для оберток компонентов:\n\n```vue\n\n```", - "configuration.inlayHints.vBindShorthand": "Отображает подсказки для сокращенного синтаксиса v-bind:\n\n```html\n\n \n```", + "configuration.suggest.defineAssignment": "Автоматически добавлять `const props = ` перед `defineProps` при выборе элемента завершения `props`. (также `emit` и `slots`)", + "configuration.autoInsert.dotValue": "Автоматически добавлять `.value` при вводе реактивной переменной", + "configuration.autoInsert.bracketSpacing": "Автоматически добавлять пробелы между двойными фигурными скобками: `{{|}}` -> `{{ | }}`", + "configuration.inlayHints.destructuredProps": "Отображать подсказки для деструктурированных props:\n\n```ts\nwatch(() => /* props. */foo, () => { ... });\n```", + "configuration.inlayHints.missingProps": "Отображать подсказки для отсутствующих обязательных атрибутов:\n\n```html\n\n\n```", + "configuration.inlayHints.inlineHandlerLeading": "Отображать подсказки для аргументов встроенных обработчиков событий:\n\n```html\n */console.log($event)\" />\n```", + "configuration.inlayHints.optionsWrapper": "Отображать подсказки для оберток компонентов:\n\n```vue\n\n```", + "configuration.inlayHints.vBindShorthand": "Отображать подсказки для сокращенного синтаксиса v-bind:\n\n```html\n\n \n```", "configuration.format.template.initialIndent": "Начальный отступ для блока `