website refactor
This commit is contained in:
@@ -31,6 +31,7 @@ module.exports = {
|
|||||||
let hasBuilderImport = false;
|
let hasBuilderImport = false;
|
||||||
const builderUsages = [];
|
const builderUsages = [];
|
||||||
const returnStatements = [];
|
const returnStatements = [];
|
||||||
|
const builtVariables = new Set();
|
||||||
|
|
||||||
return {
|
return {
|
||||||
// Check for builder imports
|
// Check for builder imports
|
||||||
@@ -51,6 +52,42 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Track variable assignments from builders
|
||||||
|
VariableDeclarator(node) {
|
||||||
|
if (node.init && node.init.type === 'CallExpression') {
|
||||||
|
const callee = node.init.callee;
|
||||||
|
if (callee.type === 'MemberExpression' &&
|
||||||
|
callee.property.type === 'Identifier' &&
|
||||||
|
callee.property.name === 'build') {
|
||||||
|
builtVariables.add(node.id.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Track variable assignments from builders
|
||||||
|
VariableDeclarator(node) {
|
||||||
|
if (node.init && node.init.type === 'CallExpression') {
|
||||||
|
const callee = node.init.callee;
|
||||||
|
if (callee.type === 'MemberExpression' &&
|
||||||
|
callee.property.type === 'Identifier' &&
|
||||||
|
callee.property.name === 'build') {
|
||||||
|
builtVariables.add(node.id.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Track variable assignments from builders
|
||||||
|
VariableDeclarator(node) {
|
||||||
|
if (node.init && node.init.type === 'CallExpression') {
|
||||||
|
const callee = node.init.callee;
|
||||||
|
if (callee.type === 'MemberExpression' &&
|
||||||
|
callee.property.type === 'Identifier' &&
|
||||||
|
callee.property.name === 'build') {
|
||||||
|
builtVariables.add(node.id.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
// Track return statements
|
// Track return statements
|
||||||
ReturnStatement(node) {
|
ReturnStatement(node) {
|
||||||
if (node.argument) {
|
if (node.argument) {
|
||||||
@@ -70,33 +107,37 @@ module.exports = {
|
|||||||
// Check if return statements use builders
|
// Check if return statements use builders
|
||||||
returnStatements.forEach(returnNode => {
|
returnStatements.forEach(returnNode => {
|
||||||
const returnExpr = returnNode.argument;
|
const returnExpr = returnNode.argument;
|
||||||
|
|
||||||
// Check if it's a builder call
|
// Check if it's a builder call
|
||||||
if (returnExpr && returnExpr.type === 'CallExpression') {
|
if (returnExpr && returnExpr.type === 'CallExpression') {
|
||||||
const callee = returnExpr.callee;
|
const callee = returnExpr.callee;
|
||||||
|
|
||||||
// Check if it's a builder method call (e.g., ViewDataBuilder.build())
|
// Check if it's a builder method call (e.g., ViewDataBuilder.build())
|
||||||
if (callee.type === 'MemberExpression' &&
|
if (callee.type === 'MemberExpression' &&
|
||||||
callee.property.type === 'Identifier' &&
|
callee.property.type === 'Identifier' &&
|
||||||
callee.property.name === 'build') {
|
callee.property.name === 'build') {
|
||||||
// This is good - using a builder
|
// This is good - using a builder
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if it's a direct Result.ok() with DTO
|
// Check if it's a direct Result.ok() with DTO
|
||||||
if (callee.type === 'MemberExpression' &&
|
if (callee.type === 'MemberExpression' &&
|
||||||
callee.object.type === 'Identifier' &&
|
callee.object.type === 'Identifier' &&
|
||||||
callee.object.name === 'Result' &&
|
callee.object.name === 'Result' &&
|
||||||
callee.property.type === 'Identifier' &&
|
callee.property.type === 'Identifier' &&
|
||||||
callee.property.name === 'ok') {
|
callee.property.name === 'ok') {
|
||||||
|
|
||||||
// Check if the argument is a variable that might be a DTO
|
// Check if the argument is a variable that might be a DTO
|
||||||
if (returnExpr.arguments && returnExpr.arguments[0]) {
|
if (returnExpr.arguments && returnExpr.arguments[0]) {
|
||||||
const arg = returnExpr.arguments[0];
|
const arg = returnExpr.arguments[0];
|
||||||
|
|
||||||
// If it's an identifier, check if it's likely a DTO
|
// If it's an identifier, check if it's likely a DTO
|
||||||
if (arg.type === 'Identifier') {
|
if (arg.type === 'Identifier') {
|
||||||
const varName = arg.name;
|
const varName = arg.name;
|
||||||
|
// Skip if it's a variable built from a builder
|
||||||
|
if (builtVariables.has(varName)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// Common DTO patterns: result, data, dto, apiResult, etc.
|
// Common DTO patterns: result, data, dto, apiResult, etc.
|
||||||
if (varName.match(/(result|data|dto|apiResult|response)/i)) {
|
if (varName.match(/(result|data|dto|apiResult|response)/i)) {
|
||||||
context.report({
|
context.report({
|
||||||
|
|||||||
@@ -333,6 +333,7 @@ module.exports = {
|
|||||||
NewExpression(node) {
|
NewExpression(node) {
|
||||||
if (node.callee.type === 'Identifier' &&
|
if (node.callee.type === 'Identifier' &&
|
||||||
/^[A-Z]/.test(node.callee.name) &&
|
/^[A-Z]/.test(node.callee.name) &&
|
||||||
|
!node.callee.name.endsWith('PageQuery') &&
|
||||||
!isInComment(node)) {
|
!isInComment(node)) {
|
||||||
context.report({
|
context.report({
|
||||||
node,
|
node,
|
||||||
|
|||||||
Reference in New Issue
Block a user