1/** 2 * @fileoverview A rule to disallow modifying variables that are declared using `const` 3 * @author Toru Nagashima 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: "problem", 17 18 docs: { 19 description: "disallow reassigning `const` variables", 20 category: "ECMAScript 6", 21 recommended: true, 22 url: "https://eslint.org/docs/rules/no-const-assign" 23 }, 24 25 schema: [], 26 27 messages: { 28 const: "'{{name}}' is constant." 29 } 30 }, 31 32 create(context) { 33 34 /** 35 * Finds and reports references that are non initializer and writable. 36 * @param {Variable} variable A variable to check. 37 * @returns {void} 38 */ 39 function checkVariable(variable) { 40 astUtils.getModifyingReferences(variable.references).forEach(reference => { 41 context.report({ node: reference.identifier, messageId: "const", data: { name: reference.identifier.name } }); 42 }); 43 } 44 45 return { 46 VariableDeclaration(node) { 47 if (node.kind === "const") { 48 context.getDeclaredVariables(node).forEach(checkVariable); 49 } 50 } 51 }; 52 53 } 54}; 55