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.jssome-file-name.test.jssome-file-name.test-utils.js
camelCase
someFileName.jssomeFileName.test.jssomeFileName.testUtils.js
snakeCase
some_file_name.jssome_file_name.test.jssome_file_name.test_utils.js
pascalCase
SomeFileName.jsSomeFileName.Test.jsSomeFileName.TestUtils.js
Options
case
{ type: 'kebabCase' | 'camelCase' | 'snakeCase' | 'pascalCase' }
You can set the case option like this:
"unicorn/filename-case": [
"error",
{
"case": "kebabCase"
}
]cases
{ type: { [key in 'kebabCase' | 'camelCase' | 'snakeCase' | 'pascalCase']?: boolean } }
You can set the cases option like this:
"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:
"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:
oxlint --deny unicorn/filename-case{
"rules": {
"unicorn/filename-case": "error"
}
}