Skip to content

fix(typespec-metadata): derive Go package name from emitter-output-dir instead of module path#4616

Merged
tjprescott merged 3 commits into
mainfrom
copilot/update-package-name-parsing
Jun 12, 2026
Merged

fix(typespec-metadata): derive Go package name from emitter-output-dir instead of module path#4616
tjprescott merged 3 commits into
mainfrom
copilot/update-package-name-parsing

Conversation

Copilot AI commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Go package names were incorrectly derived from the module option, which includes version suffixes (e.g., /v4) and resolves {service-dir} using the global parameter rather than the Go-emitter-specific override. This produced wrong package names like sdk/redisenterprise/armredisenterprise/v4 instead of sdk/resourcemanager/redisenterprise/armredisenterprise.

Example (redisenterprise)

parameters:
  "service-dir":
    default: "sdk/redisenterprise"          # global default

"@azure-tools/typespec-go":
  module: "github.com/Azure/azure-sdk-for-go/{service-dir}/armredisenterprise/v4"
  service-dir: "sdk/resourcemanager/redisenterprise"   # Go-specific override
  emitter-output-dir: "{output-dir}/{service-dir}/armredisenterprise"

Before: sdk/redisenterprise/armredisenterprise/v4 (wrong service-dir, version suffix included)
After: sdk/resourcemanager/redisenterprise/armredisenterprise

Changes

  • collector.ts — In createLanguageMetadata, after relativeOutputDir is computed (absolute path stripped to {output-dir}/... form), Go emitters now derive packageName/namespace from the relative output path rather than the module string. The module-path fallback in parseGo is retained for cases where no usable emitter-output-dir is present. Explicit package-name in emitter options is always respected.

  • collector.test.ts — Three new test cases: output-dir takes precedence over module path, module-path fallback when output-dir isn't under the base dir, and explicit package-name is not overridden.

Copilot AI changed the title [WIP] Update Go package name parsing in typespec-metadata fix(typespec-metadata): derive Go package name from emitter-output-dir instead of module path Jun 11, 2026
Copilot AI requested a review from tjprescott June 11, 2026 17:53
@tjprescott tjprescott marked this pull request as ready for review June 11, 2026 18:20
@azure-sdk

Copy link
Copy Markdown
Collaborator

All changed packages have been documented.

  • @azure-tools/typespec-metadata
Show changes

@azure-tools/typespec-metadata - fix ✏️

Fix incorrect Go package name parsing in tspconfig.yaml. The Go package name is now derived from the emitter output directory instead of the module path, which correctly excludes version suffixes (e.g., /v4) and uses the language-specific service-dir for accurate path resolution.

@azure-sdk

Copy link
Copy Markdown
Collaborator

You can try these changes here

🛝 Playground 🌐 Website

@tjprescott tjprescott enabled auto-merge June 12, 2026 15:40
@pkg-pr-new

pkg-pr-new Bot commented Jun 12, 2026

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@azure-tools/typespec-metadata@4616

commit: f4addce

Copilot AI and others added 2 commits June 12, 2026 08:56
Co-authored-by: tjprescott <5723682+tjprescott@users.noreply.github.com>
@tjprescott tjprescott force-pushed the copilot/update-package-name-parsing branch from 62246c5 to 8ddba2e Compare June 12, 2026 15:57
@github-actions

github-actions Bot commented Jun 12, 2026

Copy link
Copy Markdown
Contributor

⚡ Benchmark Results

⚠️ 14 metric(s) regressed above the +5% threshold:

Metric Baseline Current Change
resolver 🟢 16.8ms 🟢 18.2ms +8.3% 🔴
checker 🟢 175.2ms 🟡 208.7ms +19.1% 🔴
validation 🟢 40.0ms 🟢 43.5ms +9.0% 🔴
 ↳ validation/@azure-tools/typespec-azure-core 🟢 5.8ms 🟢 7.2ms +24.7% 🔴
 ↳ validation/@typespec/versioning 🔴 26.6ms 🔴 28.4ms +6.8% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes 🟢 4.7ms 🟢 5.9ms +26.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🟡 19.6ms 🔴 22.7ms +15.6% 🔴
emit 🔴 5.47s 🔴 6.22s +13.7% 🔴
 ↳ emit/@azure-tools/typespec-autorest 🟢 153.4ms 🟡 208.9ms +36.1% 🔴
 ↳ emit/@azure-tools/typespec-python 🔴 4.03s 🔴 4.55s +12.8% 🔴
 ↳ emit/@typespec/http-client-js 🔴 1.10s 🔴 1.19s +8.1% 🔴
 ↳ emit/@typespec/openapi3 🟢 140.8ms 🟢 161.5ms +14.7% 🔴
 ↳ emit/@typespec/openapi3/compute 🟢 123.6ms 🟢 141.5ms +14.5% 🔴
 ↳ emit/@typespec/openapi3/write 🟢 16.9ms 🟢 20.4ms +20.5% 🔴
Full details – comparing e52d88e vs baseline f141c74
Metric Baseline Current Change
total 🔴 659.2ms 🔴 655.5ms -0.6%
loader 🟡 204.7ms 🟡 202.0ms -1.3%
resolver 🟢 16.8ms 🟢 18.2ms +8.3% 🔴
checker 🟢 175.2ms 🟡 208.7ms +19.1% 🔴
validation 🟢 40.0ms 🟢 43.5ms +9.0% 🔴
 ↳ validation/@azure-tools/typespec-azure-core 🟢 5.8ms 🟢 7.2ms +24.7% 🔴
 ↳ validation/@typespec/http 🟢 5.2ms 🟢 5.9ms +13.0%
 ↳ validation/@typespec/rest 🟢 0.5ms 🟢 0.6ms +22.3%
 ↳ validation/@typespec/versioning 🔴 26.6ms 🔴 28.4ms +6.8% 🔴
 ↳ validation/compiler 🟢 1.4ms 🟢 1.5ms +4.2%
linter 🟢 190.6ms 🟢 144.3ms -24.3% 🟢
 ↳ linter/@azure-tools/typespec-azure-core/auth-required 🟢 0.0ms 🟢 0.0ms -0.6%
 ↳ linter/@azure-tools/typespec-azure-core/bad-record-type 🟢 0.2ms 🟢 0.2ms -8.1%
 ↳ linter/@azure-tools/typespec-azure-core/byos 🟢 8.5ms 🟢 6.2ms -27.5% 🟢
 ↳ linter/@azure-tools/typespec-azure-core/casing-style 🟢 0.8ms 🟢 0.7ms -10.6%
 ↳ linter/@azure-tools/typespec-azure-core/composition-over-inheritance 🟢 0.1ms 🟢 0.1ms +4.7%
 ↳ linter/@azure-tools/typespec-azure-core/documentation-required 🟢 1.4ms 🟢 0.8ms -39.6%
 ↳ linter/@azure-tools/typespec-azure-core/friendly-name 🟢 1.1ms 🟢 0.6ms -45.3%
 ↳ linter/@azure-tools/typespec-azure-core/key-visibility-required 🟢 0.5ms 🟢 0.2ms -63.7%
 ↳ linter/@azure-tools/typespec-azure-core/known-encoding 🟢 0.3ms 🟢 0.3ms +5.0%
 ↳ linter/@azure-tools/typespec-azure-core/long-running-polling-operation-required 🟢 0.3ms 🟢 0.3ms +13.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-case-mismatch 🟢 0.2ms 🟢 0.3ms +15.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-closed-literal-union 🟢 0.4ms 🟢 0.3ms -26.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-enum 🟢 0.2ms 🟢 0.0ms -77.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-error-status-codes 🟢 0.1ms 🟢 0.1ms +3.1%
 ↳ linter/@azure-tools/typespec-azure-core/no-explicit-routes-resource-ops 🟢 0.1ms 🟢 0.1ms +7.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-format 🟢 1.0ms 🟢 0.6ms -38.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-generic-numeric 🟢 1.0ms 🟢 0.4ms -57.1%
 ↳ linter/@azure-tools/typespec-azure-core/no-header-explode 🔴 25.9ms 🔴 20.8ms -19.4% 🟢
 ↳ linter/@azure-tools/typespec-azure-core/no-legacy-usage 🟢 1.5ms 🟢 1.1ms -28.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-multiple-discriminator 🟢 0.1ms 🟢 0.1ms +10.8%
 ↳ linter/@azure-tools/typespec-azure-core/no-nullable 🟢 0.2ms 🟢 0.3ms +14.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-offsetdatetime 🟢 1.6ms 🟢 1.2ms -25.7%
 ↳ linter/@azure-tools/typespec-azure-core/no-openapi 🟢 2.9ms 🟢 2.2ms -25.4%
 ↳ linter/@azure-tools/typespec-azure-core/no-private-usage 🟢 2.0ms 🟢 1.9ms -5.9%
 ↳ linter/@azure-tools/typespec-azure-core/no-query-explode 🔴 26.7ms 🔴 21.9ms -18.0% 🟢
 ↳ linter/@azure-tools/typespec-azure-core/no-response-body 🔴 33.8ms 🔴 26.1ms -22.9% 🟢
 ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces 🟢 0.0ms 🟢 0.0ms +3.0%
 ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch 🟢 7.2ms 🟢 5.4ms -24.4% 🟢
 ↳ linter/@azure-tools/typespec-azure-core/no-rpc-path-params 🟢 0.3ms 🟢 0.2ms -16.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-string-discriminator 🟢 0.0ms 🟢 0.0ms +5.2%
 ↳ linter/@azure-tools/typespec-azure-core/no-unknown 🟢 0.2ms 🟢 0.2ms +5.6%
 ↳ linter/@azure-tools/typespec-azure-core/no-unnamed-union 🟢 0.3ms 🟢 0.4ms +9.3%
 ↳ linter/@azure-tools/typespec-azure-core/operation-missing-api-version 🟢 0.2ms 🟢 0.2ms -1.2%
 ↳ linter/@azure-tools/typespec-azure-core/request-body-problem 🟢 0.3ms 🟢 0.3ms +3.7%
 ↳ linter/@azure-tools/typespec-azure-core/require-versioned 🟢 0.0ms 🟢 0.0ms -3.2%
 ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem 🔴 31.9ms 🔴 23.9ms -25.1% 🟢
 ↳ linter/@azure-tools/typespec-azure-core/rpc-operation-request-body 🟢 1.8ms 🟢 0.3ms -81.3% 🟢
 ↳ linter/@azure-tools/typespec-azure-core/spread-discriminated-model 🟢 0.3ms 🟢 0.3ms +8.4%
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-names 🟢 9.6ms 🟢 5.8ms -40.3% 🟢
 ↳ linter/@azure-tools/typespec-azure-core/use-standard-operations 🟢 0.1ms 🟢 0.1ms +9.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version 🟢 3.7ms 🟢 4.2ms +16.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key 🟢 0.1ms 🟢 0.1ms +29.6%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage 🟢 0.1ms 🟢 0.1ms +9.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes 🟢 4.7ms 🟢 5.9ms +26.5% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts 🟢 4.1ms 🟢 4.5ms +11.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-record 🟢 0.3ms 🟢 0.4ms +7.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes 🟢 0.4ms 🟢 0.5ms +33.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes 🟢 0.0ms 🟢 0.0ms +16.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment 🟢 0.2ms 🟢 0.2ms +9.1%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property 🟢 0.1ms 🟢 0.1ms +10.4%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator 🟢 0.0ms 🟢 0.0ms +7.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb 🟢 0.1ms 🟢 0.1ms +7.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property 🟢 0.1ms 🟢 0.1ms +8.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format 🟢 0.0ms 🟢 0.0ms +9.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars 🟢 0.2ms 🟢 0.2ms +8.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern 🟢 0.0ms 🟢 0.0ms -13.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation 🟢 0.2ms 🟢 0.2ms -0.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response 🟢 4.2ms 🟢 4.7ms +12.0%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-patch 🟢 0.3ms 🟢 0.3ms +18.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars 🟢 0.2ms 🟢 0.2ms +7.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state 🟢 0.1ms 🟢 0.1ms +8.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels 🟢 0.1ms 🟢 0.1ms +17.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/empty-updateable-properties 🟢 0.1ms 🟢 0.1ms +10.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation 🟢 0.0ms 🟢 0.0ms -1.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header 🟡 13.6ms 🟡 13.9ms +2.8%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint 🟢 0.0ms 🟢 0.0ms -0.2%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers 🟢 0.3ms 🟢 0.3ms +6.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-empty-model 🟢 0.1ms 🟢 0.1ms +12.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-override-props 🟢 0.1ms 🟢 0.1ms +3.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation 🟢 0.2ms 🟢 0.2ms +21.9%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body 🟡 19.6ms 🔴 22.7ms +15.6% 🔴
 ↳ linter/@azure-tools/typespec-azure-resource-manager/patch-envelope 🟢 0.1ms 🟢 0.1ms +5.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/resource-name 🟢 0.1ms 🟢 0.1ms +17.3%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/secret-prop 🟢 2.0ms 🟢 2.1ms +5.7%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/unsupported-type 🟢 0.4ms 🟢 0.4ms +7.5%
 ↳ linter/@azure-tools/typespec-azure-resource-manager/version-progression 🟢 0.0ms 🟢 0.0ms +1.0%
 ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict 🟢 1.3ms 🟢 1.1ms -16.3%
 ↳ linter/@azure-tools/typespec-client-generator-core/require-client-suffix 🟢 0.2ms 🟢 0.2ms -0.2%
emit 🔴 5.47s 🔴 6.22s +13.7% 🔴
 ↳ emit/@azure-tools/typespec-autorest 🟢 153.4ms 🟡 208.9ms +36.1% 🔴
 ↳ emit/@azure-tools/typespec-python 🔴 4.03s 🔴 4.55s +12.8% 🔴
 ↳ emit/@typespec/http-client-js 🔴 1.10s 🔴 1.19s +8.1% 🔴
 ↳ emit/@typespec/openapi3 🟢 140.8ms 🟢 161.5ms +14.7% 🔴
 ↳ emit/@typespec/openapi3/compute 🟢 123.6ms 🟢 141.5ms +14.5% 🔴
 ↳ emit/@typespec/openapi3/write 🟢 16.9ms 🟢 20.4ms +20.5% 🔴

Averaged across 3 specs (azure-arm-resource-manager, azure-core-dataplane, azure-full).
Threshold: changes > ±5% are highlighted.
🟢 Fast · 🟡 Moderate (stages >200ms, rules >10ms) · 🔴 Slow (stages >400ms, rules >20ms)

@tjprescott tjprescott added this pull request to the merge queue Jun 12, 2026
Merged via the queue into main with commit dcdf200 Jun 12, 2026
23 checks passed
@tjprescott tjprescott deleted the copilot/update-package-name-parsing branch June 12, 2026 16:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants