Skip to content

Client SDK linter ruleset(s) #4697

Description

@timotheeguerin

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions