diff options
Diffstat (limited to 'tools/odinfmt/main.odin')
| -rw-r--r-- | tools/odinfmt/main.odin | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/tools/odinfmt/main.odin b/tools/odinfmt/main.odin index 3470ca5..b44af5c 100644 --- a/tools/odinfmt/main.odin +++ b/tools/odinfmt/main.odin @@ -5,6 +5,7 @@ import "core:flags" import "core:fmt" import "core:io" import "core:mem" +import vmem "core:mem/virtual" import "core:odin/tokenizer" import "core:os" import "core:path/filepath" @@ -17,6 +18,7 @@ Args :: struct { write: bool `args:"name=w" usage:"write the new format to file"`, stdin: bool `usage:"formats code from standard input"`, path: string `args:"pos=0" usage:"set the file or directory to format"`, + config: string `usage:"path to a config file"` } format_file :: proc(filepath: string, config: printer.Config, allocator := context.allocator) -> (string, bool) { @@ -44,10 +46,10 @@ walk_files :: proc(info: os.File_Info, in_err: os.Errno, user_data: rawptr) -> ( } main :: proc() { - arena: mem.Arena - mem.arena_init(&arena, make([]byte, 50 * mem.Megabyte)) - - arena_allocator := mem.arena_allocator(&arena) + arena: vmem.Arena + arena_err := vmem.arena_init_growing(&arena) + ensure(arena_err == nil) + arena_allocator := vmem.arena_allocator(&arena) init_global_temporary_allocator(mem.Megabyte * 20) //enough space for the walk @@ -70,9 +72,14 @@ main :: proc() { write_failure := false - watermark := 0 + watermark : uint = 0 - config := format.find_config_file_or_default(args.path) + config: printer.Config + if args.config == "" { + config = format.find_config_file_or_default(args.path) + } else { + config = format.read_config_file_from_path_or_default(args.config) + } if args.stdin { data := make([dynamic]byte, arena_allocator) @@ -137,7 +144,7 @@ main :: proc() { write_failure = true } - watermark = max(watermark, arena.offset) + watermark = max(watermark, arena.total_used) free_all(arena_allocator) } |