aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2018-11-20 14:52:59 -0800
committerBruce Hill <bruce@bruce-hill.com>2018-11-20 14:54:40 -0800
commit2bbc035f5dcc3ecd62724b9d1de0e7e3ea902379 (patch)
tree34a83497f7570946b6252183b3e8fe0ce2010595
parentf30413853063483147d941ffccc4b663b71bc943 (diff)
Simplifying the filesystem code (no longer entangled with nomsupath) and
using that to simplify the tools. Now the tools directly take lists of file paths rather than things that might go through nomsupath or directories or get processed by filetype. Use your shell for globbing stuff like `nomsu tools/test.nom core/*.nom`
-rw-r--r--compatibility/3.5.5.6.nom6
-rw-r--r--compatibility/3.nom4
-rw-r--r--compatibility/4.11.nom5
-rw-r--r--compatibility/compatibility.nom6
-rw-r--r--core/metaprogramming.nom15
-rw-r--r--files.lua15
-rw-r--r--files.moon15
-rw-r--r--nomsu.lua40
-rwxr-xr-xnomsu.moon12
-rw-r--r--nomsu_environment.lua5
-rw-r--r--nomsu_environment.moon4
-rwxr-xr-xtools/autoformat.nom32
-rwxr-xr-xtools/find_action.nom60
-rwxr-xr-xtools/parse.nom19
-rwxr-xr-xtools/replace.nom55
-rwxr-xr-xtools/test.nom24
-rwxr-xr-xtools/upgrade.nom74
17 files changed, 172 insertions, 219 deletions
diff --git a/compatibility/3.5.5.6.nom b/compatibility/3.5.5.6.nom
index de6cc1f..c428b0d 100644
--- a/compatibility/3.5.5.6.nom
+++ b/compatibility/3.5.5.6.nom
@@ -7,7 +7,5 @@ use "compatibility/compatibility.nom"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
upgrade action "traceback" to "3.5.5.6" via (..)
- -> (barf "'traceback' has been deprecated")
-
-upgrade action "traceback 1" to "3.5.5.6" via (..)
- -> (barf "'traceback 1' has been deprecated")
+ for %tree:
+ compile error at %tree "'traceback' has been deprecated."
diff --git a/compatibility/3.nom b/compatibility/3.nom
index a1ce99b..87f5c0c 100644
--- a/compatibility/3.nom
+++ b/compatibility/3.nom
@@ -10,4 +10,6 @@ upgrade action (method %spec %body) to "3" as (my action %spec %body)
upgrade action (me) to "3" as %me
upgrade action (@) to "3" as %me
upgrade action "as" to "3" via (..)
- -> (barf "Object API has changed. Use (%obj::action ...) instead of (as %obj: action ...)")
+ for %tree:
+ compile error at %tree "Object API has changed and 'as' is no longer supported." "\
+ ..Use (%obj::action ...) instead of (as %obj: action ...)"
diff --git a/compatibility/4.11.nom b/compatibility/4.11.nom
index 042da1e..8021be3 100644
--- a/compatibility/4.11.nom
+++ b/compatibility/4.11.nom
@@ -27,6 +27,11 @@ upgrade action "set" to "4.11" via (..)
%rhs.%i = %entry.2
return (SyntaxTree {type: "Action", source: %tree.source, 1: %lhs, 2: "=", 3: %rhs})
+upgrade action "1 with 2 ~>" to "4.11" via (..)
+ for %tree:
+ compile error at %tree "This method has been deprecated." "\
+ ..Perhaps this could be use %tree::map instead."
+
# Changing filesystem API:
upgrade action (for file %f in %path %body) to "4.11" as (..)
for %f in (files for %path) %body
diff --git a/compatibility/compatibility.nom b/compatibility/compatibility.nom
index 5be8eeb..4d96d89 100644
--- a/compatibility/compatibility.nom
+++ b/compatibility/compatibility.nom
@@ -92,7 +92,11 @@ externally [..]
add %k = (%v upgraded from %start_version to %end_version)
set %with_upgraded_args's metatable to (%tree's metatable)
%tree = (%UPGRADES.%ver %with_upgraded_args %end_version)
- %tree.shebang = "#!/usr/bin/env nomsu -V\%end_version\n"
+ if (%tree.version != %end_version):
+ %tree = (SyntaxTree {: for %k = %v in %tree: add %k = %v})
+ %tree.version = %end_version
+ if %tree.shebang:
+ %tree.shebang = "#!/usr/bin/env nomsu -V\%end_version\n"
return %tree
externally (%tree upgraded from %start_version) means (..)
diff --git a/core/metaprogramming.nom b/core/metaprogramming.nom
index c89b1df..67219ac 100644
--- a/core/metaprogramming.nom
+++ b/core/metaprogramming.nom
@@ -338,21 +338,6 @@ externally (match %tree with %patt) means:
end
return matches"
-externally (%tree with %patt ~> %replacement) means:
- lua> "\
- ..return \%tree:map(function(\%t)
- local \%vars = \(match %t with %patt)
- if not \%vars then return nil end
- for \%k,\%v in pairs(\%vars) do
- \%vars[\%k] = \(%v with %patt ~> %replacement)
- end
- return \%replacement:map(function(\%t)
- if \%t.type == "Var" then
- return \%vars[\%t[1]]
- end
- end)
- end)"
-
test:
assume ((quote "one\n\"two\"") == "\"one\\n\\\"two\\\"\"")
diff --git a/files.lua b/files.lua
index abc9d95..72ec63b 100644
--- a/files.lua
+++ b/files.lua
@@ -37,12 +37,13 @@ Files.read = function(filename)
do
local file_contents = _FILE_CACHE[filename]
if file_contents then
- return file_contents
+ return file_contents or nil
end
end
- if filename == 'stdin' then
+ if filename == 'stdin' or filename == '-' then
local contents = io.read('*a')
Files.spoof('stdin', contents)
+ Files.spoof('-', contents)
return contents
end
local file = io.open(filename)
@@ -52,7 +53,7 @@ Files.read = function(filename)
local contents = file:read("*a")
file:close()
_FILE_CACHE[filename] = contents
- return contents
+ return contents or nil
end
local match, gsub
do
@@ -71,7 +72,7 @@ Files.exists = function(path)
if _SPOOFED_FILES[path] then
return true
end
- if path == 'stdin' then
+ if path == 'stdin' or path == '-' then
return true
end
if run_cmd("ls " .. tostring(sanitize(path))) then
@@ -82,7 +83,7 @@ end
Files.list = function(path)
if not (_BROWSE_CACHE[path]) then
local files
- if _SPOOFED_FILES[path] or path == 'stdin' then
+ if _SPOOFED_FILES[path] or path == 'stdin' or path == '-' then
_BROWSE_CACHE[path] = {
path
}
@@ -107,14 +108,14 @@ if ok then
if _SPOOFED_FILES[path] then
return true
end
- if path == 'stdin' or raw_file_exists(path) then
+ if path == 'stdin' or path == '-' or raw_file_exists(path) then
return true
end
return false
end
Files.list = function(path)
if not (_BROWSE_CACHE[path]) then
- if _SPOOFED_FILES[path] or path == 'stdin' then
+ if _SPOOFED_FILES[path] or path == 'stdin' or path == '-' then
_BROWSE_CACHE[path] = {
path
}
diff --git a/files.moon b/files.moon
index 93a7342..4088980 100644
--- a/files.moon
+++ b/files.moon
@@ -25,17 +25,18 @@ Files.spoof = (filename, contents)->
-- Read a file's contents
Files.read = (filename)->
if file_contents = _FILE_CACHE[filename]
- return file_contents
- if filename == 'stdin'
+ return file_contents or nil
+ if filename == 'stdin' or filename == '-'
contents = io.read('*a')
Files.spoof('stdin', contents)
+ Files.spoof('-', contents)
return contents
file = io.open(filename)
return nil unless file
contents = file\read("*a")
file\close!
_FILE_CACHE[filename] = contents
- return contents
+ return contents or nil
{:match, :gsub} = string
@@ -49,14 +50,14 @@ sanitize = (path)->
Files.exists = (path)->
return true if _SPOOFED_FILES[path]
- return true if path == 'stdin'
+ return true if path == 'stdin' or path == '-'
return true if run_cmd("ls #{sanitize(path)}")
return false
Files.list = (path)->
unless _BROWSE_CACHE[path]
local files
- _BROWSE_CACHE[path] = if _SPOOFED_FILES[path] or path == 'stdin'
+ _BROWSE_CACHE[path] = if _SPOOFED_FILES[path] or path == 'stdin' or path == '-'
{path}
else run_cmd('find -L "'..path..'" -not -path "*/\\.*" -type f') or false
return _BROWSE_CACHE[path]
@@ -68,12 +69,12 @@ if ok
return if mode == 'file' or mode == 'directory' or mode == 'link' then true else false
Files.exists = (path)->
return true if _SPOOFED_FILES[path]
- return true if path == 'stdin' or raw_file_exists(path)
+ return true if path == 'stdin' or path == '-' or raw_file_exists(path)
return false
Files.list = (path)->
unless _BROWSE_CACHE[path]
- _BROWSE_CACHE[path] = if _SPOOFED_FILES[path] or path == 'stdin'
+ _BROWSE_CACHE[path] = if _SPOOFED_FILES[path] or path == 'stdin' or path == '-'
{path}
else
file_type, err = lfs.attributes(path, 'mode')
diff --git a/nomsu.lua b/nomsu.lua
index 415be51..08ab170 100644
--- a/nomsu.lua
+++ b/nomsu.lua
@@ -102,7 +102,7 @@ end
local file_queue = List({ })
local sep = "\3"
local parser = re.compile([[ args <- {| (flag %sep)* (({~ file ~} -> add_file) {:primary_file: %true :} %sep)?
- {:nomsu_args: {| ({(!%sep .)*} %sep)* |} :} %sep? |} !.
+ {:nomsu_args: {| (nomsu_flag %sep)* {:extra_args: {| ({[^%sep]+} %sep)* |} :} |} :} |} !.
flag <-
{:optimization: "-O" (%sep? %number)? :}
/ ("-I" %sep? ({~ file ~} -> add_file))
@@ -115,6 +115,7 @@ local parser = re.compile([[ args <- {| (flag %sep)* (({~ file ~} -> add_file
/ {:no_core: "--no-core" %true :}
/ {:debugger: ("-d" %sep? {(!%sep .)*}) :}
/ {:requested_version: "-V" (%sep? {([0-9.])+})? :}
+ nomsu_flag <- {| ({:key: ('-' [a-z]) :} {:value: %true :}) / ({:key: ('--' [^%sep=]+) :} {:value: ('=' {[^%sep]+}) / %true :}) |}
file <- ("-" -> "stdin") / {(!%sep .)+}
]], {
["true"] = lpeg.Cc(true),
@@ -135,7 +136,14 @@ if not args or args.help then
print(usage)
os.exit(EXIT_FAILURE)
end
-nomsu_environment.command_line_args = List(args.nomsu_args)
+local nomsu_args = Dict({ })
+local _list_0 = args.nomsu_args
+for _index_0 = 1, #_list_0 do
+ local argpair = _list_0[_index_0]
+ nomsu_args[argpair.key] = argpair.value
+end
+nomsu_args.extra_args = List(args.nomsu_args.extra_args or { })
+nomsu_environment.command_line_args = nomsu_args
nomsu_environment.OPTIMIZATION = tonumber(args.optimization or 1)
if args.version then
nomsu_environment.run_file_1_in('core', nomsu_environment, nomsu_environment.OPTIMIZATION)
@@ -146,26 +154,14 @@ local run
run = function()
local input_files = { }
for _index_0 = 1, #file_queue do
- local _continue_0 = false
- repeat
- local f = file_queue[_index_0]
- if f == 'stdin' then
- input_files[f] = true
- _continue_0 = true
- break
- end
- if not (Files.exists(f)) then
- error("Could not find: '" .. tostring(f) .. "'")
- end
- local _list_0 = Files.list(f)
- for _index_1 = 1, #_list_0 do
- local filename = _list_0[_index_1]
- input_files[filename] = true
- end
- _continue_0 = true
- until true
- if not _continue_0 then
- break
+ local f = file_queue[_index_0]
+ if not (Files.exists(f)) then
+ error("Could not find: '" .. tostring(f) .. "'")
+ end
+ local _list_1 = Files.list(f)
+ for _index_1 = 1, #_list_1 do
+ local filename = _list_1[_index_1]
+ input_files[filename] = true
end
end
if not (args.no_core) then
diff --git a/nomsu.moon b/nomsu.moon
index aaa3dfb..fd4e727 100755
--- a/nomsu.moon
+++ b/nomsu.moon
@@ -61,7 +61,7 @@ file_queue = List{}
sep = "\3"
parser = re.compile([[
args <- {| (flag %sep)* (({~ file ~} -> add_file) {:primary_file: %true :} %sep)?
- {:nomsu_args: {| ({(!%sep .)*} %sep)* |} :} %sep? |} !.
+ {:nomsu_args: {| (nomsu_flag %sep)* {:extra_args: {| ({[^%sep]+} %sep)* |} :} |} :} |} !.
flag <-
{:optimization: "-O" (%sep? %number)? :}
/ ("-I" %sep? ({~ file ~} -> add_file))
@@ -74,6 +74,7 @@ parser = re.compile([[
/ {:no_core: "--no-core" %true :}
/ {:debugger: ("-d" %sep? {(!%sep .)*}) :}
/ {:requested_version: "-V" (%sep? {([0-9.])+})? :}
+ nomsu_flag <- {| ({:key: ('-' [a-z]) :} {:value: %true :}) / ({:key: ('--' [^%sep=]+) :} {:value: ('=' {[^%sep]+}) / %true :}) |}
file <- ("-" -> "stdin") / {(!%sep .)+}
]], {
true:lpeg.Cc(true), number:lpeg.R("09")^1/tonumber, sep:lpeg.P(sep)
@@ -88,7 +89,11 @@ args = parser\match(arg_string)
if not args or args.help
print usage
os.exit(EXIT_FAILURE)
-nomsu_environment.command_line_args = List(args.nomsu_args)
+nomsu_args = Dict{}
+for argpair in *args.nomsu_args
+ nomsu_args[argpair.key] = argpair.value
+nomsu_args.extra_args = List(args.nomsu_args.extra_args or {})
+nomsu_environment.command_line_args = nomsu_args
nomsu_environment.OPTIMIZATION = tonumber(args.optimization or 1)
if args.version
@@ -99,9 +104,6 @@ if args.version
run = ->
input_files = {}
for f in *file_queue
- if f == 'stdin'
- input_files[f] = true
- continue
unless Files.exists(f)
error("Could not find: '#{f}'")
for filename in *Files.list(f)
diff --git a/nomsu_environment.lua b/nomsu_environment.lua
index 7b26852..6f46640 100644
--- a/nomsu_environment.lua
+++ b/nomsu_environment.lua
@@ -296,6 +296,7 @@ local nomsu_environment = Importer({
end
_currently_running_files:add(path)
local mod = _1_forked(environment)
+ local did_anything = false
for nomsupath in package.nomsupath:gmatch("[^;]+") do
local _continue_0 = false
repeat
@@ -323,6 +324,7 @@ local nomsu_environment = Importer({
code = NomsuCode:from(Source(filename, 1, #file), file)
end
environment.run_1_in(code, mod)
+ did_anything = true
_continue_1 = true
until true
if not _continue_1 then
@@ -337,6 +339,9 @@ local nomsu_environment = Importer({
break
end
end
+ if not (did_anything) then
+ error("File not found: " .. tostring(path), 0)
+ end
import_to_1_from(environment, mod, prefix)
environment.FILE_CACHE[path] = mod
return _currently_running_files:remove()
diff --git a/nomsu_environment.moon b/nomsu_environment.moon
index 9dab5e9..00b8a3f 100644
--- a/nomsu_environment.moon
+++ b/nomsu_environment.moon
@@ -169,6 +169,7 @@ nomsu_environment = Importer{
_currently_running_files\add path
mod = _1_forked(environment)
+ did_anything = false
for nomsupath in package.nomsupath\gmatch("[^;]+")
files = Files.list(nomsupath.."/"..path)
continue unless files
@@ -183,7 +184,10 @@ nomsu_environment = Importer{
file = Files.read(filename)
NomsuCode\from(Source(filename, 1, #file), file)
environment.run_1_in(code, mod)
+ did_anything = true
break
+ unless did_anything
+ error("File not found: #{path}", 0)
import_to_1_from(environment, mod, prefix)
environment.FILE_CACHE[path] = mod
_currently_running_files\remove!
diff --git a/tools/autoformat.nom b/tools/autoformat.nom
index 96b732b..5661145 100755
--- a/tools/autoformat.nom
+++ b/tools/autoformat.nom
@@ -10,23 +10,17 @@ use "lib/os.nom"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%args = (command line args)
-%inplace = (no)
-if (%args.1 is "-i"):
- %inplace = (yes)
- %args::remove index 1
-
-for %path in %args:
- if (%path == "-"):
- %path = "stdin"
+for %filename in %args.extra_args:
+ %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")"
- for %filename in (files for %path):
- unless ((%filename::matches "%.nom$") or (%filename == "stdin")):
- do next %filename
- %contents = (read file %filename)
- %code = (NomsuCode from (Source %filename 1 (size of %contents)) %contents)
- %tree = (%code parsed)
- %formatted = ((%tree as nomsu)::text)
- if %inplace:
- write %formatted to file %filename
- ..else:
- say %formatted inline
+ if %args."-i":
+ write %formatted to file %filename
+ ..else:
+ say %formatted inline
diff --git a/tools/find_action.nom b/tools/find_action.nom
index c6cbe36..6b85ad3 100755
--- a/tools/find_action.nom
+++ b/tools/find_action.nom
@@ -9,37 +9,33 @@ use "lib/consolecolor.nom"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-%stub = (command line args).1
+%stub = (command line args).extra_args.1
say "Looking for stub: \%stub..."
-for % in 2 to (size of (command line args)):
- for %filename in (files for (command line args).%):
- if (%filename == "-"):
- %filename = "stdin"
-
- unless ((%filename == "stdin") or (%filename::matches "%.nom$")):
- do next %filename
-
- %file = (read file %filename)
- %code = (NomsuCode from (%Source %filename 1 (size of %file)) %file)
- try:
- %tree = (%code parsed)
- ..and if it barfs %msg:
- say (red "\%filename failed to parse:\n\%msg")
- %tree = (nil)
-
- unless %tree:
- do next %filename
+for % in 2 to (size of (command line args).extra_args):
+ %filename = (command line args).extra_args.%
+ %file = (read file %filename)
+ unless %file:
+ barf "File does not exist: \%filename"
+ %code = (NomsuCode from (%Source %filename 1 (size of %file)) %file)
+ try:
+ %tree = (%code parsed)
+ ..and if it barfs %msg:
+ say (red "\%filename failed to parse:\n\%msg")
+ %tree = (nil)
+
+ unless %tree:
+ do next %filename
+
+ %results = []
+ for %t in recursive %tree:
+ if ((%t is "Action" syntax tree) and (%t.stub is %stub)):
+ %line_num = (%file::line number at %t.source.start)
+ %results::add {..}
+ line: %line_num, text: "\(blue "\%filename:\%line_num:")\n\(yellow (source lines of %t))"
- %results = []
- for %t in recursive %tree:
- if ((%t is "Action" syntax tree) and (%t.stub is %stub)):
- %line_num = (%file::line number at %t.source.start)
- %results::add {..}
- line: %line_num, text: "\(blue "\%filename:\%line_num:")\n\(yellow (source lines of %t))"
-
- if (%t is syntax tree):
- for %sub in %t:
- recurse %t on %sub
- sort %results by % -> %.line
- for % in %results:
- say %.text
+ if (%t is syntax tree):
+ for %sub in %t:
+ recurse %t on %sub
+ sort %results by % -> %.line
+ for % in %results:
+ say %.text
diff --git a/tools/parse.nom b/tools/parse.nom
index 9e43c88..cb367ab 100755
--- a/tools/parse.nom
+++ b/tools/parse.nom
@@ -35,15 +35,10 @@ externally (print tree %t at indent %indent) means:
else:
say "\%indent \(quote %arg)"
-for %path in (command line args):
- for %filename in (files for %path):
- if (%filename == "-"):
- %filename = "stdin"
-
- unless ((%filename == "stdin") or (%filename::matches "%.nom$")):
- do next %filename
-
- %text = (read file %filename)
- %nomsu = (NomsuCode from (Source %filename 1 (size of %text)) %text)
- %tree = (%nomsu parsed)
- print tree %tree at indent ""
+for %filename in (command line args).extra_args:
+ %file = (read file %filename)
+ unless %file:
+ barf "File does not exist: \%filename"
+ %nomsu = (NomsuCode from (Source %filename 1 (size of %file)) %file)
+ %tree = (%nomsu parsed)
+ print tree %tree at indent ""
diff --git a/tools/replace.nom b/tools/replace.nom
index 1ec8ecc..66ca690 100755
--- a/tools/replace.nom
+++ b/tools/replace.nom
@@ -9,36 +9,35 @@ use "lib/os.nom"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-%args = (command line args)
-%inplace = (no)
-if (%args.1 is "-i"):
- %inplace = (yes)
- %args::remove index 1
+barf "Deprecated."
-if ((size of %args) < 3):
+if ((size of %args.extra_args) < 3):
say "Usage: nomsu tools/replace.nom [-i] tree_to_replace replacement files..."
lua> "os.exit(1)"
-%pattern = (parse (%args::remove index 1))
-%replacement = (parse (%args::remove index 1))
-for %path in %args:
- for %filename in (files for %path):
- unless (any [%filename::matches "%.nom$", %filename == "-", %filename == "stdin"]):
- do next %filename
- %tree = (parse (read file %filename) from %filename)
- %tree2 = (%tree with %pattern ~> %replacement)
- if (%tree2 == %tree):
- say "No changes in \%filename"
- do next %filename
-
- %text = "\
- ..#!/usr/bin/env nomsu -V\(%tree.version or (Nomsu version))
- \(%tree2 as nomsu)"
+%pattern = ((%args.extra_args.1) parsed)
+%replacement = ((%args.extra_args.2) parsed)
+for %filename in %args.extra_args at %i:
+ if (%i < 3): do next %i
+ %file = (read file %filename)
+ unless %file: barf "File does not exist: \%filename"
+ %nomsu = (NomsuCode from (Source %filename 1 (size of %file)) %file)
+ %tree = (%nomsu parsed)
+ # TODO: fix this to use variable substitution
+ %tree2 = (..)
+ %tree::map (..)
+ for %subtree:
+ if (%subtree == %pattern):
+ return %replacement
+ if (%tree2 == %tree):
+ say "No changes in \%filename"
+ do next %filename
+
+ %text = ((%tree2 as nomsu)::text)
+ when:
+ %args."-i":
+ say "Replaced in \%filename"
+ write %text to file %filename
- when:
- %inplace:
- say "Replaced in \%filename"
- write %text to file %filename
-
- else:
- say %text
+ else:
+ say %text
diff --git a/tools/test.nom b/tools/test.nom
index bdbec54..52e548f 100755
--- a/tools/test.nom
+++ b/tools/test.nom
@@ -8,24 +8,10 @@ use "lib/consolecolor.nom"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-%args = (command line args)
-if (%args.1 == "-v"):
- %args::remove index 1
- %verbose = (yes)
-
-%to_run = [..]
- :
- for %path in (command line args):
- for %filename in (files for %path):
- if (%filename == "-"):
- %filename = "stdin"
- if ((%filename::matches "%.nom$") or (%filename == "stdin")): add %filename
-
# Make sure all the files get run
-for %filename in %to_run:
- use %filename
+for %filename in (command line args).extra_args: use %filename
%tests = {: for %s = %t in (tests): add (=lua "Source:from_string(\%s)") = %t}
-for %filename in %to_run:
+for %filename in (command line args).extra_args:
%file_tests = []
for %src = %test in %tests:
if (%src.filename == %filename):
@@ -34,13 +20,13 @@ for %filename in %to_run:
unless (%file_tests is empty):
sort %file_tests by % -> %.source
lua> "io.write('[ .. ] ', \%filename); io.flush()"
- if %verbose: say ""
+ if (command line args)."-v": say ""
for % in %file_tests:
- if %verbose:
+ if (command line args)."-v":
say " \(yellow (%.test::with "\n" -> "\n "))"
run %.test
- if %verbose:
+ if (command line args)."-v":
say (green "PASS")
..else:
say "\r[\(green "PASS")"
diff --git a/tools/upgrade.nom b/tools/upgrade.nom
index 56d67a5..781e71b 100755
--- a/tools/upgrade.nom
+++ b/tools/upgrade.nom
@@ -7,56 +7,36 @@
use "compatibility"
use "lib/os.nom"
+use "lib/consolecolor.nom"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
%args = (command line args)
-%inplace = (no)
-%start_version = (nil)
-%version = (Nomsu version)
-repeat:
- if %args.1 is:
- "-i":
- %inplace = (yes)
- %args::remove index 1
+%inplace = (%args."-i" or %args."--inplace")
+%start_version = %args."--upgrade-from"
+%version = (%args."--upgrade-to" or (Nomsu version))
+%test = (%args."-t" or %args."--test")
+for %filename in %args.extra_args:
+ %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)
+ %uptree = (..)
+ %tree upgraded from (%start_version or (%tree.version or (Nomsu version))) to \
+ ..%version
+ %text = "\%leading_indent\(((%uptree as nomsu)::text)::with "\n" -> "\n\%leading_indent")"
+ when:
+ %inplace:
+ say "Upgraded \%filename"
+ write %text to file %filename
- "-t":
- use "lib/consolecolor.nom"
- %test = (yes)
- %args::remove index 1
+ %test:
+ if (%uptree == %tree):
+ say (dim "\%filename will not be changed")
+ ..else:
+ say (bright "\%filename will be changed")
- "-V":
- %version = %args.2
- %args::remove index 1
- %args::remove index 1
-
- "-S":
- %start_version = %args.2
- %args::remove index 1
- %args::remove index 1
-
- else: stop
-
-for %path in %args:
- for %filename in (files for %path):
- unless (%filename::matches "%.nom$"): do next %filename
- %file = (read file %filename)
- %code = (NomsuCode from (%Source %filename 1 (size of %file)) %file)
- %tree = (%code parsed)
- %uptree = (..)
- %tree upgraded from (%start_version or (%tree.version or (Nomsu version))) to \
- ..%version
- %text = ((%uptree as nomsu)::text)
- when:
- %inplace:
- say "Upgraded \%filename"
- write %text to file %filename
-
- %test:
- if (%uptree == %tree):
- say (dim "\%filename will not be changed")
- ..else:
- say (bright "\%filename will be changed")
-
- else:
- say %text
+ else:
+ say %text inline