@vue/language-service 2.0.18 → 2.0.20
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/language-blocks/cs.json +69 -1
- package/data/language-blocks/en.json +69 -1
- package/data/language-blocks/fr.json +69 -1
- package/data/language-blocks/it.json +68 -0
- package/data/language-blocks/ja.json +69 -1
- package/data/language-blocks/ko.json +70 -2
- package/data/language-blocks/pt.json +68 -0
- package/data/language-blocks/ru.json +69 -1
- package/data/language-blocks/zh-cn.json +69 -1
- package/data/language-blocks/zh-hk.json +1102 -0
- package/data/model-modifiers/cs.json +12 -0
- package/data/model-modifiers/en.json +12 -0
- package/data/model-modifiers/fr.json +12 -0
- package/data/model-modifiers/it.json +12 -0
- package/data/model-modifiers/ja.json +12 -0
- package/data/model-modifiers/ko.json +12 -0
- package/data/model-modifiers/pt.json +12 -0
- package/data/model-modifiers/ru.json +12 -0
- package/data/model-modifiers/zh-cn.json +12 -0
- package/data/model-modifiers/zh-hk.json +188 -0
- package/data/template/cs.json +104 -0
- package/data/template/en.json +104 -0
- package/data/template/fr.json +104 -0
- package/data/template/it.json +104 -0
- package/data/template/ja.json +104 -0
- package/data/template/ko.json +105 -1
- package/data/template/pt.json +104 -0
- package/data/template/ru.json +104 -0
- package/data/template/zh-cn.json +104 -0
- package/data/template/zh-hk.json +1602 -0
- package/index.d.ts +3 -3
- package/index.js +8 -9
- package/lib/ideFeatures/nameCasing.d.ts +6 -5
- package/lib/ideFeatures/nameCasing.js +2 -2
- package/lib/plugins/css.js +2 -2
- package/lib/plugins/data.js +9 -0
- package/lib/plugins/vue-autoinsert-dotvalue.d.ts +2 -2
- package/lib/plugins/vue-autoinsert-dotvalue.js +17 -7
- package/lib/plugins/vue-autoinsert-space.js +7 -1
- package/lib/plugins/vue-codelens-references.d.ts +2 -0
- package/lib/plugins/vue-codelens-references.js +42 -0
- package/lib/plugins/vue-directive-comments.js +5 -1
- package/lib/plugins/vue-document-drop.d.ts +2 -2
- package/lib/plugins/vue-document-drop.js +12 -6
- package/lib/plugins/vue-document-links.js +6 -3
- package/lib/plugins/vue-extract-file.d.ts +2 -2
- package/lib/plugins/vue-extract-file.js +11 -4
- package/lib/plugins/vue-sfc.js +4 -3
- package/lib/plugins/vue-template.d.ts +2 -2
- package/lib/plugins/vue-template.js +155 -132
- package/lib/plugins/vue-toggle-v-bind-codeaction.js +7 -1
- package/lib/plugins/vue-twoslash-queries.d.ts +2 -2
- package/lib/plugins/vue-twoslash-queries.js +6 -2
- package/lib/plugins/vue-visualize-hidden-callback-param.js +5 -1
- package/package.json +16 -16
- package/scripts/update-html-data.js +6 -0
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 { LanguageServicePlugin,
|
|
5
|
+
import type { LanguageServicePlugin, LanguageServiceContext, LanguageServiceEnvironment } from '@volar/language-service';
|
|
6
6
|
import type { VueCompilerOptions } from './lib/types';
|
|
7
|
-
export declare function getVueLanguageServicePlugins(ts: typeof import('typescript'), getVueOptions: (env:
|
|
8
|
-
export declare function createDefaultGetTsPluginClient(ts: typeof import('typescript')
|
|
7
|
+
export declare function getVueLanguageServicePlugins(ts: typeof import('typescript'), getVueOptions: (env: LanguageServiceEnvironment) => VueCompilerOptions, getTsPluginClient?: (context: LanguageServiceContext) => typeof import("@vue/typescript-plugin/lib/client") | undefined, hybridMode?: boolean): LanguageServicePlugin[];
|
|
8
|
+
export declare function createDefaultGetTsPluginClient(ts: typeof import('typescript')): (context: LanguageServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined;
|
package/index.js
CHANGED
|
@@ -28,7 +28,6 @@ const docCommentTemplate_1 = require("volar-service-typescript/lib/plugins/docCo
|
|
|
28
28
|
const syntactic_1 = require("volar-service-typescript/lib/plugins/syntactic");
|
|
29
29
|
const css_1 = require("./lib/plugins/css");
|
|
30
30
|
const vue_autoinsert_dotvalue_1 = require("./lib/plugins/vue-autoinsert-dotvalue");
|
|
31
|
-
const vue_autoinsert_parentheses_1 = require("./lib/plugins/vue-autoinsert-parentheses");
|
|
32
31
|
const vue_autoinsert_space_1 = require("./lib/plugins/vue-autoinsert-space");
|
|
33
32
|
const vue_directive_comments_1 = require("./lib/plugins/vue-directive-comments");
|
|
34
33
|
const vue_document_drop_1 = require("./lib/plugins/vue-document-drop");
|
|
@@ -45,7 +44,8 @@ const componentInfos_1 = require("@vue/typescript-plugin/lib/requests/componentI
|
|
|
45
44
|
const getImportPathForFile_1 = require("@vue/typescript-plugin/lib/requests/getImportPathForFile");
|
|
46
45
|
const getPropertiesAtLocation_1 = require("@vue/typescript-plugin/lib/requests/getPropertiesAtLocation");
|
|
47
46
|
const getQuickInfoAtPosition_1 = require("@vue/typescript-plugin/lib/requests/getQuickInfoAtPosition");
|
|
48
|
-
|
|
47
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
48
|
+
function getVueLanguageServicePlugins(ts, getVueOptions, getTsPluginClient = createDefaultGetTsPluginClient(ts), hybridMode = false) {
|
|
49
49
|
const plugins = [];
|
|
50
50
|
if (!hybridMode) {
|
|
51
51
|
plugins.push(...(0, volar_service_typescript_1.create)(ts));
|
|
@@ -54,14 +54,14 @@ function getVueLanguageServicePlugins(ts, getVueOptions, getTsPluginClient = cre
|
|
|
54
54
|
if (plugin.name === 'typescript-semantic') {
|
|
55
55
|
plugins[i] = {
|
|
56
56
|
...plugin,
|
|
57
|
-
create(context) {
|
|
58
|
-
const created = plugin.create(context);
|
|
57
|
+
create(context, api) {
|
|
58
|
+
const created = plugin.create(context, api);
|
|
59
59
|
if (!context.language.typescript) {
|
|
60
60
|
return created;
|
|
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, fileName => context.
|
|
64
|
+
(0, common_1.decorateLanguageServiceForVue)(context.language, languageService, vueOptions, ts, false, fileName => context.language.typescript?.asScriptId(fileName) ?? vscode_uri_1.URI.file(fileName));
|
|
65
65
|
return created;
|
|
66
66
|
},
|
|
67
67
|
};
|
|
@@ -72,7 +72,7 @@ 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_document_links_1.create)(), (0, vue_document_drop_1.create)(ts, getVueOptions, getTsPluginClient), (0, vue_autoinsert_dotvalue_1.create)(ts, getTsPluginClient), (0,
|
|
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_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
76
|
mappedLanguages: {
|
|
77
77
|
'vue': 'html',
|
|
78
78
|
'postcss': 'scss',
|
|
@@ -81,7 +81,7 @@ function getVueLanguageServicePlugins(ts, getVueOptions, getTsPluginClient = cre
|
|
|
81
81
|
return plugins;
|
|
82
82
|
}
|
|
83
83
|
exports.getVueLanguageServicePlugins = getVueLanguageServicePlugins;
|
|
84
|
-
function createDefaultGetTsPluginClient(ts
|
|
84
|
+
function createDefaultGetTsPluginClient(ts) {
|
|
85
85
|
return context => {
|
|
86
86
|
if (!context.language.typescript) {
|
|
87
87
|
return;
|
|
@@ -95,9 +95,8 @@ function createDefaultGetTsPluginClient(ts, getVueOptions) {
|
|
|
95
95
|
language: context.language,
|
|
96
96
|
languageService,
|
|
97
97
|
languageServiceHost: context.language.typescript.languageServiceHost,
|
|
98
|
-
vueOptions: getVueOptions(context.env),
|
|
99
98
|
isTsPlugin: false,
|
|
100
|
-
getFileId: context.
|
|
99
|
+
getFileId: context.language.typescript.asScriptId,
|
|
101
100
|
};
|
|
102
101
|
return {
|
|
103
102
|
async collectExtractProps(...args) {
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LanguageServiceContext } from '@volar/language-service';
|
|
2
2
|
import type * as vscode from 'vscode-languageserver-protocol';
|
|
3
3
|
import { AttrNameCasing, TagNameCasing } from '../types';
|
|
4
|
-
|
|
5
|
-
export declare function
|
|
6
|
-
export declare function
|
|
4
|
+
import type { URI } from 'vscode-uri';
|
|
5
|
+
export declare function convertTagName(context: LanguageServiceContext, uri: URI, casing: TagNameCasing, tsPluginClient: typeof import('@vue/typescript-plugin/lib/client') | undefined): Promise<vscode.TextEdit[] | undefined>;
|
|
6
|
+
export declare function convertAttrName(context: LanguageServiceContext, uri: URI, casing: AttrNameCasing, tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client')): Promise<vscode.TextEdit[] | undefined>;
|
|
7
|
+
export declare function getNameCasing(context: LanguageServiceContext, uri: URI): Promise<{
|
|
7
8
|
tag: TagNameCasing;
|
|
8
9
|
attr: AttrNameCasing;
|
|
9
10
|
}>;
|
|
10
|
-
export declare function detect(context:
|
|
11
|
+
export declare function detect(context: LanguageServiceContext, uri: URI): Promise<{
|
|
11
12
|
tag: TagNameCasing[];
|
|
12
13
|
attr: AttrNameCasing[];
|
|
13
14
|
}>;
|
|
@@ -88,8 +88,8 @@ exports.convertAttrName = convertAttrName;
|
|
|
88
88
|
async function getNameCasing(context, uri) {
|
|
89
89
|
const detected = await detect(context, uri);
|
|
90
90
|
const [attr, tag] = await Promise.all([
|
|
91
|
-
context.env.getConfiguration?.('vue.complete.casing.props', uri),
|
|
92
|
-
context.env.getConfiguration?.('vue.complete.casing.tags', uri),
|
|
91
|
+
context.env.getConfiguration?.('vue.complete.casing.props', uri.toString()),
|
|
92
|
+
context.env.getConfiguration?.('vue.complete.casing.tags', uri.toString()),
|
|
93
93
|
]);
|
|
94
94
|
const tagNameCasing = detected.tag.length === 1 && (tag === 'autoPascal' || tag === 'autoKebab') ? detected.tag[0] : (tag === 'autoKebab' || tag === 'kebab') ? types_1.TagNameCasing.Kebab : types_1.TagNameCasing.Pascal;
|
|
95
95
|
const attrNameCasing = detected.attr.length === 1 && (attr === 'autoCamel' || attr === 'autoKebab') ? detected.attr[0] : (attr === 'autoCamel' || attr === 'camel') ? types_1.AttrNameCasing.Camel : types_1.AttrNameCasing.Kebab;
|
package/lib/plugins/css.js
CHANGED
|
@@ -6,8 +6,8 @@ function create() {
|
|
|
6
6
|
const base = (0, volar_service_css_1.create)({ scssDocumentSelector: ['scss', 'postcss'] });
|
|
7
7
|
return {
|
|
8
8
|
...base,
|
|
9
|
-
create(context) {
|
|
10
|
-
const baseInstance = base.create(context);
|
|
9
|
+
create(context, api) {
|
|
10
|
+
const baseInstance = base.create(context, api);
|
|
11
11
|
return {
|
|
12
12
|
...baseInstance,
|
|
13
13
|
async provideDiagnostics(document, token) {
|
package/lib/plugins/data.js
CHANGED
|
@@ -19,6 +19,9 @@ function loadTemplateData(lang) {
|
|
|
19
19
|
else if (lang === 'zh-cn') {
|
|
20
20
|
data = require('../../data/template/zh-cn.json');
|
|
21
21
|
}
|
|
22
|
+
else if (lang === 'zh-tw') {
|
|
23
|
+
data = require('../../data/template/zh-hk.json');
|
|
24
|
+
}
|
|
22
25
|
else if (lang === 'it') {
|
|
23
26
|
data = require('../../data/template/it.json');
|
|
24
27
|
}
|
|
@@ -68,6 +71,9 @@ function loadLanguageBlocks(lang) {
|
|
|
68
71
|
else if (lang === 'zh-cn') {
|
|
69
72
|
return require('../../data/language-blocks/zh-cn.json');
|
|
70
73
|
}
|
|
74
|
+
else if (lang === 'zh-tw') {
|
|
75
|
+
return require('../../data/language-blocks/zh-hk.json');
|
|
76
|
+
}
|
|
71
77
|
else if (lang === 'it') {
|
|
72
78
|
return require('../../data/language-blocks/it.json');
|
|
73
79
|
}
|
|
@@ -97,6 +103,9 @@ function loadModelModifiersData(lang) {
|
|
|
97
103
|
else if (lang === 'zh-cn') {
|
|
98
104
|
return require('../../data/model-modifiers/zh-cn.json');
|
|
99
105
|
}
|
|
106
|
+
else if (lang === 'zh-tw') {
|
|
107
|
+
return require('../../data/model-modifiers/zh-hk.json');
|
|
108
|
+
}
|
|
100
109
|
else if (lang === 'it') {
|
|
101
110
|
return require('../../data/model-modifiers/it.json');
|
|
102
111
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LanguageServiceContext, LanguageServicePlugin } from '@volar/language-service';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
3
|
import type { TextDocument } from 'vscode-languageserver-textdocument';
|
|
4
|
-
export declare function create(ts: typeof import('typescript'), getTsPluginClient?: (context:
|
|
4
|
+
export declare function create(ts: typeof import('typescript'), getTsPluginClient?: (context: LanguageServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined): LanguageServicePlugin;
|
|
5
5
|
export declare function isCharacterTyping(document: TextDocument, change: {
|
|
6
6
|
text: string;
|
|
7
7
|
rangeOffset: number;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isBlacklistNode = exports.isCharacterTyping = exports.create = void 0;
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
5
6
|
const asts = new WeakMap();
|
|
6
7
|
function getAst(ts, fileName, snapshot, scriptKind) {
|
|
7
8
|
let ast = asts.get(snapshot);
|
|
@@ -14,11 +15,17 @@ function getAst(ts, fileName, snapshot, scriptKind) {
|
|
|
14
15
|
function create(ts, getTsPluginClient) {
|
|
15
16
|
return {
|
|
16
17
|
name: 'vue-autoinsert-dotvalue',
|
|
18
|
+
capabilities: {
|
|
19
|
+
autoInsertionProvider: {
|
|
20
|
+
triggerCharacters: ['\\w'],
|
|
21
|
+
configurationSections: ['vue.autoInsert.dotValue'],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
17
24
|
create(context) {
|
|
18
25
|
const tsPluginClient = getTsPluginClient?.(context);
|
|
19
26
|
let currentReq = 0;
|
|
20
27
|
return {
|
|
21
|
-
async
|
|
28
|
+
async provideAutoInsertSnippet(document, selection, change) {
|
|
22
29
|
// selection must at end of change
|
|
23
30
|
if (document.offsetAt(selection) !== change.rangeOffset + change.text.length) {
|
|
24
31
|
return;
|
|
@@ -39,7 +46,7 @@ function create(ts, getTsPluginClient) {
|
|
|
39
46
|
if (!enabled) {
|
|
40
47
|
return;
|
|
41
48
|
}
|
|
42
|
-
const decoded = context.decodeEmbeddedDocumentUri(document.uri);
|
|
49
|
+
const decoded = context.decodeEmbeddedDocumentUri(vscode_uri_1.URI.parse(document.uri));
|
|
43
50
|
const sourceScript = decoded && context.language.scripts.get(decoded[0]);
|
|
44
51
|
const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
|
|
45
52
|
if (!sourceScript) {
|
|
@@ -47,7 +54,8 @@ function create(ts, getTsPluginClient) {
|
|
|
47
54
|
}
|
|
48
55
|
let ast;
|
|
49
56
|
let sourceCodeOffset = document.offsetAt(selection);
|
|
50
|
-
const fileName = context.
|
|
57
|
+
const fileName = context.language.typescript?.asFileName(sourceScript.id)
|
|
58
|
+
?? sourceScript.id.fsPath.replace(/\\/g, '/');
|
|
51
59
|
if (sourceScript.generated) {
|
|
52
60
|
const serviceScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(sourceScript.generated.root);
|
|
53
61
|
if (!serviceScript || serviceScript?.code !== virtualCode) {
|
|
@@ -55,13 +63,15 @@ function create(ts, getTsPluginClient) {
|
|
|
55
63
|
}
|
|
56
64
|
ast = getAst(ts, fileName, virtualCode.snapshot, serviceScript.scriptKind);
|
|
57
65
|
let mapped = false;
|
|
58
|
-
for (const [_1,
|
|
59
|
-
const sourceOffset
|
|
60
|
-
|
|
61
|
-
sourceCodeOffset = sourceOffset[0];
|
|
66
|
+
for (const [_1, _2, map] of context.language.maps.forEach(virtualCode)) {
|
|
67
|
+
for (const [sourceOffset] of map.getSourceOffsets(document.offsetAt(selection))) {
|
|
68
|
+
sourceCodeOffset = sourceOffset;
|
|
62
69
|
mapped = true;
|
|
63
70
|
break;
|
|
64
71
|
}
|
|
72
|
+
if (mapped) {
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
65
75
|
}
|
|
66
76
|
if (!mapped) {
|
|
67
77
|
return;
|
|
@@ -4,9 +4,15 @@ exports.create = void 0;
|
|
|
4
4
|
function create() {
|
|
5
5
|
return {
|
|
6
6
|
name: 'vue-autoinsert-space',
|
|
7
|
+
capabilities: {
|
|
8
|
+
autoInsertionProvider: {
|
|
9
|
+
triggerCharacters: ['}'],
|
|
10
|
+
configurationSections: ['vue.autoInsert.bracketSpacing'],
|
|
11
|
+
},
|
|
12
|
+
},
|
|
7
13
|
create(context) {
|
|
8
14
|
return {
|
|
9
|
-
async
|
|
15
|
+
async provideAutoInsertSnippet(document, selection, change) {
|
|
10
16
|
if (document.languageId === 'html' || document.languageId === 'jade') {
|
|
11
17
|
const enabled = await context.env.getConfiguration?.('vue.autoInsert.bracketSpacing') ?? true;
|
|
12
18
|
if (!enabled) {
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
|
@@ -10,7 +10,11 @@ const directiveCommentReg = /<!--\s*@/;
|
|
|
10
10
|
function create() {
|
|
11
11
|
return {
|
|
12
12
|
name: 'vue-directive-comments',
|
|
13
|
-
|
|
13
|
+
capabilities: {
|
|
14
|
+
completionProvider: {
|
|
15
|
+
triggerCharacters: ['@'],
|
|
16
|
+
},
|
|
17
|
+
},
|
|
14
18
|
create() {
|
|
15
19
|
return {
|
|
16
20
|
provideCompletionItems(document, position) {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { VueCompilerOptions } from '@vue/language-core';
|
|
2
|
-
import {
|
|
3
|
-
export declare function create(ts: typeof import('typescript'), getVueOptions: (env:
|
|
2
|
+
import { LanguageServiceContext, LanguageServiceEnvironment, LanguageServicePlugin } from '../types';
|
|
3
|
+
export declare function create(ts: typeof import('typescript'), getVueOptions: (env: LanguageServiceEnvironment) => VueCompilerOptions, getTsPluginClient?: (context: LanguageServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined): LanguageServicePlugin;
|
|
@@ -4,12 +4,16 @@ exports.create = void 0;
|
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
5
|
const shared_1 = require("@vue/shared");
|
|
6
6
|
const path = require("path-browserify");
|
|
7
|
+
const getUserPreferences_1 = require("volar-service-typescript/lib/configs/getUserPreferences");
|
|
8
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
7
9
|
const vue_extract_file_1 = require("../plugins/vue-extract-file");
|
|
8
10
|
const types_1 = require("../types");
|
|
9
|
-
const getUserPreferences_1 = require("volar-service-typescript/lib/configs/getUserPreferences");
|
|
10
11
|
function create(ts, getVueOptions, getTsPluginClient) {
|
|
11
12
|
return {
|
|
12
13
|
name: 'vue-document-drop',
|
|
14
|
+
capabilities: {
|
|
15
|
+
// documentDropEditsProvider: true,
|
|
16
|
+
},
|
|
13
17
|
create(context) {
|
|
14
18
|
let casing = types_1.TagNameCasing.Pascal; // TODO
|
|
15
19
|
const tsPluginClient = getTsPluginClient?.(context);
|
|
@@ -19,7 +23,7 @@ function create(ts, getVueOptions, getTsPluginClient) {
|
|
|
19
23
|
if (document.languageId !== 'html') {
|
|
20
24
|
return;
|
|
21
25
|
}
|
|
22
|
-
const decoded = context.decodeEmbeddedDocumentUri(document.uri);
|
|
26
|
+
const decoded = context.decodeEmbeddedDocumentUri(vscode_uri_1.URI.parse(document.uri));
|
|
23
27
|
const sourceScript = decoded && context.language.scripts.get(decoded[0]);
|
|
24
28
|
const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
|
|
25
29
|
const vueVirtualCode = sourceScript?.generated?.root;
|
|
@@ -46,7 +50,8 @@ function create(ts, getVueOptions, getTsPluginClient) {
|
|
|
46
50
|
const additionalEdit = {};
|
|
47
51
|
const code = [...(0, language_core_1.forEachEmbeddedCode)(vueVirtualCode)].find(code => code.id === (sfc.scriptSetup ? 'scriptSetupFormat' : 'scriptFormat'));
|
|
48
52
|
const lastImportNode = (0, vue_extract_file_1.getLastImportNode)(ts, script.ast);
|
|
49
|
-
const incomingFileName = context.
|
|
53
|
+
const incomingFileName = context.language.typescript?.asFileName(vscode_uri_1.URI.parse(importUri))
|
|
54
|
+
?? vscode_uri_1.URI.parse(importUri).fsPath.replace(/\\/g, '/');
|
|
50
55
|
let importPath;
|
|
51
56
|
const serviceScript = sourceScript.generated?.languagePlugin.typescript?.getServiceScript(vueVirtualCode);
|
|
52
57
|
if (tsPluginClient && serviceScript) {
|
|
@@ -65,9 +70,10 @@ function create(ts, getVueOptions, getTsPluginClient) {
|
|
|
65
70
|
importPath = './' + importPath;
|
|
66
71
|
}
|
|
67
72
|
}
|
|
73
|
+
const embeddedDocumentUriStr = context.encodeEmbeddedDocumentUri(sourceScript.id, code.id).toString();
|
|
68
74
|
additionalEdit.changes ??= {};
|
|
69
|
-
additionalEdit.changes[
|
|
70
|
-
additionalEdit.changes[
|
|
75
|
+
additionalEdit.changes[embeddedDocumentUriStr] = [];
|
|
76
|
+
additionalEdit.changes[embeddedDocumentUriStr].push({
|
|
71
77
|
range: lastImportNode ? {
|
|
72
78
|
start: script.ast.getLineAndCharacterOfPosition(lastImportNode.end),
|
|
73
79
|
end: script.ast.getLineAndCharacterOfPosition(lastImportNode.end),
|
|
@@ -81,7 +87,7 @@ function create(ts, getVueOptions, getTsPluginClient) {
|
|
|
81
87
|
if (sfc.script) {
|
|
82
88
|
const edit = (0, vue_extract_file_1.createAddComponentToOptionEdit)(ts, sfc.script.ast, newName);
|
|
83
89
|
if (edit) {
|
|
84
|
-
additionalEdit.changes[
|
|
90
|
+
additionalEdit.changes[embeddedDocumentUriStr].push({
|
|
85
91
|
range: {
|
|
86
92
|
start: document.positionAt(edit.range.start),
|
|
87
93
|
end: document.positionAt(edit.range.end),
|
|
@@ -2,19 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.create = void 0;
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
|
-
const
|
|
5
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
6
6
|
function create() {
|
|
7
7
|
return {
|
|
8
8
|
name: 'vue-document-links',
|
|
9
|
+
capabilities: {
|
|
10
|
+
documentLinkProvider: {},
|
|
11
|
+
},
|
|
9
12
|
create(context) {
|
|
10
13
|
return {
|
|
11
14
|
provideDocumentLinks(document) {
|
|
12
|
-
const decoded = context.decodeEmbeddedDocumentUri(document.uri);
|
|
15
|
+
const decoded = context.decodeEmbeddedDocumentUri(vscode_uri_1.URI.parse(document.uri));
|
|
13
16
|
const sourceScript = decoded && context.language.scripts.get(decoded[0]);
|
|
14
17
|
const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
|
|
15
18
|
if (sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode && virtualCode?.id === 'template') {
|
|
16
19
|
const result = [];
|
|
17
|
-
const codegen =
|
|
20
|
+
const codegen = language_core_1.tsCodegen.get(sourceScript.generated.root.sfc);
|
|
18
21
|
const scopedClasses = codegen?.generatedTemplate()?.scopedClasses ?? [];
|
|
19
22
|
const styleClasses = new Map();
|
|
20
23
|
const option = sourceScript.generated.root.vueCompilerOptions.experimentalResolveStyleCssClasses;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LanguageServiceContext, LanguageServicePlugin } from '@volar/language-service';
|
|
2
2
|
import type * as ts from 'typescript';
|
|
3
|
-
export declare function create(ts: typeof import('typescript'), getTsPluginClient?: (context:
|
|
3
|
+
export declare function create(ts: typeof import('typescript'), getTsPluginClient?: (context: LanguageServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined): LanguageServicePlugin;
|
|
4
4
|
export declare function getLastImportNode(ts: typeof import('typescript'), sourceFile: ts.SourceFile): ts.Node | undefined;
|
|
5
5
|
export declare function createAddComponentToOptionEdit(ts: typeof import('typescript'), ast: ts.SourceFile, componentName: string): {
|
|
6
6
|
range: import("@vue/language-core").TextRange;
|
|
@@ -2,10 +2,16 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createAddComponentToOptionEdit = exports.getLastImportNode = exports.create = void 0;
|
|
4
4
|
const language_core_1 = require("@vue/language-core");
|
|
5
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
5
6
|
const unicodeReg = /\\u/g;
|
|
6
7
|
function create(ts, getTsPluginClient) {
|
|
7
8
|
return {
|
|
8
9
|
name: 'vue-extract-file',
|
|
10
|
+
capabilities: {
|
|
11
|
+
codeActionProvider: {
|
|
12
|
+
resolveProvider: true,
|
|
13
|
+
},
|
|
14
|
+
},
|
|
9
15
|
create(context) {
|
|
10
16
|
const tsPluginClient = getTsPluginClient?.(context);
|
|
11
17
|
return {
|
|
@@ -15,7 +21,7 @@ function create(ts, getTsPluginClient) {
|
|
|
15
21
|
if (startOffset === endOffset) {
|
|
16
22
|
return;
|
|
17
23
|
}
|
|
18
|
-
const decoded = context.decodeEmbeddedDocumentUri(document.uri);
|
|
24
|
+
const decoded = context.decodeEmbeddedDocumentUri(vscode_uri_1.URI.parse(document.uri));
|
|
19
25
|
const sourceScript = decoded && context.language.scripts.get(decoded[0]);
|
|
20
26
|
const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
|
|
21
27
|
if (!(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode) || virtualCode?.id !== 'template') {
|
|
@@ -45,13 +51,14 @@ function create(ts, getTsPluginClient) {
|
|
|
45
51
|
async resolveCodeAction(codeAction) {
|
|
46
52
|
const { uri, range, newName } = codeAction.data;
|
|
47
53
|
const [startOffset, endOffset] = range;
|
|
48
|
-
const
|
|
54
|
+
const parsedUri = vscode_uri_1.URI.parse(uri);
|
|
55
|
+
const decoded = context.decodeEmbeddedDocumentUri(parsedUri);
|
|
49
56
|
const sourceScript = decoded && context.language.scripts.get(decoded[0]);
|
|
50
57
|
const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
|
|
51
58
|
if (!(sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode) || virtualCode?.id !== 'template') {
|
|
52
59
|
return codeAction;
|
|
53
60
|
}
|
|
54
|
-
const document = context.documents.get(
|
|
61
|
+
const document = context.documents.get(parsedUri, virtualCode.languageId, virtualCode.snapshot);
|
|
55
62
|
const sfcDocument = context.documents.get(sourceScript.id, sourceScript.languageId, sourceScript.snapshot);
|
|
56
63
|
const { sfc } = sourceScript.generated.root;
|
|
57
64
|
const script = sfc.scriptSetup ?? sfc.script;
|
|
@@ -126,7 +133,7 @@ function create(ts, getTsPluginClient) {
|
|
|
126
133
|
// editing vue sfc
|
|
127
134
|
{
|
|
128
135
|
textDocument: {
|
|
129
|
-
uri: sourceScript.id,
|
|
136
|
+
uri: sourceScript.id.toString(),
|
|
130
137
|
version: null,
|
|
131
138
|
},
|
|
132
139
|
edits: sfcEdits,
|
package/lib/plugins/vue-sfc.js
CHANGED
|
@@ -5,6 +5,7 @@ const vue = require("@vue/language-core");
|
|
|
5
5
|
const volar_service_html_1 = require("volar-service-html");
|
|
6
6
|
const html = require("vscode-html-languageservice");
|
|
7
7
|
const data_1 = require("./data");
|
|
8
|
+
const vscode_uri_1 = require("vscode-uri");
|
|
8
9
|
let sfcDataProvider;
|
|
9
10
|
function create() {
|
|
10
11
|
const htmlPlugin = (0, volar_service_html_1.create)({
|
|
@@ -37,8 +38,8 @@ function create() {
|
|
|
37
38
|
return {
|
|
38
39
|
...htmlPlugin,
|
|
39
40
|
name: 'vue-sfc',
|
|
40
|
-
create(context) {
|
|
41
|
-
const htmlPluginInstance = htmlPlugin.create(context);
|
|
41
|
+
create(context, api) {
|
|
42
|
+
const htmlPluginInstance = htmlPlugin.create(context, api);
|
|
42
43
|
return {
|
|
43
44
|
...htmlPluginInstance,
|
|
44
45
|
provide: {
|
|
@@ -157,7 +158,7 @@ function create() {
|
|
|
157
158
|
},
|
|
158
159
|
};
|
|
159
160
|
function worker(document, context, callback) {
|
|
160
|
-
const decoded = context.decodeEmbeddedDocumentUri(document.uri);
|
|
161
|
+
const decoded = context.decodeEmbeddedDocumentUri(vscode_uri_1.URI.parse(document.uri));
|
|
161
162
|
const sourceScript = decoded && context.language.scripts.get(decoded[0]);
|
|
162
163
|
const virtualCode = decoded && sourceScript?.generated?.embeddedCodes.get(decoded[1]);
|
|
163
164
|
if (virtualCode instanceof vue.VueVirtualCode) {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { LanguageServiceContext, LanguageServiceEnvironment } from '@volar/language-service';
|
|
2
2
|
import { LanguageServicePlugin, VueCompilerOptions } from '../types';
|
|
3
|
-
export declare function create(mode: 'html' | 'pug', ts: typeof import('typescript'), getVueOptions: (env:
|
|
3
|
+
export declare function create(mode: 'html' | 'pug', ts: typeof import('typescript'), getVueOptions: (env: LanguageServiceEnvironment) => VueCompilerOptions, getTsPluginClient?: (context: LanguageServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined): LanguageServicePlugin;
|