aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDaniel Gavin <danielgavin5@hotmail.com>2022-08-20 13:13:26 +0200
committerDaniel Gavin <danielgavin5@hotmail.com>2022-08-20 13:13:26 +0200
commitf6f2eb760d4b11630dc0719c8893383bed20cd9a (patch)
treef3738e1fa057671d182a7161f9ff02ffa7b56020 /tools
parent8e8360dba88feb0334a222e9f990250cf65f32bf (diff)
Finally make the move to use odinfmt in ols.
Diffstat (limited to 'tools')
-rw-r--r--tools/odinfmt/main.odin129
-rw-r--r--tools/odinfmt/snapshot/snapshot.odin56
-rw-r--r--tools/odinfmt/tests.odin6
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)
- }
+ }
}