@vue/language-service 3.1.3 → 3.1.5
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.
- package/data/template/cs.json +1 -1
- package/data/template/en.json +1 -1
- package/data/template/ja.json +1 -1
- package/data/template/ru.json +1 -1
- package/index.js +1 -1
- package/lib/plugins/css.d.ts +1 -1
- package/lib/plugins/css.js +14 -7
- package/lib/plugins/vue-template.d.ts +1 -1
- package/lib/plugins/vue-template.js +45 -1
- package/lib/utils.d.ts +1 -0
- package/lib/utils.js +15 -0
- package/package.json +11 -11
package/data/template/cs.json
CHANGED
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"name": "v-text",
|
|
80
80
|
"description": {
|
|
81
81
|
"kind": "markdown",
|
|
82
|
-
"value": "Aktualizuje textový obsah elementu.\n\n- **Očekává:** `string`\n\n- **Podrobnosti**\n\n `v-text` funguje tak, že elementu nastavuje vlastnost [textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent), což přepíše jakýkoli existující obsah uvnitř elementu. Pokud potřebujete aktualizovat část `textContent`, měli byste místo toho použít [„mustache“ interpolaci](https://cs.vuejs.org/guide/essentials/template-syntax.html#text-interpolation).\n\n- **Příklad**\n\n ```html\n <span v-text=\"msg\"></span>\n <!-- stejné jako -->\n <span>{{msg}}</span>\n ```\n\n- **Viz také:** [Syntaxe šablon – Interpolace textu](https://cs.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)"
|
|
82
|
+
"value": "Aktualizuje textový obsah elementu.\n\n- **Očekává:** `string`\n\n- **Podrobnosti**\n\n `v-text` funguje tak, že elementu nastavuje vlastnost [textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent), což přepíše jakýkoli existující obsah uvnitř elementu. Pokud potřebujete aktualizovat jen část `textContent`, měli byste místo toho použít [„mustache“ interpolaci](https://cs.vuejs.org/guide/essentials/template-syntax.html#text-interpolation) (např. tímto způsobem: <span v-pre>`<span>Toto zachovat a aktualizovat pouze {{dynamickaCast}}</span>`</span>).\n\n- **Příklad**\n\n ```html\n <span v-text=\"msg\"></span>\n <!-- stejné jako -->\n <span>{{msg}}</span>\n ```\n\n- **Viz také:** [Syntaxe šablon – Interpolace textu](https://cs.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)"
|
|
83
83
|
},
|
|
84
84
|
"references": "api/built-in-directives.html#v-text"
|
|
85
85
|
},
|
package/data/template/en.json
CHANGED
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"name": "v-text",
|
|
80
80
|
"description": {
|
|
81
81
|
"kind": "markdown",
|
|
82
|
-
"value": "Update the element's text content.\n\n- **Expects:** `string`\n\n- **Details**\n\n `v-text` works by setting the element's [textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent) property, so it will overwrite any existing content inside the element. If you need to update
|
|
82
|
+
"value": "Update the element's text content.\n\n- **Expects:** `string`\n\n- **Details**\n\n `v-text` works by setting the element's [textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent) property, so it will overwrite any existing content inside the element. If you need to update only part of the `textContent`, you should use [mustache interpolations](https://vuejs.org/guide/essentials/template-syntax.html#text-interpolation) instead (ie. <span v-pre>`<span>Keep this but update a {{dynamicPortion}}</span>`</span>).\n\n- **Example**\n\n ```html\n <span v-text=\"msg\"></span>\n <!-- same as -->\n <span>{{msg}}</span>\n ```\n\n- **See also** [Template Syntax - Text Interpolation](https://vuejs.org/guide/essentials/template-syntax.html#text-interpolation)"
|
|
83
83
|
},
|
|
84
84
|
"references": "api/built-in-directives.html#v-text"
|
|
85
85
|
},
|
package/data/template/ja.json
CHANGED
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"name": "v-text",
|
|
80
80
|
"description": {
|
|
81
81
|
"kind": "markdown",
|
|
82
|
-
"value": "要素のテキスト内容を更新します。\n\n- **期待する値:** `string`\n\n- **詳細**\n\n `v-text` は要素の [textContent](https://developer.mozilla.org/ja/docs/Web/API/Node/textContent) プロパティをセットする動作なので、要素内の既存のコンテンツはすべて上書きされます。`textContent`
|
|
82
|
+
"value": "要素のテキスト内容を更新します。\n\n- **期待する値:** `string`\n\n- **詳細**\n\n `v-text` は要素の [textContent](https://developer.mozilla.org/ja/docs/Web/API/Node/textContent) プロパティをセットする動作なので、要素内の既存のコンテンツはすべて上書きされます。`textContent` の一部だけを更新する必要がある場合は、代わりに[マスタッシュ展開](https://ja.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)を使用します (例: <span v-pre>`<span>これは保持して {{dynamicPortion}} を更新</span>`</span>)。\n\n- **例**\n\n ```html\n <span v-text=\"msg\"></span>\n <!-- same as -->\n <span>{{msg}}</span>\n ```\n\n- **参照** [テンプレート構文 - テキスト展開](https://ja.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)"
|
|
83
83
|
},
|
|
84
84
|
"references": "api/built-in-directives.html#v-text"
|
|
85
85
|
},
|
package/data/template/ru.json
CHANGED
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"name": "v-text",
|
|
80
80
|
"description": {
|
|
81
81
|
"kind": "markdown",
|
|
82
|
-
"value": "Обновление текстового содержимого элемента.\n\n- **Ожидает:** `string`\n\n- **Подробности**\n\n `v-text` работает путём установки свойства [textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent) элемента, поэтому он будет перезаписывать всё существующее содержимое внутри элемента. Если необходимо обновить часть `textContent`, то вместо этого следует использовать [текстовые интерполяции](https://ru.vuejs.org/guide/essentials/template-syntax.html#text-interpolation).\n\n- **Пример**\n\n ```html\n <span v-text=\"msg\"></span>\n <!-- тоже самое -->\n <span>{{msg}}</span>\n ```\n\n- **См. также** [Синтаксис шаблонов - Текстовые интерполяции](https://ru.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)"
|
|
82
|
+
"value": "Обновление текстового содержимого элемента.\n\n- **Ожидает:** `string`\n\n- **Подробности**\n\n `v-text` работает путём установки свойства [textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent) элемента, поэтому он будет перезаписывать всё существующее содержимое внутри элемента. Если необходимо обновить только часть `textContent`, то вместо этого следует использовать [текстовые интерполяции](https://ru.vuejs.org/guide/essentials/template-syntax.html#text-interpolation) (то есть <span v-pre>`<span>Оставьте это, но обновите {{dynamicPortion}}</span>`</span>).\n\n- **Пример**\n\n ```html\n <span v-text=\"msg\"></span>\n <!-- тоже самое -->\n <span>{{msg}}</span>\n ```\n\n- **См. также** [Синтаксис шаблонов - Текстовые интерполяции](https://ru.vuejs.org/guide/essentials/template-syntax.html#text-interpolation)"
|
|
83
83
|
},
|
|
84
84
|
"references": "api/built-in-directives.html#v-text"
|
|
85
85
|
},
|
package/index.js
CHANGED
|
@@ -50,7 +50,6 @@ function createVueLanguageServicePlugins(ts, client = new Proxy({}, {
|
|
|
50
50
|
},
|
|
51
51
|
})) {
|
|
52
52
|
return [
|
|
53
|
-
(0, css_1.create)(),
|
|
54
53
|
(0, volar_service_json_1.create)(),
|
|
55
54
|
(0, volar_service_pug_beautify_1.create)(),
|
|
56
55
|
(0, vue_autoinsert_space_1.create)(),
|
|
@@ -72,6 +71,7 @@ function createVueLanguageServicePlugins(ts, client = new Proxy({}, {
|
|
|
72
71
|
(0, syntactic_1.create)(ts),
|
|
73
72
|
(0, vue_inlayhints_1.create)(ts),
|
|
74
73
|
// type aware plugins
|
|
74
|
+
(0, css_1.create)(client),
|
|
75
75
|
(0, typescript_semantic_tokens_1.create)(client),
|
|
76
76
|
(0, vue_autoinsert_dotvalue_1.create)(ts, client),
|
|
77
77
|
(0, vue_component_semantic_tokens_1.create)(client),
|
package/lib/plugins/css.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { LanguageServicePlugin } from '@volar/language-service';
|
|
2
|
-
export declare function create(): LanguageServicePlugin;
|
|
2
|
+
export declare function create({ resolveModuleName }: import('@vue/typescript-plugin/lib/requests').Requests): LanguageServicePlugin;
|
package/lib/plugins/css.js
CHANGED
|
@@ -4,17 +4,24 @@ exports.create = create;
|
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
5
|
const volar_service_css_1 = require("volar-service-css");
|
|
6
6
|
const utils_1 = require("../utils");
|
|
7
|
-
function create() {
|
|
8
|
-
const
|
|
7
|
+
function create({ resolveModuleName }) {
|
|
8
|
+
const baseService = (0, volar_service_css_1.create)({
|
|
9
|
+
getDocumentContext(context) {
|
|
10
|
+
return {
|
|
11
|
+
resolveReference: (0, utils_1.createReferenceResolver)(context, volar_service_css_1.resolveReference, resolveModuleName),
|
|
12
|
+
};
|
|
13
|
+
},
|
|
14
|
+
scssDocumentSelector: ['scss', 'postcss'],
|
|
15
|
+
});
|
|
9
16
|
return {
|
|
10
|
-
...
|
|
17
|
+
...baseService,
|
|
11
18
|
create(context) {
|
|
12
|
-
const
|
|
13
|
-
const { 'css/languageService': getCssLs, 'css/stylesheet': getStylesheet, } =
|
|
19
|
+
const baseServiceInstance = baseService.create(context);
|
|
20
|
+
const { 'css/languageService': getCssLs, 'css/stylesheet': getStylesheet, } = baseServiceInstance.provide;
|
|
14
21
|
return {
|
|
15
|
-
...
|
|
22
|
+
...baseServiceInstance,
|
|
16
23
|
async provideDiagnostics(document, token) {
|
|
17
|
-
let diagnostics = await
|
|
24
|
+
let diagnostics = await baseServiceInstance.provideDiagnostics?.(document, token) ?? [];
|
|
18
25
|
if (document.languageId === 'postcss') {
|
|
19
26
|
diagnostics = diagnostics.filter(diag => diag.code !== 'css-semicolonexpected'
|
|
20
27
|
&& diag.code !== 'css-ruleorselectorexpected'
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { LanguageServicePlugin } from '@volar/language-service';
|
|
2
|
-
export declare function create(languageId: 'html' | 'jade', { getComponentNames,
|
|
2
|
+
export declare function create(languageId: 'html' | 'jade', { getComponentNames, getComponentProps, getComponentEvents, getComponentDirectives, getComponentSlots, getElementAttrs, resolveModuleName, }: import('@vue/typescript-plugin/lib/requests').Requests): LanguageServicePlugin;
|
|
@@ -25,7 +25,7 @@ const specialProps = new Set([
|
|
|
25
25
|
]);
|
|
26
26
|
let builtInData;
|
|
27
27
|
let modelData;
|
|
28
|
-
function create(languageId, { getComponentNames,
|
|
28
|
+
function create(languageId, { getComponentNames, getComponentProps, getComponentEvents, getComponentDirectives, getComponentSlots, getElementAttrs, resolveModuleName, }) {
|
|
29
29
|
let customData = [];
|
|
30
30
|
let extraCustomData = [];
|
|
31
31
|
const onDidChangeCustomDataListeners = new Set();
|
|
@@ -51,6 +51,11 @@ function create(languageId, { getComponentNames, getElementAttrs, getComponentPr
|
|
|
51
51
|
: (0, volar_service_html_1.create)({
|
|
52
52
|
documentSelector: ['html', 'markdown'],
|
|
53
53
|
useDefaultDataProvider: false,
|
|
54
|
+
getDocumentContext(context) {
|
|
55
|
+
return {
|
|
56
|
+
resolveReference: (0, utils_1.createReferenceResolver)(context, volar_service_html_1.resolveReference, resolveModuleName),
|
|
57
|
+
};
|
|
58
|
+
},
|
|
54
59
|
getCustomData() {
|
|
55
60
|
return [
|
|
56
61
|
...customData,
|
|
@@ -74,6 +79,29 @@ function create(languageId, { getComponentNames, getElementAttrs, getComponentPr
|
|
|
74
79
|
},
|
|
75
80
|
create(context) {
|
|
76
81
|
const baseServiceInstance = baseService.create(context);
|
|
82
|
+
if (baseServiceInstance.provide['html/languageService']) {
|
|
83
|
+
const htmlService = baseServiceInstance.provide['html/languageService']();
|
|
84
|
+
const parseHTMLDocument = htmlService.parseHTMLDocument.bind(htmlService);
|
|
85
|
+
htmlService.parseHTMLDocument = document => {
|
|
86
|
+
const info = (0, utils_1.resolveEmbeddedCode)(context, document.uri);
|
|
87
|
+
if (info?.code.id === 'template') {
|
|
88
|
+
const templateAst = info.root.sfc.template?.ast;
|
|
89
|
+
if (templateAst) {
|
|
90
|
+
let text = document.getText();
|
|
91
|
+
for (const node of (0, language_core_1.forEachInterpolationNode)(templateAst)) {
|
|
92
|
+
text = text.substring(0, node.loc.start.offset)
|
|
93
|
+
+ ' '.repeat(node.loc.end.offset - node.loc.start.offset)
|
|
94
|
+
+ text.substring(node.loc.end.offset);
|
|
95
|
+
}
|
|
96
|
+
return parseHTMLDocument({
|
|
97
|
+
...document,
|
|
98
|
+
getText: () => text,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return parseHTMLDocument(document);
|
|
103
|
+
};
|
|
104
|
+
}
|
|
77
105
|
builtInData ??= (0, data_1.loadTemplateData)(context.env.locale ?? 'en');
|
|
78
106
|
modelData ??= (0, data_1.loadModelModifiersData)(context.env.locale ?? 'en');
|
|
79
107
|
// https://vuejs.org/api/built-in-directives.html#v-on
|
|
@@ -264,6 +292,22 @@ function create(languageId, { getComponentNames, getElementAttrs, getComponentPr
|
|
|
264
292
|
}
|
|
265
293
|
return baseServiceInstance.provideHover?.(document, position, token);
|
|
266
294
|
},
|
|
295
|
+
async provideDocumentLinks(document, token) {
|
|
296
|
+
if (document.languageId !== languageId) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const info = (0, utils_1.resolveEmbeddedCode)(context, document.uri);
|
|
300
|
+
if (info?.code.id !== 'template') {
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
const documentLinks = await baseServiceInstance.provideDocumentLinks?.(document, token) ?? [];
|
|
304
|
+
for (const link of documentLinks) {
|
|
305
|
+
if (link.target && (0, shared_1.isPromise)(link.target)) {
|
|
306
|
+
link.target = await link.target;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return documentLinks;
|
|
310
|
+
},
|
|
267
311
|
};
|
|
268
312
|
async function runWithVueData(sourceDocumentUri, root, fn) {
|
|
269
313
|
// #4298: Precompute HTMLDocument before provideHtmlData to avoid parseHTMLDocument requesting component names from tsserver
|
package/lib/utils.d.ts
CHANGED
|
@@ -6,3 +6,4 @@ export declare function resolveEmbeddedCode(context: LanguageServiceContext, uri
|
|
|
6
6
|
code: import("@volar/language-service").VirtualCode;
|
|
7
7
|
root: VueVirtualCode;
|
|
8
8
|
} | undefined;
|
|
9
|
+
export declare function createReferenceResolver(context: LanguageServiceContext, resolveReference: typeof import('volar-service-html').resolveReference, resolveModuleName: import('@vue/typescript-plugin/lib/requests').Requests['resolveModuleName']): (ref: string, base: string) => Promise<string>;
|
package/lib/utils.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resolveEmbeddedCode = resolveEmbeddedCode;
|
|
4
|
+
exports.createReferenceResolver = createReferenceResolver;
|
|
4
5
|
const vscode_uri_1 = require("vscode-uri");
|
|
5
6
|
function resolveEmbeddedCode(context, uriStr) {
|
|
6
7
|
const uri = vscode_uri_1.URI.parse(uriStr);
|
|
@@ -16,4 +17,18 @@ function resolveEmbeddedCode(context, uriStr) {
|
|
|
16
17
|
root: sourceScript.generated.root,
|
|
17
18
|
};
|
|
18
19
|
}
|
|
20
|
+
function createReferenceResolver(context, resolveReference, resolveModuleName) {
|
|
21
|
+
return async (ref, base) => {
|
|
22
|
+
let uri = vscode_uri_1.URI.parse(base);
|
|
23
|
+
const decoded = context.decodeEmbeddedDocumentUri(uri);
|
|
24
|
+
if (decoded) {
|
|
25
|
+
uri = decoded[0];
|
|
26
|
+
}
|
|
27
|
+
let moduleName;
|
|
28
|
+
if (!ref.startsWith('./') && !ref.startsWith('../')) {
|
|
29
|
+
moduleName = await resolveModuleName(uri.fsPath, ref);
|
|
30
|
+
}
|
|
31
|
+
return moduleName ?? resolveReference(ref, uri, context.env.workspaceFolders);
|
|
32
|
+
};
|
|
33
|
+
}
|
|
19
34
|
//# sourceMappingURL=utils.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vue/language-service",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"files": [
|
|
6
6
|
"data",
|
|
@@ -18,16 +18,16 @@
|
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@volar/language-service": "2.4.23",
|
|
21
|
-
"@vue/language-core": "3.1.
|
|
21
|
+
"@vue/language-core": "3.1.5",
|
|
22
22
|
"@vue/shared": "^3.5.0",
|
|
23
23
|
"path-browserify": "^1.0.1",
|
|
24
|
-
"volar-service-css": "0.0.
|
|
25
|
-
"volar-service-emmet": "0.0.
|
|
26
|
-
"volar-service-html": "0.0.
|
|
27
|
-
"volar-service-json": "0.0.
|
|
28
|
-
"volar-service-pug": "0.0.
|
|
29
|
-
"volar-service-pug-beautify": "0.0.
|
|
30
|
-
"volar-service-typescript": "0.0.
|
|
24
|
+
"volar-service-css": "0.0.67",
|
|
25
|
+
"volar-service-emmet": "0.0.67",
|
|
26
|
+
"volar-service-html": "0.0.67",
|
|
27
|
+
"volar-service-json": "0.0.67",
|
|
28
|
+
"volar-service-pug": "0.0.67",
|
|
29
|
+
"volar-service-pug-beautify": "0.0.67",
|
|
30
|
+
"volar-service-typescript": "0.0.67",
|
|
31
31
|
"vscode-html-languageservice": "^5.2.0",
|
|
32
32
|
"vscode-uri": "^3.0.8"
|
|
33
33
|
},
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"@volar/kit": "2.4.23",
|
|
38
38
|
"@volar/typescript": "2.4.23",
|
|
39
39
|
"@vue/compiler-dom": "^3.5.0",
|
|
40
|
-
"@vue/typescript-plugin": "3.1.
|
|
40
|
+
"@vue/typescript-plugin": "3.1.5",
|
|
41
41
|
"vscode-css-languageservice": "^6.3.1"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "d124a88fbf169e793c39ae4248da2092098de92d"
|
|
44
44
|
}
|