Skip to content

Client SDK linter ruleset(s) #4697

Open

Description

Move client only rules(where the fix is a client.tsp augment) to a separate ruleset that would not apply to services that do not generate SDKs.

Proposal:

  • Either have a client-sdk or a <lang>-client-sdk per language.
  • tsv enforce ruleset(s) are enabled when corresponding emitter has options defined

Examples

  1. Service X no sdk - valid
options:
  "@azure-tools/typespec-autorest":
    use-read-only-status-schema: true
    emitter-output-dir: "{project-root}"
    output-file: "{emitter-output-dir}/{version-status}/{version}/widget.json"
    arm-types-dir: "{project-root}/../../../../common-types/resource-management"
    examples-dir: "{emitter-output-dir}/{version-status}/{version}/examples"
    skip-example-copying: true
linter:
  extends:
    - "@azure-tools/typespec-azure-rulesets/resource-manager"
  1. Service X decide want to add c#
options:
  "@azure-tools/typespec-autorest":
    use-read-only-status-schema: true
    emitter-output-dir: "{project-root}"
    output-file: "{emitter-output-dir}/{version-status}/{version}/widget.json"
    arm-types-dir: "{project-root}/../../../../common-types/resource-management"
    examples-dir: "{emitter-output-dir}/{version-status}/{version}/examples"
    skip-example-copying: true
  "@azure-tools/typespec-csharp":
    emitter-output-dir: "{output-dir}/{service-dir}/Azure.ResourceManager.Contoso"
    clear-output-folder: true
    model-namespace: false
    namespace: "Azure.ResourceManager.Contoso"
linter:
  extends:
    - "@azure-tools/typespec-azure-rulesets/resource-manager"
$ npx tsv specification/my-x
error specification/my-x/tspconfig.yaml - missing ruleset `csharp-client-sdk` or `client-sdk`
  1. Fix
options:
  "@azure-tools/typespec-autorest":
    use-read-only-status-schema: true
    emitter-output-dir: "{project-root}"
    output-file: "{emitter-output-dir}/{version-status}/{version}/widget.json"
    arm-types-dir: "{project-root}/../../../../common-types/resource-management"
    examples-dir: "{emitter-output-dir}/{version-status}/{version}/examples"
    skip-example-copying: true
  "@azure-tools/typespec-csharp":
    emitter-output-dir: "{output-dir}/{service-dir}/Azure.ResourceManager.Contoso"
    clear-output-folder: true
    model-namespace: false
    namespace: "Azure.ResourceManager.Contoso"
linter:
  extends:
    - "@azure-tools/typespec-azure-rulesets/resource-manager"
    - "@azure-tools/typespec-azure-rulesets/csharp-client-sdk" # error if missing
    - "@azure-tools/typespec-azure-rulesets/client-sdk" # or
options:
  "@azure-tools/typespec-autorest":
    use-read-only-status-schema: true
    emitter-output-dir: "{project-root}"
    output-file: "{emitter-output-dir}/{version-status}/{version}/widget.json"
    arm-types-dir: "{project-root}/../../../../common-types/resource-management"
    examples-dir: "{emitter-output-dir}/{version-status}/{version}/examples"
    skip-example-copying: true
  "@azure-tools/typespec-csharp":
    emitter-output-dir: "{output-dir}/{service-dir}/Azure.ResourceManager.Contoso"
    clear-output-folder: true
    model-namespace: false
    namespace: "Azure.ResourceManager.Contoso"
  "@azure-tools/typespec-python":
    emitter-output-dir: "{output-dir}/{service-dir}/azure-mgmt-contoso"
    namespace: "azure.mgmt.contoso"
    generate-test: true
    generate-sample: true
  "@azure-tools/typespec-java":
    emitter-output-dir: "{output-dir}/{service-dir}/azure-resourcemanager-contoso"
    namespace: "com.azure.resourcemanager.contoso"
    service-name: "contoso"
  "@azure-tools/typespec-ts":
    emitter-output-dir: "{output-dir}/{service-dir}/arm-contoso"
    experimental-extensible-enums: true
    flavor: azure
    package-details:
      name: "@azure/arm-contoso"
  "@azure-tools/typespec-go":
    service-dir: "sdk/resourcemanager/contoso"
    emitter-output-dir: "{output-dir}/{service-dir}/armcontoso"
    module: "github.com/Azure/azure-sdk-for-go/{service-dir}/armcontoso"
    fix-const-stuttering: true
    generate-samples: true
    generate-fakes: true
    head-as-boolean: true
linter:
  extends:
    - "@azure-tools/typespec-azure-rulesets/resource-manager"
    - "@azure-tools/typespec-azure-rulesets/csharp-client-sdk" # error if missing
    - "@azure-tools/typespec-azure-rulesets/csharp-python-sdk" # error if missing
    - "@azure-tools/typespec-azure-rulesets/client-sdk" # or

Activity

  1. markcowl commented on Jun 29, 2026

    @markcowl
    Member

    For now:

    • add client-sdk ruleset
    • update tsv to require this ruleset

    Future:

    • Decide how to support multiple client rulesets, as this becomes relevant
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

featureNew feature or requestlib:azure-coreIssues for @azure-tools/typespec-azure-core librarylinterIssues related to linter rulestriaged:core

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions