@vue/typescript-plugin 3.1.0-alpha.0 → 3.1.1

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 (32) hide show
  1. package/index.js +35 -56
  2. package/lib/requests/index.d.ts +0 -1
  3. package/lib/requests/isRefAtPosition.js +4 -1
  4. package/package.json +3 -3
  5. package/lib/proxy.d.ts +0 -3
  6. package/lib/proxy.js +0 -227
  7. package/lib/requests/getComponentHighlights.d.ts +0 -1
  8. package/lib/requests/getComponentHighlights.js +0 -3
  9. package/lib/requests/getCurrentComponentSlots.d.ts +0 -1
  10. package/lib/requests/getCurrentComponentSlots.js +0 -3
  11. package/lib/requests/getDefineSlotNames.d.ts +0 -1
  12. package/lib/requests/getDefineSlotNames.js +0 -3
  13. package/lib/requests/getDefineSlots.d.ts +0 -2
  14. package/lib/requests/getDefineSlots.js +0 -16
  15. package/lib/requests/getMissingPropsDiagnostics.d.ts +0 -10
  16. package/lib/requests/getMissingPropsDiagnostics.js +0 -40
  17. package/lib/requests/getPropertiesAtLocation.d.ts +0 -2
  18. package/lib/requests/getPropertiesAtLocation.js +0 -63
  19. package/lib/requests/getReactiveReferences.d.ts +0 -12
  20. package/lib/requests/getReactiveReferences.js +0 -605
  21. package/lib/requests/getReactiveVariableSpans.d.ts +0 -3
  22. package/lib/requests/getReactiveVariableSpans.js +0 -30
  23. package/lib/requests/getSemanticClassfications.d.ts +0 -3
  24. package/lib/requests/getSemanticClassfications.js +0 -8
  25. package/lib/requests/getVariableProperties.d.ts +0 -10
  26. package/lib/requests/getVariableProperties.js +0 -16
  27. package/lib/requests/isRefAtLocation.d.ts +0 -3
  28. package/lib/requests/isRefAtLocation.js +0 -55
  29. package/lib/requests/resolveModuleName.d.ts +0 -4
  30. package/lib/requests/resolveModuleName.js +0 -28
  31. package/lib/requests/types.d.ts +0 -8
  32. package/lib/requests/types.js +0 -3
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  const createLanguageServicePlugin_1 = require("@volar/typescript/lib/quickstart/createLanguageServicePlugin");
3
- const vue = require("@vue/language-core");
3
+ const core = require("@vue/language-core");
4
4
  const common_1 = require("./lib/common");
5
5
  const collectExtractProps_1 = require("./lib/requests/collectExtractProps");
6
6
  const getComponentDirectives_1 = require("./lib/requests/getComponentDirectives");
@@ -11,36 +11,26 @@ const getComponentSlots_1 = require("./lib/requests/getComponentSlots");
11
11
  const getElementAttrs_1 = require("./lib/requests/getElementAttrs");
12
12
  const getElementNames_1 = require("./lib/requests/getElementNames");
13
13
  const getImportPathForFile_1 = require("./lib/requests/getImportPathForFile");
14
- const getReactiveReferences_1 = require("./lib/requests/getReactiveReferences");
15
14
  const isRefAtPosition_1 = require("./lib/requests/isRefAtPosition");
16
- const windowsPathReg = /\\/g;
17
- const project2Service = new WeakMap();
18
15
  module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)((ts, info) => {
19
16
  const vueOptions = getVueCompilerOptions();
20
- const languagePlugin = vue.createVueLanguagePlugin(ts, info.languageServiceHost.getCompilationSettings(), vueOptions, id => id);
21
- vue.writeGlobalTypes(vueOptions, ts.sys.writeFile);
17
+ const languagePlugin = core.createVueLanguagePlugin(ts, info.languageServiceHost.getCompilationSettings(), vueOptions, id => id);
18
+ vueOptions.globalTypesPath = core.createGlobalTypesWriter(vueOptions, ts.sys.writeFile);
22
19
  addVueCommands();
23
20
  return {
24
21
  languagePlugins: [languagePlugin],
25
22
  setup: language => {
26
- project2Service.set(info.project, [language, info.languageServiceHost, info.languageService]);
27
23
  info.languageService = (0, common_1.createVueLanguageServiceProxy)(ts, language, info.languageService, vueOptions, fileName => fileName);
28
- // #3963
29
- const timer = setInterval(() => {
30
- if (info.project['program']) {
31
- clearInterval(timer);
32
- info.project['program'].__vue__ = { language };
33
- }
34
- }, 50);
24
+ info.project.__vue__ = { language };
35
25
  },
36
26
  };
37
27
  function getVueCompilerOptions() {
38
28
  if (info.project.projectKind === ts.server.ProjectKind.Configured) {
39
29
  const tsconfig = info.project.getProjectName();
40
- return vue.createParsedCommandLine(ts, ts.sys, tsconfig.replace(windowsPathReg, '/')).vueOptions;
30
+ return core.createParsedCommandLine(ts, ts.sys, tsconfig.replace(/\\/g, '/')).vueOptions;
41
31
  }
42
32
  else {
43
- return vue.createParsedCommandLineByJson(ts, ts.sys, info.languageServiceHost.getCurrentDirectory(), {})
33
+ return core.createParsedCommandLineByJson(ts, ts.sys, info.languageServiceHost.getCurrentDirectory(), {})
44
34
  .vueOptions;
45
35
  }
46
36
  }
@@ -77,59 +67,53 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
77
67
  });
78
68
  session.addProtocolHandler('_vue:collectExtractProps', request => {
79
69
  const [fileName, templateCodeRange] = request.arguments;
80
- const { language, languageService, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
81
- return createResponse((0, collectExtractProps_1.collectExtractProps)(ts, language, languageService.getProgram(), sourceScript, virtualCode, templateCodeRange, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
70
+ const { project, language, sourceScript, virtualCode } = getProjectAndVirtualCode(fileName);
71
+ return createResponse((0, collectExtractProps_1.collectExtractProps)(ts, language, project.getLanguageService().getProgram(), sourceScript, virtualCode, templateCodeRange, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
82
72
  });
83
73
  session.addProtocolHandler('_vue:getImportPathForFile', request => {
84
74
  const [fileName, incomingFileName, preferences] = request.arguments;
85
- const { languageServiceHost, languageService } = getLanguageService(fileName);
86
- return createResponse((0, getImportPathForFile_1.getImportPathForFile)(ts, languageServiceHost, languageService.getProgram(), fileName, incomingFileName, preferences));
75
+ const { project } = getProject(fileName);
76
+ return createResponse((0, getImportPathForFile_1.getImportPathForFile)(ts, project, project.getLanguageService().getProgram(), fileName, incomingFileName, preferences));
87
77
  });
88
78
  session.addProtocolHandler('_vue:isRefAtPosition', request => {
89
79
  const [fileName, position] = request.arguments;
90
- const { language, languageService, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
91
- return createResponse((0, isRefAtPosition_1.isRefAtPosition)(ts, language, languageService.getProgram(), sourceScript, virtualCode, position, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
80
+ const { project, language, sourceScript, virtualCode } = getProjectAndVirtualCode(fileName);
81
+ return createResponse((0, isRefAtPosition_1.isRefAtPosition)(ts, language, project.getLanguageService().getProgram(), sourceScript, virtualCode, position, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
92
82
  });
93
83
  session.addProtocolHandler('_vue:getComponentDirectives', request => {
94
84
  const [fileName] = request.arguments;
95
- const { languageService } = getLanguageService(fileName);
96
- return createResponse((0, getComponentDirectives_1.getComponentDirectives)(ts, languageService.getProgram(), fileName));
85
+ const { project } = getProject(fileName);
86
+ return createResponse((0, getComponentDirectives_1.getComponentDirectives)(ts, project.getLanguageService().getProgram(), fileName));
97
87
  });
98
88
  session.addProtocolHandler('_vue:getComponentEvents', request => {
99
89
  const [fileName, tag] = request.arguments;
100
- const { languageService } = getLanguageService(fileName);
101
- return createResponse((0, getComponentEvents_1.getComponentEvents)(ts, languageService.getProgram(), fileName, tag));
90
+ const { project } = getProject(fileName);
91
+ return createResponse((0, getComponentEvents_1.getComponentEvents)(ts, project.getLanguageService().getProgram(), fileName, tag));
102
92
  });
103
93
  session.addProtocolHandler('_vue:getComponentNames', request => {
104
94
  const [fileName] = request.arguments;
105
- const { languageService } = getLanguageService(fileName);
106
- return createResponse((0, getComponentNames_1.getComponentNames)(ts, languageService.getProgram(), fileName));
95
+ const { project } = getProject(fileName);
96
+ return createResponse((0, getComponentNames_1.getComponentNames)(ts, project.getLanguageService().getProgram(), fileName));
107
97
  });
108
98
  session.addProtocolHandler('_vue:getComponentProps', request => {
109
99
  const [fileName, tag] = request.arguments;
110
- const { languageService } = getLanguageService(fileName);
111
- return createResponse((0, getComponentProps_1.getComponentProps)(ts, languageService.getProgram(), fileName, tag));
100
+ const { project } = getProject(fileName);
101
+ return createResponse((0, getComponentProps_1.getComponentProps)(ts, project.getLanguageService().getProgram(), fileName, tag));
112
102
  });
113
103
  session.addProtocolHandler('_vue:getComponentSlots', request => {
114
104
  const [fileName] = request.arguments;
115
- const { languageService, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
116
- return createResponse((0, getComponentSlots_1.getComponentSlots)(ts, languageService.getProgram(), virtualCode));
105
+ const { project, virtualCode } = getProjectAndVirtualCode(fileName);
106
+ return createResponse((0, getComponentSlots_1.getComponentSlots)(ts, project.getLanguageService().getProgram(), virtualCode));
117
107
  });
118
108
  session.addProtocolHandler('_vue:getElementAttrs', request => {
119
109
  const [fileName, tag] = request.arguments;
120
- const { languageService } = getLanguageService(fileName);
121
- return createResponse((0, getElementAttrs_1.getElementAttrs)(ts, languageService.getProgram(), fileName, tag));
110
+ const { project } = getProject(fileName);
111
+ return createResponse((0, getElementAttrs_1.getElementAttrs)(ts, project.getLanguageService().getProgram(), fileName, tag));
122
112
  });
123
113
  session.addProtocolHandler('_vue:getElementNames', request => {
124
114
  const [fileName] = request.arguments;
125
- const { languageService } = getLanguageService(fileName);
126
- return createResponse((0, getElementNames_1.getElementNames)(ts, languageService.getProgram(), fileName));
127
- });
128
- session.addProtocolHandler('_vue:getReactiveReferences', request => {
129
- const [fileName, position] = request.arguments;
130
- const { languageService, language } = getLanguageService(fileName);
131
- const sourceScript = language.scripts.get(fileName);
132
- return createResponse((0, getReactiveReferences_1.getReactiveReferences)(ts, language, languageService, sourceScript, fileName, position, sourceScript?.generated ? sourceScript.snapshot.getLength() : 0));
115
+ const { project } = getProject(fileName);
116
+ return createResponse((0, getElementNames_1.getElementNames)(ts, project.getLanguageService().getProgram(), fileName));
133
117
  });
134
118
  projectService.logger.info('Vue specific commands are successfully added.');
135
119
  function createResponse(res) {
@@ -138,14 +122,14 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
138
122
  responseRequired: true,
139
123
  };
140
124
  }
141
- function getLanguageServiceAndVirtualCode(fileName) {
142
- const service = getLanguageService(fileName);
125
+ function getProjectAndVirtualCode(fileName) {
126
+ const service = getProject(fileName);
143
127
  const sourceScript = service.language.scripts.get(fileName);
144
128
  if (!sourceScript) {
145
129
  throw new Error('No source script found for file: ' + fileName);
146
130
  }
147
131
  const virtualCode = sourceScript.generated?.root;
148
- if (!(virtualCode instanceof vue.VueVirtualCode)) {
132
+ if (!(virtualCode instanceof core.VueVirtualCode)) {
149
133
  throw new Error('No virtual code found for file: ' + fileName);
150
134
  }
151
135
  return {
@@ -154,22 +138,17 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
154
138
  virtualCode,
155
139
  };
156
140
  }
157
- function getLanguageService(fileName) {
158
- // @ts-expect-error
159
- const { project } = session.getFileAndProject({
141
+ function getProject(fileName) {
142
+ const { project } = session['getFileAndProject']({
160
143
  file: fileName,
161
144
  projectFileName: undefined,
162
145
  });
163
- const service = project2Service.get(project);
164
- if (!service) {
165
- throw new Error('No vue service for project: ' + project.getProjectName());
146
+ if (!('__vue__' in project)) {
147
+ throw new Error('No vue project info for project: ' + project.getProjectName());
166
148
  }
167
- const [language, languageServiceHost, languageService] = service;
168
149
  return {
169
- typescript: ts,
170
- languageService,
171
- languageServiceHost,
172
- language,
150
+ project,
151
+ language: project.__vue__.language,
173
152
  };
174
153
  }
175
154
  }
@@ -11,7 +11,6 @@ export interface Requests {
11
11
  getComponentSlots(fileName: string): Response<ReturnType<typeof import('./getComponentSlots.js')['getComponentSlots']>>;
12
12
  getElementAttrs(fileName: string, tag: string): Response<ReturnType<typeof import('./getElementAttrs.js')['getElementAttrs']>>;
13
13
  getElementNames(fileName: string): Response<ReturnType<typeof import('./getElementNames.js')['getElementNames']>>;
14
- getReactiveReferences(fileName: string, position: number): Response<ReturnType<typeof import('./getReactiveReferences.js')['getReactiveReferences']>>;
15
14
  getDocumentHighlights(fileName: string, position: number): Response<ts.DocumentHighlights[]>;
16
15
  getEncodedSemanticClassifications(fileName: string, span: ts.TextSpan): Response<ts.Classifications>;
17
16
  getQuickInfoAtPosition(fileName: string, position: ts.LineAndCharacter): Response<string>;
@@ -35,7 +35,10 @@ function isRefAtPosition(ts, language, program, sourceScript, virtualCode, posit
35
35
  const checker = program.getTypeChecker();
36
36
  const type = checker.getTypeAtLocation(node);
37
37
  const props = type.getProperties();
38
- return props.some(prop => prop.escapedName === 'value' && prop.flags & ts.SymbolFlags.Accessor);
38
+ return props.some(prop => prop.declarations?.some(decl => ts.isPropertySignature(decl)
39
+ && ts.isComputedPropertyName(decl.name)
40
+ && ts.isIdentifier(decl.name.expression)
41
+ && decl.name.expression.text === 'RefSymbol'));
39
42
  function findPositionIdentifier(sourceFile, node, offset) {
40
43
  let result;
41
44
  node.forEachChild(child => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/typescript-plugin",
3
- "version": "3.1.0-alpha.0",
3
+ "version": "3.1.1",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "**/*.js",
@@ -14,7 +14,7 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@volar/typescript": "2.4.23",
17
- "@vue/language-core": "3.1.0-alpha.0",
17
+ "@vue/language-core": "3.1.1",
18
18
  "@vue/shared": "^3.5.0",
19
19
  "path-browserify": "^1.0.1"
20
20
  },
@@ -22,5 +22,5 @@
22
22
  "@types/node": "^22.10.4",
23
23
  "@types/path-browserify": "^1.0.1"
24
24
  },
25
- "gitHead": "adcbd8b1a7bf432844230755de999d22b95dc160"
25
+ "gitHead": "3ea27dacce47613f49ae83e96e3aa271ee54746e"
26
26
  }
package/lib/proxy.d.ts DELETED
@@ -1,3 +0,0 @@
1
- import { type Language, type VueCompilerOptions } from '@vue/language-core';
2
- import type * as ts from 'typescript';
3
- export declare function createVueLanguageServiceProxy(ts: typeof import('typescript'), language: Language<string>, languageService: ts.LanguageService, vueOptions: VueCompilerOptions): ts.LanguageService;
package/lib/proxy.js DELETED
@@ -1,227 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createVueLanguageServiceProxy = createVueLanguageServiceProxy;
4
- const language_core_1 = require("@vue/language-core");
5
- const shared_1 = require("@vue/shared");
6
- const windowsPathReg = /\\/g;
7
- function createVueLanguageServiceProxy(ts, language, languageService, vueOptions) {
8
- const proxyCache = new Map();
9
- const getProxyMethod = (target, p) => {
10
- switch (p) {
11
- case 'getCompletionsAtPosition':
12
- return getCompletionsAtPosition(ts, language, vueOptions, target[p]);
13
- case 'getCompletionEntryDetails':
14
- return getCompletionEntryDetails(language, target[p]);
15
- case 'getCodeFixesAtPosition':
16
- return getCodeFixesAtPosition(target[p]);
17
- case 'getDefinitionAndBoundSpan':
18
- return getDefinitionAndBoundSpan(ts, language, languageService, vueOptions, target[p]);
19
- }
20
- };
21
- return new Proxy(languageService, {
22
- get(target, p, receiver) {
23
- if (!proxyCache.has(p)) {
24
- proxyCache.set(p, getProxyMethod(target, p));
25
- }
26
- return proxyCache.get(p) ?? Reflect.get(target, p, receiver);
27
- },
28
- });
29
- }
30
- function getCompletionsAtPosition(ts, language, vueOptions, getCompletionsAtPosition) {
31
- return (filePath, position, options, formattingSettings) => {
32
- const fileName = filePath.replace(windowsPathReg, '/');
33
- const result = getCompletionsAtPosition(fileName, position, options, formattingSettings);
34
- if (result) {
35
- // filter __VLS_
36
- result.entries = result.entries.filter(entry => !entry.name.includes('__VLS_')
37
- && !entry.labelDetails?.description?.includes('__VLS_'));
38
- // filter global variables in template and styles
39
- const sourceScript = language.scripts.get(fileName);
40
- const root = sourceScript?.generated?.root;
41
- if (root instanceof language_core_1.VueVirtualCode) {
42
- const blocks = [
43
- root.sfc.template,
44
- ...root.sfc.styles,
45
- ];
46
- const ranges = blocks.filter(Boolean).map(block => [
47
- block.startTagEnd,
48
- block.endTagStart,
49
- ]);
50
- if (ranges.some(([start, end]) => position >= start && position <= end)) {
51
- const globalKinds = new Set(['var', 'function', 'module']);
52
- const globalsOrKeywords = ts.Completions.SortText.GlobalsOrKeywords;
53
- const sortTexts = new Set([
54
- globalsOrKeywords,
55
- 'z' + globalsOrKeywords,
56
- globalsOrKeywords + '1',
57
- ]);
58
- result.entries = result.entries.filter(entry => !(entry.kind === 'const' && entry.name in vueOptions.macros) && (!globalKinds.has(entry.kind)
59
- || !sortTexts.has(entry.sortText)
60
- || (0, shared_1.isGloballyAllowed)(entry.name)));
61
- }
62
- }
63
- // modify label
64
- for (const item of result.entries) {
65
- if (item.source) {
66
- const originalName = item.name;
67
- for (const vueExt of vueOptions.extensions) {
68
- const suffix = (0, shared_1.capitalize)(vueExt.slice(1)); // .vue -> Vue
69
- if (item.source.endsWith(vueExt) && item.name.endsWith(suffix)) {
70
- item.name = (0, shared_1.capitalize)(item.name.slice(0, -suffix.length));
71
- if (item.insertText) {
72
- // #2286
73
- item.insertText = item.insertText.replace(`${suffix}$1`, '$1');
74
- }
75
- if (item.data) {
76
- // @ts-expect-error
77
- item.data.__isComponentAutoImport = {
78
- ext: vueExt,
79
- suffix,
80
- originalName,
81
- newName: item.insertText,
82
- };
83
- }
84
- break;
85
- }
86
- }
87
- if (item.data) {
88
- // @ts-expect-error
89
- item.data.__isAutoImport = {
90
- fileName,
91
- };
92
- }
93
- }
94
- }
95
- }
96
- return result;
97
- };
98
- }
99
- function getCompletionEntryDetails(language, getCompletionEntryDetails) {
100
- return (...args) => {
101
- const details = getCompletionEntryDetails(...args);
102
- // modify import statement
103
- // @ts-expect-error
104
- if (args[6]?.__isComponentAutoImport) {
105
- // @ts-expect-error
106
- const { originalName, newName } = args[6].__isComponentAutoImport;
107
- for (const codeAction of details?.codeActions ?? []) {
108
- for (const change of codeAction.changes) {
109
- for (const textChange of change.textChanges) {
110
- textChange.newText = textChange.newText.replace('import ' + originalName + ' from ', 'import ' + newName + ' from ');
111
- }
112
- }
113
- }
114
- }
115
- // @ts-expect-error
116
- if (args[6]?.__isAutoImport) {
117
- // @ts-expect-error
118
- const { fileName } = args[6].__isAutoImport;
119
- const sourceScript = language.scripts.get(fileName);
120
- if (sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode) {
121
- const { sfc } = sourceScript.generated.root;
122
- if (!sfc.script && !sfc.scriptSetup) {
123
- for (const codeAction of details?.codeActions ?? []) {
124
- for (const change of codeAction.changes) {
125
- for (const textChange of change.textChanges) {
126
- textChange.newText = `<script setup lang="ts">${textChange.newText}</script>\n\n`;
127
- break;
128
- }
129
- break;
130
- }
131
- break;
132
- }
133
- }
134
- }
135
- }
136
- return details;
137
- };
138
- }
139
- function getCodeFixesAtPosition(getCodeFixesAtPosition) {
140
- return (...args) => {
141
- let result = getCodeFixesAtPosition(...args);
142
- // filter __VLS_
143
- result = result.filter(entry => !entry.description.includes('__VLS_'));
144
- return result;
145
- };
146
- }
147
- function getDefinitionAndBoundSpan(ts, language, languageService, vueOptions, getDefinitionAndBoundSpan) {
148
- return (fileName, position) => {
149
- const result = getDefinitionAndBoundSpan(fileName, position);
150
- if (!result?.definitions?.length) {
151
- return result;
152
- }
153
- const program = languageService.getProgram();
154
- const sourceScript = language.scripts.get(fileName);
155
- if (!sourceScript?.generated) {
156
- return result;
157
- }
158
- const root = sourceScript.generated.root;
159
- if (!(root instanceof language_core_1.VueVirtualCode)) {
160
- return result;
161
- }
162
- if (!root.sfc.template
163
- || position < root.sfc.template.startTagEnd
164
- || position > root.sfc.template.endTagStart) {
165
- return result;
166
- }
167
- const definitions = new Set(result.definitions);
168
- const skippedDefinitions = [];
169
- // #5275
170
- if (result.definitions.length >= 2) {
171
- for (const definition of result.definitions) {
172
- if (root.sfc.content[definition.textSpan.start - 1] === '@'
173
- || root.sfc.content.slice(definition.textSpan.start - 5, definition.textSpan.start) === 'v-on:') {
174
- skippedDefinitions.push(definition);
175
- }
176
- }
177
- }
178
- for (const definition of result.definitions) {
179
- if (vueOptions.extensions.some(ext => definition.fileName.endsWith(ext))) {
180
- continue;
181
- }
182
- const sourceFile = program.getSourceFile(definition.fileName);
183
- if (!sourceFile) {
184
- continue;
185
- }
186
- visit(sourceFile, definition, sourceFile);
187
- }
188
- for (const definition of skippedDefinitions) {
189
- definitions.delete(definition);
190
- }
191
- return {
192
- definitions: [...definitions],
193
- textSpan: result.textSpan,
194
- };
195
- function visit(node, definition, sourceFile) {
196
- if (ts.isPropertySignature(node) && node.type) {
197
- proxy(node.name, node.type, definition, sourceFile);
198
- }
199
- else if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name) && node.type && !node.initializer) {
200
- proxy(node.name, node.type, definition, sourceFile);
201
- }
202
- else {
203
- ts.forEachChild(node, child => visit(child, definition, sourceFile));
204
- }
205
- }
206
- function proxy(name, type, definition, sourceFile) {
207
- const { textSpan, fileName } = definition;
208
- const start = name.getStart(sourceFile);
209
- const end = name.getEnd();
210
- if (start !== textSpan.start || end - start !== textSpan.length) {
211
- return;
212
- }
213
- if (!ts.isIndexedAccessTypeNode(type)) {
214
- return;
215
- }
216
- const pos = type.indexType.getStart(sourceFile);
217
- const res = getDefinitionAndBoundSpan(fileName, pos);
218
- if (res?.definitions?.length) {
219
- for (const definition of res.definitions) {
220
- definitions.add(definition);
221
- }
222
- skippedDefinitions.push(definition);
223
- }
224
- }
225
- };
226
- }
227
- //# sourceMappingURL=proxy.js.map
@@ -1 +0,0 @@
1
- export {};
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=getComponentHighlights.js.map
@@ -1 +0,0 @@
1
- export { };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=getCurrentComponentSlots.js.map
@@ -1 +0,0 @@
1
- export { };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=getDefineSlotNames.js.map
@@ -1,2 +0,0 @@
1
- import type { RequestContext } from './types';
2
- export declare function getDefineSlots(this: RequestContext, fileName: string): string[] | undefined;
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDefineSlots = getDefineSlots;
4
- const language_core_1 = require("@vue/language-core");
5
- const utils_1 = require("./utils");
6
- function getDefineSlots(fileName) {
7
- const { typescript: ts, language, languageService, getFileId } = this;
8
- const volarFile = language.scripts.get(getFileId(fileName));
9
- if (!(volarFile?.generated?.root instanceof language_core_1.VueVirtualCode)) {
10
- return;
11
- }
12
- const vueCode = volarFile.generated.root;
13
- const slots = (0, utils_1.getTypeAliasType)(ts, languageService, vueCode, '__VLS_Slots');
14
- return slots?.type.getProperties().map(prop => prop.getName());
15
- }
16
- //# sourceMappingURL=getDefineSlots.js.map
@@ -1,10 +0,0 @@
1
- import type { RequestContext } from './types';
2
- export interface ComponentPropInfo {
3
- name: string;
4
- required?: boolean;
5
- deprecated?: boolean;
6
- isAttribute?: boolean;
7
- commentMarkdown?: string;
8
- values?: string[];
9
- }
10
- export declare function getMissingPropsDiagnostics(this: RequestContext, fileName: string): undefined;
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getMissingPropsDiagnostics = getMissingPropsDiagnostics;
4
- const language_core_1 = require("@vue/language-core");
5
- function getMissingPropsDiagnostics(fileName) {
6
- const { typescript: ts, language, languageService, asScriptId } = this;
7
- const volarFile = language.scripts.get(asScriptId(fileName));
8
- if (!(volarFile?.generated?.root instanceof language_core_1.VueVirtualCode)) {
9
- return;
10
- }
11
- const vueCode = volarFile.generated.root;
12
- const program = languageService.getProgram();
13
- const sourceFile = program.getSourceFile(vueCode.fileName);
14
- if (!sourceFile) {
15
- return;
16
- }
17
- const checker = program.getTypeChecker();
18
- ts.forEachChild(sourceFile, function visit(node) {
19
- if (ts.isVariableDeclaration(node)
20
- && node.initializer
21
- && ts.isCallExpression(node.initializer)
22
- && ts.isIdentifier(node.initializer.expression)
23
- && /^__VLS_\d+$/.test(node.initializer.expression.text)) {
24
- const firstArg = node.initializer.arguments[0];
25
- const type = checker.getTypeAtLocation(firstArg);
26
- const contextualType = checker.getContextualType(firstArg);
27
- if (contextualType) {
28
- const subtype = contextualType.isUnion()
29
- ? contextualType.types.find(subtype => checker.isTypeAssignableTo(subtype, type))
30
- : contextualType;
31
- void subtype;
32
- }
33
- }
34
- else {
35
- ts.forEachChild(node, visit);
36
- }
37
- });
38
- return undefined;
39
- }
40
- //# sourceMappingURL=getMissingPropsDiagnostics.js.map
@@ -1,2 +0,0 @@
1
- import type { RequestContext } from './types';
2
- export declare function getPropertiesAtLocation(this: RequestContext, fileName: string, position: number): string[];
@@ -1,63 +0,0 @@
1
- "use strict";
2
- /// <reference types="@volar/typescript" />
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.getPropertiesAtLocation = getPropertiesAtLocation;
5
- const language_core_1 = require("@vue/language-core");
6
- function getPropertiesAtLocation(fileName, position) {
7
- const { languageService, language, typescript: ts } = this;
8
- // mapping
9
- const sourceScript = language.scripts.get(fileName);
10
- const root = sourceScript?.generated?.root;
11
- if (!sourceScript?.generated || !(root instanceof language_core_1.VueVirtualCode)) {
12
- return [];
13
- }
14
- const virtualScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(root);
15
- if (!virtualScript) {
16
- return [];
17
- }
18
- let mapped = false;
19
- for (const [_sourceScript, map] of language.maps.forEach(virtualScript.code)) {
20
- for (const [position2, mapping] of map.toGeneratedLocation(position)) {
21
- if ((0, language_core_1.isCompletionEnabled)(mapping.data)) {
22
- position = position2;
23
- mapped = true;
24
- break;
25
- }
26
- }
27
- if (mapped) {
28
- break;
29
- }
30
- }
31
- if (!mapped) {
32
- return [];
33
- }
34
- position += sourceScript.snapshot.getLength();
35
- const program = languageService.getProgram();
36
- const sourceFile = program.getSourceFile(fileName);
37
- if (!sourceFile) {
38
- return [];
39
- }
40
- const node = findPositionIdentifier(sourceFile, sourceFile, position);
41
- if (!node) {
42
- return [];
43
- }
44
- const checker = program.getTypeChecker();
45
- const type = checker.getTypeAtLocation(node);
46
- const props = type.getProperties();
47
- return props.map(prop => prop.name);
48
- function findPositionIdentifier(sourceFile, node, offset) {
49
- let result;
50
- node.forEachChild(child => {
51
- if (!result) {
52
- if (child.end === offset && ts.isIdentifier(child)) {
53
- result = child;
54
- }
55
- else if (child.end >= offset && child.getStart(sourceFile) < offset) {
56
- result = findPositionIdentifier(sourceFile, child, offset);
57
- }
58
- }
59
- });
60
- return result;
61
- }
62
- }
63
- //# sourceMappingURL=getPropertiesAtLocation.js.map
@@ -1,12 +0,0 @@
1
- import { type Language, type SourceScript } from '@vue/language-core';
2
- import type * as ts from 'typescript';
3
- export declare function getReactiveReferences(ts: typeof import('typescript'), language: Language, languageService: ts.LanguageService, sourceScript: SourceScript | undefined, fileName: string, position: number, leadingOffset?: number): {
4
- dependencyRanges: {
5
- start: number;
6
- end: number;
7
- }[];
8
- dependentRanges: {
9
- start: number;
10
- end: number;
11
- }[];
12
- } | undefined;