Merge pull request #9090 from weswigham/allow-empty-lists-command-line
Allow empty lists on command line
This commit is contained in:
commit
9d023a83fe
|
@ -493,13 +493,20 @@ namespace ts {
|
|||
}
|
||||
|
||||
/* @internal */
|
||||
export function parseListTypeOption(opt: CommandLineOptionOfListType, value: string, errors: Diagnostic[]): (string | number)[] {
|
||||
const values = trimString((value || "")).split(",");
|
||||
export function parseListTypeOption(opt: CommandLineOptionOfListType, value = "", errors: Diagnostic[]): (string | number)[] | undefined {
|
||||
value = trimString(value);
|
||||
if (startsWith(value, "-")) {
|
||||
return undefined;
|
||||
}
|
||||
if (value === "") {
|
||||
return [];
|
||||
}
|
||||
const values = value.split(",");
|
||||
switch (opt.element.type) {
|
||||
case "number":
|
||||
return ts.map(values, parseInt);
|
||||
return map(values, parseInt);
|
||||
case "string":
|
||||
return ts.map(values, v => v || "");
|
||||
return map(values, v => v || "");
|
||||
default:
|
||||
return filter(map(values, v => parseCustomTypeOption(<CommandLineOptionOfCustomType>opt.element, v, errors)), v => !!v);
|
||||
}
|
||||
|
@ -560,8 +567,11 @@ namespace ts {
|
|||
i++;
|
||||
break;
|
||||
case "list":
|
||||
options[opt.name] = parseListTypeOption(<CommandLineOptionOfListType>opt, args[i], errors);
|
||||
i++;
|
||||
const result = parseListTypeOption(<CommandLineOptionOfListType>opt, args[i], errors);
|
||||
options[opt.name] = result || [];
|
||||
if (result) {
|
||||
i++;
|
||||
}
|
||||
break;
|
||||
// If not a primitive, the possible types are specified in what is effectively a map of options.
|
||||
default:
|
||||
|
|
|
@ -216,10 +216,23 @@ namespace ts {
|
|||
file: undefined,
|
||||
start: undefined,
|
||||
length: undefined,
|
||||
}, {
|
||||
messageText: "Argument for '--lib' option must be: 'es5', 'es6', 'es2015', 'es7', 'es2016', 'es2017', 'dom', 'webworker', 'scripthost', 'es2015.core', 'es2015.collection', 'es2015.generator', 'es2015.iterable', 'es2015.promise', 'es2015.proxy', 'es2015.reflect', 'es2015.symbol', 'es2015.symbol.wellknown', 'es2016.array.include', 'es2017.object', 'es2017.sharedmemory'",
|
||||
category: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.category,
|
||||
code: ts.Diagnostics.Argument_for_0_option_must_be_Colon_1.code,
|
||||
}],
|
||||
fileNames: ["0.ts"],
|
||||
options: {
|
||||
lib: []
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it("Parse empty string of --lib ", () => {
|
||||
// 0.ts --lib
|
||||
// This test is an error because the empty string is falsey
|
||||
assertParseResult(["0.ts", "--lib", ""],
|
||||
{
|
||||
errors: [{
|
||||
messageText: "Compiler option 'lib' expects an argument.",
|
||||
category: ts.Diagnostics.Compiler_option_0_expects_an_argument.category,
|
||||
code: ts.Diagnostics.Compiler_option_0_expects_an_argument.code,
|
||||
|
||||
file: undefined,
|
||||
start: undefined,
|
||||
|
@ -232,6 +245,19 @@ namespace ts {
|
|||
});
|
||||
});
|
||||
|
||||
it("Parse immediately following command line argument of --lib ", () => {
|
||||
// 0.ts --lib
|
||||
assertParseResult(["0.ts", "--lib", "--sourcemap"],
|
||||
{
|
||||
errors: [],
|
||||
fileNames: ["0.ts"],
|
||||
options: {
|
||||
lib: [],
|
||||
sourceMap: true
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
it("Parse --lib option with extra comma ", () => {
|
||||
// --lib es5, es7 0.ts
|
||||
assertParseResult(["--lib", "es5,", "es7", "0.ts"],
|
||||
|
|
Loading…
Reference in a new issue