Linter rulesAsyncAPIschema-enum-naming

schema-enum-naming

Since 0.9.0

This rule ensures that all string values defined in the enum properties of schema objects adhere to a predefined naming convention.

Rule Details

Adhering to a consistent naming convention enhances the readability and maintainability of the API’s structure.

The schema-enum-naming rule checks the string values of the enum list of every schema of an AsyncAPI document. For every value that is not in the expected convention, it reports Schema enum value '<value>' is not in the '<convention>' convention. Values of other types (numbers, booleans, null, …) are ignored.

The recognised naming conventions are:

  • const - THIS_IS_CONST_CASE
  • camel - thisIsCamelCase, also with acronyms (userID)
  • camel-strict - thisIsCamelCase, but no two capitals in a row (userId, not userID)
  • kebab - this-is-kebab-case
  • pascal - ThisIsPascalCase, also with acronyms (HTTPServer)
  • pascal-strict - ThisIsPascalCase, but no two capitals in a row (HttpServer, not HTTPServer)
  • header - This-Is-Header-Case
  • snake - this_is_snake_case

The default convention is const.

Configuration

The configuration block is a naming convention name (see the “Rule Details” section for a list of recognized names).

version: "1.0"
commands:
  lint:
    asyncapi:
      rules:
        schema-enum-naming: [warning, kebab]

Examples

Good. With the default configuration.

asyncapi: 3.0.0
info:
  title: User Events
  version: 1.0.0
components:
  schemas:
    UserStatus:
      type: string
      enum:
        - ACTIVE
        - INACTIVE
        - BLOCKED

Bad. To use UserStatus properly, a consumer must always consult the documentation.

asyncapi: 3.0.0
info:
  title: User Events
  version: 1.0.0
components:
  schemas:
    UserStatus:
      type: string
      enum:
        - activeStatus
        - inactive_status
        - BLOCKED_STATUS

When Not to Use It

If your API does not follow a specific naming convention for enum values in its schema objects, you may not need to use this rule.

Compatibility

This rule is compatible with AsyncAPI 3.x documents. AsyncAPI 2.x documents are rejected by the reader and are not linted.

Related rules