UNPKG

@builder.io/eslint-plugin-mitosis

Version:

A Mitosis plugin containing rules that help you write valid and idiomatic Mitosis code

94 lines (93 loc) 4.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var types = require("@babel/types"); var isMitosisPath_1 = require("../helpers/isMitosisPath"); // ------------------------------------------------------------------------------ // Rule Definition // ------------------------------------------------------------------------------ var rule = { meta: { type: 'problem', docs: { description: 'disallow defining variables with the same name as a prop name', recommended: true, }, }, create: function (context) { // variables should be defined here var filename = context.getFilename(); if (!(0, isMitosisPath_1.default)(filename)) return {}; // ---------------------------------------------------------------------- // Helpers // ---------------------------------------------------------------------- // any helper functions should go here or else delete this section // ---------------------------------------------------------------------- // Public // ---------------------------------------------------------------------- // var listener = { VariableDeclarator: function (node) { var ancestors = context.getAncestors(); var program = context.getAncestors()[0]; if (!types.isProgram(program)) return; var defaultExport = ancestors.find(function (n) { return types.isExportDefaultDeclaration(n); }); if (!types.isExportDefaultDeclaration(defaultExport)) return; if (!types.isFunctionDeclaration(defaultExport.declaration)) return; var declaration = defaultExport.declaration; var params = declaration.params; var props = params[0]; if (!types.isIdentifier(props)) return; var propsArgName = props.name; var id = node.id, init = node.init; if (!types.isIdentifier(id)) return; if (types.isLogicalExpression(init)) { var right = init.right, left = init.left; if (!types.isMemberExpression(left) && !types.isMemberExpression(right)) return; if (types.isMemberExpression(left) && types.isIdentifier(left.object) && types.isIdentifier(left.property) && left.object.name === propsArgName) { if (id.name === left.property.name) { context.report({ node: id, message: 'Variable name should not be same as prop name', }); } } if (types.isMemberExpression(right) && types.isIdentifier(right.object) && types.isIdentifier(right.property) && right.object.name === propsArgName) { if (id.name === right.property.name) { context.report({ node: id, message: 'Variable name should not be same as prop name', }); } } } else if (types.isMemberExpression(init)) { if (types.isIdentifier(init.object) && types.isIdentifier(init.property) && init.object.name === propsArgName) { if (id.name === init.property.name) { context.report({ node: id, message: 'Variable name should not be same as prop name', }); } } } }, }; return listener; }, }; exports.default = rule;