Constructs Overview

This section documents the formatting rules for each Ori language construct. All rules follow the core principle: inline if within configured width (default 100), break otherwise.

Construct Categories

Declarations

Top-level items that introduce names:

ConstructDocument
FunctionsDeclarations
ConstantsDeclarations
Type definitionsDeclarations
TraitsDeclarations
ImplementationsDeclarations
TestsDeclarations

Expressions

Computations that produce values:

ConstructDocument
Function callsExpressions
Method chainsExpressions
ConditionalsExpressions
LambdasExpressions
Binary expressionsExpressions
BindingsExpressions

Patterns

Compiler-recognized constructs with special syntax:

ConstructDocument
{ } blocks / tryPatterns
matchPatterns
recursePatterns
parallel / spawnPatterns
timeout / cachePatterns
with / inPatterns
for loopsPatterns
nurseryPatterns

Collections

Aggregate data structures:

ConstructDocument
ListsCollections
MapsCollections
TuplesCollections
Struct literalsCollections
RangesCollections

Formatting Decision Tree

For any construct, the formatter follows this decision process:

1. Is this an always-stacked construct (blocks, try, match arms)?
   YES → Use stacked format
   NO  → Continue

2. Calculate inline width of the construct

3. Does current_column + inline_width <= max_width?
   YES → Use inline format
   NO  → Use broken format

4. For nested constructs, repeat from step 1

Universal Rules

These rules apply across all constructs:

Spacing

ContextRuleExample
Binary operatorsSpace arounda + b
ArrowsSpace aroundx -> x + 1
ColonsSpace afterx: int
CommasSpace afterf(a, b)
ParenthesesNo inner spacef(x)
BracketsNo inner space[1, 2]
BracesNo inner space{ x: 1 }
Empty delimitersNo space[], {}, ()

Trailing Commas

FormatRule
Single-lineNo trailing comma
Multi-lineTrailing comma required

Blank Lines

ContextRule
After importsOne blank line
After constantsOne blank line
Between functionsOne blank line
Between trait/impl methodsOne blank line
Consecutive blank linesForbidden
Leading/trailing blank linesForbidden