@typespec/compiler 1.6.0-dev.13 → 1.6.0-dev.15
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/dist/manifest.js +2 -2
- package/dist/src/core/checker.d.ts.map +1 -1
- package/dist/src/core/checker.js +52 -10
- package/dist/src/core/checker.js.map +1 -1
- package/dist/src/server/classify.d.ts.map +1 -1
- package/dist/src/server/classify.js +4 -0
- package/dist/src/server/classify.js.map +1 -1
- package/dist/src/server/tmlanguage.d.ts.map +1 -1
- package/dist/src/server/tmlanguage.js +3 -2
- package/dist/src/server/tmlanguage.js.map +1 -1
- package/dist/typespec.tmLanguage +38 -33
- package/package.json +1 -1
package/dist/manifest.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/checker.ts"],"names":[],"mappings":"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"}
|
package/dist/src/core/checker.js
CHANGED
|
@@ -2103,11 +2103,13 @@ export function createChecker(program, resolver) {
|
|
|
2103
2103
|
const resolvedOptions = typeof options === "boolean"
|
|
2104
2104
|
? { ...defaultSymbolResolutionOptions, resolveDecorators: options }
|
|
2105
2105
|
: { ...defaultSymbolResolutionOptions, ...(options ?? {}) };
|
|
2106
|
-
if (mapper === undefined &&
|
|
2106
|
+
if (mapper === undefined &&
|
|
2107
|
+
!resolvedOptions.resolveDeclarationOfTemplate &&
|
|
2108
|
+
referenceSymCache.has(node)) {
|
|
2107
2109
|
return referenceSymCache.get(node);
|
|
2108
2110
|
}
|
|
2109
2111
|
const sym = resolveTypeReferenceSymInternal(node, mapper, resolvedOptions);
|
|
2110
|
-
if (resolvedOptions.
|
|
2112
|
+
if (!resolvedOptions.resolveDeclarationOfTemplate) {
|
|
2111
2113
|
referenceSymCache.set(node, sym);
|
|
2112
2114
|
}
|
|
2113
2115
|
return sym;
|
|
@@ -2168,6 +2170,13 @@ export function createChecker(program, resolver) {
|
|
|
2168
2170
|
}
|
|
2169
2171
|
base = aliasedSym;
|
|
2170
2172
|
}
|
|
2173
|
+
else if (!options.resolveDeclarationOfTemplate && isTemplatedNode(getSymNode(base))) {
|
|
2174
|
+
const baseSym = getContainerTemplateSymbol(base, node.base, mapper);
|
|
2175
|
+
if (!baseSym) {
|
|
2176
|
+
return undefined;
|
|
2177
|
+
}
|
|
2178
|
+
base = baseSym;
|
|
2179
|
+
}
|
|
2171
2180
|
return resolveMemberInContainer(base, node, options);
|
|
2172
2181
|
}
|
|
2173
2182
|
compilerAssert(false, `Unknown type reference kind "${SyntaxKind[node.kind]}"`, node);
|
|
@@ -2266,23 +2275,48 @@ export function createChecker(program, resolver) {
|
|
|
2266
2275
|
}
|
|
2267
2276
|
// Otherwise for templates we need to get the type and retrieve the late bound symbol.
|
|
2268
2277
|
const aliasType = getTypeForNode(node, mapper);
|
|
2269
|
-
|
|
2278
|
+
return lateBindContainer(aliasType, aliasSymbol);
|
|
2279
|
+
}
|
|
2280
|
+
/** Check case where a template type member is referenced like
|
|
2281
|
+
* ```
|
|
2282
|
+
* model Foo<T> {t: T}
|
|
2283
|
+
* model Test { t: Foo.t } // check `Foo` is correctly used as template
|
|
2284
|
+
* ```
|
|
2285
|
+
*/
|
|
2286
|
+
function getContainerTemplateSymbol(sym, node, mapper) {
|
|
2287
|
+
if (pendingResolutions.has(sym, ResolutionKind.Type)) {
|
|
2288
|
+
if (mapper === undefined) {
|
|
2289
|
+
reportCheckerDiagnostic(createDiagnostic({
|
|
2290
|
+
code: "circular-alias-type",
|
|
2291
|
+
format: { typeName: sym.name },
|
|
2292
|
+
target: node,
|
|
2293
|
+
}));
|
|
2294
|
+
}
|
|
2270
2295
|
return undefined;
|
|
2271
2296
|
}
|
|
2272
|
-
|
|
2297
|
+
pendingResolutions.start(sym, ResolutionKind.Type);
|
|
2298
|
+
const type = checkTypeReferenceSymbol(sym, node, mapper);
|
|
2299
|
+
pendingResolutions.finish(sym, ResolutionKind.Type);
|
|
2300
|
+
return lateBindContainer(type, sym);
|
|
2301
|
+
}
|
|
2302
|
+
function lateBindContainer(type, sym) {
|
|
2303
|
+
if (isErrorType(type)) {
|
|
2304
|
+
return undefined;
|
|
2305
|
+
}
|
|
2306
|
+
switch (type.kind) {
|
|
2273
2307
|
case "Model":
|
|
2274
2308
|
case "Interface":
|
|
2275
2309
|
case "Union":
|
|
2276
|
-
if (isTemplateInstance(
|
|
2310
|
+
if (isTemplateInstance(type)) {
|
|
2277
2311
|
// this is an alias for some instantiation, so late-bind the instantiation
|
|
2278
|
-
lateBindMemberContainer(
|
|
2279
|
-
return
|
|
2312
|
+
lateBindMemberContainer(type);
|
|
2313
|
+
return type.symbol;
|
|
2280
2314
|
}
|
|
2281
2315
|
// fallthrough
|
|
2282
2316
|
default:
|
|
2283
2317
|
// get the symbol from the node aliased type's node, or just return the base
|
|
2284
2318
|
// if it doesn't have a symbol (which will likely result in an error later on)
|
|
2285
|
-
return getMergedSymbol(
|
|
2319
|
+
return getMergedSymbol(type.node.symbol) ?? sym;
|
|
2286
2320
|
}
|
|
2287
2321
|
}
|
|
2288
2322
|
function checkStringTemplateExpresion(node, mapper) {
|
|
@@ -3737,7 +3771,7 @@ export function createChecker(program, resolver) {
|
|
|
3737
3771
|
*/
|
|
3738
3772
|
function checkAugmentDecorator(node) {
|
|
3739
3773
|
// This will validate the target type is pointing to a valid ref.
|
|
3740
|
-
resolveTypeReferenceSym(node.targetType, undefined);
|
|
3774
|
+
resolveTypeReferenceSym(node.targetType, undefined, { resolveDeclarationOfTemplate: true });
|
|
3741
3775
|
const links = resolver.getNodeLinks(node.targetType);
|
|
3742
3776
|
if (links.isTemplateInstantiation) {
|
|
3743
3777
|
program.reportDiagnostic(createDiagnostic({
|
|
@@ -4103,6 +4137,14 @@ export function createChecker(program, resolver) {
|
|
|
4103
4137
|
}
|
|
4104
4138
|
function checkInterfaceMembers(node, mapper, interfaceType) {
|
|
4105
4139
|
const ownMembers = new Map();
|
|
4140
|
+
// Preregister each operation sym links instantiation to make sure there is no race condition when instantiating templated interface
|
|
4141
|
+
for (const opNode of node.operations) {
|
|
4142
|
+
const symbol = getSymbolForMember(opNode);
|
|
4143
|
+
const links = symbol && getSymbolLinks(symbol);
|
|
4144
|
+
if (links) {
|
|
4145
|
+
links.instantiations = new TypeInstantiationMap();
|
|
4146
|
+
}
|
|
4147
|
+
}
|
|
4106
4148
|
for (const opNode of node.operations) {
|
|
4107
4149
|
const opType = checkOperation(opNode, mapper, interfaceType);
|
|
4108
4150
|
if (ownMembers.has(opType.name)) {
|
|
@@ -4993,7 +5035,7 @@ class PendingResolutions {
|
|
|
4993
5035
|
}
|
|
4994
5036
|
const defaultSymbolResolutionOptions = {
|
|
4995
5037
|
resolveDecorators: false,
|
|
4996
|
-
|
|
5038
|
+
resolveDeclarationOfTemplate: false,
|
|
4997
5039
|
};
|
|
4998
5040
|
function printTypeReferenceNode(node) {
|
|
4999
5041
|
switch (node.kind) {
|