• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/**
2 * @fileoverview Rule to restrict what can be thrown as an exception.
3 * @author Dieter Oberkofler
4 */
5
6"use strict";
7
8const astUtils = require("./utils/ast-utils");
9
10//------------------------------------------------------------------------------
11// Rule Definition
12//------------------------------------------------------------------------------
13
14module.exports = {
15    meta: {
16        type: "suggestion",
17
18        docs: {
19            description: "disallow throwing literals as exceptions",
20            category: "Best Practices",
21            recommended: false,
22            url: "https://eslint.org/docs/rules/no-throw-literal"
23        },
24
25        schema: [],
26
27        messages: {
28            object: "Expected an error object to be thrown.",
29            undef: "Do not throw undefined."
30        }
31    },
32
33    create(context) {
34
35        return {
36
37            ThrowStatement(node) {
38                if (!astUtils.couldBeError(node.argument)) {
39                    context.report({ node, messageId: "object" });
40                } else if (node.argument.type === "Identifier") {
41                    if (node.argument.name === "undefined") {
42                        context.report({ node, messageId: "undef" });
43                    }
44                }
45
46            }
47
48        };
49
50    }
51};
52