diff --git a/cli/index.js b/cli/index.js index ab5a6eb179..56b2a0a0ad 100644 --- a/cli/index.js +++ b/cli/index.js @@ -615,7 +615,7 @@ export async function main(argv, options) { stats.parseTime += stats.end(begin); } } - const numErrors = checkDiagnostics(program, stderr, options.reportDiagnostic, stderrColors.enabled); + const numErrors = checkDiagnostics(program, stderr, opts.disableWarning, options.reportDiagnostic, stderrColors.enabled); if (numErrors) { const err = Error(`${numErrors} parse error(s)`); err.stack = err.message; // omit stack @@ -724,7 +724,7 @@ export async function main(argv, options) { ? assemblyscript.getBinaryenModuleRef(module) : module.ref ); - var numErrors = checkDiagnostics(program, stderr, options.reportDiagnostic, stderrColors.enabled); + var numErrors = checkDiagnostics(program, stderr, opts.disableWarning, options.reportDiagnostic, stderrColors.enabled); if (numErrors) { const err = Error(`${numErrors} compile error(s)`); err.stack = err.message; // omit stack @@ -737,7 +737,7 @@ export async function main(argv, options) { if (error) return prepareResult(error); } - numErrors = checkDiagnostics(program, stderr, options.reportDiagnostic, stderrColors.enabled); + numErrors = checkDiagnostics(program, stderr, opts.disableWarning, options.reportDiagnostic, stderrColors.enabled); if (numErrors) { const err = Error(`${numErrors} afterCompile error(s)`); err.stack = err.message; // omit stack @@ -1117,17 +1117,22 @@ async function getConfig(file, baseDir, readFile) { } /** Checks diagnostics emitted so far for errors. */ -export function checkDiagnostics(program, stderr, reportDiagnostic, useColors) { +export function checkDiagnostics(program, stderr, disableWarning, reportDiagnostic, useColors) { if (typeof useColors === "undefined" && stderr) useColors = stderr.isTTY; var numErrors = 0; do { let diagnostic = assemblyscript.nextDiagnostic(program); if (!diagnostic) break; if (stderr) { - stderr.write( - assemblyscript.formatDiagnostic(diagnostic, useColors, true) + - EOL + EOL - ); + const isDisabledWarning = (diagnostic) => { + if (disableWarning == null) return false; + if (!disableWarning.length) return true; + const code = assemblyscript.getDiagnosticCode(diagnostic); + return disableWarning.includes(code); + }; + if (assemblyscript.isError(diagnostic) || !isDisabledWarning(diagnostic)) { + stderr.write(assemblyscript.formatDiagnostic(diagnostic, useColors, true) + EOL + EOL); + } } if (reportDiagnostic) { function wrapRange(range) { diff --git a/cli/options.json b/cli/options.json index c68bc7e72a..3550b3d1dd 100644 --- a/cli/options.json +++ b/cli/options.json @@ -282,7 +282,7 @@ }, "runPasses": { "category": "Binaryen", - "description": [ + "description": [ "Specifies additional Binaryen passes to run after other", "optimizations, if any. See: Binaryen/src/passes/pass.cpp" ], @@ -313,6 +313,13 @@ "type": "b", "default": false }, + "disableWarning": { + "description": [ + "Disables warnings matching the given diagnostic code.", + "If no diagnostic code is given, all warnings are disabled." + ], + "type": "I" + }, "noEmit": { "description": "Performs compilation as usual but does not emit code.", "type": "b",