@vue/language-service 2.0.19 → 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.
Files changed (56) hide show
  1. package/data/language-blocks/cs.json +69 -1
  2. package/data/language-blocks/en.json +69 -1
  3. package/data/language-blocks/fr.json +69 -1
  4. package/data/language-blocks/it.json +68 -0
  5. package/data/language-blocks/ja.json +69 -1
  6. package/data/language-blocks/ko.json +70 -2
  7. package/data/language-blocks/pt.json +68 -0
  8. package/data/language-blocks/ru.json +69 -1
  9. package/data/language-blocks/zh-cn.json +69 -1
  10. package/data/language-blocks/zh-hk.json +1102 -0
  11. package/data/model-modifiers/cs.json +12 -0
  12. package/data/model-modifiers/en.json +12 -0
  13. package/data/model-modifiers/fr.json +12 -0
  14. package/data/model-modifiers/it.json +12 -0
  15. package/data/model-modifiers/ja.json +12 -0
  16. package/data/model-modifiers/ko.json +12 -0
  17. package/data/model-modifiers/pt.json +12 -0
  18. package/data/model-modifiers/ru.json +12 -0
  19. package/data/model-modifiers/zh-cn.json +12 -0
  20. package/data/model-modifiers/zh-hk.json +188 -0
  21. package/data/template/cs.json +104 -0
  22. package/data/template/en.json +104 -0
  23. package/data/template/fr.json +104 -0
  24. package/data/template/it.json +104 -0
  25. package/data/template/ja.json +104 -0
  26. package/data/template/ko.json +105 -1
  27. package/data/template/pt.json +104 -0
  28. package/data/template/ru.json +104 -0
  29. package/data/template/zh-cn.json +104 -0
  30. package/data/template/zh-hk.json +1602 -0
  31. package/index.d.ts +3 -3
  32. package/index.js +8 -9
  33. package/lib/ideFeatures/nameCasing.d.ts +6 -5
  34. package/lib/ideFeatures/nameCasing.js +2 -2
  35. package/lib/plugins/css.js +2 -2
  36. package/lib/plugins/data.js +9 -0
  37. package/lib/plugins/vue-autoinsert-dotvalue.d.ts +2 -2
  38. package/lib/plugins/vue-autoinsert-dotvalue.js +17 -7
  39. package/lib/plugins/vue-autoinsert-space.js +7 -1
  40. package/lib/plugins/vue-codelens-references.d.ts +2 -0
  41. package/lib/plugins/vue-codelens-references.js +42 -0
  42. package/lib/plugins/vue-directive-comments.js +5 -1
  43. package/lib/plugins/vue-document-drop.d.ts +2 -2
  44. package/lib/plugins/vue-document-drop.js +12 -6
  45. package/lib/plugins/vue-document-links.js +6 -3
  46. package/lib/plugins/vue-extract-file.d.ts +2 -2
  47. package/lib/plugins/vue-extract-file.js +11 -4
  48. package/lib/plugins/vue-sfc.js +4 -3
  49. package/lib/plugins/vue-template.d.ts +2 -2
  50. package/lib/plugins/vue-template.js +155 -132
  51. package/lib/plugins/vue-toggle-v-bind-codeaction.js +7 -1
  52. package/lib/plugins/vue-twoslash-queries.d.ts +2 -2
  53. package/lib/plugins/vue-twoslash-queries.js +6 -2
  54. package/lib/plugins/vue-visualize-hidden-callback-param.js +5 -1
  55. package/package.json +16 -16
  56. 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, ServiceContext, ServiceEnvironment } from '@volar/language-service';
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: ServiceEnvironment) => VueCompilerOptions, getTsPluginClient?: (context: ServiceContext) => typeof import("@vue/typescript-plugin/lib/client") | undefined, hybridMode?: boolean): LanguageServicePlugin[];
8
- export declare function createDefaultGetTsPluginClient(ts: typeof import('typescript'), getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions): (context: ServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined;
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
- function getVueLanguageServicePlugins(ts, getVueOptions, getTsPluginClient = createDefaultGetTsPluginClient(ts, getVueOptions), hybridMode = false) {
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.env.typescript.fileNameToUri(fileName));
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, 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)({
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, getVueOptions) {
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.env.typescript.fileNameToUri,
99
+ getFileId: context.language.typescript.asScriptId,
101
100
  };
102
101
  return {
103
102
  async collectExtractProps(...args) {
@@ -1,13 +1,14 @@
1
- import type { ServiceContext } from '@volar/language-service';
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
- export declare function convertTagName(context: ServiceContext, uri: string, casing: TagNameCasing, tsPluginClient: typeof import('@vue/typescript-plugin/lib/client') | undefined): Promise<vscode.TextEdit[] | undefined>;
5
- export declare function convertAttrName(context: ServiceContext, uri: string, casing: AttrNameCasing, tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client')): Promise<vscode.TextEdit[] | undefined>;
6
- export declare function getNameCasing(context: ServiceContext, uri: string): Promise<{
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: ServiceContext, uri: string): Promise<{
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;
@@ -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) {
@@ -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 { ServiceContext, LanguageServicePlugin } from '@volar/language-service';
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: ServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined): LanguageServicePlugin;
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 provideAutoInsertionEdit(document, selection, change) {
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.env.typescript.uriToFileName(sourceScript.id);
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, [_2, map]] of context.language.maps.forEach(virtualCode)) {
59
- const sourceOffset = map.getSourceOffset(document.offsetAt(selection));
60
- if (sourceOffset !== undefined) {
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 provideAutoInsertionEdit(document, selection, change) {
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,2 @@
1
+ import type { LanguageServicePlugin } from '@volar/language-service';
2
+ export declare function create(): LanguageServicePlugin;
@@ -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
- triggerCharacters: ['@'],
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 { 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;
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.env.typescript.uriToFileName(importUri);
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[context.encodeEmbeddedDocumentUri(sourceScript.id, code.id)] = [];
70
- additionalEdit.changes[context.encodeEmbeddedDocumentUri(sourceScript.id, code.id)].push({
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[context.encodeEmbeddedDocumentUri(sourceScript.id, code.id)].push({
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 language_core_2 = require("@vue/language-core");
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 = language_core_2.tsCodegen.get(sourceScript.generated.root.sfc);
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 { ServiceContext, LanguageServicePlugin } from '@volar/language-service';
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: ServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined): LanguageServicePlugin;
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 decoded = context.decodeEmbeddedDocumentUri(uri);
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(uri, virtualCode.languageId, virtualCode.snapshot);
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,
@@ -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 { ServiceContext, ServiceEnvironment } from '@volar/language-service';
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: ServiceEnvironment) => VueCompilerOptions, getTsPluginClient?: (context: ServiceContext) => typeof import('@vue/typescript-plugin/lib/client') | undefined): LanguageServicePlugin;
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;