aboutsummaryrefslogtreecommitdiff
path: root/tools/format.nom
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2018-12-18 19:25:10 -0800
committerBruce Hill <bruce@bruce-hill.com>2018-12-18 19:25:10 -0800
commit8e52f1901b73f2072d21f8c79ef52bf137180161 (patch)
tree6592b33786687ffecd45a764178a084d03feaa43 /tools/format.nom
parent94740a9b414a0fd9af70acb9b8bf3b9576b537e1 (diff)
Renamed autoformat -> format for concision (it's obviously auto, it's a
tool).
Diffstat (limited to 'tools/format.nom')
-rwxr-xr-xtools/format.nom31
1 files changed, 31 insertions, 0 deletions
diff --git a/tools/format.nom b/tools/format.nom
new file mode 100755
index 0000000..8355176
--- /dev/null
+++ b/tools/format.nom
@@ -0,0 +1,31 @@
+#!/usr/bin/env nomsu -V5.12.12.8
+#
+ Auto-format Nomsu code. Usage:
+ nomsu -t format [-i] file1 file2...
+
+ If the "-i" flag is used, the file will be edited in-place.
+ If no files are passed in, this will read from stdin.
+
+use "lib/os.nom"
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+$filenames = $(COMMAND LINE ARGS).extras
+if ((#$filenames) == 0):
+ say "Warning: reading from stdin (ctrl-d to abort). To avoid this message, use nomsu -t format -"
+ $filenames = ["stdin"]
+
+for $filename in $filenames:
+ $file = (read file $filename)
+ unless $file:
+ barf "File does not exist: \$filename"
+ $leading_indent = ($file|matching "[\n]*([ ]*)")
+ $code = (NomsuCode from ($Source $filename 1 (size of $file)) $file)
+ $tree = ($code parsed)
+ $formatted = "
+ \$leading_indent\((($tree as nomsu)|text)|with "\n" -> "\n\$leading_indent")"
+
+ if $(COMMAND LINE ARGS)."-i":
+ write $formatted to file $filename
+ ..else:
+ say $formatted inline