Christopher Radek 2024-09-11 15:50:14 -07:00 коммит произвёл GitHub
Родитель 7d444a4331
Коммит 32a118dbf6
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
3 изменённых файлов: 36 добавлений и 2 удалений

Просмотреть файл

@ -0,0 +1,7 @@
---
changeKind: fix
packages:
- "@typespec/versioning"
---
Fixes versioning when using versioned named union variants

Просмотреть файл

@ -533,8 +533,10 @@ function validateReference(program: Program, source: Type | Type[], target: Type
switch (target.kind) {
case "Union":
for (const variant of target.variants.values()) {
validateReference(program, source, variant.type);
if (typeof target.name !== "string") {
for (const variant of target.variants.values()) {
validateReference(program, source, variant.type);
}
}
break;
case "Tuple":

Просмотреть файл

@ -680,6 +680,31 @@ describe("versioning: logic", () => {
strictEqual((v6 as any as IntrinsicType).name, "never");
});
it("does not emit diagnostic when using named versioned union variant in incompatible versioned source", async () => {
const diagnostics = await runner.diagnose(`
@versioned(Versions)
namespace TestService {
enum Versions {v1, v2}
@added(Versions.v2)
model Versioned {}
union NamedUnion {
string;
@added(Versions.v2)
Versioned;
}
@added(Versions.v1)
model Foo {
content: NamedUnion;
}
}
`);
expectDiagnosticEmpty(diagnostics);
});
async function versionedUnion(versions: string[], union: string) {
const { Test } = (await runner.compile(`
@versioned(Versions)