New language: Unison
This commit is contained in:
parent
d5b1459410
commit
d93d4382ef
|
@ -2500,6 +2500,30 @@ a
|
||||||
`,
|
`,
|
||||||
timeout: 15,
|
timeout: 15,
|
||||||
},
|
},
|
||||||
|
unison: {
|
||||||
|
aliases: ["ucm"],
|
||||||
|
name: "Unison",
|
||||||
|
setup: "shopt -s dotglob && cp -R /opt/unison/project-template/* ./",
|
||||||
|
repl: "unison -codebase .",
|
||||||
|
input: "find : [a] -> [a]",
|
||||||
|
output: "base.List.reverse",
|
||||||
|
main: "main.u",
|
||||||
|
run: `echo "Type 'run main' to run the code." && unison -codebase .`,
|
||||||
|
helloInput: "run main",
|
||||||
|
scope: {
|
||||||
|
code: `x = 123 * 234`,
|
||||||
|
input: `DELAY: 1
|
||||||
|
add x
|
||||||
|
DELAY: 0.5
|
||||||
|
display x`,
|
||||||
|
},
|
||||||
|
template: `use io
|
||||||
|
|
||||||
|
main : '{IO} ()
|
||||||
|
main = 'let
|
||||||
|
printLine "Hello, world!"
|
||||||
|
`,
|
||||||
|
},
|
||||||
unlambda: {
|
unlambda: {
|
||||||
aliases: ["unl"],
|
aliases: ["unl"],
|
||||||
name: "Unlambda",
|
name: "Unlambda",
|
||||||
|
|
|
@ -26,8 +26,18 @@ function findPosition(str: string, idx: number) {
|
||||||
return { line, character };
|
return { line, character };
|
||||||
}
|
}
|
||||||
|
|
||||||
function forTTY(input: string) {
|
async function sendInput(send: (msg: any) => any, input: string) {
|
||||||
return input.replace(/\n/g, "\r") + "\r";
|
for (const line of input.split("\n")) {
|
||||||
|
if (line.startsWith("DELAY:")) {
|
||||||
|
const delay = parseFloat(line.replace(/DELAY: */, ""));
|
||||||
|
if (Number.isNaN(delay)) continue;
|
||||||
|
await new Promise((resolve) =>
|
||||||
|
setTimeout(resolve, delay * 1000 * TIMEOUT_FACTOR)
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
send({ event: "terminalInput", input: line + "\r" });
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Test {
|
class Test {
|
||||||
|
@ -196,24 +206,21 @@ class Test {
|
||||||
const pattern = this.config.hello || "Hello, world!";
|
const pattern = this.config.hello || "Hello, world!";
|
||||||
this.send({ event: "runCode", code: this.config.template });
|
this.send({ event: "runCode", code: this.config.template });
|
||||||
if (this.config.helloInput !== undefined) {
|
if (this.config.helloInput !== undefined) {
|
||||||
this.send({
|
sendInput(this.send, this.config.helloInput);
|
||||||
event: "terminalInput",
|
|
||||||
input: forTTY(this.config.helloInput),
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
await this.waitForOutput(pattern, this.config.helloMaxLength);
|
await this.waitForOutput(pattern, this.config.helloMaxLength);
|
||||||
};
|
};
|
||||||
testRepl = async () => {
|
testRepl = async () => {
|
||||||
const input = this.config.input || "123 * 234";
|
const input = this.config.input || "123 * 234";
|
||||||
const output = this.config.output || "28782";
|
const output = this.config.output || "28782";
|
||||||
this.send({ event: "terminalInput", input: forTTY(input) });
|
sendInput(this.send, input);
|
||||||
await this.waitForOutput(output);
|
await this.waitForOutput(output);
|
||||||
};
|
};
|
||||||
testRunRepl = async () => {
|
testRunRepl = async () => {
|
||||||
const input = this.config.runReplInput || this.config.input || "123 * 234";
|
const input = this.config.runReplInput || this.config.input || "123 * 234";
|
||||||
const output = this.config.runReplOutput || this.config.output || "28782";
|
const output = this.config.runReplOutput || this.config.output || "28782";
|
||||||
this.send({ event: "runCode", code: this.config.template });
|
this.send({ event: "runCode", code: this.config.template });
|
||||||
this.send({ event: "terminalInput", input: forTTY(input) });
|
sendInput(this.send, input);
|
||||||
await this.waitForOutput(output);
|
await this.waitForOutput(output);
|
||||||
};
|
};
|
||||||
testScope = async () => {
|
testScope = async () => {
|
||||||
|
@ -231,7 +238,7 @@ class Test {
|
||||||
allCode = allCode + code + "\n";
|
allCode = allCode + code + "\n";
|
||||||
}
|
}
|
||||||
this.send({ event: "runCode", code: allCode });
|
this.send({ event: "runCode", code: allCode });
|
||||||
this.send({ event: "terminalInput", input: forTTY(input) });
|
sendInput(this.send, input);
|
||||||
await this.waitForOutput(output);
|
await this.waitForOutput(output);
|
||||||
};
|
};
|
||||||
testFormat = async () => {
|
testFormat = async () => {
|
||||||
|
|
|
@ -284,5 +284,9 @@ ln -s /opt/swift/bin/swiftc /usr/local/bin/swiftc
|
||||||
ln -s /opt/swift/bin/sourcekit-lsp /usr/local/bin/sourcekit-lsp
|
ln -s /opt/swift/bin/sourcekit-lsp /usr/local/bin/sourcekit-lsp
|
||||||
rm swift.tar.gz
|
rm swift.tar.gz
|
||||||
|
|
||||||
|
# Unison
|
||||||
|
wget -nv https://github.com/raxod502/riju-cdn/releases/download/unison-M1l-232-519cbeb58704c1b9410c9386e492be59fd5a5334/unison -O /usr/local/bin/unison
|
||||||
|
chmod +x /usr/local/bin/unison
|
||||||
|
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
rm "$0"
|
rm "$0"
|
||||||
|
|
|
@ -71,6 +71,13 @@ cat bsconfig.json | jq '.name = "riju-project"' | sponge bsconfig.json
|
||||||
yarn install
|
yarn install
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
|
|
||||||
|
# Unison
|
||||||
|
mkdir -p /opt/unison/project-template
|
||||||
|
pushd /opt/unison/project-template >/dev/null
|
||||||
|
unison -codebase . init
|
||||||
|
LESS="+q" unison -codebase . <<< 'pull https://github.com/unisonweb/base:.trunk .base'
|
||||||
|
popd >/dev/null
|
||||||
|
|
||||||
# Befunge
|
# Befunge
|
||||||
tee /usr/local/bin/befunge-repl >/dev/null <<"EOF"
|
tee /usr/local/bin/befunge-repl >/dev/null <<"EOF"
|
||||||
#!/usr/bin/env -S NODE_PATH=/usr/lib/node_modules node
|
#!/usr/bin/env -S NODE_PATH=/usr/lib/node_modules node
|
||||||
|
|
Loading…
Reference in New Issue