no-query-in-collection
@azure-tools/typespec-azure-resource-manager/no-query-in-collectionARM collection GET and list operations must not declare query parameters beyond api-version and $filter.
ARM collection GET and list operations may use only the standard api-version and $filter query parameters. Additional query parameters make list operations inconsistent across resource providers and introduce nonstandard method parameters in generated SDKs.
The rule applies to operations marked @list regardless of their HTTP method or path, as well as GET operations whose emitted ARM path identifies a resource collection, even without @list. Query parameter names are case-sensitive, so $FILTER is not equivalent to $filter.
Assume WidgetPage is a list response with @pageItems metadata. The first example is a collection GET; the second is an operation marked @list.
❌ Incorrect
Section titled “❌ Incorrect”Collection GET
Section titled “Collection GET”@route("/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/widgets")@getop listWidgets( @path subscriptionId: string, @query("api-version") apiVersion: string, @query continuationToken?: string,): void;List operation
Section titled “List operation”@route("/widgets/search")@post@listop searchWidgets(@query continuationToken?: string): WidgetPage;✅ Correct
Section titled “✅ Correct”Collection GET
Section titled “Collection GET”@route("/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/widgets")@getop listWidgets( @path subscriptionId: string, @query("api-version") apiVersion: string, @query("$filter") filter?: string,): void;List operation
Section titled “List operation”@route("/widgets/search")@post@listop searchWidgets(@query("$filter") filter?: string): WidgetPage;LintDiff Equivalent
Section titled “LintDiff Equivalent”This rule is the native TypeSpec equivalent of the Swagger validator rule QueryParametersInCollectionGet.