@vue/typescript-plugin 3.0.7-alpha.1 → 3.0.8

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.js CHANGED
@@ -11,13 +11,14 @@ 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 getPropertiesAtLocation_1 = require("./lib/requests/getPropertiesAtLocation");
14
+ const getReactiveReferences_1 = require("./lib/requests/getReactiveReferences");
15
+ const isRefAtPosition_1 = require("./lib/requests/isRefAtPosition");
15
16
  const windowsPathReg = /\\/g;
16
17
  const project2Service = new WeakMap();
17
18
  module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)((ts, info) => {
18
19
  const vueOptions = getVueCompilerOptions();
19
- vue.writeGlobalTypes(vueOptions, ts.sys.writeFile);
20
20
  const languagePlugin = vue.createVueLanguagePlugin(ts, info.languageServiceHost.getCompilationSettings(), vueOptions, id => id);
21
+ vue.writeGlobalTypes(vueOptions, ts.sys.writeFile);
21
22
  addVueCommands();
22
23
  return {
23
24
  languagePlugins: [languagePlugin],
@@ -47,135 +48,130 @@ module.exports = (0, createLanguageServicePlugin_1.createLanguageServicePlugin)(
47
48
  function addVueCommands() {
48
49
  const projectService = info.project.projectService;
49
50
  projectService.logger.info('Vue: called handler processing ' + info.project.projectKind);
50
- const session = info.session;
51
- if (!session) {
51
+ if (!info.session) {
52
52
  projectService.logger.info('Vue: there is no session in info.');
53
53
  return;
54
54
  }
55
+ const session = info.session;
55
56
  if (!session.addProtocolHandler) {
56
57
  // addProtocolHandler was introduced in TS 4.4 or 4.5 in 2021, see https://github.com/microsoft/TypeScript/issues/43893
57
58
  projectService.logger.info('Vue: there is no addProtocolHandler method.');
58
59
  return;
59
60
  }
60
- if (session.handlers.has('_vue:projectInfo')) {
61
+ // @ts-expect-error
62
+ const handlers = session.handlers;
63
+ if (handlers.has('_vue:projectInfo')) {
61
64
  return;
62
65
  }
63
66
  session.addProtocolHandler('_vue:projectInfo', request => {
64
- return session.handlers.get('projectInfo')?.(request);
67
+ return handlers.get('projectInfo')(request);
65
68
  });
66
69
  session.addProtocolHandler('_vue:documentHighlights-full', request => {
67
- return session.handlers.get('documentHighlights-full')?.(request);
70
+ return handlers.get('documentHighlights-full')(request);
68
71
  });
69
72
  session.addProtocolHandler('_vue:encodedSemanticClassifications-full', request => {
70
- return session.handlers.get('encodedSemanticClassifications-full')?.(request);
73
+ return handlers.get('encodedSemanticClassifications-full')(request);
71
74
  });
72
75
  session.addProtocolHandler('_vue:quickinfo', request => {
73
- return session.handlers.get('quickinfo')?.(request);
76
+ return handlers.get('quickinfo')(request);
74
77
  });
75
78
  session.addProtocolHandler('_vue:collectExtractProps', request => {
76
79
  const [fileName, templateCodeRange] = request.arguments;
77
- const { language, program, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
78
- return {
79
- response: (0, collectExtractProps_1.collectExtractProps)(ts, language, program, sourceScript, virtualCode, templateCodeRange, true),
80
- };
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));
81
82
  });
82
83
  session.addProtocolHandler('_vue:getImportPathForFile', request => {
83
84
  const [fileName, incomingFileName, preferences] = request.arguments;
84
- const { languageServiceHost, program } = getLanguageService(fileName);
85
- return {
86
- response: (0, getImportPathForFile_1.getImportPathForFile)(ts, languageServiceHost, program, fileName, incomingFileName, preferences),
87
- };
85
+ const { languageServiceHost, languageService } = getLanguageService(fileName);
86
+ return createResponse((0, getImportPathForFile_1.getImportPathForFile)(ts, languageServiceHost, languageService.getProgram(), fileName, incomingFileName, preferences));
88
87
  });
89
- session.addProtocolHandler('_vue:getPropertiesAtLocation', request => {
88
+ session.addProtocolHandler('_vue:isRefAtPosition', request => {
90
89
  const [fileName, position] = request.arguments;
91
- const { language, program, sourceScript, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
92
- return {
93
- response: (0, getPropertiesAtLocation_1.getPropertiesAtLocation)(ts, language, program, sourceScript, virtualCode, position, true),
94
- };
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));
95
92
  });
96
93
  session.addProtocolHandler('_vue:getComponentDirectives', request => {
97
94
  const [fileName] = request.arguments;
98
- const { program } = getLanguageService(fileName);
99
- return {
100
- response: (0, getComponentDirectives_1.getComponentDirectives)(ts, program, fileName),
101
- };
95
+ const { languageService } = getLanguageService(fileName);
96
+ return createResponse((0, getComponentDirectives_1.getComponentDirectives)(ts, languageService.getProgram(), fileName));
102
97
  });
103
98
  session.addProtocolHandler('_vue:getComponentEvents', request => {
104
99
  const [fileName, tag] = request.arguments;
105
- const { program } = getLanguageService(fileName);
106
- return {
107
- response: (0, getComponentEvents_1.getComponentEvents)(ts, program, fileName, tag),
108
- };
100
+ const { languageService } = getLanguageService(fileName);
101
+ return createResponse((0, getComponentEvents_1.getComponentEvents)(ts, languageService.getProgram(), fileName, tag));
109
102
  });
110
103
  session.addProtocolHandler('_vue:getComponentNames', request => {
111
104
  const [fileName] = request.arguments;
112
- const { program } = getLanguageService(fileName);
113
- return {
114
- response: (0, getComponentNames_1.getComponentNames)(ts, program, fileName),
115
- };
105
+ const { languageService } = getLanguageService(fileName);
106
+ return createResponse((0, getComponentNames_1.getComponentNames)(ts, languageService.getProgram(), fileName));
116
107
  });
117
108
  session.addProtocolHandler('_vue:getComponentProps', request => {
118
109
  const [fileName, tag] = request.arguments;
119
- const { program } = getLanguageService(fileName);
120
- return {
121
- response: (0, getComponentProps_1.getComponentProps)(ts, program, fileName, tag),
122
- };
110
+ const { languageService } = getLanguageService(fileName);
111
+ return createResponse((0, getComponentProps_1.getComponentProps)(ts, languageService.getProgram(), fileName, tag));
123
112
  });
124
113
  session.addProtocolHandler('_vue:getComponentSlots', request => {
125
114
  const [fileName] = request.arguments;
126
- const { program, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
127
- return {
128
- response: (0, getComponentSlots_1.getComponentSlots)(ts, program, virtualCode),
129
- };
115
+ const { languageService, virtualCode } = getLanguageServiceAndVirtualCode(fileName);
116
+ return createResponse((0, getComponentSlots_1.getComponentSlots)(ts, languageService.getProgram(), virtualCode));
130
117
  });
131
118
  session.addProtocolHandler('_vue:getElementAttrs', request => {
132
119
  const [fileName, tag] = request.arguments;
133
- const { program } = getLanguageService(fileName);
134
- return {
135
- response: (0, getElementAttrs_1.getElementAttrs)(ts, program, fileName, tag),
136
- };
120
+ const { languageService } = getLanguageService(fileName);
121
+ return createResponse((0, getElementAttrs_1.getElementAttrs)(ts, languageService.getProgram(), fileName, tag));
137
122
  });
138
123
  session.addProtocolHandler('_vue:getElementNames', request => {
139
124
  const [fileName] = request.arguments;
140
- const { program } = getLanguageService(fileName);
141
- return {
142
- response: (0, getElementNames_1.getElementNames)(ts, program, fileName),
143
- };
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 { language } = getLanguageService(fileName);
131
+ const sourceScript = language.scripts.get(fileName);
132
+ return createResponse((0, getReactiveReferences_1.getReactiveReferences)(ts, language, sourceScript, position, sourceScript.generated ? sourceScript.snapshot.getLength() : 0));
144
133
  });
145
134
  projectService.logger.info('Vue specific commands are successfully added.');
146
- }
147
- function getLanguageServiceAndVirtualCode(fileName) {
148
- const service = getLanguageService(fileName);
149
- const sourceScript = service?.language.scripts.get(fileName);
150
- if (!sourceScript) {
151
- throw new Error('No source script found for file: ' + fileName);
135
+ function createResponse(res) {
136
+ return {
137
+ response: res,
138
+ responseRequired: true,
139
+ };
152
140
  }
153
- const virtualCode = sourceScript.generated?.root;
154
- if (!(virtualCode instanceof vue.VueVirtualCode)) {
155
- throw new Error('No virtual code found for file: ' + fileName);
141
+ function getLanguageServiceAndVirtualCode(fileName) {
142
+ const service = getLanguageService(fileName);
143
+ const sourceScript = service.language.scripts.get(fileName);
144
+ if (!sourceScript) {
145
+ throw new Error('No source script found for file: ' + fileName);
146
+ }
147
+ const virtualCode = sourceScript.generated?.root;
148
+ if (!(virtualCode instanceof vue.VueVirtualCode)) {
149
+ throw new Error('No virtual code found for file: ' + fileName);
150
+ }
151
+ return {
152
+ ...service,
153
+ sourceScript,
154
+ virtualCode,
155
+ };
156
156
  }
157
- return {
158
- ...service,
159
- sourceScript,
160
- virtualCode,
161
- };
162
- }
163
- function getLanguageService(fileName) {
164
- const { project } = info.session.getFileAndProject({
165
- file: fileName,
166
- projectFileName: undefined,
167
- });
168
- const service = project2Service.get(project);
169
- if (!service) {
170
- throw new Error('No vue service for project: ' + project.getProjectName());
157
+ function getLanguageService(fileName) {
158
+ // @ts-expect-error
159
+ const { project } = session.getFileAndProject({
160
+ file: fileName,
161
+ projectFileName: undefined,
162
+ });
163
+ const service = project2Service.get(project);
164
+ if (!service) {
165
+ throw new Error('No vue service for project: ' + project.getProjectName());
166
+ }
167
+ const [language, languageServiceHost, languageService] = service;
168
+ return {
169
+ typescript: ts,
170
+ languageService,
171
+ languageServiceHost,
172
+ language,
173
+ };
171
174
  }
172
- const [language, languageServiceHost, languageService] = service;
173
- return {
174
- typescript: ts,
175
- program: languageService.getProgram(),
176
- languageServiceHost,
177
- language,
178
- };
179
175
  }
180
176
  });
181
177
  //# sourceMappingURL=index.js.map
package/lib/common.js CHANGED
@@ -20,14 +20,12 @@ function createVueLanguageServiceProxy(ts, language, languageService, vueOptions
20
20
  };
21
21
  return new Proxy(languageService, {
22
22
  get(target, p, receiver) {
23
- if (getProxyMethod) {
24
- if (!proxyCache.has(p)) {
25
- proxyCache.set(p, getProxyMethod(target, p));
26
- }
27
- const proxyMethod = proxyCache.get(p);
28
- if (proxyMethod) {
29
- return proxyMethod;
30
- }
23
+ if (!proxyCache.has(p)) {
24
+ proxyCache.set(p, getProxyMethod(target, p));
25
+ }
26
+ const proxyMethod = proxyCache.get(p);
27
+ if (proxyMethod) {
28
+ return proxyMethod;
31
29
  }
32
30
  return Reflect.get(target, p, receiver);
33
31
  },
@@ -127,8 +125,8 @@ function getCompletionEntryDetails(language, getCompletionEntryDetails) {
127
125
  const { fileName } = args[6].__isAutoImport;
128
126
  const sourceScript = language.scripts.get(fileName);
129
127
  if (sourceScript?.generated?.root instanceof language_core_1.VueVirtualCode) {
130
- const sfc = sourceScript.generated.root.vueSfc;
131
- if (!sfc?.descriptor.script && !sfc?.descriptor.scriptSetup) {
128
+ const { vueSfc } = sourceScript.generated.root;
129
+ if (!vueSfc?.descriptor.script && !vueSfc?.descriptor.scriptSetup) {
132
130
  for (const codeAction of details?.codeActions ?? []) {
133
131
  for (const change of codeAction.changes) {
134
132
  for (const textChange of change.textChanges) {
@@ -5,5 +5,5 @@ interface ExtractPropsInfo {
5
5
  type: string;
6
6
  model: boolean;
7
7
  }
8
- export declare function collectExtractProps(ts: typeof import('typescript'), language: Language, program: ts.Program, sourceScript: SourceScript, virtualCode: VueVirtualCode, templateCodeRange: [number, number], isTsPlugin: boolean): ExtractPropsInfo[];
8
+ export declare function collectExtractProps(ts: typeof import('typescript'), language: Language, program: ts.Program, sourceScript: SourceScript, virtualCode: VueVirtualCode, templateCodeRange: [number, number], leadingOffset?: number): ExtractPropsInfo[];
9
9
  export {};
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.collectExtractProps = collectExtractProps;
4
4
  const language_core_1 = require("@vue/language-core");
5
- function collectExtractProps(ts, language, program, sourceScript, virtualCode, templateCodeRange, isTsPlugin) {
5
+ function collectExtractProps(ts, language, program, sourceScript, virtualCode, templateCodeRange, leadingOffset = 0) {
6
6
  const result = new Map();
7
7
  const sourceFile = program.getSourceFile(virtualCode.fileName);
8
8
  const checker = program.getTypeChecker();
@@ -17,7 +17,7 @@ function collectExtractProps(ts, language, program, sourceScript, virtualCode, t
17
17
  const { name } = node;
18
18
  for (const map of maps) {
19
19
  let mapped = false;
20
- for (const source of map.toSourceLocation(name.getEnd() - (isTsPlugin ? sourceScript.snapshot.getLength() : 0))) {
20
+ for (const source of map.toSourceLocation(name.getEnd() - leadingOffset)) {
21
21
  if (source[0] >= sfc.template.startTagEnd + templateCodeRange[0]
22
22
  && source[0] <= sfc.template.startTagEnd + templateCodeRange[1]
23
23
  && (0, language_core_1.isSemanticTokensEnabled)(source[1].data)) {
@@ -25,8 +25,8 @@ function getComponentEvents(ts, program, fileName, tag) {
25
25
  if (emitSymbol) {
26
26
  const emitType = checker.getTypeOfSymbolAtLocation(emitSymbol, components.node);
27
27
  for (const call of emitType.getCallSignatures()) {
28
- const eventNameParamSymbol = call.parameters[0];
29
- if (eventNameParamSymbol) {
28
+ if (call.parameters.length) {
29
+ const eventNameParamSymbol = call.parameters[0];
30
30
  const eventNameParamType = checker.getTypeOfSymbolAtLocation(eventNameParamSymbol, components.node);
31
31
  if (eventNameParamType.isStringLiteral()) {
32
32
  result.add(eventNameParamType.value);
@@ -5,7 +5,7 @@ const utils_1 = require("./utils");
5
5
  function getComponentNames(ts, program, fileName) {
6
6
  const names = (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_components')
7
7
  ?.type
8
- ?.getProperties()
8
+ .getProperties()
9
9
  .map(c => c.name)
10
10
  .filter(entry => !entry.includes('$') && !entry.startsWith('_'))
11
11
  ?? [];
@@ -14,8 +14,8 @@ function getComponentProps(ts, program, fileName, tag) {
14
14
  const result = new Map();
15
15
  const checker = program.getTypeChecker();
16
16
  for (const sig of componentType.getCallSignatures()) {
17
- const propParam = sig.parameters[0];
18
- if (propParam) {
17
+ if (sig.parameters.length) {
18
+ const propParam = sig.parameters[0];
19
19
  const propsType = checker.getTypeOfSymbolAtLocation(propParam, components.node);
20
20
  const props = propsType.getProperties();
21
21
  for (const prop of props) {
@@ -5,7 +5,7 @@ const utils_1 = require("./utils");
5
5
  function getElementNames(ts, program, fileName) {
6
6
  return (0, utils_1.getVariableType)(ts, program, fileName, '__VLS_elements')
7
7
  ?.type
8
- ?.getProperties()
8
+ .getProperties()
9
9
  .map(c => c.name)
10
10
  ?? [];
11
11
  }
@@ -1,4 +1,2 @@
1
1
  import type * as ts from 'typescript';
2
- export declare function getImportPathForFile(ts: typeof import('typescript'), languageServiceHost: ts.LanguageServiceHost, program: ts.Program, fileName: string, incomingFileName: string, preferences: ts.UserPreferences): {
3
- path?: string;
4
- };
2
+ export declare function getImportPathForFile(ts: typeof import('typescript'), languageServiceHost: ts.LanguageServiceHost, program: ts.Program, fileName: string, incomingFileName: string, preferences: ts.UserPreferences): string | undefined;
@@ -4,14 +4,12 @@ exports.getImportPathForFile = getImportPathForFile;
4
4
  function getImportPathForFile(ts, languageServiceHost, program, fileName, incomingFileName, preferences) {
5
5
  const incomingFile = program.getSourceFile(incomingFileName);
6
6
  const sourceFile = program.getSourceFile(fileName);
7
- if (!program || !sourceFile || !incomingFile) {
8
- return {};
7
+ if (!sourceFile || !incomingFile) {
8
+ return;
9
9
  }
10
10
  const getModuleSpecifiersWithCacheInfo = ts.moduleSpecifiers.getModuleSpecifiersWithCacheInfo;
11
11
  const resolutionHost = ts.createModuleSpecifierResolutionHost(program, languageServiceHost);
12
12
  const { moduleSpecifiers } = getModuleSpecifiersWithCacheInfo(incomingFile.symbol, program.getTypeChecker(), languageServiceHost.getCompilationSettings(), sourceFile, resolutionHost, preferences);
13
- return {
14
- path: moduleSpecifiers[0],
15
- };
13
+ return moduleSpecifiers[0];
16
14
  }
17
15
  //# sourceMappingURL=getImportPathForFile.js.map
@@ -0,0 +1,5 @@
1
+ import { type Language, type SourceScript } from '@vue/language-core';
2
+ export declare function getReactiveReferences(ts: typeof import('typescript'), language: Language<string>, sourceScript: SourceScript<string>, position: number, leadingOffset?: number): {
3
+ dependencyRanges: ts.TextRange[];
4
+ dependentRanges: ts.TextRange[];
5
+ } | undefined;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getReactiveReferences = getReactiveReferences;
4
+ const typescript_1 = require("@volar/typescript");
5
+ const laplacenoma_1 = require("laplacenoma");
6
+ const rulesVue = require("laplacenoma/rules/vue");
7
+ const analyzer = (0, laplacenoma_1.createAnalyzer)({
8
+ rules: rulesVue,
9
+ });
10
+ let currentVersion = -1;
11
+ let currentFileName = '';
12
+ let currentSnapshot;
13
+ let languageService;
14
+ let languageServiceHost;
15
+ function getReactiveReferences(ts, language, sourceScript, position, leadingOffset = 0) {
16
+ if (currentSnapshot !== sourceScript.snapshot || currentFileName !== sourceScript.id) {
17
+ currentSnapshot = sourceScript.snapshot;
18
+ currentFileName = sourceScript.id;
19
+ currentVersion++;
20
+ }
21
+ if (!languageService) {
22
+ languageServiceHost = {
23
+ getProjectVersion: () => currentVersion.toString(),
24
+ getScriptVersion: () => currentVersion.toString(),
25
+ getScriptFileNames: () => [currentFileName],
26
+ getScriptSnapshot: fileName => fileName === currentFileName ? currentSnapshot : undefined,
27
+ getCompilationSettings: () => ({ allowJs: true, allowNonTsExtensions: true }),
28
+ getCurrentDirectory: () => '',
29
+ getDefaultLibFileName: () => '',
30
+ readFile: () => undefined,
31
+ fileExists: fileName => fileName === currentFileName,
32
+ };
33
+ (0, typescript_1.decorateLanguageServiceHost)(ts, language, languageServiceHost);
34
+ const proxied = (0, typescript_1.createProxyLanguageService)(ts.createLanguageService(languageServiceHost));
35
+ proxied.initialize(language);
36
+ languageService = proxied.proxy;
37
+ }
38
+ const sourceFile = languageService.getProgram().getSourceFile(sourceScript.id);
39
+ const serviceScript = sourceScript.generated?.languagePlugin.typescript?.getServiceScript(sourceScript.generated.root);
40
+ const map = serviceScript ? language.maps.get(serviceScript.code, sourceScript) : undefined;
41
+ const toSourceRange = map
42
+ ? (pos, end) => {
43
+ for (const [mappedStart, mappedEnd] of map.toSourceRange(pos - leadingOffset, end - leadingOffset, false)) {
44
+ return { pos: mappedStart, end: mappedEnd };
45
+ }
46
+ }
47
+ : (pos, end) => ({ pos, end });
48
+ return analyzer.analyze(sourceFile, position, {
49
+ typescript: ts,
50
+ languageService,
51
+ toSourceRange,
52
+ });
53
+ }
54
+ //# sourceMappingURL=getReactiveReferences.js.map
@@ -3,7 +3,7 @@ type Response<T> = T | null | undefined | Promise<T | null | undefined>;
3
3
  export interface Requests {
4
4
  collectExtractProps(fileName: string, templateCodeRange: [number, number]): Response<ReturnType<typeof import('./collectExtractProps.js')['collectExtractProps']>>;
5
5
  getImportPathForFile(fileName: string, incomingFileName: string, preferences: ts.UserPreferences): Response<ReturnType<typeof import('./getImportPathForFile.js')['getImportPathForFile']>>;
6
- getPropertiesAtLocation(fileName: string, position: number): Response<ReturnType<typeof import('./getPropertiesAtLocation.js')['getPropertiesAtLocation']>>;
6
+ isRefAtPosition(fileName: string, position: number): Response<ReturnType<typeof import('./isRefAtPosition.js')['isRefAtPosition']>>;
7
7
  getComponentDirectives(fileName: string): Response<ReturnType<typeof import('./getComponentDirectives.js')['getComponentDirectives']>>;
8
8
  getComponentEvents(fileName: string, tag: string): Response<ReturnType<typeof import('./getComponentEvents.js')['getComponentEvents']>>;
9
9
  getComponentNames(fileName: string): Response<ReturnType<typeof import('./getComponentNames.js')['getComponentNames']>>;
@@ -11,6 +11,7 @@ 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']>>;
14
15
  getDocumentHighlights(fileName: string, position: number): Response<ts.DocumentHighlights[]>;
15
16
  getEncodedSemanticClassifications(fileName: string, span: ts.TextSpan): Response<ts.Classifications>;
16
17
  getQuickInfoAtPosition(fileName: string, position: ts.LineAndCharacter): Response<string>;
@@ -0,0 +1,3 @@
1
+ import { type Language, type SourceScript, type VueVirtualCode } from '@vue/language-core';
2
+ import type * as ts from 'typescript';
3
+ export declare function isRefAtPosition(ts: typeof import('typescript'), language: Language, program: ts.Program, sourceScript: SourceScript, virtualCode: VueVirtualCode, position: number, leadingOffset?: number): boolean;
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  /// <reference types="@volar/typescript" />
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.getPropertiesAtLocation = getPropertiesAtLocation;
4
+ exports.isRefAtPosition = isRefAtPosition;
5
5
  const language_core_1 = require("@vue/language-core");
6
- function getPropertiesAtLocation(ts, language, program, sourceScript, virtualCode, position, isTsPlugin) {
7
- const virtualScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(virtualCode);
8
- if (!virtualScript) {
9
- return [];
6
+ function isRefAtPosition(ts, language, program, sourceScript, virtualCode, position, leadingOffset = 0) {
7
+ const serviceScript = sourceScript.generated.languagePlugin.typescript?.getServiceScript(virtualCode);
8
+ if (!serviceScript) {
9
+ return false;
10
10
  }
11
11
  let mapped = false;
12
- for (const [_sourceScript, map] of language.maps.forEach(virtualScript.code)) {
12
+ for (const [_sourceScript, map] of language.maps.forEach(serviceScript.code)) {
13
13
  for (const [position2, mapping] of map.toGeneratedLocation(position)) {
14
14
  if ((0, language_core_1.isCompletionEnabled)(mapping.data)) {
15
15
  position = position2;
@@ -22,21 +22,20 @@ function getPropertiesAtLocation(ts, language, program, sourceScript, virtualCod
22
22
  }
23
23
  }
24
24
  if (!mapped) {
25
- return [];
25
+ return false;
26
26
  }
27
- position += isTsPlugin ? sourceScript.snapshot.getLength() : 0;
28
27
  const sourceFile = program.getSourceFile(virtualCode.fileName);
29
28
  if (!sourceFile) {
30
- return [];
29
+ return false;
31
30
  }
32
- const node = findPositionIdentifier(sourceFile, sourceFile, position);
31
+ const node = findPositionIdentifier(sourceFile, sourceFile, position + leadingOffset);
33
32
  if (!node) {
34
- return [];
33
+ return false;
35
34
  }
36
35
  const checker = program.getTypeChecker();
37
36
  const type = checker.getTypeAtLocation(node);
38
37
  const props = type.getProperties();
39
- return props.map(prop => prop.name);
38
+ return props.some(prop => prop.escapedName === 'value' && prop.flags & ts.SymbolFlags.Accessor);
40
39
  function findPositionIdentifier(sourceFile, node, offset) {
41
40
  let result;
42
41
  node.forEachChild(child => {
@@ -52,4 +51,4 @@ function getPropertiesAtLocation(ts, language, program, sourceScript, virtualCod
52
51
  return result;
53
52
  }
54
53
  }
55
- //# sourceMappingURL=getPropertiesAtLocation.js.map
54
+ //# sourceMappingURL=isRefAtPosition.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vue/typescript-plugin",
3
- "version": "3.0.7-alpha.1",
3
+ "version": "3.0.8",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "**/*.js",
@@ -14,13 +14,14 @@
14
14
  },
15
15
  "dependencies": {
16
16
  "@volar/typescript": "2.4.23",
17
- "@vue/language-core": "3.0.7-alpha.1",
17
+ "@vue/language-core": "3.0.8",
18
18
  "@vue/shared": "^3.5.0",
19
+ "laplacenoma": "^0.0.3",
19
20
  "path-browserify": "^1.0.1"
20
21
  },
21
22
  "devDependencies": {
22
23
  "@types/node": "^22.10.4",
23
24
  "@types/path-browserify": "^1.0.1"
24
25
  },
25
- "gitHead": "320fc626c871e9ff17c0e4e92ea7ddb0c7641f34"
26
+ "gitHead": "f7bdeaa7bb476df1fc8ff46c504d75c1869b0be9"
26
27
  }
@@ -1,3 +0,0 @@
1
- import { type Language, type SourceScript, type VueVirtualCode } from '@vue/language-core';
2
- import type * as ts from 'typescript';
3
- export declare function getPropertiesAtLocation(ts: typeof import('typescript'), language: Language, program: ts.Program, sourceScript: SourceScript, virtualCode: VueVirtualCode, position: number, isTsPlugin: boolean): string[];
@@ -1,8 +0,0 @@
1
- import type { Language } from '@vue/language-core';
2
- import type * as ts from 'typescript';
3
- export interface RequestContext {
4
- typescript: typeof ts;
5
- languageService: ts.LanguageService;
6
- languageServiceHost: ts.LanguageServiceHost;
7
- language: Language<string>;
8
- }
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=types.js.map