@glint/tsserver-plugin 2.4.1 → 2.4.2
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/README.md
CHANGED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
declare const plugin: any;
|
|
2
|
+
export = plugin;
|
|
3
|
+
/**
|
|
4
|
+
* Return semantic tokens for semantic highlighting:
|
|
5
|
+
* https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide
|
|
6
|
+
function getEncodedSemanticClassifications<T>(
|
|
7
|
+
ts: typeof import('typescript'),
|
|
8
|
+
language: any, // Language<T>,
|
|
9
|
+
languageService: ts.LanguageService,
|
|
10
|
+
asScriptId: (fileName: string) => T,
|
|
11
|
+
getEncodedSemanticClassifications: ts.LanguageService['getEncodedSemanticClassifications'],
|
|
12
|
+
): ts.LanguageService['getEncodedSemanticClassifications'] {
|
|
13
|
+
return (filePath, span, format) => {
|
|
14
|
+
const fileName = filePath.replace(windowsPathReg, '/');
|
|
15
|
+
const result = getEncodedSemanticClassifications(fileName, span, format);
|
|
16
|
+
const sourceScript = language.scripts.get(asScriptId(fileName));
|
|
17
|
+
const root = sourceScript?.generated?.root;
|
|
18
|
+
if (root instanceof VirtualGtsCode) {
|
|
19
|
+
// This would remove all semantic highlighting from .gts files, including the TS parts
|
|
20
|
+
// outside of the `<template>` tags, which is probably undesirable.
|
|
21
|
+
// result.spans = [];
|
|
22
|
+
|
|
23
|
+
// We can push span to the end of the array to override previous entries.
|
|
24
|
+
// result.spans.push(
|
|
25
|
+
// 0,
|
|
26
|
+
// 100,
|
|
27
|
+
// 256, // class
|
|
28
|
+
// );
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
*/
|
|
34
|
+
//# sourceMappingURL=typescript-server-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-server-plugin.d.ts","sourceRoot":"","sources":["../src/typescript-server-plugin.ts"],"names":[],"mappings":"AAwHA,QAAA,MAAM,MAAM,KA6KX,CAAC;AAEF,SAAS,MAAM,CAAC;AAyYhB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG"}
|
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const node_module_1 = require("node:module");
|
|
3
|
+
const path = require("node:path");
|
|
4
|
+
const { createJiti } = require('jiti');
|
|
5
|
+
const jiti = createJiti(__filename);
|
|
6
|
+
const { createLanguageServicePlugin, } = require('@volar/typescript/lib/quickstart/createLanguageServicePlugin.js');
|
|
7
|
+
let emberTsc;
|
|
8
|
+
let VirtualGtsCode;
|
|
9
|
+
let augmentDiagnostics;
|
|
10
|
+
function normalizeEmberTscSource(value) {
|
|
11
|
+
if (value === 'workspace' || value === 'bundled' || value === 'auto') {
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
return 'auto';
|
|
15
|
+
}
|
|
16
|
+
function getBundledEmberTscPath() {
|
|
17
|
+
try {
|
|
18
|
+
// @ts-expect-error esbuild define
|
|
19
|
+
return EMBER_TSC_PATH;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function loadEmberTscFromWorkspace(resolutionDir, logInfo) {
|
|
26
|
+
try {
|
|
27
|
+
const requireFrom = (0, node_module_1.createRequire)(path.join(resolutionDir, 'package.json'));
|
|
28
|
+
const resolvedPath = requireFrom.resolve('@glint/ember-tsc');
|
|
29
|
+
const workspaceJiti = createJiti(path.join(resolutionDir, 'package.json'));
|
|
30
|
+
return { module: workspaceJiti(resolvedPath), resolvedPath };
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
logInfo(`Unable to resolve @glint/ember-tsc from ${resolutionDir}: ${error instanceof Error ? error.message : String(error)}`);
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function loadEmberTscFromBundled(bundledPath, logInfo) {
|
|
38
|
+
if (!bundledPath) {
|
|
39
|
+
logInfo('Bundled ember-tsc path was not provided by the build.');
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
return { module: jiti(bundledPath), resolvedPath: bundledPath };
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
logInfo(`Unable to load bundled ember-tsc at ${bundledPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function loadEmberTscFromWorkspaceDirs(resolutionDirs, logInfo) {
|
|
51
|
+
for (const resolutionDir of resolutionDirs) {
|
|
52
|
+
const resolved = loadEmberTscFromWorkspace(resolutionDir, logInfo);
|
|
53
|
+
if (resolved) {
|
|
54
|
+
return resolved;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
function getWorkspaceResolutionDirs(workspaceRoot, libraryPath, info) {
|
|
60
|
+
const candidates = [path.resolve(workspaceRoot, libraryPath)];
|
|
61
|
+
const project = info.project;
|
|
62
|
+
const projectName = project.getProjectName?.();
|
|
63
|
+
if (typeof projectName === 'string' && path.isAbsolute(projectName)) {
|
|
64
|
+
const projectDir = projectName.endsWith('.json') ? path.dirname(projectName) : projectName;
|
|
65
|
+
candidates.push(path.resolve(projectDir, libraryPath));
|
|
66
|
+
}
|
|
67
|
+
const projectDir = project.getCurrentDirectory?.();
|
|
68
|
+
if (typeof projectDir === 'string' && path.isAbsolute(projectDir)) {
|
|
69
|
+
candidates.push(path.resolve(projectDir, libraryPath));
|
|
70
|
+
}
|
|
71
|
+
return Array.from(new Set(candidates));
|
|
72
|
+
}
|
|
73
|
+
const plugin = createLanguageServicePlugin((ts, info) => {
|
|
74
|
+
const logger = info.project.projectService.logger;
|
|
75
|
+
const logInfo = (message) => logger.info(`[Glint] ${message}`);
|
|
76
|
+
const cwd = info.languageServiceHost.getCurrentDirectory();
|
|
77
|
+
const config = info.config ?? {};
|
|
78
|
+
const emberTscSource = normalizeEmberTscSource(config.emberTscSource);
|
|
79
|
+
const workspaceRoot = typeof config.workspaceRoot === 'string' ? config.workspaceRoot : cwd;
|
|
80
|
+
const libraryPath = typeof config.libraryPath === 'string' ? config.libraryPath : '.';
|
|
81
|
+
const resolutionDirs = getWorkspaceResolutionDirs(workspaceRoot, libraryPath, info);
|
|
82
|
+
let resolved = null;
|
|
83
|
+
if (emberTscSource === 'bundled') {
|
|
84
|
+
const bundled = loadEmberTscFromBundled(getBundledEmberTscPath(), logInfo);
|
|
85
|
+
if (bundled) {
|
|
86
|
+
resolved = { ...bundled, source: 'bundled' };
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
const workspace = loadEmberTscFromWorkspaceDirs(resolutionDirs, logInfo);
|
|
90
|
+
if (workspace) {
|
|
91
|
+
logInfo('Bundled ember-tsc unavailable; falling back to workspace package.');
|
|
92
|
+
resolved = { ...workspace, source: 'workspace' };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
const workspace = loadEmberTscFromWorkspaceDirs(resolutionDirs, logInfo);
|
|
98
|
+
if (workspace) {
|
|
99
|
+
resolved = { ...workspace, source: 'workspace' };
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const bundled = loadEmberTscFromBundled(getBundledEmberTscPath(), logInfo);
|
|
103
|
+
if (bundled) {
|
|
104
|
+
logInfo('Workspace ember-tsc not found; falling back to bundled package.');
|
|
105
|
+
resolved = { ...bundled, source: 'bundled' };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (!resolved) {
|
|
110
|
+
logInfo('Unable to load ember-tsc; Glint TS Plugin will not start.');
|
|
111
|
+
return { languagePlugins: [] };
|
|
112
|
+
}
|
|
113
|
+
emberTsc = resolved.module;
|
|
114
|
+
VirtualGtsCode = emberTsc.VirtualGtsCode;
|
|
115
|
+
augmentDiagnostics = emberTsc.augmentDiagnostics;
|
|
116
|
+
logInfo(`Using ${resolved.source} ember-tsc from ${resolved.resolvedPath}.`);
|
|
117
|
+
const { findConfig, createDefaultConfig, createEmberLanguagePlugin } = emberTsc;
|
|
118
|
+
const glintConfig = findConfig(cwd) ?? createDefaultConfig(ts, cwd);
|
|
119
|
+
const gtsLanguagePlugin = createEmberLanguagePlugin(glintConfig, {
|
|
120
|
+
clientId: 'tsserver-plugin',
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
languagePlugins: [gtsLanguagePlugin],
|
|
124
|
+
setup: (language) => {
|
|
125
|
+
info.languageService = proxyLanguageServiceForGlint(ts, language, info.languageService, (fileName) => fileName);
|
|
126
|
+
const resolveModuleNameLiterals = info.languageServiceHost.resolveModuleNameLiterals?.bind(info.languageServiceHost);
|
|
127
|
+
if (resolveModuleNameLiterals) {
|
|
128
|
+
// TS isn't aware of our custom .gts/.gjs extensions by default which causes
|
|
129
|
+
// issues with resolving imports that omit extensions. We hackishly "teach"
|
|
130
|
+
// TS about these extensions by overriding `resolveModuleNameLiterals` to
|
|
131
|
+
// inject non-existent imports that cause TS to consider the extensions when
|
|
132
|
+
// resolving.
|
|
133
|
+
//
|
|
134
|
+
// Origin of this hack:
|
|
135
|
+
// https://github.com/typed-ember/glint/issues/806#issuecomment-2758616327
|
|
136
|
+
info.languageServiceHost.resolveModuleNameLiterals = (moduleLiterals, containingFile, redirectedReference, options, ...rest) => {
|
|
137
|
+
let fakeImportNodes = [];
|
|
138
|
+
if (moduleLiterals.length > 0) {
|
|
139
|
+
fakeImportNodes.push({
|
|
140
|
+
...moduleLiterals[0],
|
|
141
|
+
text: './__NONEXISTENT_GLINT_HACK__.gts',
|
|
142
|
+
});
|
|
143
|
+
fakeImportNodes.push({
|
|
144
|
+
...moduleLiterals[0],
|
|
145
|
+
text: './__NONEXISTENT_GLINT_HACK__.gjs',
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
const result = resolveModuleNameLiterals([...fakeImportNodes, ...moduleLiterals], containingFile, redirectedReference, options, ...rest);
|
|
149
|
+
return result.slice(fakeImportNodes.length);
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
// Add Glint-specific protocol handlers for tsserver communication
|
|
153
|
+
addGlintCommands();
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
// https://github.com/JetBrains/intellij-plugins/blob/6435723ad88fa296b41144162ebe3b8513f4949b/Angular/src-js/angular-service/src/index.ts#L69
|
|
157
|
+
function addGlintCommands() {
|
|
158
|
+
const projectService = info.project.projectService;
|
|
159
|
+
projectService.logger.info('Glint: called handler processing ' + info.project.projectKind);
|
|
160
|
+
const session = info.session;
|
|
161
|
+
if (session == undefined) {
|
|
162
|
+
projectService.logger.info('Glint: there is no session in info.');
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (session.addProtocolHandler == undefined) {
|
|
166
|
+
// addProtocolHandler was introduced in TS 4.4 or 4.5 in 2021, see https://github.com/microsoft/TypeScript/issues/43893
|
|
167
|
+
projectService.logger.info('Glint: there is no addProtocolHandler method.');
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (session.handlers.has('_glint:projectInfo')) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
// Map _glint: prefixed commands to their corresponding TypeScript server commands
|
|
174
|
+
session.addProtocolHandler('_glint:projectInfo', ({ arguments: args }) => {
|
|
175
|
+
return session.handlers.get('projectInfo')?.({ arguments: args });
|
|
176
|
+
});
|
|
177
|
+
session.addProtocolHandler('_glint:documentHighlights-full', ({ arguments: args }) => {
|
|
178
|
+
return session.handlers.get('documentHighlights-full')?.({ arguments: args });
|
|
179
|
+
});
|
|
180
|
+
session.addProtocolHandler('_glint:encodedSemanticClassifications-full', ({ arguments: args }) => {
|
|
181
|
+
return session.handlers.get('encodedSemanticClassifications-full')?.({
|
|
182
|
+
arguments: args,
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
session.addProtocolHandler('_glint:quickinfo', ({ arguments: args }) => {
|
|
186
|
+
return session.handlers.get('quickinfo')?.({ arguments: args });
|
|
187
|
+
});
|
|
188
|
+
session.addProtocolHandler('_glint:getComponentMeta', ({ arguments: args }) => {
|
|
189
|
+
try {
|
|
190
|
+
const meta = getComponentMetaForTag(ts, info.languageService, args.file, args.tagName);
|
|
191
|
+
return { response: meta ?? undefined, responseRequired: true };
|
|
192
|
+
}
|
|
193
|
+
catch (e) {
|
|
194
|
+
projectService.logger.info(`Glint: getComponentMeta error: ${e instanceof Error ? e.message : String(e)}`);
|
|
195
|
+
return { response: undefined, responseRequired: true };
|
|
196
|
+
}
|
|
197
|
+
});
|
|
198
|
+
projectService.logger.info('Glint specific commands are successfully added.');
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
function getComponentMetaForTag(ts, languageService, fileName, tagName) {
|
|
202
|
+
const program = languageService.getProgram();
|
|
203
|
+
if (!program)
|
|
204
|
+
return null;
|
|
205
|
+
const checker = program.getTypeChecker();
|
|
206
|
+
const sourceFile = program.getSourceFile(fileName);
|
|
207
|
+
if (!sourceFile)
|
|
208
|
+
return null;
|
|
209
|
+
// Search the generated source for resolve(TagName) to find the component identifier.
|
|
210
|
+
// indexOf finds only the first occurrence, but all invocations of the same component
|
|
211
|
+
// resolve to the same symbol, so any match gives us the correct type information.
|
|
212
|
+
// ts.getTokenAtPosition is not part of the public TS API but is used by Vue language-tools
|
|
213
|
+
// and other TS plugin implementations for the same purpose.
|
|
214
|
+
const resolvePattern = `resolve(${tagName})`;
|
|
215
|
+
const resolveIdx = sourceFile.text.indexOf(resolvePattern);
|
|
216
|
+
if (resolveIdx < 0)
|
|
217
|
+
return null;
|
|
218
|
+
const identifierPos = resolveIdx + 'resolve('.length;
|
|
219
|
+
const node = ts.getTokenAtPosition(sourceFile, identifierPos);
|
|
220
|
+
if (!node)
|
|
221
|
+
return null;
|
|
222
|
+
const symbol = checker.getSymbolAtLocation(node);
|
|
223
|
+
if (!symbol)
|
|
224
|
+
return null;
|
|
225
|
+
return extractComponentMeta(ts, checker, symbol);
|
|
226
|
+
}
|
|
227
|
+
function extractComponentMeta(ts, checker, symbol) {
|
|
228
|
+
// Resolve through import aliases to find the original declaration's JSDoc.
|
|
229
|
+
let resolvedSymbol = symbol;
|
|
230
|
+
while (resolvedSymbol.flags & ts.SymbolFlags.Alias) {
|
|
231
|
+
resolvedSymbol = checker.getAliasedSymbol(resolvedSymbol);
|
|
232
|
+
}
|
|
233
|
+
const description = ts.displayPartsToString(resolvedSymbol.getDocumentationComment(checker));
|
|
234
|
+
// Path 1: Class-backed component — e.g. `class Foo extends Component<Sig>`
|
|
235
|
+
// The declared type's base class chain contains the Signature as a type argument.
|
|
236
|
+
// We don't fall back to the class's own JSDoc (via `description`) because TypeScript's
|
|
237
|
+
// own hover already shows it — Volar combines both hover results, so it would duplicate.
|
|
238
|
+
// If the Signature *interface* has JSDoc, buildMeta picks it up via type.getSymbol().
|
|
239
|
+
const declaredType = checker.getDeclaredTypeOfSymbol(symbol);
|
|
240
|
+
const signatureType = findSignatureType(ts, checker, declaredType);
|
|
241
|
+
if (signatureType) {
|
|
242
|
+
return buildMeta(ts, checker, signatureType);
|
|
243
|
+
}
|
|
244
|
+
// Path 2: Template-only component — e.g. `<template>...</template> satisfies TOC<Sig>`
|
|
245
|
+
// The value type is an intersection: TemplateOnlyComponent<never> & (abstract new () => ...)
|
|
246
|
+
// with two construct signatures. The second returns InvokableInstance & HasContext<TemplateContext>.
|
|
247
|
+
// We iterate in reverse because the first signature (from TemplateOnlyComponent<never>) is empty.
|
|
248
|
+
//
|
|
249
|
+
// Both class-backed and template-only components attach a [Context] symbol property
|
|
250
|
+
// (via HasContext<ComponentContext<This, S>>) whose aliasTypeArguments contain the
|
|
251
|
+
// original Signature type S. We extract S and run findSignatureType on it, which
|
|
252
|
+
// avoids needing to know about TemplateContext's internal property names at all.
|
|
253
|
+
const valueType = checker.getTypeOfSymbol(symbol);
|
|
254
|
+
const constructSignatures = valueType.getConstructSignatures();
|
|
255
|
+
for (let i = constructSignatures.length - 1; i >= 0; i--) {
|
|
256
|
+
const instanceType = constructSignatures[i].getReturnType();
|
|
257
|
+
// Some construct signatures may carry a Signature type directly
|
|
258
|
+
const sig = findSignatureType(ts, checker, instanceType);
|
|
259
|
+
if (sig) {
|
|
260
|
+
const meta = buildMeta(ts, checker, sig);
|
|
261
|
+
if (meta.args.length > 0 || meta.blocks.length > 0) {
|
|
262
|
+
if (!meta.description)
|
|
263
|
+
meta.description = description;
|
|
264
|
+
return meta;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// Walk [Context] symbol property (from HasContext<ComponentContext<This, S>>).
|
|
268
|
+
// The unique symbol [Context] is mangled by TS to __@Context@NNN.
|
|
269
|
+
// ComponentContext<This, S> is a type alias whose aliasTypeArguments give us
|
|
270
|
+
// access to the original Signature S (with uppercase Args/Blocks/Element).
|
|
271
|
+
for (const prop of instanceType.getProperties()) {
|
|
272
|
+
if (prop.name.startsWith('__@Context@')) {
|
|
273
|
+
const contextType = getPropertyType(checker, prop);
|
|
274
|
+
if (!contextType)
|
|
275
|
+
continue;
|
|
276
|
+
// Try to extract the Signature from ComponentContext's alias type arguments.
|
|
277
|
+
// ComponentContext<This, S> passes S as its second argument.
|
|
278
|
+
const aliasArgs = contextType.aliasTypeArguments;
|
|
279
|
+
if (aliasArgs) {
|
|
280
|
+
for (const arg of aliasArgs) {
|
|
281
|
+
const argSig = findSignatureType(ts, checker, arg);
|
|
282
|
+
if (argSig) {
|
|
283
|
+
const meta = buildMeta(ts, checker, argSig);
|
|
284
|
+
if (meta.args.length > 0 || meta.blocks.length > 0) {
|
|
285
|
+
// Prefer JSDoc from the Signature interface itself (already in meta.description
|
|
286
|
+
// via buildMeta's type symbol lookup). Fall back to the component's own JSDoc.
|
|
287
|
+
if (!meta.description)
|
|
288
|
+
meta.description = description;
|
|
289
|
+
return meta;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return null;
|
|
298
|
+
}
|
|
299
|
+
function findSignatureType(ts, checker, type, visited = new Set()) {
|
|
300
|
+
if (visited.has(type))
|
|
301
|
+
return null;
|
|
302
|
+
visited.add(type);
|
|
303
|
+
// Check if this type itself has Args/Blocks/Element (it IS the signature)
|
|
304
|
+
if (type.getProperty('Args') || type.getProperty('Blocks') || type.getProperty('Element')) {
|
|
305
|
+
return type;
|
|
306
|
+
}
|
|
307
|
+
// Walk base types to find Component<Sig> and extract Sig
|
|
308
|
+
const baseTypes = type.getBaseTypes?.();
|
|
309
|
+
if (baseTypes) {
|
|
310
|
+
for (const base of baseTypes) {
|
|
311
|
+
const typeArgs = getTypeArguments(checker, base);
|
|
312
|
+
if (typeArgs) {
|
|
313
|
+
for (const arg of typeArgs) {
|
|
314
|
+
if (arg.getProperty('Args') || arg.getProperty('Blocks') || arg.getProperty('Element')) {
|
|
315
|
+
return arg;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const nested = findSignatureType(ts, checker, base, visited);
|
|
320
|
+
if (nested)
|
|
321
|
+
return nested;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return null;
|
|
325
|
+
}
|
|
326
|
+
function getTypeArguments(checker, type) {
|
|
327
|
+
try {
|
|
328
|
+
return checker.getTypeArguments(type);
|
|
329
|
+
}
|
|
330
|
+
catch {
|
|
331
|
+
return undefined;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Build component metadata by extracting Args, Blocks, and Element from a
|
|
336
|
+
* Signature type (the user-facing `{ Args: ...; Blocks: ...; Element: ... }`).
|
|
337
|
+
*/
|
|
338
|
+
function buildMeta(ts, checker, type) {
|
|
339
|
+
const meta = { args: [], blocks: [], element: null, description: '' };
|
|
340
|
+
// Try to get JSDoc from the type's own symbol (e.g. the Signature interface)
|
|
341
|
+
const typeSymbol = type.getSymbol();
|
|
342
|
+
if (typeSymbol) {
|
|
343
|
+
const typeDoc = typeSymbol.getDocumentationComment(checker);
|
|
344
|
+
if (typeDoc.length > 0) {
|
|
345
|
+
meta.description = ts.displayPartsToString(typeDoc);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
// Extract args
|
|
349
|
+
const argsProp = type.getProperty('Args');
|
|
350
|
+
if (argsProp) {
|
|
351
|
+
let argsType = getPropertyType(checker, argsProp);
|
|
352
|
+
if (argsType) {
|
|
353
|
+
// Handle the case where Args has Named/Positional sub-structure
|
|
354
|
+
const namedProp = argsType.getProperty('Named');
|
|
355
|
+
if (namedProp) {
|
|
356
|
+
argsType = getPropertyType(checker, namedProp) || argsType;
|
|
357
|
+
}
|
|
358
|
+
for (const prop of argsType.getProperties()) {
|
|
359
|
+
meta.args.push({
|
|
360
|
+
name: prop.name,
|
|
361
|
+
type: getPropertyTypeString(ts, checker, prop),
|
|
362
|
+
description: ts.displayPartsToString(prop.getDocumentationComment(checker)),
|
|
363
|
+
required: !(prop.flags & ts.SymbolFlags.Optional),
|
|
364
|
+
tags: prop.getJsDocTags?.(checker)?.map((t) => ({
|
|
365
|
+
name: t.name,
|
|
366
|
+
text: t.text?.map((p) => p.text).join(''),
|
|
367
|
+
})) || [],
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// Extract blocks
|
|
373
|
+
const blocksProp = type.getProperty('Blocks');
|
|
374
|
+
if (blocksProp) {
|
|
375
|
+
const blocksType = getPropertyType(checker, blocksProp);
|
|
376
|
+
if (blocksType) {
|
|
377
|
+
for (const prop of blocksType.getProperties()) {
|
|
378
|
+
const propType = getPropertyType(checker, prop);
|
|
379
|
+
meta.blocks.push({
|
|
380
|
+
name: prop.name,
|
|
381
|
+
params: propType ? checker.typeToString(propType) : '[]',
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// Extract element
|
|
387
|
+
const elementProp = type.getProperty('Element');
|
|
388
|
+
if (elementProp) {
|
|
389
|
+
const elementType = getPropertyType(checker, elementProp);
|
|
390
|
+
if (elementType) {
|
|
391
|
+
const typeStr = checker.typeToString(elementType);
|
|
392
|
+
if (typeStr !== 'void' && typeStr !== 'unknown') {
|
|
393
|
+
meta.element = typeStr;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return meta;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Get the type string for a property as written in source (preserving the
|
|
401
|
+
* user's type annotation), rather than the resolved type which adds
|
|
402
|
+
* `| undefined` to optional properties.
|
|
403
|
+
*/
|
|
404
|
+
function getPropertyTypeString(ts, checker, prop) {
|
|
405
|
+
const decl = prop.declarations?.[0];
|
|
406
|
+
if (decl && ts.isPropertySignature(decl) && decl.type) {
|
|
407
|
+
return decl.type.getText();
|
|
408
|
+
}
|
|
409
|
+
const propType = getPropertyType(checker, prop);
|
|
410
|
+
return propType ? checker.typeToString(propType) : 'unknown';
|
|
411
|
+
}
|
|
412
|
+
function getPropertyType(checker, prop) {
|
|
413
|
+
const decl = prop.declarations?.[0];
|
|
414
|
+
if (decl) {
|
|
415
|
+
return checker.getTypeOfSymbolAtLocation(prop, decl);
|
|
416
|
+
}
|
|
417
|
+
// getTypeOfSymbol is a public TypeChecker API that works for synthetic types
|
|
418
|
+
// without declarations (e.g. mapped/computed type properties)
|
|
419
|
+
return checker.getTypeOfSymbol(prop);
|
|
420
|
+
}
|
|
421
|
+
function proxyLanguageServiceForGlint(ts, language, // Language<T>,
|
|
422
|
+
languageService, asScriptId) {
|
|
423
|
+
// eslint-lint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
424
|
+
const proxyCache = new Map();
|
|
425
|
+
// eslint-lint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
426
|
+
const getProxyMethod = (target, p) => {
|
|
427
|
+
switch (p) {
|
|
428
|
+
case 'getCompletionsAtPosition':
|
|
429
|
+
return getCompletionsAtPosition(ts, language, languageService, asScriptId, target[p]);
|
|
430
|
+
// case 'getCompletionEntryDetails': return getCompletionEntryDetails(language, asScriptId, target[p]);
|
|
431
|
+
// case 'getCodeFixesAtPosition': return getCodeFixesAtPosition(target[p]);
|
|
432
|
+
// case 'getDefinitionAndBoundSpan': return getDefinitionAndBoundSpan(ts, language, languageService, glintOptions, asScriptId, target[p]);
|
|
433
|
+
// case 'getQuickInfoAtPosition': return getQuickInfoAtPosition(ts, target, target[p]);
|
|
434
|
+
// TS plugin only
|
|
435
|
+
// Left as an example in case we want to augment semantic classification in .gts files.
|
|
436
|
+
// e.g. Vue does this to semantically classify Component names as `class` tokens.
|
|
437
|
+
// case 'getEncodedSemanticClassifications':
|
|
438
|
+
// return getEncodedSemanticClassifications(ts, language, target, asScriptId, target[p]);
|
|
439
|
+
case 'getSemanticDiagnostics':
|
|
440
|
+
return getSemanticDiagnostics(ts, language, languageService, asScriptId, target[p]);
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
return new Proxy(languageService, {
|
|
444
|
+
get(target, p, receiver) {
|
|
445
|
+
if (getProxyMethod) {
|
|
446
|
+
if (!proxyCache.has(p)) {
|
|
447
|
+
proxyCache.set(p, getProxyMethod(target, p));
|
|
448
|
+
}
|
|
449
|
+
const proxyMethod = proxyCache.get(p);
|
|
450
|
+
if (proxyMethod) {
|
|
451
|
+
return proxyMethod;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
return Reflect.get(target, p, receiver);
|
|
455
|
+
},
|
|
456
|
+
set(target, p, value, receiver) {
|
|
457
|
+
return Reflect.set(target, p, value, receiver);
|
|
458
|
+
},
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
function getCompletionsAtPosition(ts, language, // Language<T>,
|
|
462
|
+
languageService, asScriptId, getCompletionsAtPosition) {
|
|
463
|
+
return (fileName, position, options, formattingSettings) => {
|
|
464
|
+
try {
|
|
465
|
+
const sourceScript = language.scripts.get(asScriptId(fileName));
|
|
466
|
+
const root = sourceScript?.generated?.root;
|
|
467
|
+
const transformedModule = root?.transformedModule;
|
|
468
|
+
const completions = getCompletionsAtPosition(fileName, position, options, formattingSettings);
|
|
469
|
+
const transformedRange = transformedModule?.getTransformedRange(transformedModule.originalFileName, position, position);
|
|
470
|
+
if (completions && transformedRange) {
|
|
471
|
+
// for attribute names on elements, we do not want the wrapping `"`.
|
|
472
|
+
if (transformedRange.mapping?.parent?.sourceNode.type === 'ElementNode') {
|
|
473
|
+
completions.entries = completions.entries.map((e) => ({
|
|
474
|
+
...e,
|
|
475
|
+
name: e.name.replace(/^"/, '').replace(/"$/, ''),
|
|
476
|
+
sortText: e.sortText.replace(/\\"/g, ''),
|
|
477
|
+
}));
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
console.log(completions);
|
|
481
|
+
return completions;
|
|
482
|
+
}
|
|
483
|
+
catch (e) {
|
|
484
|
+
console.log('error', e?.message);
|
|
485
|
+
console.log(e);
|
|
486
|
+
throw e;
|
|
487
|
+
}
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
function getSemanticDiagnostics(ts, language, // Language<T>,
|
|
491
|
+
languageService, asScriptId, getSemanticDiagnostics) {
|
|
492
|
+
return (fileName) => {
|
|
493
|
+
const tsDiagnostics = getSemanticDiagnostics(fileName);
|
|
494
|
+
if (!VirtualGtsCode || !augmentDiagnostics) {
|
|
495
|
+
return tsDiagnostics;
|
|
496
|
+
}
|
|
497
|
+
const program = languageService.getProgram();
|
|
498
|
+
const sourceScript = language.scripts.get(asScriptId(fileName));
|
|
499
|
+
if (!sourceScript?.generated) {
|
|
500
|
+
return tsDiagnostics;
|
|
501
|
+
}
|
|
502
|
+
const root = sourceScript.generated.root;
|
|
503
|
+
if (!(root instanceof VirtualGtsCode)) {
|
|
504
|
+
return tsDiagnostics;
|
|
505
|
+
}
|
|
506
|
+
const transformedModule = root.transformedModule;
|
|
507
|
+
if (!transformedModule) {
|
|
508
|
+
return tsDiagnostics;
|
|
509
|
+
}
|
|
510
|
+
const sourceFile = program.getSourceFile(fileName);
|
|
511
|
+
if (!sourceFile) {
|
|
512
|
+
return tsDiagnostics;
|
|
513
|
+
}
|
|
514
|
+
const augmentedTsDiagnostics = augmentDiagnostics(transformedModule, tsDiagnostics);
|
|
515
|
+
return augmentedTsDiagnostics;
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
const windowsPathReg = /\\/g;
|
|
519
|
+
module.exports = plugin;
|
|
520
|
+
/**
|
|
521
|
+
* Return semantic tokens for semantic highlighting:
|
|
522
|
+
* https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide
|
|
523
|
+
function getEncodedSemanticClassifications<T>(
|
|
524
|
+
ts: typeof import('typescript'),
|
|
525
|
+
language: any, // Language<T>,
|
|
526
|
+
languageService: ts.LanguageService,
|
|
527
|
+
asScriptId: (fileName: string) => T,
|
|
528
|
+
getEncodedSemanticClassifications: ts.LanguageService['getEncodedSemanticClassifications'],
|
|
529
|
+
): ts.LanguageService['getEncodedSemanticClassifications'] {
|
|
530
|
+
return (filePath, span, format) => {
|
|
531
|
+
const fileName = filePath.replace(windowsPathReg, '/');
|
|
532
|
+
const result = getEncodedSemanticClassifications(fileName, span, format);
|
|
533
|
+
const sourceScript = language.scripts.get(asScriptId(fileName));
|
|
534
|
+
const root = sourceScript?.generated?.root;
|
|
535
|
+
if (root instanceof VirtualGtsCode) {
|
|
536
|
+
// This would remove all semantic highlighting from .gts files, including the TS parts
|
|
537
|
+
// outside of the `<template>` tags, which is probably undesirable.
|
|
538
|
+
// result.spans = [];
|
|
539
|
+
|
|
540
|
+
// We can push span to the end of the array to override previous entries.
|
|
541
|
+
// result.spans.push(
|
|
542
|
+
// 0,
|
|
543
|
+
// 100,
|
|
544
|
+
// 256, // class
|
|
545
|
+
// );
|
|
546
|
+
}
|
|
547
|
+
return result;
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
*/
|
|
551
|
+
//# sourceMappingURL=typescript-server-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript-server-plugin.js","sourceRoot":"","sources":["../src/typescript-server-plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@glint/tsserver-plugin",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.2",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"repository": "typed-ember/glint",
|
|
6
6
|
"description": "TypeScript Server Plugin for Glint",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"@volar/typescript": "~2.4.28",
|
|
19
19
|
"jiti": "~2.6.1",
|
|
20
20
|
"typescript": "^5.9.3",
|
|
21
|
-
"@glint/ember-tsc": "1.6.
|
|
21
|
+
"@glint/ember-tsc": "1.6.1"
|
|
22
22
|
},
|
|
23
23
|
"publishConfig": {
|
|
24
24
|
"access": "public"
|