Skip to content

Naming conventions

Required spelling conventions for Atoll declarations, built-in types, acronyms, and predicates.

Updated View as Markdown

Atoll follows Rust-style naming across source programs, compiler concepts, and runtime APIs.

Declaration Convention Example
Function or method snake_case byte_length
Local or parameter snake_case retry_count
Module snake_case http_client
Struct, enum, trait, alias PascalCase HttpRequest
Enum variant PascalCase NotFound
Constant SCREAMING_SNAKE_CASE MAX_RETRIES
Generic parameter short uppercase or PascalCase T, Item
Decorator lowercase snake_case @noinline

Built-in types

Scalar and string built-ins are lowercase:

int, float, bool, char, byte, the fixed-width numeric names, string, and substring.

Byte sequences use the composite forms []byte and [..]byte. The old nominal bytes type has been retired even though it remains in the legacy style document.

Nominal composite built-ins use PascalCase, including List, Map, Set, Option, and Result. Sugar such as []T, [..]T, T?, and T!E does not change those underlying names.

Acronyms

Treat an acronym as one word: HttpClient, IoError, parse_url, and xml_to_json.

Predicates

Prefer is_, has_, or can_ when the prefix makes a boolean member read like a question: is_empty, has_items, can_edit.

Naming diagnostics

The semantic naming lint reports non-fatal warnings as ATOLL7002 and includes a replacement suggestion.

The lint is off by default during the migration window. Enable it with:

ATOLL_LINT_NAMING=1 atoll check

The value must be exactly 1. An unset variable, 0, or another value leaves the warning pass disabled. Naming remains the project convention even when the warning pass is disabled.

Current coverage

When enabled, the diagnostic pass checks:

  • top-level functions;
  • structs, enums, error types, traits, aliases, and error unions;
  • inline and impl methods;
  • enum and error variants;
  • constants.

The current warning walk does not yet diagnose fields, parameters, local bindings, generic parameters, module names, models, or schemas. Those names should still follow the table above; absence of ATOLL7002 is not an alternate style rule.

Leading underscores are permitted before each supported casing, so internal names such as __capacity and _HttpState retain their marker without changing the casing of the meaningful part.

Suppression

Use @allow(naming) when a declaration must mirror an external spelling.

@allow(naming)
fn JSON_parse(input: string): string {
    return input
}

On an enum or error type, the suppression also covers its variants. On an impl, it applies to methods that do not carry their own decorator list.

The current AST does not retain declaration decorators on aliases or constants, so their naming warnings cannot yet be locally suppressed. Rename them or disable the opt-in pass for that build. This is an implementation boundary, not a recommendation to use inconsistent alias or constant names.

Migration

The current implementation differs from details in the legacy style document: the diagnostic is ATOLL7002, the pass is enabled with ATOLL_LINT_NAMING=1, the no-inline decorator is @noinline, byte sequences use []byte or [..]byte, and nominal composite built-ins remain PascalCase. This specification follows the parser, semantic lint, and installed prelude.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close