From e12f6fbf0a1b631a91abc1877c2f223ee0f3aa3e Mon Sep 17 00:00:00 2001 From: Pan Shao Date: Thu, 17 Oct 2024 15:28:13 +0800 Subject: [PATCH] Fix flatten and no doc --- .../src/generate/generate-object.ts | 4 +++ .../src/generate/generate-parameter.ts | 4 ++- .../src/utils/decorators.ts | 33 +++++++++---------- .../src/utils/model-generation.ts | 3 +- .../src/utils/suppressions.ts | 4 +-- 5 files changed, 27 insertions(+), 21 deletions(-) diff --git a/packages/extensions/openapi-to-typespec/src/generate/generate-object.ts b/packages/extensions/openapi-to-typespec/src/generate/generate-object.ts index ed315df97b..ecfe00244b 100644 --- a/packages/extensions/openapi-to-typespec/src/generate/generate-object.ts +++ b/packages/extensions/openapi-to-typespec/src/generate/generate-object.ts @@ -1,15 +1,19 @@ +import { getOptions } from "../options"; import { TypespecObject } from "../interfaces"; import { generateDecorators } from "../utils/decorators"; import { generateDocs } from "../utils/docs"; import { getModelPropertiesDeclarations } from "../utils/model-generation"; +import { generateSuppressionForDocumentRequired } from "../utils/suppressions"; export function generateObject(typespecObject: TypespecObject) { + const { isFullCompatible } = getOptions(); let definitions: string[] = []; const fixme = getFixme(typespecObject); fixme && definitions.push(fixme); const doc = generateDocs(typespecObject); + if (doc === '' && isFullCompatible) definitions.push(generateSuppressionForDocumentRequired()); definitions.push(doc); const decorators = generateDecorators(typespecObject.decorators); diff --git a/packages/extensions/openapi-to-typespec/src/generate/generate-parameter.ts b/packages/extensions/openapi-to-typespec/src/generate/generate-parameter.ts index 0082ea076e..c0c38cc650 100644 --- a/packages/extensions/openapi-to-typespec/src/generate/generate-parameter.ts +++ b/packages/extensions/openapi-to-typespec/src/generate/generate-parameter.ts @@ -1,3 +1,4 @@ +import { generateSuppressionForDocumentRequired } from "../utils/suppressions"; import { TypespecParameter } from "../interfaces"; import { getOptions } from "../options"; import { generateDecorators } from "../utils/decorators"; @@ -10,12 +11,13 @@ const _ARM_PARAM_REPLACEMENTS: { [key: string]: string } = { }; export function generateParameter(parameter: TypespecParameter): string { - const { isArm } = getOptions(); + const { isArm, isFullCompatible } = getOptions(); if (isArm && _ARM_PARAM_REPLACEMENTS[parameter.name] !== undefined) { return _ARM_PARAM_REPLACEMENTS[parameter.name]; } const definitions: string[] = []; const doc = generateDocs(parameter); + if (doc === '' && isFullCompatible) definitions.push(generateSuppressionForDocumentRequired()); definitions.push(doc); const decorators = generateDecorators(parameter.decorators); diff --git a/packages/extensions/openapi-to-typespec/src/utils/decorators.ts b/packages/extensions/openapi-to-typespec/src/utils/decorators.ts index a3756dc08d..e2270f7e95 100644 --- a/packages/extensions/openapi-to-typespec/src/utils/decorators.ts +++ b/packages/extensions/openapi-to-typespec/src/utils/decorators.ts @@ -135,20 +135,20 @@ export function getPropertyDecorators(element: Property | Parameter): TypespecDe locationDecorator.arguments = format === "multi" ? [ - { - value: `#{ name: "${element.language.default.serializedName}", explode: true }`, - options: { unwrap: true }, - }, - ] + { + value: `#{ name: "${element.language.default.serializedName}", explode: true }`, + options: { unwrap: true }, + }, + ] : [ - { - value: - format === "csv" - ? `"${element.language.default.serializedName}"` - : `{name: "${element.language.default.serializedName}", format: "${format}"}`, - options: { unwrap: true }, - }, - ]; + { + value: + format === "csv" + ? `"${element.language.default.serializedName}"` + : `{name: "${element.language.default.serializedName}", format: "${format}"}`, + options: { unwrap: true }, + }, + ]; } } @@ -173,10 +173,9 @@ export function getPropertyDecorators(element: Property | Parameter): TypespecDe if (element.extensions?.["x-ms-client-flatten"] && isFullCompatible) { decorators.push({ - name: "extension", - module: "@typespec/openapi", - namespace: "TypeSpec.OpenAPI", - arguments: [{ value: `"x-ms-client-flatten"` }, { value: "true" }], + name: "Azure.ResourceManager.Private.conditionalClientFlatten", + suppressionCode: "@azure-tools/typespec-azure-core/no-private-usage", + suppressionMessage: "For backward compatibility" }); } diff --git a/packages/extensions/openapi-to-typespec/src/utils/model-generation.ts b/packages/extensions/openapi-to-typespec/src/utils/model-generation.ts index e408fc0ddd..9b545531a6 100644 --- a/packages/extensions/openapi-to-typespec/src/utils/model-generation.ts +++ b/packages/extensions/openapi-to-typespec/src/utils/model-generation.ts @@ -2,7 +2,7 @@ import { TypespecObjectProperty } from "../interfaces"; import { getOptions } from "../options"; import { generateDecorators } from "./decorators"; import { generateDocs } from "./docs"; -import { generateSuppressions } from "./suppressions"; +import { generateSuppressionForDocumentRequired, generateSuppressions } from "./suppressions"; import { getFullyQualifiedName } from "./type-mapping"; export function getModelPropertiesDeclarations(properties: TypespecObjectProperty[]): string[] { @@ -10,6 +10,7 @@ export function getModelPropertiesDeclarations(properties: TypespecObjectPropert const definitions: string[] = []; for (const property of properties) { const propertyDoc = generateDocs(property); + if (propertyDoc === '' && isFullCompatible) definitions.push(generateSuppressionForDocumentRequired()); propertyDoc && definitions.push(propertyDoc); const decorators = generateDecorators(property.decorators); decorators && definitions.push(decorators); diff --git a/packages/extensions/openapi-to-typespec/src/utils/suppressions.ts b/packages/extensions/openapi-to-typespec/src/utils/suppressions.ts index 6fcc10bf1d..2758475d95 100644 --- a/packages/extensions/openapi-to-typespec/src/utils/suppressions.ts +++ b/packages/extensions/openapi-to-typespec/src/utils/suppressions.ts @@ -1,6 +1,6 @@ -import { ChoiceSchema, Property, Schema, SealedChoiceSchema } from "@autorest/codemodel"; +import { Property } from "@autorest/codemodel"; import { WithSuppressDirective } from "../interfaces"; -import { isChoiceSchema, isSealedChoiceSchema, isDictionarySchema, isStringSchema } from "./schemas"; +import { isDictionarySchema } from "./schemas"; export function generateSuppressionForDocumentRequired(): string { return `#suppress "@azure-tools/typespec-azure-core/documentation-required" "For backward compatibility"`;