gen-jhipster
Version:
VHipster - Spring Boot + Angular/React/Vue in one handy generator
53 lines (52 loc) • 1.96 kB
JavaScript
import EntityIssue from "./issues/entity-issue.js";
import { rulesNames } from "./rules.js";
let issues;
/**
* Check entities for lint issues.
* That is done by passing the list of entity declarations from the CST (from the JDLReader output).
* @param entityDeclarations - the list of entity declarations
* @return the found entity issues.
*/
export function checkEntities(entityDeclarations) {
if (!entityDeclarations) {
return [];
}
issues = [];
checkForDuplicatedEntities(entityDeclarations);
entityDeclarations.forEach(entityDeclaration => {
checkForUselessEntityBraces(entityDeclaration);
});
return issues;
}
function checkForDuplicatedEntities(entityDeclarations) {
const entityNames = new Set();
const duplicatedEntityIssues = new Map(); // key: entityName, value: issue
entityDeclarations.forEach(entityDeclaration => {
const entityName = entityDeclaration.children.NAME[0].image;
if (entityNames.has(entityName)) {
if (!duplicatedEntityIssues.has(entityName)) {
duplicatedEntityIssues.set(entityName, new EntityIssue({
ruleName: rulesNames.ENT_DUPLICATED,
entityName,
}));
}
}
else {
entityNames.add(entityName);
}
});
duplicatedEntityIssues.forEach(issue => {
issues.push(issue);
});
}
function checkForUselessEntityBraces(entityDeclaration) {
const entityBody = entityDeclaration.children.entityBody;
const nextTokensAfterRelationshipType = entityBody?.[0]?.children;
const onlyCurlyBracesAsRelationshipBody = entityBody && Object.keys(nextTokensAfterRelationshipType).length === 2;
if (onlyCurlyBracesAsRelationshipBody) {
issues.push(new EntityIssue({
ruleName: rulesNames.ENT_SHORTER_DECL,
entityName: entityDeclaration.children.NAME[0].image,
}));
}
}