UNPKG

@typespec/versioning

Version:

TypeSpec library for declaring and emitting versioned APIs

45 lines 2.12 kB
import { getSourceLocation, getTypeName, } from "@typespec/compiler"; import { getAllVersions } from "./versioning.js"; export function getVersionAdditionCodefixes(version, type, program, typeOptions) { if (typeof version === "string") { return getVersionAdditionCodeFixFromString(version, type, program, typeOptions); } return getVersionAdditionCodeFixFromVersion(version, type, typeOptions); } function getVersionAdditionCodeFixFromVersion(version, type, typeOptions) { if (type.node === undefined) return undefined; const enumMember = version.enumMember; const decoratorDeclaration = `@added(${enumMember.enum.name}.${enumMember.name})`; return [ getDecorationAdditionCodeFix("add-version-to-type", decoratorDeclaration, getTypeName(type, typeOptions), getSourceLocation(type.node)), ]; } function getVersionAdditionCodeFixFromString(version, type, program, typeOptions) { const targetVersion = getAllVersions(program, type)?.find((v) => v.value === version); if (targetVersion === undefined) return undefined; return getVersionAdditionCodeFixFromVersion(targetVersion, type, typeOptions); } export function getVersionRemovalCodeFixes(version, type, program, typeOptions) { if (type.node === undefined) return undefined; const targetVersion = getAllVersions(program, type)?.find((v) => v.value === version); if (targetVersion === undefined) return; const enumMember = targetVersion.enumMember; const decoratorDeclaration = `@removed(${enumMember.enum.name}.${enumMember.name})`; return [ getDecorationAdditionCodeFix("remove-version-from-type", decoratorDeclaration, getTypeName(type, typeOptions), getSourceLocation(type.node)), ]; } function getDecorationAdditionCodeFix(id, decoratorDeclaration, typeName, location) { return { id: id, label: `Add '${decoratorDeclaration}' to '${typeName}'`, fix: (context) => { return context.prependText(location, `${decoratorDeclaration}\n`); }, }; } //# sourceMappingURL=validate.codefix.js.map