mirror of
https://github.com/bendtherules/completion-viz.git
synced 2026-08-19 00:31:34 +00:00
Clone engine262 in /engine262
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
'use strict';
|
||||
|
||||
function snekparse(args) {
|
||||
if (typeof args === 'string') {
|
||||
args = args.split(' ');
|
||||
}
|
||||
const argv = [];
|
||||
for (let i = 0; i < args.length; i += 1) {
|
||||
const arg = args[i];
|
||||
if (/^--.+=/.test(arg)) {
|
||||
const match = arg.match(/^--([^=]+)=([\s\S]*)$/);
|
||||
argv[match[1]] = match[2];
|
||||
} else if (/^--no-.+/.test(arg)) {
|
||||
argv[arg.match(/^--no-(.+)/)[1]] = false;
|
||||
} else if (/^--.+/.test(arg)) {
|
||||
const key = arg.match(/^--(.+)/)[1];
|
||||
const next = args[i + 1];
|
||||
if (typeof next !== 'undefined' && !/^-/.test(next)) {
|
||||
argv[key] = next;
|
||||
} else if (/^(true|false)$/.test(next)) {
|
||||
argv[key] = next === 'true';
|
||||
} else {
|
||||
argv[key] = true;
|
||||
}
|
||||
} else if (/^-[^-]+/.test(arg)) {
|
||||
const letters = arg.slice(1, -1).split('');
|
||||
let broken = false;
|
||||
for (const j of letters) {
|
||||
const next = arg.slice(j + 2);
|
||||
|
||||
if (next === '-') {
|
||||
argv[letters[j]] = next;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {
|
||||
argv[letters[j]] = next.split('=')[1];
|
||||
broken = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (/[A-Za-z]/.test(letters[j])
|
||||
&& /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
|
||||
argv[letters[j]] = next;
|
||||
broken = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (letters[j + 1] && letters[j + 1].match(/\W/)) {
|
||||
argv[letters[j]] = arg.slice(j + 2);
|
||||
broken = true;
|
||||
break;
|
||||
} else {
|
||||
argv[letters[j]] = true;
|
||||
}
|
||||
}
|
||||
|
||||
const key = arg.slice(-1)[0];
|
||||
if (!broken && key !== '-') {
|
||||
if (args[i + 1] && !/^(-|--)[^-]/.test(args[i + 1])) {
|
||||
argv[key] = args[i + 1];
|
||||
} else if (args[i + 1] && /true|false/.test(args[i + 1])) {
|
||||
argv[key] = args[i + 1] === 'true';
|
||||
} else {
|
||||
argv[key] = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
argv.push(arg);
|
||||
}
|
||||
}
|
||||
|
||||
return argv;
|
||||
}
|
||||
|
||||
module.exports = snekparse;
|
||||
Reference in New Issue
Block a user