diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2022-08-20 13:13:26 +0200 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2022-08-20 13:13:26 +0200 |
| commit | f6f2eb760d4b11630dc0719c8893383bed20cd9a (patch) | |
| tree | f3738e1fa057671d182a7161f9ff02ffa7b56020 /tools | |
| parent | 8e8360dba88feb0334a222e9f990250cf65f32bf (diff) | |
Finally make the move to use odinfmt in ols.
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/odinfmt/main.odin | 129 | ||||
| -rw-r--r-- | tools/odinfmt/snapshot/snapshot.odin | 56 | ||||
| -rw-r--r-- | tools/odinfmt/tests.odin | 6 |
3 files changed, 121 insertions, 70 deletions
diff --git a/tools/odinfmt/main.odin b/tools/odinfmt/main.odin index 60e4f82..52ecdaa 100644 --- a/tools/odinfmt/main.odin +++ b/tools/odinfmt/main.odin @@ -23,134 +23,157 @@ print_help :: proc(args: []string) { print_arg_error :: proc(args: []string, error: flag.Flag_Error) { switch error { case .None: - print_help(args); + print_help(args) case .No_Base_Struct: - fmt.eprintln(args[0], "no base struct"); + fmt.eprintln(args[0], "no base struct") case .Arg_Error: - fmt.eprintln(args[0], "argument error"); + fmt.eprintln(args[0], "argument error") case .Arg_Unsupported_Field_Type: - fmt.eprintln(args[0], "argument: unsupported field type"); + fmt.eprintln(args[0], "argument: unsupported field type") case .Arg_Not_Defined: - fmt.eprintln(args[0], "argument: no defined"); + fmt.eprintln(args[0], "argument: no defined") case .Arg_Non_Optional: - fmt.eprintln(args[0], "argument: non optional"); + fmt.eprintln(args[0], "argument: non optional") case .Value_Parse_Error: - fmt.eprintln(args[0], "argument: value parse error"); + fmt.eprintln(args[0], "argument: value parse error") case .Tag_Error: - fmt.eprintln(args[0], "argument: tag error"); + fmt.eprintln(args[0], "argument: tag error") } } -format_file :: proc(filepath: string, config: printer.Config, allocator := context.allocator) -> (string, bool) { +format_file :: proc( + filepath: string, + config: printer.Config, + allocator := context.allocator, +) -> ( + string, + bool, +) { if data, ok := os.read_entire_file(filepath, allocator); ok { - return format.format(filepath, string(data), config, {.Optional_Semicolons}, allocator); + return format.format( + filepath, + string(data), + config, + {.Optional_Semicolons}, + allocator, + ) } else { - return "", false; + return "", false } } -files: [dynamic]string; +files: [dynamic]string -walk_files :: proc(info: os.File_Info, in_err: os.Errno) -> (err: os.Errno, skip_dir: bool) { +walk_files :: proc( + info: os.File_Info, + in_err: os.Errno, +) -> ( + err: os.Errno, + skip_dir: bool, +) { if info.is_dir { - return 0, false; + return 0, false } if filepath.ext(info.name) != ".odin" { - return 0, false; + return 0, false } - append(&files, strings.clone(info.fullpath)); + append(&files, strings.clone(info.fullpath)) - return 0, false; + return 0, false } main :: proc() { - arena: mem.Arena; - mem.init_arena(&arena, make([]byte, 50 * mem.Megabyte)); + arena: mem.Arena + mem.init_arena(&arena, make([]byte, 50 * mem.Megabyte)) - arena_allocator := mem.arena_allocator(&arena); + arena_allocator := mem.arena_allocator(&arena) - init_global_temporary_allocator(mem.Megabyte*20) //enough space for the walk + init_global_temporary_allocator(mem.Megabyte * 20) //enough space for the walk - args: Args; + args: Args if len(os.args) < 2 { - print_help(os.args); - os.exit(1); + print_help(os.args) + os.exit(1) } if res := flag.parse(args, os.args[1:len(os.args) - 1]); res != .None { - print_arg_error(os.args, res); - os.exit(1); + print_arg_error(os.args, res) + os.exit(1) } - path := os.args[len(os.args) - 1]; + path := os.args[len(os.args) - 1] - tick_time := time.tick_now(); + tick_time := time.tick_now() - write_failure := false; + write_failure := false watermark := 0 if os.is_file(path) { - config := format.find_config_file_or_default(path); + config := format.find_config_file_or_default(path) if _, ok := args.write.(bool); ok { - backup_path := strings.concatenate({path, "_bk"}); - defer delete(backup_path); + backup_path := strings.concatenate({path, "_bk"}) + defer delete(backup_path) if data, ok := format_file(path, config, arena_allocator); ok { - os.rename(path, backup_path); + os.rename(path, backup_path) if os.write_entire_file(path, transmute([]byte)data) { - os.remove(backup_path); + os.remove(backup_path) } } else { - fmt.eprintf("Failed to write %v", path); - write_failure = true; + fmt.eprintf("Failed to write %v", path) + write_failure = true } } else { if data, ok := format_file(path, config, arena_allocator); ok { - fmt.println(data); + fmt.println(data) } } } else if os.is_dir(path) { - config := format.find_config_file_or_default(path); - filepath.walk(path, walk_files); + config := format.find_config_file_or_default(path) + filepath.walk(path, walk_files) for file in files { - fmt.println(file); + fmt.println(file) - backup_path := strings.concatenate({file, "_bk"}); - defer delete(backup_path); + backup_path := strings.concatenate({file, "_bk"}) + defer delete(backup_path) if data, ok := format_file(file, config, arena_allocator); ok { if _, ok := args.write.(bool); ok { - os.rename(file, backup_path); + os.rename(file, backup_path) if os.write_entire_file(file, transmute([]byte)data) { - os.remove(backup_path); + os.remove(backup_path) } } else { - fmt.println(data); + fmt.println(data) } } else { - fmt.eprintf("Failed to format %v", file); - write_failure = true; + fmt.eprintf("Failed to format %v", file) + write_failure = true } watermark = max(watermark, arena.offset) - free_all(arena_allocator); + free_all(arena_allocator) } - - fmt.printf("Formatted %v files in %vms \n", len(files), time.duration_milliseconds(time.tick_lap_time(&tick_time))); + + fmt.printf( + "Formatted %v files in %vms \n", + len(files), + time.duration_milliseconds(time.tick_lap_time(&tick_time)), + ) fmt.printf("Peak memory used: %v \n", watermark / mem.Megabyte) } else { - fmt.eprintf("%v is neither a directory nor a file \n", path); - os.exit(1); + fmt.eprintf("%v is neither a directory nor a file \n", path) + os.exit(1) } - os.exit(1 if write_failure else 0); + os.exit(1 if write_failure else 0) } diff --git a/tools/odinfmt/snapshot/snapshot.odin b/tools/odinfmt/snapshot/snapshot.odin index 2f658a5..d5bdbd2 100644 --- a/tools/odinfmt/snapshot/snapshot.odin +++ b/tools/odinfmt/snapshot/snapshot.odin @@ -1,4 +1,4 @@ -package odinfmt_testing +package odinfmt_testing import "core:testing" import "core:os" @@ -9,15 +9,27 @@ import "core:fmt" import "shared:odin/format" -format_file :: proc(filepath: string, allocator := context.allocator) -> (string, bool) { +format_file :: proc( + filepath: string, + allocator := context.allocator, +) -> ( + string, + bool, +) { style := format.default_style style.character_width = 80 style.newline_style = .LF //We want to make sure it works on linux and windows. - if data, ok := os.read_entire_file(filepath, allocator); ok { - return format.format(filepath, string(data), style, {.Optional_Semicolons}, allocator); + if data, ok := os.read_entire_file(filepath, allocator); ok { + return format.format( + filepath, + string(data), + style, + {.Optional_Semicolons}, + allocator, + ) } else { - return "", false; + return "", false } } @@ -28,7 +40,7 @@ snapshot_directory :: proc(directory: string) -> bool { fmt.eprintf("Error in globbing directory: %v", directory) } - for match in matches { + for match in matches { if strings.contains(match, ".odin") { snapshot_file(match) or_return } @@ -49,20 +61,30 @@ snapshot_file :: proc(path: string) -> bool { fmt.printf("Testing snapshot %v", path) - snapshot_path := filepath.join(elems = {filepath.dir(path, context.temp_allocator), "/.snapshots", filepath.base(path)}, allocator = context.temp_allocator); + snapshot_path := filepath.join( + elems = { + filepath.dir(path, context.temp_allocator), + "/.snapshots", + filepath.base(path), + }, + allocator = context.temp_allocator, + ) formatted, ok := format_file(path, context.temp_allocator) if !ok { - fmt.eprintf("Format failed on file %v", path) + fmt.eprintf("Format failed on file %v", path) return false } if os.exists(snapshot_path) { - if snapshot_data, ok := os.read_entire_file(snapshot_path, context.temp_allocator); ok { - snapshot_scanner := scanner.Scanner {} + if snapshot_data, ok := os.read_entire_file( + snapshot_path, + context.temp_allocator, + ); ok { + snapshot_scanner := scanner.Scanner{} scanner.init(&snapshot_scanner, string(snapshot_data)) - formatted_scanner := scanner.Scanner {} + formatted_scanner := scanner.Scanner{} scanner.init(&formatted_scanner, string(formatted)) for { s_ch := scanner.next(&snapshot_scanner) @@ -75,7 +97,7 @@ snapshot_file :: proc(path: string) -> bool { if scanner.peek(&snapshot_scanner) == '\n' { s_ch = scanner.next(&snapshot_scanner) } - } + } if f_ch == '\r' { if scanner.peek(&formatted_scanner) == '\n' { f_ch = scanner.next(&formatted_scanner) @@ -83,8 +105,14 @@ snapshot_file :: proc(path: string) -> bool { } if s_ch != f_ch { - fmt.eprintf("\nFormatted file was different from snapshot file: %v", snapshot_path) - os.write_entire_file(fmt.tprintf("%v_failed", snapshot_path), transmute([]u8)formatted) + fmt.eprintf( + "\nFormatted file was different from snapshot file: %v", + snapshot_path, + ) + os.write_entire_file( + fmt.tprintf("%v_failed", snapshot_path), + transmute([]u8)formatted, + ) return false } } diff --git a/tools/odinfmt/tests.odin b/tools/odinfmt/tests.odin index 8bd0399..313e33c 100644 --- a/tools/odinfmt/tests.odin +++ b/tools/odinfmt/tests.odin @@ -9,10 +9,10 @@ import "snapshot" main :: proc() { - init_global_temporary_allocator(mem.Megabyte*100) - + init_global_temporary_allocator(mem.Megabyte * 100) + if !snapshot.snapshot_directory("tests") { os.exit(1) - } + } } |