# XO0101: name breaks the enforced naming rules

Xo enforces naming in the compiler instead of leaving it to linters, so every program reads the same way and a name's kind is visible at a glance. Types, enum variants, interfaces, and type parameters are UpperCamel; functions, methods, variables, fields, parameters, modules, and effect variables are snake_case; constants are UPPER_SNAKE. Exported names are marked with `pub`, never by capitalization. The diagnostic carries a fix that renames the declaration. See core 1.5.

## Example

```xo
fn DoIt(userId: Int) -> Int {
  userId
}
```

## Fix

```xo
fn do_it(user_id: Int) -> Int {
  user_id
}
```

Run `xo explain XO0101` for this text in a terminal, or see
[section 10.6 of the specification](../../spec/core/#106-diagnostic-codes).

