avoid repeatedly importing the same modules

This commit is contained in:
ValKmjolnir
2023-11-01 23:49:15 +08:00
parent ccbe341dc5
commit 49f8cefca0
6 changed files with 126 additions and 93 deletions

View File

@@ -1,4 +1,6 @@
use std.file;
use std.padding;
use std.process_bar;
var tips = func() {
println("usage:");
@@ -20,7 +22,7 @@ var needle = arg[0];
var do_flat = func(vec) {
var flat = [];
var bfs = [vec];
while(size(bfs)) {
while(size(bfs)!=0) {
var d = pop(bfs);
foreach(var f; d.files) {
if (ishash(f)) {
@@ -30,21 +32,21 @@ var do_flat = func(vec) {
append(flat, d.dir~"/"~f);
}
}
sort(flat, func(a, b){return cmp(a, b)<0});
sort(flat, func(a, b) {return cmp(a, b)<0});
return flat;
}
var count = 0;
foreach(var f; do_flat(file.recursive_find_files("."))) {
var result = [];
var all_files = file.recursive_find_files(".");
foreach(var f; do_flat(all_files)) {
var pos = find(needle, f);
if (pos == -1) {
continue;
}
count += 1;
var begin = substr(f, 0, pos);
var end = pos+size(needle)>=size(f)? "":substr(f, pos+size(needle), size(f));
var file_size = fstat(f).st_size;
var unit = "b";
var unit = " b";
if (file_size>1024) {
file_size/=1024;
unit = "kb";
@@ -58,7 +60,20 @@ foreach(var f; do_flat(file.recursive_find_files("."))) {
unit = "gb";
}
file_size = int(file_size);
println(begin, "\e[95;1m", needle, "\e[0m", end, " | ", file_size, " ", unit);
append(result, {
info: begin~"\e[95;1m"~needle~"\e[0m"~end,
size: file_size,
unit: unit
});
}
println("\n", count, " result(s).");
var max_len = 0;
foreach(var elem; result) {
var temp = size(str(elem.size)~" "~elem.unit);
max_len = math.max(max_len, temp);
}
foreach(var elem; result) {
var temp = padding.leftpad(str(elem.size)~" "~elem.unit, max_len);
println(temp, " | ", elem.info);
}
println("\n", size(result), " result(s).");