sicua
Version:
A tool for analyzing project structure and dependencies
97 lines (96 loc) • 3.06 kB
TypeScript
import * as t from "@babel/types";
import { JSXReturnStatement, ComponentFlowConfig } from "../types";
/**
* Analyzer for JSX return statements and their conditional rendering patterns
*/
export declare class JSXReturnAnalyzer {
private conditionalParser;
private config;
constructor(config?: ComponentFlowConfig);
/**
* Analyzes all return statements in an AST for JSX content and conditional patterns
*/
analyzeAST(ast: t.File, sourceCode: string): JSXReturnStatement[];
/**
* NEW: Analyzes a specific component node for JSX content and conditional patterns
*/
analyzeComponentNode(componentNode: t.Node, sourceCode: string): JSXReturnStatement[];
/**
* Recursively checks if a statement contains a JSX return
*/
private statementContainsJSXReturn;
/**
* Analyzes a single function for JSX return patterns
*/
analyzeFunctionNode(functionNode: t.Function | t.ArrowFunctionExpression, sourceCode: string): JSXReturnStatement[];
/**
* Analyzes a block statement for JSX returns and conditional patterns
*/
private analyzeBlockStatement;
/**
* Analyzes switch statements for conditional returns
*/
private analyzeSwitchStatement;
/**
* Analyzes a return statement for JSX and conditional patterns - ENHANCED
*/
private analyzeReturnStatement;
/**
* Analyzes implicit returns in arrow functions - ENHANCED
*/
private analyzeImplicitReturn;
/**
* Analyzes conditional return statements within if/else blocks
*/
private analyzeConditionalReturns;
/**
* Extracts return statements from various statement types
*/
private extractReturnsFromStatement;
/**
* NEW: Updates configuration for HTML element tracking
*/
updateConfig(config: ComponentFlowConfig): void;
/**
* NEW: Gets current configuration
*/
getConfig(): ComponentFlowConfig;
/**
* NEW: Enables HTML element tracking
*/
enableHtmlElementTracking(): void;
/**
* NEW: Disables HTML element tracking
*/
disableHtmlElementTracking(): void;
/**
* NEW: Analyzes a specific JSX expression for both components and HTML elements
*/
analyzeJSXExpression(expression: t.Expression, sourceCode: string): {
components: Array<{
name: string;
isJSXElement: boolean;
props: any[];
position: any;
}>;
htmlElements: Array<{
tagName: string;
props: any[];
hasChildren: boolean;
textContent?: string;
position: any;
}>;
hasConditional: boolean;
conditionalPatterns: any[];
};
/**
* NEW: Gets analysis statistics
*/
getAnalysisStats(returnStatements: JSXReturnStatement[]): {
totalReturns: number;
conditionalReturns: number;
totalComponents: number;
totalHtmlElements: number;
totalConditionalPatterns: number;
};
}