UNPKG

2.03 kBJavaScriptView Raw
1/**
2 * @fileoverview Rule to enforce description with the `Symbol` object
3 * @author Jarek Rencz
4 */
5
6"use strict";
7
8//------------------------------------------------------------------------------
9// Requirements
10//------------------------------------------------------------------------------
11
12const astUtils = require("./utils/ast-utils");
13
14//------------------------------------------------------------------------------
15// Rule Definition
16//------------------------------------------------------------------------------
17
18
19module.exports = {
20 meta: {
21 type: "suggestion",
22
23 docs: {
24 description: "require symbol descriptions",
25 category: "ECMAScript 6",
26 recommended: false,
27 url: "https://eslint.org/docs/rules/symbol-description"
28 },
29 fixable: null,
30 schema: [],
31 messages: {
32 expected: "Expected Symbol to have a description."
33 }
34 },
35
36 create(context) {
37
38 /**
39 * Reports if node does not conform the rule in case rule is set to
40 * report missing description
41 *
42 * @param {ASTNode} node - A CallExpression node to check.
43 * @returns {void}
44 */
45 function checkArgument(node) {
46 if (node.arguments.length === 0) {
47 context.report({
48 node,
49 messageId: "expected"
50 });
51 }
52 }
53
54 return {
55 "Program:exit"() {
56 const scope = context.getScope();
57 const variable = astUtils.getVariableByName(scope, "Symbol");
58
59 if (variable && variable.defs.length === 0) {
60 variable.references.forEach(reference => {
61 const node = reference.identifier;
62
63 if (astUtils.isCallee(node)) {
64 checkArgument(node.parent);
65 }
66 });
67 }
68 }
69 };
70
71 }
72};