@vue/language-service 2.0.16 → 2.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -688,7 +688,7 @@
688
688
  "valueSet": "v",
689
689
  "description": {
690
690
  "kind": "markdown",
691
- "value": "\nСекция `<style module>` компилируется как [CSS модуль](https://github.com/css-modules/css-modules) и объявляет результирующие CSS-классы компоненту в виде объекта под ключом `$style`:\n\n```vue\n<template>\n <p :class=\"$style.red\">Это должно быть красным</p>\n</template>\n\n<style module>\n.red {\n color: red;\n}\n</style>\n```\n\nПолученные классы хэшируются во избежание коллизий, что позволяет добиться того же эффекта, что и при выборе CSS с ограниченной областью действия только для текущего компонента.\n\nОбратитесь к [спецификации CSS модулей](https://github.com/css-modules/css-modules) для получения более подробной информации, такой как [глобальные исключения](https://github.com/css-modules/css-modules#exceptions) и [композиция](https://github.com/css-modules/css-modules#composition).\n\n### Внедрение пользовательского имени \n\nМожно настроить ключ свойства объекта внедряемых классов, указав значение атрибуту `module`:\n\n```vue\n<template>\n <p :class=\"classes.red\">red</p>\n</template>\n\n<style module=\"classes\">\n.red {\n color: red;\n}\n</style>\n```\n\n### Использование с Composition API \n\nДоступ к внедряемым классам можно получить в `setup()` и `<script setup>` через API `useCssModule`. Для секций `<style module>` с пользовательским внедряемым именем, `useCssModule` принимает в качестве первого аргумента соответствующее значение атрибута `module`:\n\n```js\nimport { useCssModule } from 'vue'\n\n// внутри области видимости setup()...\n// по умолчанию, возвращает классы для <style module>\nuseCssModule()\n\n// при указании имени, возвращает классы для <style module=\"classes\">\nuseCssModule('classes')\n```\n"
691
+ "value": "\nСекция `<style module>` компилируется как [CSS модуль](https://github.com/css-modules/css-modules) и объявляет результирующие CSS-классы компоненту в виде объекта под ключом `$style`:\n\n```vue\n<template>\n <p :class=\"$style.red\">Это должно быть красным</p>\n</template>\n\n<style module>\n.red {\n color: red;\n}\n</style>\n```\n\nПолученные классы хэшируются во избежание коллизий, что позволяет добиться того же эффекта, что и при выборе CSS с ограниченной областью действия только для текущего компонента.\n\nОбратитесь к [спецификации CSS модулей](https://github.com/css-modules/css-modules) для получения более подробной информации, такой как [глобальные исключения](https://github.com/css-modules/css-modules/blob/master/docs/composition.md#exceptions) и [композиция](https://github.com/css-modules/css-modules/blob/master/docs/composition.md#composition).\n\n### Внедрение пользовательского имени \n\nМожно настроить ключ свойства объекта внедряемых классов, указав значение атрибуту `module`:\n\n```vue\n<template>\n <p :class=\"classes.red\">red</p>\n</template>\n\n<style module=\"classes\">\n.red {\n color: red;\n}\n</style>\n```\n\n### Использование с Composition API \n\nДоступ к внедряемым классам можно получить в `setup()` и `<script setup>` через API `useCssModule`. Для секций `<style module>` с пользовательским внедряемым именем, `useCssModule` принимает в качестве первого аргумента соответствующее значение атрибута `module`:\n\n```js\nimport { useCssModule } from 'vue'\n\n// внутри области видимости setup()...\n// по умолчанию, возвращает классы для <style module>\nuseCssModule()\n\n// при указании имени, возвращает классы для <style module=\"classes\">\nuseCssModule('classes')\n```\n"
692
692
  },
693
693
  "references": [
694
694
  {
@@ -1156,7 +1156,7 @@
1156
1156
  "name": "v-once",
1157
1157
  "description": {
1158
1158
  "kind": "markdown",
1159
- "value": "\nVykreslit element nebo komponentu pouze jednou a přeskočit budoucí aktualizace.\n\n- **Nepředpokládá výraz** \n\n- **Podrobnosti**\n\n Při dalších překreslováních budou element/komponenta a všichni potomci považováni za statický obsah a přeskočeni. To lze použít k optimalizaci výkonu aktualizace.\n\n ```html\n <!-- jediný prvek -->\n <span v-once>Toto se nikdy nezmění: {{msg}}</span>\n <!-- element s potomky -->\n <div v-once>\n <h1>komentář</h1>\n <p>{{msg}}</p>\n </div>\n <!-- komponenta -->\n <MyComponent v-once :comment=\"msg\"></MyComponent>\n <!-- direktiva `v-for` -->\n <ul>\n <li v-for=\"i in list\" v-once>{{i}}</li>\n </ul>\n ```\n\n Od verze 3.2 si můžete také část šablony „zapamatovat“ (memoize) s podmínkami neplatnosti pomocí [`v-memo`](#v-memo).\n\n- **Viz také:**\n - [Syntaxe šablon - Interpolace textu](https://cs.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n"
1159
+ "value": "\nVykreslit element nebo komponentu pouze jednou a přeskočit budoucí aktualizace.\n\n- **Nepředpokládá výraz** \n\n- **Podrobnosti**\n\n Při dalších překreslováních budou element/komponenta a všichni potomci považováni za statický obsah a přeskočeni. To lze použít k optimalizaci výkonu aktualizace.\n\n ```html\n <!-- jediný prvek -->\n <span v-once>Toto se nikdy nezmění: {{msg}}</span>\n <!-- element s potomky -->\n <div v-once>\n <h1>Komentář</h1>\n <p>{{msg}}</p>\n </div>\n <!-- komponenta -->\n <MyComponent v-once :comment=\"msg\"></MyComponent>\n <!-- direktiva `v-for` -->\n <ul>\n <li v-for=\"i in list\" v-once>{{i}}</li>\n </ul>\n ```\n\n Od verze 3.2 si můžete také část šablony „zapamatovat“ (memoize) s podmínkami neplatnosti pomocí [`v-memo`](#v-memo).\n\n- **Viz také:**\n - [Syntaxe šablon - Interpolace textu](https://cs.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n"
1160
1160
  },
1161
1161
  "references": [
1162
1162
  {
@@ -928,7 +928,7 @@
928
928
  "name": "v-bind",
929
929
  "description": {
930
930
  "kind": "markdown",
931
- "value": "\nLie dynamiquement un ou plusieurs attributs, ou une prop d'un composant à une expression.\n\n- **Raccourci :** \n - `:` ou `.` (lorsqu'on utilise le modificateur `.prop`)\n - En omettant la valeur (lorsque l'attribut et la valeur liée portent le même nom) <sup class=\"vt-badge\">3.4+</sup>\n\n- **Attendu :** `any (avec argument) | Object (sans argument)`\n\n- **Argument :** `attrOrProp (optionnel)`\n\n- **Modificateurs**\n\n - `.camel` - transforme le nom de l'attribut kebab-case en camelCase.\n - `.prop` - force une liaison à être définie comme une propriété du DOM. <sup class=\"vt-badge\">3.2+</sup>\n - `.attr` - force une liaison à être définie comme un attribut du DOM. <sup class=\"vt-badge\">3.2+</sup>\n\n- **Utilisation :**\n\n Lorsqu'elle est utilisée pour lier l'attribut `class` ou `style`, `v-bind` supporte des types de valeurs supplémentaires comme Array ou Objects. Voir la section du guide lié ci-dessous pour plus de détails.\n\n Lors de la mise en place d'une liaison sur un élément, Vue va vérifier par défaut si l'élément a la clé définie comme une propriété en faisant une vérification de l'opérateur `in`. Si la propriété est définie, Vue définira la valeur comme une propriété du DOM au lieu d'un attribut. Cela devrait fonctionner dans la plupart des cas, mais vous pouvez outrepasser ce comportement en utilisant explicitement les modificateurs `.prop` ou `.attr`. Cela est parfois nécessaire, notamment lorsque vous [travaillez avec des éléments personnalisés](https://fr.vuejs.org/guide/extras/web-components.html#passing-dom-properties).\n\n Lorsqu'elle est utilisée pour lier les props du composant, la prop doit être correctement déclarée dans le composant enfant.\n\n Lorsqu'elle est utilisée sans argument, elle peut être utilisée pour lier un objet contenant des paires nom-valeur d'attributs.\n\n- **Exemple**\n\n ```html\n <!-- lie un attribut -->\n <img v-bind:src=\"imageSrc\" />\n\n <!-- nom d'attribut dynamique -->\n <button v-bind:[key]=\"value\"></button>\n\n <!-- raccourci -->\n <img :src=\"imageSrc\" />\n\n <!-- raccourci même nom (3.4+), se transforme en :src=\"src\" -->\n <img :src />\n \n <!-- raccourci d'un nom d'attribut dynamique -->\n <button :[key]=\"value\"></button>\n\n <!-- avec une concaténation de chaînes de caractères en ligne -->\n <img :src=\"'/path/to/images/' + fileName\" />\n\n <!-- liaison de classe -->\n <div :class=\"{ red: isRed }\"></div>\n <div :class=\"[classA, classB]\"></div>\n <div :class=\"[classA, { classB: isB, classC: isC }]\"></div>\n\n <!-- liaison de style -->\n <div :style=\"{ fontSize: size + 'px' }\"></div>\n <div :style=\"[styleObjectA, styleObjectB]\"></div>\n\n <!-- liaison d'un objet d'attributs -->\n <div v-bind=\"{ id: someProp, 'other-attr': otherProp }\"></div>\n\n <!-- liaison de prop. \"prop\" doit être déclaré dans le composant enfant. -->\n <MyComponent :prop=\"someThing\" />\n\n <!-- transmet les props du parent en commun avec un composant enfant -->\n <MyComponent v-bind=\"$props\" />\n\n <!-- XLink -->\n <svg><a :xlink:special=\"foo\"></a></svg>\n ```\n\n Le modificateur `.prop` a également un raccourci dédié, `.` :\n\n ```html\n <div :someProperty.prop=\"someObject\"></div>\n\n <!-- équivalent à -->\n <div .someProperty=\"someObject\"></div>\n ```\n\n Le modificateur `.camel` permet de formatter un nom d'attribut `v-bind` en camelCase lors de l'utilisation de templates à l'intérieur du DOM, par exemple l'attribut SVG `viewBox` :\n\n ```html\n <svg :view-box.camel=\"viewBox\"></svg>\n ```\n\n `.camel` n'est pas nécessaire si vous utilisez des templates en chaînes de caractères, ou si vous pré-compilez le template avec un outil de build.\n\n- **Voir aussi**\n - [Liaison de classes et de styles](https://fr.vuejs.org/guide/essentials/class-and-style.html)\n - [Composant - Détails sur le passage de props](https://fr.vuejs.org/guide/components/props.html#prop-passing-details)\n"
931
+ "value": "\nLie dynamiquement un ou plusieurs attributs, ou une prop d'un composant à une expression.\n\n- **Raccourci :**\n - `:` ou `.` (lorsqu'on utilise le modificateur `.prop`)\n - En omettant la valeur (lorsque l'attribut et la valeur liée portent le même nom) <sup class=\"vt-badge\">3.4+</sup>\n\n- **Attendu :** `any (avec argument) | Object (sans argument)`\n\n- **Argument :** `attrOrProp (optionnel)`\n\n- **Modificateurs**\n\n - `.camel` - transforme le nom de l'attribut kebab-case en camelCase.\n - `.prop` - force une liaison à être définie comme une propriété du DOM. <sup class=\"vt-badge\">3.2+</sup>\n - `.attr` - force une liaison à être définie comme un attribut du DOM. <sup class=\"vt-badge\">3.2+</sup>\n\n- **Utilisation :**\n\n Lorsqu'elle est utilisée pour lier l'attribut `class` ou `style`, `v-bind` supporte des types de valeurs supplémentaires comme Array ou Objects. Voir la section du guide lié ci-dessous pour plus de détails.\n\n Lors de la mise en place d'une liaison sur un élément, Vue va vérifier par défaut si l'élément a la clé définie comme une propriété en faisant une vérification de l'opérateur `in`. Si la propriété est définie, Vue définira la valeur comme une propriété du DOM au lieu d'un attribut. Cela devrait fonctionner dans la plupart des cas, mais vous pouvez outrepasser ce comportement en utilisant explicitement les modificateurs `.prop` ou `.attr`. Cela est parfois nécessaire, notamment lorsque vous [travaillez avec des éléments personnalisés](https://fr.vuejs.org/guide/extras/web-components.html#passing-dom-properties).\n\n Lorsqu'elle est utilisée pour lier les props du composant, la prop doit être correctement déclarée dans le composant enfant.\n\n Lorsqu'elle est utilisée sans argument, elle peut être utilisée pour lier un objet contenant des paires nom-valeur d'attributs.\n\n- **Exemple**\n\n ```html\n <!-- lie un attribut -->\n <img v-bind:src=\"imageSrc\" />\n\n <!-- nom d'attribut dynamique -->\n <button v-bind:[key]=\"value\"></button>\n\n <!-- raccourci -->\n <img :src=\"imageSrc\" />\n\n <!-- raccourci même nom (3.4+), se transforme en :src=\"src\" -->\n <img :src />\n\n <!-- raccourci d'un nom d'attribut dynamique -->\n <button :[key]=\"value\"></button>\n\n <!-- avec une concaténation de chaînes de caractères en ligne -->\n <img :src=\"'/path/to/images/' + fileName\" />\n\n <!-- liaison de classe -->\n <div :class=\"{ red: isRed }\"></div>\n <div :class=\"[classA, classB]\"></div>\n <div :class=\"[classA, { classB: isB, classC: isC }]\"></div>\n\n <!-- liaison de style -->\n <div :style=\"{ fontSize: size + 'px' }\"></div>\n <div :style=\"[styleObjectA, styleObjectB]\"></div>\n\n <!-- liaison d'un objet d'attributs -->\n <div v-bind=\"{ id: someProp, 'other-attr': otherProp }\"></div>\n\n <!-- liaison de prop. \"prop\" doit être déclaré dans le composant enfant. -->\n <MyComponent :prop=\"someThing\" />\n\n <!-- transmet les props du parent en commun avec un composant enfant -->\n <MyComponent v-bind=\"$props\" />\n\n <!-- XLink -->\n <svg><a :xlink:special=\"foo\"></a></svg>\n ```\n\n Le modificateur `.prop` a également un raccourci dédié, `.` :\n\n ```html\n <div :someProperty.prop=\"someObject\"></div>\n\n <!-- équivalent à -->\n <div .someProperty=\"someObject\"></div>\n ```\n\n Le modificateur `.camel` permet de formatter un nom d'attribut `v-bind` en camelCase lors de l'utilisation de templates à l'intérieur du DOM, par exemple l'attribut SVG `viewBox` :\n\n ```html\n <svg :view-box.camel=\"viewBox\"></svg>\n ```\n\n `.camel` n'est pas nécessaire si vous utilisez des templates en chaînes de caractères, ou si vous pré-compilez le template avec un outil de build.\n\n- **Voir aussi**\n - [Liaison de classes et de styles](https://fr.vuejs.org/guide/essentials/class-and-style.html)\n - [Composant - Détails sur le passage de props](https://fr.vuejs.org/guide/components/props.html#prop-passing-details)\n"
932
932
  },
933
933
  "references": [
934
934
  {
@@ -1156,7 +1156,7 @@
1156
1156
  "name": "v-once",
1157
1157
  "description": {
1158
1158
  "kind": "markdown",
1159
- "value": "\nRend l'élément et le composant une seule fois, et ignore les mises à jour futures.\n\n- **N'attend pas d'expression**\n\n- **Détails**\n\n Lors des rendus suivants, l'élément/composant et tous ses enfants seront traités comme du contenu statique et ignorés. Cela peut être utilisé pour optimiser les performances de mise à jour.\n\n ```html\n <!-- élément simple -->\n <span v-once>This will never change: {{msg}}</span>\n <!-- l'élément a des enfants -->\n <div v-once>\n <h1>comment</h1>\n <p>{{msg}}</p>\n </div>\n <!-- composant -->\n <MyComponent v-once :comment=\"msg\"></MyComponent>\n <!-- directive `v-for` -->\n <ul>\n <li v-for=\"i in list\" v-once>{{i}}</li>\n </ul>\n ```\n\n Depuis la version 3.2, vous pouvez également mémoriser une partie du template avec des conditions d'invalidation en utilisant [`v-memo`](#v-memo).\n\n- **Voir aussi**\n - [Syntaxe de la liaison bidirectionnelle - interpolations](https://fr.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n"
1159
+ "value": "\nRend l'élément et le composant une seule fois, et ignore les mises à jour futures.\n\n- **N'attend pas d'expression**\n\n- **Détails**\n\n Lors des rendus suivants, l'élément/composant et tous ses enfants seront traités comme du contenu statique et ignorés. Cela peut être utilisé pour optimiser les performances de mise à jour.\n\n ```html\n <!-- élément simple -->\n <span v-once>This will never change: {{msg}}</span>\n <!-- l'élément a des enfants -->\n <div v-once>\n <h1>Comment</h1>\n <p>{{msg}}</p>\n </div>\n <!-- composant -->\n <MyComponent v-once :comment=\"msg\"></MyComponent>\n <!-- directive `v-for` -->\n <ul>\n <li v-for=\"i in list\" v-once>{{i}}</li>\n </ul>\n ```\n\n Depuis la version 3.2, vous pouvez également mémoriser une partie du template avec des conditions d'invalidation en utilisant [`v-memo`](#v-memo).\n\n- **Voir aussi**\n - [Syntaxe de la liaison bidirectionnelle - interpolations](https://fr.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n"
1160
1160
  },
1161
1161
  "references": [
1162
1162
  {
@@ -1156,7 +1156,7 @@
1156
1156
  "name": "v-once",
1157
1157
  "description": {
1158
1158
  "kind": "markdown",
1159
- "value": "\n要素やコンポーネントを一度だけレンダリングし、その後の更新はスキップします。\n\n- **式を受け取りません**\n\n- **詳細**\n\n その後の再レンダリングでは、要素/コンポーネントとそのすべての子要素は静的コンテンツとして扱われ、スキップされます。これは、更新のパフォーマンスを最適化するために使用できます。\n\n ```html\n <!-- 単一要素 -->\n <span v-once>This will never change: {{msg}}</span>\n <!-- 子要素を持つ要素 -->\n <div v-once>\n <h1>comment</h1>\n <p>{{msg}}</p>\n </div>\n <!-- コンポーネント -->\n <MyComponent v-once :comment=\"msg\"></MyComponent>\n <!-- `v-for` ディレクティブ -->\n <ul>\n <li v-for=\"i in list\" v-once>{{i}}</li>\n </ul>\n ```\n\n 3.2 以降では、[`v-memo`](#v-memo) を使って、テンプレートの一部を無効化する条件付きでメモ化できます。\n\n- **参照**\n - [データバインディング構文 - 展開](https://ja.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n"
1159
+ "value": "\n要素やコンポーネントを一度だけレンダリングし、その後の更新はスキップします。\n\n- **式を受け取りません**\n\n- **詳細**\n\n その後の再レンダリングでは、要素/コンポーネントとそのすべての子要素は静的コンテンツとして扱われ、スキップされます。これは、更新のパフォーマンスを最適化するために使用できます。\n\n ```html\n <!-- 単一要素 -->\n <span v-once>This will never change: {{msg}}</span>\n <!-- 子要素を持つ要素 -->\n <div v-once>\n <h1>Comment</h1>\n <p>{{msg}}</p>\n </div>\n <!-- コンポーネント -->\n <MyComponent v-once :comment=\"msg\"></MyComponent>\n <!-- `v-for` ディレクティブ -->\n <ul>\n <li v-for=\"i in list\" v-once>{{i}}</li>\n </ul>\n ```\n\n 3.2 以降では、[`v-memo`](#v-memo) を使って、テンプレートの一部を無効化する条件付きでメモ化できます。\n\n- **参照**\n - [データバインディング構文 - 展開](https://ja.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n"
1160
1160
  },
1161
1161
  "references": [
1162
1162
  {
@@ -237,7 +237,7 @@
237
237
  "name": "Suspense",
238
238
  "description": {
239
239
  "kind": "markdown",
240
- "value": "\nИспользуется для оркестровки вложенных асинхронных зависимостей в дереве компонентов.\n\n- **Входные параметры**\n\n ```ts\n interface SuspenseProps {\n timeout?: string | number\n }\n ```\n\n- **События**\n\n - `@resolve`\n - `@pending`\n - `@fallback`\n\n- **Подробности**\n\n `<Suspense>` принимает два слота: `#default` и `#fallback`. Он будет отображать содержимое `#fallback` слота во время рендеринга `#default` слота в памяти.\n\n Если он встречает асинхронные зависимости ([Асинхронные компоненты](https://ru.vuejs.org/guide/components/async.html) и компоненты с [`async setup()`](https://ru.vuejs.org/guide/built-ins/suspense.html#async-setup)) во время рендеринга `#default` слота, он будет ждать, пока все они не будут разрешены, прежде чем отобразить `#default` слот.\n\n- **См. также** [Руководство — Suspense](https://ru.vuejs.org/guide/built-ins/suspense.html)\n"
240
+ "value": "\nИспользуется для оркестровки вложенных асинхронных зависимостей в дереве компонентов.\n\n- **Входные параметры**\n\n ```ts\n interface SuspenseProps {\n timeout?: string | number\n suspensible?: boolean\n }\n ```\n\n- **События**\n\n - `@resolve`\n - `@pending`\n - `@fallback`\n\n- **Подробности**\n\n `<Suspense>` принимает два слота: `#default` и `#fallback`. Он будет отображать содержимое `#fallback` слота во время рендеринга `#default` слота в памяти.\n\n Если он встречает асинхронные зависимости ([Асинхронные компоненты](https://ru.vuejs.org/guide/components/async.html) и компоненты с [`async setup()`](https://ru.vuejs.org/guide/built-ins/suspense.html#async-setup)) во время рендеринга `#default` слота, он будет ждать, пока все они не будут разрешены, прежде чем отобразить `#default` слот.\n\n Если установить для Suspense значение `suspensible`, вся обработка асинхронных зависимостей будет выполняться родительским Suspense. См. [подробности реализации](https://github.com/vuejs/core/pull/6736)\n\n- **См. также** [Руководство — Suspense](https://ru.vuejs.org/guide/built-ins/suspense.html)\n"
241
241
  },
242
242
  "attributes": [],
243
243
  "references": [
@@ -1384,7 +1384,7 @@
1384
1384
  "name": "ref",
1385
1385
  "description": {
1386
1386
  "kind": "markdown",
1387
- "value": "\nОзначает [ссылку на элементы шаблона](https://ru.vuejs.org/guide/essentials/template-refs.html).\n\n- **Ожидает** `string | Function`\n\n- **Подробности**\n\n Атрибут `ref` используется для регистрации ссылки на элемент или дочерний компонент.\n\n В Options API, ссылка будет зарегистрирована в объекте компонента `this.$refs`:\n\n ```html\n <!-- Хранится в this.$refs.p -->\n <p ref=\"p\">hello</p>\n ```\n\n В Composition API, ссылка будет храниться в ref с соответствующим именем:\n\n ```vue\n <script setup>\n import { ref } from 'vue'\n\n const p = ref()\n </script>\n\n <template>\n <p ref=\"p\">Привет</p>\n </template>\n ```\n\n При использовании на обычном DOM-элементе ссылка будет указывать на этот элемент; при использовании на дочернем компоненте ссылка будет указывать на экземпляр дочернего компонента.\n\n В качестве альтернативы `ref` может принимать функцию, что даёт полный контроль над тем, где хранить ссылку:\n\n ```html\n <ChildComponent :ref=\"(el) => child = el\" />\n ```\n\n Важное замечание о времени регистрации ref-ссылок: поскольку эти ссылки создаются render-функцией, нужно подождать, пока компонент будет смонтирован, прежде чем обращаться к ним.\n\n Так же свойство `this.$refs` не реактивно, поэтому не следует использовать его в шаблонах для привязки данных.\n\n- **См. также**\n - [Руководство — Ссылки на элементы шаблона](https://ru.vuejs.org/guide/essentials/template-refs.html)\n - [Guide - Typing Template Refs](https://ru.vuejs.org/guide/typescript/composition-api.html#typing-template-refs) <sup class=\"vt-badge ts\" />\n - [Guide - Typing Component Template Refs](https://ru.vuejs.org/guide/typescript/composition-api.html#typing-component-template-refs) <sup class=\"vt-badge ts\" />\n"
1387
+ "value": "\nОзначает [ссылку на элементы шаблона](https://ru.vuejs.org/guide/essentials/template-refs.html).\n\n- **Ожидает** `string | Function`\n\n- **Подробности**\n\n Атрибут `ref` используется для регистрации ссылки на элемент или дочерний компонент.\n\n В Options API, ссылка будет зарегистрирована в объекте компонента `this.$refs`:\n\n ```html\n <!-- Хранится в this.$refs.p -->\n <p ref=\"p\">hello</p>\n ```\n\n В Composition API, ссылка будет храниться в ref с соответствующим именем:\n\n ```vue\n <script setup>\n import { ref } from 'vue'\n\n const p = ref()\n </script>\n\n <template>\n <p ref=\"p\">Привет</p>\n </template>\n ```\n\n При использовании на обычном DOM-элементе ссылка будет указывать на этот элемент; при использовании на дочернем компоненте ссылка будет указывать на экземпляр дочернего компонента.\n\n В качестве альтернативы `ref` может принимать функцию, что даёт полный контроль над тем, где хранить ссылку:\n\n ```html\n <ChildComponent :ref=\"(el) => child = el\" />\n ```\n\n Важное замечание о времени регистрации ref-ссылок: поскольку эти ссылки создаются render-функцией, нужно подождать, пока компонент будет смонтирован, прежде чем обращаться к ним.\n\n Так же свойство `this.$refs` не реактивно, поэтому не следует использовать его в шаблонах для привязки данных.\n\n- **См. также**\n - [Руководство — Ссылки на элементы шаблона](https://ru.vuejs.org/guide/essentials/template-refs.html)\n - [Руководство - Типизация ссылок на шаблоны](https://ru.vuejs.org/guide/typescript/composition-api.html#typing-template-refs) <sup class=\"vt-badge ts\" />\n - [Руководство - Типизация ссылок на шаблоны компонентов](https://ru.vuejs.org/guide/typescript/composition-api.html#typing-component-template-refs) <sup class=\"vt-badge ts\" />\n"
1388
1388
  },
1389
1389
  "references": [
1390
1390
  {
@@ -237,7 +237,7 @@
237
237
  "name": "Suspense",
238
238
  "description": {
239
239
  "kind": "markdown",
240
- "value": "\n用于协调对组件树中嵌套的异步依赖的处理。\n\n- **Props**\n\n ```ts\n interface SuspenseProps {\n timeout?: string | number\n }\n ```\n\n- **事件**\n\n - `@resolve`\n - `@pending`\n - `@fallback`\n\n- **详细信息**\n\n `<Suspense>` 接受两个插槽:`#default` 和 `#fallback`。它将在内存中渲染默认插槽的同时展示后备插槽内容。\n\n 如果在渲染时遇到异步依赖项 ([异步组件](https://cn.vuejs.org/guide/components/async.html)和具有 [`async setup()`](https://cn.vuejs.org/guide/built-ins/suspense.html#async-setup) 的组件),它将等到所有异步依赖项解析完成时再显示默认插槽。\n\n- **参考**[指南 - Suspense](https://cn.vuejs.org/guide/built-ins/suspense.html)\n"
240
+ "value": "\n用于协调对组件树中嵌套的异步依赖的处理。\n\n- **Props**\n\n ```ts\n interface SuspenseProps {\n timeout?: string | number\n suspensible?: boolean\n }\n ```\n\n- **事件**\n\n - `@resolve`\n - `@pending`\n - `@fallback`\n\n- **详细信息**\n\n `<Suspense>` 接受两个插槽:`#default` 和 `#fallback`。它将在内存中渲染默认插槽的同时展示后备插槽内容。\n\n 如果在渲染时遇到异步依赖项 ([异步组件](https://cn.vuejs.org/guide/components/async.html)和具有 [`async setup()`](https://cn.vuejs.org/guide/built-ins/suspense.html#async-setup) 的组件),它将等到所有异步依赖项解析完成时再显示默认插槽。\n\n 通过将 Suspense 设置为 `suspensible`,所有的异步依赖将由父级 Suspense 处理。请参阅[实现细节](https://github.com/vuejs/core/pull/6736)\n\n- **参考**[指南 - Suspense](https://cn.vuejs.org/guide/built-ins/suspense.html)\n"
241
241
  },
242
242
  "attributes": [],
243
243
  "references": [
@@ -1156,7 +1156,7 @@
1156
1156
  "name": "v-once",
1157
1157
  "description": {
1158
1158
  "kind": "markdown",
1159
- "value": "\n仅渲染元素和组件一次,并跳过之后的更新。\n\n- **无需传入**\n\n- **详细信息**\n\n 在随后的重新渲染,元素/组件及其所有子项将被当作静态内容并跳过渲染。这可以用来优化更新时的性能。\n\n ```html\n <!-- 单个元素 -->\n <span v-once>This will never change: {{msg}}</span>\n <!-- 带有子元素的元素 -->\n <div v-once>\n <h1>comment</h1>\n <p>{{msg}}</p>\n </div>\n <!-- 组件 -->\n <MyComponent v-once :comment=\"msg\" />\n <!-- `v-for` 指令 -->\n <ul>\n <li v-for=\"i in list\" v-once>{{i}}</li>\n </ul>\n ```\n\n 从 3.2 起,你也可以搭配 [`v-memo`](#v-memo) 的无效条件来缓存部分模板。\n\n- **参考**\n - [数据绑定语法 - 插值](https://cn.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n"
1159
+ "value": "\n仅渲染元素和组件一次,并跳过之后的更新。\n\n- **无需传入**\n\n- **详细信息**\n\n 在随后的重新渲染,元素/组件及其所有子项将被当作静态内容并跳过渲染。这可以用来优化更新时的性能。\n\n ```html\n <!-- 单个元素 -->\n <span v-once>This will never change: {{msg}}</span>\n <!-- 带有子元素的元素 -->\n <div v-once>\n <h1>Comment</h1>\n <p>{{msg}}</p>\n </div>\n <!-- 组件 -->\n <MyComponent v-once :comment=\"msg\" />\n <!-- `v-for` 指令 -->\n <ul>\n <li v-for=\"i in list\" v-once>{{i}}</li>\n </ul>\n ```\n\n 从 3.2 起,你也可以搭配 [`v-memo`](#v-memo) 的无效条件来缓存部分模板。\n\n- **参考**\n - [数据绑定语法 - 插值](https://cn.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)\n - [v-memo](#v-memo)\n"
1160
1160
  },
1161
1161
  "references": [
1162
1162
  {
package/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export * from '@volar/language-service';
2
2
  export * from '@vue/language-core';
3
3
  export * from './lib/ideFeatures/nameCasing';
4
4
  export * from './lib/types';
5
- import type { ServiceContext, ServiceEnvironment, LanguageServicePlugin } from '@volar/language-service';
5
+ import type { LanguageServicePlugin, ServiceContext, ServiceEnvironment } from '@volar/language-service';
6
6
  import type { VueCompilerOptions } from './lib/types';
7
7
  export declare function getVueLanguageServicePlugins(ts: typeof import('typescript'), getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions, getTsPluginClient?: (context: ServiceContext) => typeof import("@vue/typescript-plugin/lib/client") | undefined, hybridMode?: boolean): LanguageServicePlugin[];
8
8
  export declare function createDefaultGetTsPluginClient(ts: typeof import('typescript'), getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions): (context: ServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined;
package/index.js CHANGED
@@ -30,9 +30,9 @@ const css_1 = require("./lib/plugins/css");
30
30
  const vue_autoinsert_dotvalue_1 = require("./lib/plugins/vue-autoinsert-dotvalue");
31
31
  const vue_autoinsert_parentheses_1 = require("./lib/plugins/vue-autoinsert-parentheses");
32
32
  const vue_autoinsert_space_1 = require("./lib/plugins/vue-autoinsert-space");
33
- const vue_codelens_references_1 = require("./lib/plugins/vue-codelens-references");
34
33
  const vue_directive_comments_1 = require("./lib/plugins/vue-directive-comments");
35
34
  const vue_document_drop_1 = require("./lib/plugins/vue-document-drop");
35
+ const vue_document_links_1 = require("./lib/plugins/vue-document-links");
36
36
  const vue_extract_file_1 = require("./lib/plugins/vue-extract-file");
37
37
  const vue_sfc_1 = require("./lib/plugins/vue-sfc");
38
38
  const vue_template_1 = require("./lib/plugins/vue-template");
@@ -61,7 +61,7 @@ function getVueLanguageServicePlugins(ts, getVueOptions, getTsPluginClient = cre
61
61
  }
62
62
  const languageService = created.provide['typescript/languageService']();
63
63
  const vueOptions = getVueOptions(context.env);
64
- (0, common_1.decorateLanguageServiceForVue)(context.language, languageService, vueOptions, ts, false);
64
+ (0, common_1.decorateLanguageServiceForVue)(context.language, languageService, vueOptions, ts, false, fileName => context.env.typescript.fileNameToUri(fileName));
65
65
  return created;
66
66
  },
67
67
  };
@@ -72,8 +72,8 @@ function getVueLanguageServicePlugins(ts, getVueOptions, getTsPluginClient = cre
72
72
  else {
73
73
  plugins.push((0, syntactic_1.create)(ts), (0, docCommentTemplate_1.create)(ts));
74
74
  }
75
- plugins.push((0, volar_service_typescript_twoslash_queries_1.create)(ts), (0, css_1.create)(), (0, volar_service_pug_beautify_1.create)(), (0, volar_service_json_1.create)(), (0, vue_template_1.create)('html', ts, getVueOptions, getTsPluginClient), (0, vue_template_1.create)('pug', ts, getVueOptions, getTsPluginClient), (0, vue_sfc_1.create)(), (0, vue_twoslash_queries_1.create)(ts, getTsPluginClient), (0, vue_codelens_references_1.create)(), (0, vue_document_drop_1.create)(ts, getTsPluginClient), (0, vue_autoinsert_dotvalue_1.create)(ts, getTsPluginClient), (0, vue_autoinsert_parentheses_1.create)(ts), (0, vue_autoinsert_space_1.create)(), (0, vue_visualize_hidden_callback_param_1.create)(), (0, vue_directive_comments_1.create)(), (0, vue_extract_file_1.create)(ts, getTsPluginClient), (0, vue_toggle_v_bind_codeaction_1.create)(ts), (0, volar_service_emmet_1.create)({
76
- mappedModes: {
75
+ plugins.push((0, volar_service_typescript_twoslash_queries_1.create)(ts), (0, css_1.create)(), (0, volar_service_pug_beautify_1.create)(), (0, volar_service_json_1.create)(), (0, vue_template_1.create)('html', ts, getVueOptions, getTsPluginClient), (0, vue_template_1.create)('pug', ts, getVueOptions, getTsPluginClient), (0, vue_sfc_1.create)(), (0, vue_twoslash_queries_1.create)(ts, getTsPluginClient), (0, vue_document_links_1.create)(), (0, vue_document_drop_1.create)(ts, getVueOptions, getTsPluginClient), (0, vue_autoinsert_dotvalue_1.create)(ts, getTsPluginClient), (0, vue_autoinsert_parentheses_1.create)(ts), (0, vue_autoinsert_space_1.create)(), (0, vue_visualize_hidden_callback_param_1.create)(), (0, vue_directive_comments_1.create)(), (0, vue_extract_file_1.create)(ts, getTsPluginClient), (0, vue_toggle_v_bind_codeaction_1.create)(ts), (0, volar_service_emmet_1.create)({
76
+ mappedLanguages: {
77
77
  'vue': 'html',
78
78
  'postcss': 'scss',
79
79
  },
@@ -1,2 +1,3 @@
1
- import { LanguageServicePlugin, ServiceContext } from '../types';
2
- export declare function create(ts: typeof import('typescript'), getTsPluginClient?: (context: ServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined): LanguageServicePlugin;
1
+ import { VueCompilerOptions } from '@vue/language-core';
2
+ import { LanguageServicePlugin, ServiceContext, ServiceEnvironment } from '../types';
3
+ export declare function create(ts: typeof import('typescript'), getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions, getTsPluginClient?: (context: ServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined): LanguageServicePlugin;
@@ -7,12 +7,13 @@ const path = require("path-browserify");
7
7
  const vue_extract_file_1 = require("../plugins/vue-extract-file");
8
8
  const types_1 = require("../types");
9
9
  const getUserPreferences_1 = require("volar-service-typescript/lib/configs/getUserPreferences");
10
- function create(ts, getTsPluginClient) {
10
+ function create(ts, getVueOptions, getTsPluginClient) {
11
11
  return {
12
12
  name: 'vue-document-drop',
13
13
  create(context) {
14
14
  let casing = types_1.TagNameCasing.Pascal; // TODO
15
15
  const tsPluginClient = getTsPluginClient?.(context);
16
+ const vueCompilerOptions = getVueOptions(context.env);
16
17
  return {
17
18
  async provideDocumentDropEdits(document, _position, dataTransfer) {
18
19
  if (document.languageId !== 'html') {
@@ -31,7 +32,7 @@ function create(ts, getTsPluginClient) {
31
32
  importUri = item.value;
32
33
  }
33
34
  }
34
- if (!importUri?.endsWith('.vue')) {
35
+ if (!importUri || !vueCompilerOptions.extensions.some(ext => importUri.endsWith(ext))) {
35
36
  return;
36
37
  }
37
38
  let baseName = importUri.substring(importUri.lastIndexOf('/') + 1);
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.create = void 0;
4
+ const language_core_1 = require("@vue/language-core");
5
+ const language_core_2 = require("@vue/language-core");
6
+ function create() {
7
+ return {
8
+ name: 'vue-document-links',
9
+ create(context) {
10
+ return {
11
+ provideDocumentLinks(document) {
12
+ const decoded = context.decodeEmbeddedDocumentUri(document.uri);
13
+ const sourceScript = decoded && context.language.scripts.get(decoded[0]);
14
+ const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
15
+ if (sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode && virtualCode?.id === 'template') {
16
+ const result = [];
17
+ const codegen = language_core_2.tsCodegen.get(sourceScript.generated.root.sfc);
18
+ const scopedClasses = codegen?.generatedTemplate()?.scopedClasses ?? [];
19
+ const styleClasses = new Map();
20
+ const option = sourceScript.generated.root.vueCompilerOptions.experimentalResolveStyleCssClasses;
21
+ for (let i = 0; i < sourceScript.generated.root.sfc.styles.length; i++) {
22
+ const style = sourceScript.generated.root.sfc.styles[i];
23
+ if (option === 'always' || (option === 'scoped' && style.scoped)) {
24
+ for (const className of style.classNames) {
25
+ if (!styleClasses.has(className.text.substring(1))) {
26
+ styleClasses.set(className.text.substring(1), []);
27
+ }
28
+ styleClasses.get(className.text.substring(1)).push({
29
+ index: i,
30
+ style,
31
+ classOffset: className.offset,
32
+ });
33
+ }
34
+ }
35
+ }
36
+ for (const { className, offset } of scopedClasses) {
37
+ const styles = styleClasses.get(className);
38
+ if (styles) {
39
+ for (const style of styles) {
40
+ const styleDocumentUri = context.encodeEmbeddedDocumentUri(decoded[0], 'style_' + style.index);
41
+ const styleVirtualCode = sourceScript.generated.embeddedCodes.get('style_' + style.index);
42
+ if (!styleVirtualCode) {
43
+ continue;
44
+ }
45
+ const styleDocument = context.documents.get(styleDocumentUri, styleVirtualCode.languageId, styleVirtualCode.snapshot);
46
+ const start = styleDocument.positionAt(style.classOffset);
47
+ const end = styleDocument.positionAt(style.classOffset + className.length + 1);
48
+ result.push({
49
+ range: {
50
+ start: document.positionAt(offset),
51
+ end: document.positionAt(offset + className.length),
52
+ },
53
+ target: context.encodeEmbeddedDocumentUri(decoded[0], 'style_' + style.index) + `#L${start.line + 1},${start.character + 1}-L${end.line + 1},${end.character + 1}`,
54
+ });
55
+ }
56
+ }
57
+ }
58
+ return result;
59
+ }
60
+ },
61
+ };
62
+ },
63
+ };
64
+ }
65
+ exports.create = create;
66
+ //# sourceMappingURL=vue-document-links.js.map
@@ -7,45 +7,48 @@ const html = require("vscode-html-languageservice");
7
7
  const data_1 = require("./data");
8
8
  let sfcDataProvider;
9
9
  function create() {
10
+ const htmlPlugin = (0, volar_service_html_1.create)({
11
+ documentSelector: ['vue'],
12
+ useDefaultDataProvider: false,
13
+ getCustomData(context) {
14
+ sfcDataProvider ??= html.newHTMLDataProvider('vue', (0, data_1.loadLanguageBlocks)(context.env.locale ?? 'en'));
15
+ return [sfcDataProvider];
16
+ },
17
+ async getFormattingOptions(document, options, context) {
18
+ return await worker(document, context, async (vueCode) => {
19
+ const formatSettings = await context.env.getConfiguration?.('html.format') ?? {};
20
+ const blockTypes = ['template', 'script', 'style'];
21
+ for (const customBlock of vueCode.sfc.customBlocks) {
22
+ blockTypes.push(customBlock.type);
23
+ }
24
+ return {
25
+ ...options,
26
+ ...formatSettings,
27
+ wrapAttributes: await context.env.getConfiguration?.('vue.format.wrapAttributes') ?? 'auto',
28
+ unformatted: '',
29
+ contentUnformatted: blockTypes.join(','),
30
+ endWithNewline: options.insertFinalNewline ? true
31
+ : options.trimFinalNewlines ? false
32
+ : document.getText().endsWith('\n'),
33
+ };
34
+ }) ?? {};
35
+ },
36
+ });
10
37
  return {
38
+ ...htmlPlugin,
11
39
  name: 'vue-sfc',
12
40
  create(context) {
13
- const htmlPlugin = (0, volar_service_html_1.create)({
14
- documentSelector: ['vue'],
15
- useDefaultDataProvider: false,
16
- getCustomData(context) {
17
- sfcDataProvider ??= html.newHTMLDataProvider('vue', (0, data_1.loadLanguageBlocks)(context.env.locale ?? 'en'));
18
- return [sfcDataProvider];
19
- },
20
- async getFormattingOptions(document, options, context) {
21
- return await worker(document, async (vueCode) => {
22
- const formatSettings = await context.env.getConfiguration?.('html.format') ?? {};
23
- const blockTypes = ['template', 'script', 'style'];
24
- for (const customBlock of vueCode.sfc.customBlocks) {
25
- blockTypes.push(customBlock.type);
26
- }
27
- return {
28
- ...options,
29
- ...formatSettings,
30
- wrapAttributes: await context.env.getConfiguration?.('vue.format.wrapAttributes') ?? 'auto',
31
- unformatted: '',
32
- contentUnformatted: blockTypes.join(','),
33
- endWithNewline: options.insertFinalNewline ? true
34
- : options.trimFinalNewlines ? false
35
- : document.getText().endsWith('\n'),
36
- };
37
- }) ?? {};
38
- },
39
- }).create(context);
41
+ const htmlPluginInstance = htmlPlugin.create(context);
40
42
  return {
41
- ...htmlPlugin,
43
+ ...htmlPluginInstance,
42
44
  provide: {
43
45
  'vue/vueFile': document => {
44
- return worker(document, vueFile => {
46
+ return worker(document, context, vueFile => {
45
47
  return vueFile;
46
48
  });
47
49
  },
48
50
  },
51
+ provideDocumentLinks: undefined,
49
52
  async resolveEmbeddedCodeFormattingOptions(sourceScript, virtualCode, options) {
50
53
  if (sourceScript.generated?.root instanceof vue.VueVirtualCode) {
51
54
  if (virtualCode.id === 'scriptFormat' || virtualCode.id === 'scriptSetupFormat') {
@@ -66,9 +69,8 @@ function create() {
66
69
  }
67
70
  return options;
68
71
  },
69
- provideDocumentLinks: undefined,
70
72
  provideDocumentSymbols(document) {
71
- return worker(document, vueSourceFile => {
73
+ return worker(document, context, vueSourceFile => {
72
74
  const result = [];
73
75
  const descriptor = vueSourceFile.sfc;
74
76
  if (descriptor.template) {
@@ -152,16 +154,16 @@ function create() {
152
154
  });
153
155
  },
154
156
  };
155
- function worker(document, callback) {
156
- const decoded = context.decodeEmbeddedDocumentUri(document.uri);
157
- const sourceScript = decoded && context.language.scripts.get(decoded[0]);
158
- const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
159
- if (virtualCode instanceof vue.VueVirtualCode) {
160
- return callback(virtualCode);
161
- }
162
- }
163
157
  },
164
158
  };
159
+ function worker(document, context, callback) {
160
+ const decoded = context.decodeEmbeddedDocumentUri(document.uri);
161
+ const sourceScript = decoded && context.language.scripts.get(decoded[0]);
162
+ const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
163
+ if (virtualCode instanceof vue.VueVirtualCode) {
164
+ return callback(virtualCode);
165
+ }
166
+ }
165
167
  }
166
168
  exports.create = create;
167
169
  //# sourceMappingURL=vue-sfc.js.map
@@ -26,16 +26,26 @@ function create(mode, ts, getVueOptions, getTsPluginClient) {
26
26
  },
27
27
  };
28
28
  };
29
- const baseServicePlugin = mode === 'pug' ? volar_service_pug_1.create : volar_service_html_1.create;
30
- const baseService = baseServicePlugin({
31
- getCustomData() {
32
- return [
33
- ...customData,
34
- ...extraCustomData,
35
- ];
36
- },
37
- onDidChangeCustomData,
38
- });
29
+ const baseService = mode === 'pug'
30
+ ? (0, volar_service_pug_1.create)({
31
+ getCustomData() {
32
+ return [
33
+ ...customData,
34
+ ...extraCustomData,
35
+ ];
36
+ },
37
+ onDidChangeCustomData,
38
+ })
39
+ : (0, volar_service_html_1.create)({
40
+ documentSelector: ['html', 'markdown'],
41
+ getCustomData() {
42
+ return [
43
+ ...customData,
44
+ ...extraCustomData,
45
+ ];
46
+ },
47
+ onDidChangeCustomData,
48
+ });
39
49
  return {
40
50
  name: `vue-template (${mode})`,
41
51
  triggerCharacters: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/language-service",
3
- "version": "2.0.16",
3
+ "version": "2.0.18",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "data",
@@ -16,23 +16,23 @@
16
16
  "update-html-data": "node ./scripts/update-html-data.js"
17
17
  },
18
18
  "dependencies": {
19
- "@volar/language-core": "~2.2.0",
20
- "@volar/language-service": "~2.2.0",
21
- "@volar/typescript": "~2.2.0",
19
+ "@volar/language-core": "~2.2.4",
20
+ "@volar/language-service": "~2.2.4",
21
+ "@volar/typescript": "~2.2.4",
22
22
  "@vue/compiler-dom": "^3.4.0",
23
- "@vue/language-core": "2.0.16",
23
+ "@vue/language-core": "2.0.18",
24
24
  "@vue/shared": "^3.4.0",
25
- "@vue/typescript-plugin": "2.0.16",
25
+ "@vue/typescript-plugin": "2.0.18",
26
26
  "computeds": "^0.0.1",
27
27
  "path-browserify": "^1.0.1",
28
- "volar-service-css": "0.0.42",
29
- "volar-service-emmet": "0.0.42",
30
- "volar-service-html": "0.0.42",
31
- "volar-service-json": "0.0.42",
32
- "volar-service-pug": "0.0.42",
33
- "volar-service-pug-beautify": "0.0.42",
34
- "volar-service-typescript": "0.0.42",
35
- "volar-service-typescript-twoslash-queries": "0.0.42",
28
+ "volar-service-css": "0.0.45",
29
+ "volar-service-emmet": "0.0.45",
30
+ "volar-service-html": "0.0.45",
31
+ "volar-service-json": "0.0.45",
32
+ "volar-service-pug": "0.0.45",
33
+ "volar-service-pug-beautify": "0.0.45",
34
+ "volar-service-typescript": "0.0.45",
35
+ "volar-service-typescript-twoslash-queries": "0.0.45",
36
36
  "vscode-html-languageservice": "npm:@johnsoncodehk/vscode-html-languageservice@5.2.0-34a5462",
37
37
  "vscode-languageserver-textdocument": "^1.0.11",
38
38
  "vscode-uri": "^3.0.8"
@@ -40,8 +40,8 @@
40
40
  "devDependencies": {
41
41
  "@types/node": "latest",
42
42
  "@types/path-browserify": "latest",
43
- "@volar/kit": "~2.2.0",
43
+ "@volar/kit": "~2.2.4",
44
44
  "vscode-languageserver-protocol": "^3.17.5"
45
45
  },
46
- "gitHead": "95b78c38cbf75481ebb59e11956b592346f01d92"
46
+ "gitHead": "7aac2805f03b17e4c624335f509d502002bb75a8"
47
47
  }
@@ -1,42 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.create = void 0;
4
- const language_core_1 = require("@vue/language-core");
5
- function create() {
6
- return {
7
- name: 'vue-codelens-references',
8
- create(context) {
9
- return {
10
- provideReferencesCodeLensRanges(document) {
11
- return worker(document.uri, virtualCode => {
12
- const result = [];
13
- for (const map of context.documents.getMaps(virtualCode) ?? []) {
14
- for (const mapping of map.map.mappings) {
15
- if (!mapping.data.__referencesCodeLens) {
16
- continue;
17
- }
18
- result.push({
19
- start: document.positionAt(mapping.generatedOffsets[0]),
20
- end: document.positionAt(mapping.generatedOffsets[mapping.generatedOffsets.length - 1]
21
- + mapping.lengths[mapping.lengths.length - 1]),
22
- });
23
- }
24
- }
25
- return result;
26
- });
27
- },
28
- };
29
- function worker(uri, callback) {
30
- const decoded = context.decodeEmbeddedDocumentUri(uri);
31
- const sourceScript = decoded && context.language.scripts.get(decoded[0]);
32
- const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
33
- if (!virtualCode || !(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode) || !sourceScript) {
34
- return;
35
- }
36
- return callback(virtualCode, sourceScript);
37
- }
38
- },
39
- };
40
- }
41
- exports.create = create;
42
- //# sourceMappingURL=vue-codelens-references.js.map