From 1fb949e49e16fb60148f32ae8f9a3fdefed6e786 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 05:51:14 +0000 Subject: [PATCH 1/3] Initial plan From 5c8a3f6a137825a05bd307a4cbdfc6a0c28d54f4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 06:01:39 +0000 Subject: [PATCH 2/3] Restore console.time instrumentation in typespec-ts emitter Agent-Logs-Url: https://github.com/Azure/autorest.typescript/sessions/5e6dc87a-835d-43d9-9d71-51bf700e5f2b Co-authored-by: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> --- packages/typespec-ts/src/index.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/typespec-ts/src/index.ts b/packages/typespec-ts/src/index.ts index a42323d84e..a1888ce1e5 100644 --- a/packages/typespec-ts/src/index.ts +++ b/packages/typespec-ts/src/index.ts @@ -119,7 +119,9 @@ import { getClassicalClientName } from "./modular/helpers/namingHelpers.js"; export * from "./lib.js"; +/* eslint-disable no-console */ export async function $onEmit(context: EmitContext) { + console.time("onEmit"); if (context.program.compilerOptions.noEmit || context.program.hasError()) { return; } @@ -127,7 +129,9 @@ export async function $onEmit(context: EmitContext) { const outputProject = new Project(); const program: Program = context.program; const emitterOptions: EmitterOptions = context.options; + console.time("onEmit: create context"); const dpgContext = await createContextWithDefaultOptions(context); + console.timeEnd("onEmit: create context"); // Report any diagnostics from TCGC if (dpgContext.diagnostics?.length > 0) { @@ -150,6 +154,7 @@ export async function $onEmit(context: EmitContext) { compilerContext: context, tcgcContext: dpgContext }); + console.time("onEmit: load static helpers"); const staticHelpers = await loadStaticHelpers( outputProject, { @@ -172,6 +177,7 @@ export async function $onEmit(context: EmitContext) { program } ); + console.timeEnd("onEmit: load static helpers"); const extraDependencies = isAzurePackage({ options: rlcOptions }) ? { ...AzurePollingDependencies, @@ -180,6 +186,7 @@ export async function $onEmit(context: EmitContext) { ...AzureTestDependencies } : { ...DefaultCoreDependencies }; + console.time("onEmit: provide binder"); const binder = provideBinder(outputProject, { staticHelpers, dependencies: { @@ -188,6 +195,7 @@ export async function $onEmit(context: EmitContext) { useSubpathImports: rlcOptions.azureSdkForJs === true }); provideSdkTypes(dpgContext); + console.timeEnd("onEmit: provide binder"); const rlcCodeModels: RLCModel[] = []; let modularEmitterOptions: ModularEmitterOptions; @@ -195,7 +203,9 @@ export async function $onEmit(context: EmitContext) { await clearSrcFolder(); // 2. Generate RLC code model // TODO: skip this step in modular once modular generator is sufficiently decoupled + console.time("onEmit: build RLC code models"); await buildRLCCodeModels(); + console.timeEnd("onEmit: build RLC code models"); // 3. Clear samples-dev folder if generateSample is true await clearSamplesDevFolder(); @@ -323,6 +333,7 @@ export async function $onEmit(context: EmitContext) { } async function generateModularSources() { + console.time("onEmit: generate modular sources"); const modularSourcesRoot = dpgContext.generationPathDetail?.modularSourcesDir ?? "src"; const project = useContext("outputProject"); @@ -344,8 +355,10 @@ export async function $onEmit(context: EmitContext) { } ); + console.time("onEmit: emit models"); emitTypes(dpgContext, { sourceRoot: modularSourcesRoot }); emitNonModelResponseTypes(dpgContext, { sourceRoot: modularSourcesRoot }); + console.timeEnd("onEmit: emit models"); buildSubpathIndexFile(modularEmitterOptions, "models", undefined, { recursive: true }); @@ -354,6 +367,7 @@ export async function $onEmit(context: EmitContext) { // If no clients, we still need to build the root index file buildRootIndex(dpgContext, modularEmitterOptions, rootIndexFile); } + console.time("onEmit: emit source files"); for (const subClient of clientMap) { await renameClientName(subClient[1], modularEmitterOptions); buildApiOptions(dpgContext, subClient, modularEmitterOptions); @@ -390,9 +404,12 @@ export async function $onEmit(context: EmitContext) { subClient ); } + console.timeEnd("onEmit: emit source files"); // Enable modular sample generation when explicitly set to true or MPG if (emitterOptions["generate-sample"] === true) { + console.time("onEmit: emit samples"); const samples = emitSamples(dpgContext); + console.timeEnd("onEmit: emit samples"); // Refine the rlc sample generation logic // TODO: remember to remove this out when RLC is splitted from Modular if (samples.length > 0) { @@ -400,6 +417,7 @@ export async function $onEmit(context: EmitContext) { } } + console.time("onEmit: resolve references"); binder.resolveAllReferences( modularSourcesRoot, dpgContext.generationPathDetail?.rootDir @@ -407,6 +425,9 @@ export async function $onEmit(context: EmitContext) { if (program.compilerOptions.noEmit || program.hasError()) { return; } + console.timeEnd("onEmit: resolve references"); + + console.time("onEmit: generate files"); for (const file of project.getSourceFiles()) { await emitContentByBuilder( @@ -415,6 +436,8 @@ export async function $onEmit(context: EmitContext) { modularEmitterOptions as any ); } + console.timeEnd("onEmit: generate files"); + console.timeEnd("onEmit: generate modular sources"); } interface Metadata { @@ -710,7 +733,9 @@ export async function $onEmit(context: EmitContext) { .map((subClient) => getClientContextPath(subClient, options)) .map((path) => path.substring(path.indexOf("src"))); } + console.timeEnd("onEmit"); } +/* eslint-enable no-console */ export async function createContextWithDefaultOptions( context: EmitContext> From 138a183147b47d268fb5f080d505af8a8ed467d3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 12 May 2026 06:06:45 +0000 Subject: [PATCH 3/3] Scope no-console disables to individual timing calls Agent-Logs-Url: https://github.com/Azure/autorest.typescript/sessions/5e6dc87a-835d-43d9-9d71-51bf700e5f2b Co-authored-by: kazrael2119 <98569699+kazrael2119@users.noreply.github.com> --- packages/typespec-ts/src/index.ts | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/typespec-ts/src/index.ts b/packages/typespec-ts/src/index.ts index a1888ce1e5..411ff6cec9 100644 --- a/packages/typespec-ts/src/index.ts +++ b/packages/typespec-ts/src/index.ts @@ -119,8 +119,8 @@ import { getClassicalClientName } from "./modular/helpers/namingHelpers.js"; export * from "./lib.js"; -/* eslint-disable no-console */ export async function $onEmit(context: EmitContext) { + // eslint-disable-next-line no-console console.time("onEmit"); if (context.program.compilerOptions.noEmit || context.program.hasError()) { return; @@ -129,8 +129,10 @@ export async function $onEmit(context: EmitContext) { const outputProject = new Project(); const program: Program = context.program; const emitterOptions: EmitterOptions = context.options; + // eslint-disable-next-line no-console console.time("onEmit: create context"); const dpgContext = await createContextWithDefaultOptions(context); + // eslint-disable-next-line no-console console.timeEnd("onEmit: create context"); // Report any diagnostics from TCGC @@ -154,6 +156,7 @@ export async function $onEmit(context: EmitContext) { compilerContext: context, tcgcContext: dpgContext }); + // eslint-disable-next-line no-console console.time("onEmit: load static helpers"); const staticHelpers = await loadStaticHelpers( outputProject, @@ -177,6 +180,7 @@ export async function $onEmit(context: EmitContext) { program } ); + // eslint-disable-next-line no-console console.timeEnd("onEmit: load static helpers"); const extraDependencies = isAzurePackage({ options: rlcOptions }) ? { @@ -186,6 +190,7 @@ export async function $onEmit(context: EmitContext) { ...AzureTestDependencies } : { ...DefaultCoreDependencies }; + // eslint-disable-next-line no-console console.time("onEmit: provide binder"); const binder = provideBinder(outputProject, { staticHelpers, @@ -195,6 +200,7 @@ export async function $onEmit(context: EmitContext) { useSubpathImports: rlcOptions.azureSdkForJs === true }); provideSdkTypes(dpgContext); + // eslint-disable-next-line no-console console.timeEnd("onEmit: provide binder"); const rlcCodeModels: RLCModel[] = []; @@ -203,8 +209,10 @@ export async function $onEmit(context: EmitContext) { await clearSrcFolder(); // 2. Generate RLC code model // TODO: skip this step in modular once modular generator is sufficiently decoupled + // eslint-disable-next-line no-console console.time("onEmit: build RLC code models"); await buildRLCCodeModels(); + // eslint-disable-next-line no-console console.timeEnd("onEmit: build RLC code models"); // 3. Clear samples-dev folder if generateSample is true await clearSamplesDevFolder(); @@ -333,6 +341,7 @@ export async function $onEmit(context: EmitContext) { } async function generateModularSources() { + // eslint-disable-next-line no-console console.time("onEmit: generate modular sources"); const modularSourcesRoot = dpgContext.generationPathDetail?.modularSourcesDir ?? "src"; @@ -355,9 +364,11 @@ export async function $onEmit(context: EmitContext) { } ); + // eslint-disable-next-line no-console console.time("onEmit: emit models"); emitTypes(dpgContext, { sourceRoot: modularSourcesRoot }); emitNonModelResponseTypes(dpgContext, { sourceRoot: modularSourcesRoot }); + // eslint-disable-next-line no-console console.timeEnd("onEmit: emit models"); buildSubpathIndexFile(modularEmitterOptions, "models", undefined, { recursive: true @@ -367,6 +378,7 @@ export async function $onEmit(context: EmitContext) { // If no clients, we still need to build the root index file buildRootIndex(dpgContext, modularEmitterOptions, rootIndexFile); } + // eslint-disable-next-line no-console console.time("onEmit: emit source files"); for (const subClient of clientMap) { await renameClientName(subClient[1], modularEmitterOptions); @@ -404,11 +416,14 @@ export async function $onEmit(context: EmitContext) { subClient ); } + // eslint-disable-next-line no-console console.timeEnd("onEmit: emit source files"); // Enable modular sample generation when explicitly set to true or MPG if (emitterOptions["generate-sample"] === true) { + // eslint-disable-next-line no-console console.time("onEmit: emit samples"); const samples = emitSamples(dpgContext); + // eslint-disable-next-line no-console console.timeEnd("onEmit: emit samples"); // Refine the rlc sample generation logic // TODO: remember to remove this out when RLC is splitted from Modular @@ -417,6 +432,7 @@ export async function $onEmit(context: EmitContext) { } } + // eslint-disable-next-line no-console console.time("onEmit: resolve references"); binder.resolveAllReferences( modularSourcesRoot, @@ -425,8 +441,10 @@ export async function $onEmit(context: EmitContext) { if (program.compilerOptions.noEmit || program.hasError()) { return; } + // eslint-disable-next-line no-console console.timeEnd("onEmit: resolve references"); + // eslint-disable-next-line no-console console.time("onEmit: generate files"); for (const file of project.getSourceFiles()) { @@ -436,7 +454,9 @@ export async function $onEmit(context: EmitContext) { modularEmitterOptions as any ); } + // eslint-disable-next-line no-console console.timeEnd("onEmit: generate files"); + // eslint-disable-next-line no-console console.timeEnd("onEmit: generate modular sources"); } @@ -733,9 +753,9 @@ export async function $onEmit(context: EmitContext) { .map((subClient) => getClientContextPath(subClient, options)) .map((path) => path.substring(path.indexOf("src"))); } + // eslint-disable-next-line no-console console.timeEnd("onEmit"); } -/* eslint-enable no-console */ export async function createContextWithDefaultOptions( context: EmitContext>