UNPKG

sicua

Version:

A tool for analyzing project structure and dependencies

94 lines (93 loc) 3.39 kB
import ts from "typescript"; import { TranslationAnalysisResult } from "../../../types/translation.types"; import { ReactI18nextFileFinder } from "./fileFinder"; import { ReactI18nextKeyFinder } from "./keyFinder"; /** * Analyzer for detecting react-i18next translation issues in a React project */ export declare class ReactI18nextAnalyzer { private sourceFiles; private context; private fileFinder; private keyFinder; private missingTranslationAnalyzer; private duplicateTranslationAnalyzer; private coverageAnalyzer; /** * Constructor for the react-i18next analyzer * @param projectPath Path to the project root * @param sourceFiles Map of source files to analyze */ constructor(projectPath: string, sourceFiles: Map<string, ts.SourceFile>); /** * Main analysis method for react-i18next * @returns Promise that resolves to analysis results */ analyze(): Promise<TranslationAnalysisResult>; /** * Analyzes duplicate translations across react-i18next namespaces * @param translationKeys Translation keys found in code * @param translationFiles Translation files to analyze * @returns Array of duplicate translations */ private analyzeDuplicateTranslations; /** * Finds duplicate translations across different namespaces * @param translationFiles Translation files to analyze * @returns Array of cross-namespace duplicates */ private findCrossNamespaceDuplicates; /** * Flattens translations with namespace information * @param obj Translation object * @param prefix Current key prefix * @param namespace Namespace name * @param filePath File path * @param valueMap Map to populate with values and their locations */ private flattenTranslationsWithNamespace; /** * Checks if text is significant enough to warn about duplication * @param value The text value to check * @returns Boolean indicating if the text is significant */ private isSignificantTextForDuplication; /** * Generate react-i18next specific statistics * @param translationKeys Translation keys found * @param missingTranslations Missing translations * @param duplicateTranslations Duplicate translations * @returns Statistics object */ private generateReactI18nextStatistics; /** * Counts usage of interpolation in translation keys * @param translationKeys Translation keys to analyze * @returns Number of keys using interpolation */ private countInterpolationUsage; /** * Counts usage of pluralization in translation files * @returns Number of plural keys found */ private countPluralizationUsage; /** * Counts plural keys in a translation object * @param obj Translation object * @returns Number of plural keys */ private countPluralKeys; /** * Gets react-i18next specific analysis information * @returns React-i18next setup information */ getReactI18nextInfo(): { setup: ReturnType<ReactI18nextFileFinder["detectReactI18nextSetup"]>; keyStatistics: ReturnType<ReactI18nextKeyFinder["getUsageStatistics"]>; namespaceAnalysis: { componentName: string; namespaces: string[]; keyCount: number; }[]; }; }