Luma 0.1.0
A low-level compiled alternative to C, C++, and more!
Loading...
Searching...
No Matches
formatter.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdio.h>
4
5#include "../../c_libs/memory/memory.h"
6#include "../../ast/ast.h"
7
8typedef struct {
15 bool check_only; // --check flag
16 bool write_in_place; // -i flag
17 const char *output_file;
19
28
29// Core formatting functions
31void write_string(FormatterContext *ctx, const char *str);
34
37
38void format_node(FormatterContext *ctx, AstNode *node);
39void format_stmt(FormatterContext *ctx, Stmt *stmt);
40void format_expr(FormatterContext *ctx, Expr *expr);
41void format_type(FormatterContext *ctx, Type *type);
42
43void format_program(FormatterContext *ctx, Stmt *stmt);
44
45// Preprocessor formatting
46void format_module_prep(FormatterContext* ctx, Stmt* module);
48
49// Statement formatting
63void format_expr_stmt(FormatterContext* ctx, Stmt* stmt);
64
65// Expression formatting
80void format_array(FormatterContext* ctx, Expr* expr);
81void format_member(FormatterContext* ctx, Expr* expr);
82
83// Main formatter functions
84bool format_luma_code(const char* input_path, const char* output_path,
85 FormatterConfig config, ArenaAllocator* allocator);
86bool check_formatting(const char* filepath, FormatterConfig config,
87 ArenaAllocator* allocator);
88void print_usage(const char* program_name);
void format_addr_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:234
void format_deref_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:229
void format_field_definition(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:140
bool check_formatting(const char *filepath, FormatterConfig config, ArenaAllocator *allocator)
Definition formatter.c:339
void format_identifier_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:184
void format_module_prep(FormatterContext *ctx, Stmt *module)
Definition stmt.c:3
void format_program(FormatterContext *ctx, Stmt *stmt)
Definition formatter.c:91
void format_type(FormatterContext *ctx, Type *type)
Definition formatter.c:99
void format_array(FormatterContext *ctx, Expr *expr)
Definition expr.c:188
void format_function_definition(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:49
void format_expr_stmt(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:366
void format_if_statement(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:204
void format_use_prep(FormatterContext *ctx, Stmt *use)
Definition stmt.c:41
void write_space(FormatterContext *ctx)
Definition formatter.c:68
void format_member(FormatterContext *ctx, Expr *expr)
Definition expr.c:204
void format_loop_statement(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:244
void format_output_statement(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:384
void format_expr(FormatterContext *ctx, Expr *expr)
Definition formatter.c:198
void write_string(FormatterContext *ctx, const char *str)
Definition formatter.c:54
void format_block_statement(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:378
void format_unary_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:81
void format_enum_definition(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:181
void format_stmt(FormatterContext *ctx, Stmt *stmt)
Definition formatter.c:148
void format_node(FormatterContext *ctx, AstNode *node)
Definition formatter.c:78
void increase_indent(FormatterContext *ctx)
Definition formatter.c:75
void format_binary_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:3
void decrease_indent(FormatterContext *ctx)
Definition formatter.c:76
void format_cast_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:267
void format_memcpy_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:245
void format_struct_definition(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:148
void format_break_continue_statement(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:358
bool format_luma_code(const char *input_path, const char *output_path, FormatterConfig config, ArenaAllocator *allocator)
Definition formatter.c:281
void write_newline(FormatterContext *ctx)
Definition formatter.c:62
void format_literal_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:149
void format_free_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:261
void print_usage(const char *program_name)
Definition formatter.c:394
void format_defer_statement(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:340
void format_index_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:216
void format_variable_declaration(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:111
void format_switch_statement(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:290
void format_sizeof_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:275
void format_grouping_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:223
void format_return_statement(FormatterContext *ctx, Stmt *stmt)
Definition stmt.c:371
void format_alloc_expression(FormatterContext *ctx, Expr *expr)
Definition expr.c:239
void write_indent(FormatterContext *ctx)
Definition formatter.c:37
void format_function_call(FormatterContext *ctx, Expr *expr)
Definition expr.c:129
Arena allocator structure.
Definition memory.h:101
Definition ast.h:142
Definition formatter.h:8
bool write_in_place
Definition formatter.h:16
bool compact_blocks
Definition formatter.h:14
const char * output_file
Definition formatter.h:17
int indent_size
Definition formatter.h:9
bool use_tabs
Definition formatter.h:10
int max_line_length
Definition formatter.h:11
bool check_only
Definition formatter.h:15
bool space_around_operator
Definition formatter.h:12
bool space_after_comma
Definition formatter.h:13
Definition formatter.h:20
FormatterConfig config
Definition formatter.h:25
int current_indent
Definition formatter.h:22
ArenaAllocator * arena
Definition formatter.h:26
int current_column
Definition formatter.h:23
bool at_line_start
Definition formatter.h:24
FILE * output
Definition formatter.h:21