@vue/language-service 2.0.1 → 2.0.3

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/index.d.ts CHANGED
@@ -4,4 +4,4 @@ export * from './lib/ideFeatures/nameCasing';
4
4
  export * from './lib/types';
5
5
  import type { ServiceEnvironment, ServicePlugin } from '@volar/language-service';
6
6
  import type { VueCompilerOptions } from './lib/types';
7
- export declare function createVueServicePlugins(ts: typeof import('typescript'), getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions): ServicePlugin[];
7
+ export declare function createVueServicePlugins(ts: typeof import('typescript'), getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions, tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client')): ServicePlugin[];
package/index.js CHANGED
@@ -37,25 +37,25 @@ const vue_template_1 = require("./lib/plugins/vue-template");
37
37
  const vue_toggle_v_bind_codeaction_1 = require("./lib/plugins/vue-toggle-v-bind-codeaction");
38
38
  const vue_twoslash_queries_1 = require("./lib/plugins/vue-twoslash-queries");
39
39
  const vue_visualize_hidden_callback_param_1 = require("./lib/plugins/vue-visualize-hidden-callback-param");
40
- function createVueServicePlugins(ts, getVueOptions) {
40
+ function createVueServicePlugins(ts, getVueOptions, tsPluginClient) {
41
41
  return [
42
42
  (0, volar_service_typescript_1.create)(ts),
43
43
  (0, volar_service_typescript_twoslash_queries_1.create)(),
44
44
  (0, css_1.create)(),
45
45
  (0, volar_service_pug_beautify_1.create)(),
46
46
  (0, volar_service_json_1.create)(),
47
- (0, vue_template_1.create)('html', ts, getVueOptions),
48
- (0, vue_template_1.create)('pug', ts, getVueOptions),
47
+ (0, vue_template_1.create)('html', ts, getVueOptions, tsPluginClient),
48
+ (0, vue_template_1.create)('pug', ts, getVueOptions, tsPluginClient),
49
49
  (0, vue_sfc_1.create)(),
50
- (0, vue_twoslash_queries_1.create)(ts),
50
+ (0, vue_twoslash_queries_1.create)(ts, tsPluginClient),
51
51
  (0, vue_codelens_references_1.create)(),
52
52
  (0, vue_document_drop_1.create)(ts),
53
- (0, vue_autoinsert_dotvalue_1.create)(ts),
53
+ (0, vue_autoinsert_dotvalue_1.create)(ts, tsPluginClient),
54
54
  (0, vue_autoinsert_parentheses_1.create)(ts),
55
55
  (0, vue_autoinsert_space_1.create)(),
56
56
  (0, vue_visualize_hidden_callback_param_1.create)(),
57
57
  (0, vue_directive_comments_1.create)(),
58
- (0, vue_extract_file_1.create)(ts),
58
+ (0, vue_extract_file_1.create)(ts, tsPluginClient),
59
59
  (0, vue_toggle_v_bind_codeaction_1.create)(ts),
60
60
  (0, volar_service_emmet_1.create)(),
61
61
  ];
@@ -1,13 +1,13 @@
1
1
  import type { ServiceContext } 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): Promise<vscode.TextEdit[] | undefined>;
5
- export declare function convertAttrName(context: ServiceContext, uri: string, casing: AttrNameCasing): Promise<vscode.TextEdit[] | undefined>;
6
- export declare function getNameCasing(context: ServiceContext, uri: string): Promise<{
4
+ export declare function convertTagName(context: ServiceContext, uri: string, casing: TagNameCasing, tsPluginClient: typeof import('@vue/typescript-plugin/lib/client')): 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, tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client')): Promise<{
7
7
  tag: TagNameCasing;
8
8
  attr: AttrNameCasing;
9
9
  }>;
10
- export declare function detect(context: ServiceContext, uri: string): Promise<{
10
+ export declare function detect(context: ServiceContext, uri: string, tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client')): Promise<{
11
11
  tag: TagNameCasing[];
12
12
  attr: AttrNameCasing[];
13
13
  }>;
@@ -3,10 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.detect = exports.getNameCasing = exports.convertAttrName = exports.convertTagName = void 0;
4
4
  const vue = require("@vue/language-core");
5
5
  const language_core_1 = require("@vue/language-core");
6
- const namedPipeClient = require("@vue/typescript-plugin/lib/client");
7
6
  const computeds_1 = require("computeds");
8
7
  const types_1 = require("../types");
9
- async function convertTagName(context, uri, casing) {
8
+ async function convertTagName(context, uri, casing, tsPluginClient) {
10
9
  const sourceFile = context.language.files.get(uri);
11
10
  if (!sourceFile)
12
11
  return;
@@ -19,7 +18,7 @@ async function convertTagName(context, uri, casing) {
19
18
  const template = desc.template;
20
19
  const document = context.documents.get(sourceFile.id, sourceFile.languageId, sourceFile.snapshot);
21
20
  const edits = [];
22
- const components = await namedPipeClient.getComponentNames(rootCode.fileName) ?? [];
21
+ const components = await tsPluginClient.getComponentNames(rootCode.fileName) ?? [];
23
22
  const tags = getTemplateTagsAndAttrs(rootCode);
24
23
  for (const [tagName, { offsets }] of tags) {
25
24
  const componentName = components.find(component => component === tagName || (0, language_core_1.hyphenateTag)(component) === tagName);
@@ -40,7 +39,7 @@ async function convertTagName(context, uri, casing) {
40
39
  return edits;
41
40
  }
42
41
  exports.convertTagName = convertTagName;
43
- async function convertAttrName(context, uri, casing) {
42
+ async function convertAttrName(context, uri, casing, tsPluginClient) {
44
43
  const sourceFile = context.language.files.get(uri);
45
44
  if (!sourceFile)
46
45
  return;
@@ -53,12 +52,12 @@ async function convertAttrName(context, uri, casing) {
53
52
  const template = desc.template;
54
53
  const document = context.documents.get(uri, sourceFile.languageId, sourceFile.snapshot);
55
54
  const edits = [];
56
- const components = await namedPipeClient.getComponentNames(rootCode.fileName) ?? [];
55
+ const components = await tsPluginClient.getComponentNames(rootCode.fileName) ?? [];
57
56
  const tags = getTemplateTagsAndAttrs(rootCode);
58
57
  for (const [tagName, { attrs }] of tags) {
59
58
  const componentName = components.find(component => component === tagName || (0, language_core_1.hyphenateTag)(component) === tagName);
60
59
  if (componentName) {
61
- const props = await namedPipeClient.getComponentProps(rootCode.fileName, componentName) ?? [];
60
+ const props = await tsPluginClient.getComponentProps(rootCode.fileName, componentName) ?? [];
62
61
  for (const [attrName, { offsets }] of attrs) {
63
62
  const propName = props.find(prop => prop === attrName || (0, language_core_1.hyphenateAttr)(prop) === attrName);
64
63
  if (propName) {
@@ -80,8 +79,8 @@ async function convertAttrName(context, uri, casing) {
80
79
  return edits;
81
80
  }
82
81
  exports.convertAttrName = convertAttrName;
83
- async function getNameCasing(context, uri) {
84
- const detected = await detect(context, uri);
82
+ async function getNameCasing(context, uri, tsPluginClient) {
83
+ const detected = await detect(context, uri, tsPluginClient);
85
84
  const [attr, tag] = await Promise.all([
86
85
  context.env.getConfiguration?.('vue.complete.casing.props', uri),
87
86
  context.env.getConfiguration?.('vue.complete.casing.tags', uri),
@@ -94,7 +93,7 @@ async function getNameCasing(context, uri) {
94
93
  };
95
94
  }
96
95
  exports.getNameCasing = getNameCasing;
97
- async function detect(context, uri) {
96
+ async function detect(context, uri, tsPluginClient) {
98
97
  const rootFile = context.language.files.get(uri)?.generated?.code;
99
98
  if (!(rootFile instanceof language_core_1.VueGeneratedCode)) {
100
99
  return {
@@ -128,7 +127,7 @@ async function detect(context, uri) {
128
127
  return result;
129
128
  }
130
129
  async function getTagNameCase(file) {
131
- const components = await namedPipeClient.getComponentNames(file.fileName) ?? [];
130
+ const components = await tsPluginClient?.getComponentNames(file.fileName) ?? [];
132
131
  const tagNames = getTemplateTagsAndAttrs(file);
133
132
  const result = [];
134
133
  let anyComponentUsed = false;
@@ -2,7 +2,7 @@ import type { ServicePlugin } from '@volar/language-service';
2
2
  import type * as ts from 'typescript';
3
3
  import type * as vscode from 'vscode-languageserver-protocol';
4
4
  import type { TextDocument } from 'vscode-languageserver-textdocument';
5
- export declare function create(ts: typeof import('typescript')): ServicePlugin;
5
+ export declare function create(ts: typeof import('typescript'), tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client')): ServicePlugin;
6
6
  export declare function isCharacterTyping(document: TextDocument, lastChange: {
7
7
  range: vscode.Range;
8
8
  text: string;
@@ -2,7 +2,6 @@
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 namedPipeClient = require("@vue/typescript-plugin/lib/client");
6
5
  const asts = new WeakMap();
7
6
  function getAst(ts, fileName, snapshot, scriptKind) {
8
7
  let ast = asts.get(snapshot);
@@ -12,7 +11,7 @@ function getAst(ts, fileName, snapshot, scriptKind) {
12
11
  }
13
12
  return ast;
14
13
  }
15
- function create(ts) {
14
+ function create(ts, tsPluginClient) {
16
15
  return {
17
16
  name: 'vue-autoinsert-dotvalue',
18
17
  create(context) {
@@ -61,7 +60,7 @@ function create(ts) {
61
60
  }
62
61
  if (isBlacklistNode(ts, ast, document.offsetAt(position), false))
63
62
  return;
64
- const props = await namedPipeClient.getPropertiesAtLocation(fileName, sourceCodeOffset) ?? [];
63
+ const props = await tsPluginClient?.getPropertiesAtLocation(fileName, sourceCodeOffset) ?? [];
65
64
  if (props.some(prop => prop === 'value')) {
66
65
  return '${1:.value}';
67
66
  }
@@ -1,6 +1,6 @@
1
1
  import type { ServicePlugin } from '@volar/language-service';
2
2
  import type * as ts from 'typescript';
3
- export declare function create(ts: typeof import('typescript')): ServicePlugin;
3
+ export declare function create(ts: typeof import('typescript'), tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client')): ServicePlugin;
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,9 +2,8 @@
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 client_1 = require("@vue/typescript-plugin/lib/client");
6
5
  const unicodeReg = /\\u/g;
7
- function create(ts) {
6
+ function create(ts, tsPluginClient) {
8
7
  return {
9
8
  name: 'vue-extract-file',
10
9
  create(context) {
@@ -52,7 +51,7 @@ function create(ts) {
52
51
  const templateCodeRange = selectTemplateCode(startOffset, endOffset, sfc.template);
53
52
  if (!templateCodeRange)
54
53
  return codeAction;
55
- const toExtract = await (0, client_1.collectExtractProps)(sourceFile.generated.code.fileName, templateCodeRange) ?? [];
54
+ const toExtract = await tsPluginClient?.collectExtractProps(sourceFile.generated.code.fileName, templateCodeRange) ?? [];
56
55
  if (!toExtract)
57
56
  return codeAction;
58
57
  const templateInitialIndent = await context.env.getConfiguration('vue.format.template.initialIndent') ?? true;
@@ -1,3 +1,3 @@
1
1
  import type { ServiceEnvironment } from '@volar/language-service';
2
2
  import { ServicePlugin, VueCompilerOptions } from '../types';
3
- export declare function create(mode: 'html' | 'pug', ts: typeof import('typescript'), getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions): ServicePlugin;
3
+ export declare function create(mode: 'html' | 'pug', ts: typeof import('typescript'), getVueOptions: (env: ServiceEnvironment) => VueCompilerOptions, tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client')): ServicePlugin;
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.create = void 0;
4
4
  const language_core_1 = require("@vue/language-core");
5
5
  const shared_1 = require("@vue/shared");
6
- const namedPipeClient = require("@vue/typescript-plugin/lib/client");
7
6
  const volar_service_html_1 = require("volar-service-html");
8
7
  const volar_service_pug_1 = require("volar-service-pug");
9
8
  const html = require("vscode-html-languageservice");
@@ -12,7 +11,7 @@ const types_1 = require("../types");
12
11
  const data_1 = require("./data");
13
12
  let builtInData;
14
13
  let modelData;
15
- function create(mode, ts, getVueOptions) {
14
+ function create(mode, ts, getVueOptions, tsPluginClient) {
16
15
  let customData = [];
17
16
  const onDidChangeCustomDataListeners = new Set();
18
17
  const onDidChangeCustomData = (listener) => {
@@ -107,8 +106,8 @@ function create(mode, ts, getVueOptions) {
107
106
  const scanner = getScanner(baseServiceInstance, document);
108
107
  if (code instanceof language_core_1.VueGeneratedCode && scanner) {
109
108
  // visualize missing required props
110
- const casing = await (0, nameCasing_1.getNameCasing)(context, map.sourceDocument.uri);
111
- const components = await namedPipeClient.getComponentNames(code.fileName) ?? [];
109
+ const casing = await (0, nameCasing_1.getNameCasing)(context, map.sourceDocument.uri, tsPluginClient);
110
+ const components = await tsPluginClient?.getComponentNames(code.fileName) ?? [];
112
111
  const componentProps = {};
113
112
  let token;
114
113
  let current;
@@ -120,7 +119,7 @@ function create(mode, ts, getVueOptions) {
120
119
  : components.find(component => component === tagName || (0, language_core_1.hyphenateTag)(component) === tagName);
121
120
  const checkTag = tagName.indexOf('.') >= 0 ? tagName : component;
122
121
  if (checkTag) {
123
- componentProps[checkTag] ??= await namedPipeClient.getComponentProps(code.fileName, checkTag, true) ?? [];
122
+ componentProps[checkTag] ??= await tsPluginClient?.getComponentProps(code.fileName, checkTag, true) ?? [];
124
123
  current = {
125
124
  unburnedRequiredProps: [...componentProps[checkTag]],
126
125
  labelOffset: scanner.getTokenOffset() + scanner.getTokenLength(),
@@ -245,7 +244,7 @@ function create(mode, ts, getVueOptions) {
245
244
  },
246
245
  };
247
246
  async function provideHtmlData(sourceDocumentUri, vueCode) {
248
- const casing = await (0, nameCasing_1.getNameCasing)(context, sourceDocumentUri);
247
+ const casing = await (0, nameCasing_1.getNameCasing)(context, sourceDocumentUri, tsPluginClient);
249
248
  if (builtInData.tags) {
250
249
  for (const tag of builtInData.tags) {
251
250
  if (tag.name === 'slot')
@@ -275,7 +274,7 @@ function create(mode, ts, getVueOptions) {
275
274
  provideTags: () => {
276
275
  if (!components) {
277
276
  promises.push((async () => {
278
- components = (await namedPipeClient.getComponentNames(vueCode.fileName) ?? [])
277
+ components = (await tsPluginClient?.getComponentNames(vueCode.fileName) ?? [])
279
278
  .filter(name => name !== 'Transition'
280
279
  && name !== 'TransitionGroup'
281
280
  && name !== 'KeepAlive'
@@ -314,14 +313,14 @@ function create(mode, ts, getVueOptions) {
314
313
  return tags;
315
314
  },
316
315
  provideAttributes: (tag) => {
317
- namedPipeClient.getTemplateContextProps;
316
+ tsPluginClient?.getTemplateContextProps;
318
317
  let failed = false;
319
318
  let tagInfo = tagInfos.get(tag);
320
319
  if (!tagInfo) {
321
320
  promises.push((async () => {
322
- const attrs = await namedPipeClient.getElementAttrs(vueCode.fileName, tag) ?? [];
323
- const props = await namedPipeClient.getComponentProps(vueCode.fileName, tag) ?? [];
324
- const events = await namedPipeClient.getComponentEvents(vueCode.fileName, tag) ?? [];
321
+ const attrs = await tsPluginClient?.getElementAttrs(vueCode.fileName, tag) ?? [];
322
+ const props = await tsPluginClient?.getComponentProps(vueCode.fileName, tag) ?? [];
323
+ const events = await tsPluginClient?.getComponentEvents(vueCode.fileName, tag) ?? [];
325
324
  tagInfos.set(tag, {
326
325
  attrs,
327
326
  props,
@@ -340,7 +339,7 @@ function create(mode, ts, getVueOptions) {
340
339
  if (_tsCodegen) {
341
340
  if (!templateContextProps) {
342
341
  promises.push((async () => {
343
- templateContextProps = await namedPipeClient.getTemplateContextProps(vueCode.fileName) ?? [];
342
+ templateContextProps = await tsPluginClient?.getTemplateContextProps(vueCode.fileName) ?? [];
344
343
  version++;
345
344
  })());
346
345
  return [];
@@ -442,7 +441,7 @@ function create(mode, ts, getVueOptions) {
442
441
  }
443
442
  async function afterHtmlCompletion(completionList, sourceDocument, code) {
444
443
  const replacement = getReplacement(completionList, sourceDocument);
445
- const componentNames = new Set((await namedPipeClient.getComponentNames(code.fileName) ?? [])
444
+ const componentNames = new Set((await tsPluginClient?.getComponentNames(code.fileName) ?? [])
446
445
  .map(language_core_1.hyphenateTag));
447
446
  if (replacement) {
448
447
  const isEvent = replacement.text.startsWith('v-on:') || replacement.text.startsWith('@');
@@ -1,2 +1,2 @@
1
1
  import type { ServicePlugin } from '@volar/language-service';
2
- export declare function create(ts: typeof import('typescript')): ServicePlugin;
2
+ export declare function create(ts: typeof import('typescript'), tsPluginClient?: typeof import('@vue/typescript-plugin/lib/client')): ServicePlugin;
@@ -2,9 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.create = void 0;
4
4
  const vue = require("@vue/language-core");
5
- const client_1 = require("@vue/typescript-plugin/lib/client");
6
5
  const twoslashReg = /<!--\s*\^\?\s*-->/g;
7
- function create(ts) {
6
+ function create(ts, tsPluginClient) {
8
7
  return {
9
8
  name: 'vue-twoslash-queries',
10
9
  create(context) {
@@ -26,7 +25,7 @@ function create(ts) {
26
25
  for (const [pointerPosition, hoverOffset] of hoverOffsets) {
27
26
  for (const [_1, [_2, map]] of context.language.files.getMaps(virtualCode)) {
28
27
  for (const [sourceOffset] of map.getSourceOffsets(hoverOffset)) {
29
- const quickInfo = await (0, client_1.getQuickInfoAtPosition)(sourceFile.generated.code.fileName, sourceOffset);
28
+ const quickInfo = await tsPluginClient?.getQuickInfoAtPosition(sourceFile.generated.code.fileName, sourceOffset);
30
29
  if (quickInfo) {
31
30
  inlayHints.push({
32
31
  position: { line: pointerPosition.line, character: pointerPosition.character + 2 },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/language-service",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "data",
@@ -20,9 +20,8 @@
20
20
  "@volar/language-service": "~2.1.0",
21
21
  "@volar/typescript": "~2.1.0",
22
22
  "@vue/compiler-dom": "^3.4.0",
23
- "@vue/language-core": "2.0.1",
23
+ "@vue/language-core": "2.0.3",
24
24
  "@vue/shared": "^3.4.0",
25
- "@vue/typescript-plugin": "2.0.1",
26
25
  "computeds": "^0.0.1",
27
26
  "path-browserify": "^1.0.1",
28
27
  "volar-service-css": "0.0.31",
@@ -40,8 +39,9 @@
40
39
  "@types/node": "latest",
41
40
  "@types/path-browserify": "latest",
42
41
  "@volar/kit": "~2.1.0",
42
+ "@vue/typescript-plugin": "2.0.3",
43
43
  "vscode-languageserver-protocol": "^3.17.5",
44
44
  "vscode-uri": "^3.0.8"
45
45
  },
46
- "gitHead": "adedfd0983c910370d080e955702cca7d2275420"
46
+ "gitHead": "fc1e288c8c0c82e6730781006d84a2676b5266ff"
47
47
  }