useNamingConvention (since v1.0.0)
Diagnostic Category: lint/style/useNamingConvention
Inspired from: naming-convention
Enforce naming conventions for everything across a codebase.
Enforcing naming conventions helps to keep the codebase consistent, and reduces overhead when thinking about the name case of a variable.
Naming conventions
Section titled Naming conventionsAll names can be prefixed and suffixed by underscores _ and dollar signs $.
Variable names
Section titled Variable namesAll variables, including function parameters and catch parameters, are in camelCase.
Additionally, top-level variables declared as const or var may be in CONSTANT_CASE or PascalCase.
Top-level variables are declared at module or script level.
Variables declared in a TypeScript module or namespace are also considered top-level.
function f(param, _unusedParam) { let localValue = 0; try { /* ... */ } catch (customError) { /* ... */ }}
export const A_CONSTANT = 5;
export const Person = class {}
let aVariable = 0;
export namespace ns { export const ANOTHER_CONSTANT = "";}Examples of incorrect names:
let a_value = 0;style/useNamingConvention.js:1:5 lint/style/useNamingConvention FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠ This top-level let name should be in camelCase.
> 1 │ let a_value = 0;
│ ^^^^^^^
2 │
ℹ The name could be renamed to `aValue`.
ℹ Safe fix: Rename this symbol in camelCase.
1 │ - let·a_value·=·0;
1 │ + let·aValue·=·0;
2 2 │
const fooYPosition = 0;style/useNamingConvention.js:1:7 lint/style/useNamingConvention ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠ Two consecutive uppercase characters are not allowed in camelCase and PascalCase because strictCase is set to `true`.
> 1 │ const fooYPosition = 0;
│ ^^^^^^^^^^^^
2 │
ℹ If you want to use consecutive uppercase characters in camelCase and PascalCase, then set the strictCase option to `false`.
See the rule options for more details.
function f(FirstParam) {}style/useNamingConvention.js:1:12 lint/style/useNamingConvention FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━
⚠ This function parameter name should be in camelCase.
> 1 │ function f(FirstParam) {}
│ ^^^^^^^^^^
2 │
ℹ The name could be renamed to `firstParam`.
ℹ Safe fix: Rename this symbol in camelCase.
1 │ - function·f(FirstParam)·{}
1 │ + function·f(firstParam)·{}
2 2 │
Function names
Section titled Function namesA function name is in camelCase or PascalCase.
function trimString(s) { /*...*/ }
function Component() { return <div></div>;}TypeScript enum names
Section titled TypeScript enum namesA TypeScript enum name is in PascalCase.
enum members are by default in PascalCase.
However, you can configure the case of enum members.
See options for more details.
enum Status { Open, Close,}Classes
Section titled Classes-
A class name is in
PascalCase. -
Static property and static getter names are in
camelCaseorCONSTANT_CASE. -
Class property and method names are in
camelCase.
class Person { static MAX_FRIEND_COUNT = 256;
static get SPECIAL_PERSON_INSTANCE() { /*...*/ }
initializedProperty = 0;
specialMethod() {}}TypeScript type aliases and interface
Section titled TypeScript type aliases and interface-
A
typealias or an interface name are inPascalCase. -
Property and method names in a type are in
camelCase. -
readonlyproperty and getter names can also be inCONSTANT_CASE.
type Named = { readonly fullName: string;
specialMethod(): void;};
interface Named { readonly fullName: string;
specialMethod(): void;}
interface PersonConstructor { readonly MAX_FRIEND_COUNT: number;
get SPECIAL_PERSON_INSTANCE(): Person;
new(): Person;}Examples of an incorrect type alias:
type person = { fullName: string };style/useNamingConvention.js:1:6 lint/style/useNamingConvention FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠ This type alias name should be in PascalCase.
> 1 │ type person = { fullName: string };
│ ^^^^^^
2 │
ℹ The name could be renamed to `Person`.
ℹ Safe fix: Rename this symbol in PascalCase.
1 │ - type·person·=·{·fullName:·string·};
1 │ + type·Person·=·{·fullName:·string·};
2 2 │
Literal object property and method names
Section titled Literal object property and method namesLiteral object property and method names are in camelCase.
const alice = { fullName: "Alice",}Example of an incorrect name:
const alice = { FULL_NAME: "Alice",}style/useNamingConvention.js:2:5 lint/style/useNamingConvention ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠ This object property name should be in camelCase.
1 │ const alice = {
> 2 │ FULL_NAME: "Alice",
│ ^^^^^^^^^
3 │ }
4 │
ℹ The name could be renamed to `fullName`.
Imported and exported module aliases
Section titled Imported and exported module aliasesImported and exported module aliases are in camelCase or PascalCase.
import * as myLib from "my-lib";import * as Framework from "framework";
export * as myLib from "my-lib";export * as Framework from "framework";import and export aliases are in camelCase, PascalCase, or CONSTANT_CASE:
import assert, { deepStrictEqual as deepEqual, AssertionError as AssertError} from "node:assert";Examples of an incorrect name:
import * as MY_LIB from "my-lib";style/useNamingConvention.js:1:13 lint/style/useNamingConvention FIXABLE ━━━━━━━━━━━━━━━━━━━━━━━━━
⚠ This import namespace name should be in camelCase or PascalCase.
> 1 │ import * as MY_LIB from "my-lib";
│ ^^^^^^
2 │
ℹ The name could be renamed to `myLib`.
ℹ Safe fix: Rename this symbol in camelCase.
1 │ - import·*·as·MY_LIB·from·"my-lib";
1 │ + import·*·as·myLib·from·"my-lib";
2 2 │
TypeScript type parameter names
Section titled TypeScript type parameter namesA TypeScript type parameter name is in PascalCase.
function id<Val>(value: Val): Val { /* ... */}TypeScript namespace names
Section titled TypeScript namespace namesA TypeScript namespace name is in camelCase or in PascalCase.
namespace mathExtra { /*...*/}
namespace MathExtra { /*...*/}Options
Section titled OptionsThe rule provides two options that are detailed in the following subsections.
{ "//": "...", "options": { "strictCase": false, "enumMemberCase": "CONSTANT_CASE" }}strictCase
Section titled strictCaseWhen this option is set to true, it forbids consecutive uppercase characters in camelCase and PascalCase.
For instance, when the option is set to true, HTTPServer or aHTTPServer will throw an error.
These names should be renamed to HttpServer and aHttpServer
When the option is set to false, consecutive uppercase characters are allowed.
HTTPServer and aHTTPServer are so valid.
Default: true
requireAscii
Section titled requireAsciiWhen this option is set to true, it forbids names that include non-ASCII characters.
For instance, when the option is set to true, café or 안녕하세요 will throw an error.
When the option is set to false, anames may include non-ASCII characters.
café and 안녕하세요 are so valid.
Default: false
This option will be turned on by default in Biome 2.0.
enumMemberCase
Section titled enumMemberCaseBy default, the rule enforces the naming convention followed by the TypeScript Compiler team:
an enum member is in PascalCase.
You can enforce another convention by setting enumMemberCase option.
The supported cases are: PascalCase, CONSTANT_CASE, and camelCase.