@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
JavaScript
"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;