#!/usr/bin/env nomsu -V6.14
#
    Tool to automatically update code from old versions of Nomsu. Usage:
    nomsu tools/upgrade.nom [-i] file1 file2 directory1 ...
    If "-i" is the first argument, upgrades will be performed in-place. Otherwise, the
    upgraded code will be printed.
    
use "compatibility"
use "lib/os.nom"
use "lib/consolecolor.nom"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

$inplace = ($(COMMAND LINE ARGS).i or $(COMMAND LINE ARGS).inplace)
$start_version = $(COMMAND LINE ARGS)."upgrade-from"
$version = ($(COMMAND LINE ARGS)."upgrade-to" or (Nomsu version))
$test = ($(COMMAND LINE ARGS).t or $(COMMAND LINE ARGS).test)
for $filename in $(COMMAND LINE ARGS).extras:
    $file = (read file $filename)
    unless $file:
        fail "File does not exist: \$filename"
    $leading_indent = ($file, matching "\n*([ ]*)")
    $code = (NomsuCode from (Source $filename 1 (size of $file)) $file)
    $tree = ($code parsed $start_version)
    $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
        
        $test:
            if ($uptree == $tree):
                say (dim "\$filename will not be changed")
            ..else:
                say (bright "\$filename will be changed")
        
        else:
            say $text inline