Choose error handling mechanisms based on the error's severity and context. For critical issues that should prevent further execution, throw explicit exceptions. For non-critical issues, use logging with sufficient detail to aid debugging without interrupting execution.
Choose error handling mechanisms based on the error’s severity and context. For critical issues that should prevent further execution, throw explicit exceptions. For non-critical issues, use logging with sufficient detail to aid debugging without interrupting execution.
When throwing exceptions for critical validation errors:
if (reference.resolved === null) {
throw new Error('Unexpected undefined reference.resolved');
}
When logging non-critical issues, include precise location information and use visual indicators to distinguish error types:
const { reason, severity, loc } = compilation.detail;
const lnNo = loc.start?.line;
const colNo = loc.start?.column;
const isTodo = severity === ErrorSeverity.Todo;
console.log(
chalk[isTodo ? 'yellow' : 'red'](
`Failed to compile ${filename}${lnNo !== undefined ? `:${lnNo}${colNo !== undefined ? `:${colNo}` : ""}` : ""}`
),
reason ? `\n Reason: ${isTodo ? 'Unimplemented' : reason}` : ""
);
This approach helps identify bugs early in the development process for critical issues while providing informative, actionable feedback for less severe problems without unnecessarily halting execution.
Enter the URL of a public GitHub repository