Skip to content

unicorn/filename-case Style ​

What it does ​

Enforces a consistent case style for filenames to improve project organization and maintainability. By default, kebab-case is enforced, but other styles can be configured.

Why is this bad? ​

Inconsistent file naming conventions make it harder to locate files, navigate projects, and enforce consistency across a codebase. Standardizing naming conventions improves readability, reduces cognitive overhead, and aligns with best practices in large-scale development.

Examples ​

Examples of correct filenames for each case:

kebabCase ​

  • some-file-name.js
  • some-file-name.test.js
  • some-file-name.test-utils.js

camelCase ​

  • someFileName.js
  • someFileName.test.js
  • someFileName.testUtils.js

snakeCase ​

  • some_file_name.js
  • some_file_name.test.js
  • some_file_name.test_utils.js

pascalCase ​

  • SomeFileName.js
  • SomeFileName.Test.js
  • SomeFileName.TestUtils.js

Options ​

case ​

{ type: 'kebabCase' | 'camelCase' | 'snakeCase' | 'pascalCase' }

You can set the case option like this:

json
"unicorn/filename-case": [
  "error",
  {
    "case": "kebabCase"
  }
]

cases ​

{ type: { [key in 'kebabCase' | 'camelCase' | 'snakeCase' | 'pascalCase']?: boolean } }

You can set the cases option like this:

json
"unicorn/filename-case": [
  "error",
  {
    "cases": {
      "camelCase": true,
      "pascalCase": true
    }
  }
]

ignore ​

{ type: string }

Specifies a regular expression pattern for filenames that should be ignored by this rule.

You can set the ignore option like this:

json
"unicorn/filename-case": [
  "error",
  {
    "ignore": "^foo.*$"
  }
]

multipleFileExtensions ​

{ type: boolean, default: true }

Whether to treat additional, .-separated parts of a filename as parts of the extension rather than parts of the filename.

How to use ​

To enable this rule in the CLI or using the config file, you can use:

bash
oxlint --deny unicorn/filename-case
json
{
  "rules": {
    "unicorn/filename-case": "error"
  }
}

References ​

Released under the MIT License.