UNPKG

@sun-asterisk/sunlint

Version:

☀️ SunLint - Multi-language static analysis tool for code quality and security | Sun* Engineering Standards

103 lines (91 loc) 2.51 kB
/** * Language Analyzer Adapters - Registration Module * Automatically registers all available language analyzers * * Following Rule C005: Single responsibility - analyzer registration */ const { getRegistry } = require('../interfaces/language-analyzer.interface'); const TypeScriptAnalyzer = require('./typescript-analyzer'); const DartAnalyzer = require('./dart-analyzer'); /** * Register all built-in language analyzers * @param {Object} [options] - Options * @param {boolean} [options.verbose] - Enable verbose logging * @returns {LanguageAnalyzerRegistry} - The registry with registered analyzers */ function registerBuiltInAnalyzers(options = {}) { const registry = getRegistry(); const { verbose = false } = options; // Register TypeScript/JavaScript analyzer if (!registry.has('typescript')) { const tsAnalyzer = new TypeScriptAnalyzer(); registry.register(tsAnalyzer); if (verbose) { console.log(`📝 Registered TypeScript/JavaScript analyzer`); } } // Register Dart analyzer if (!registry.has('dart')) { const dartAnalyzer = new DartAnalyzer(); registry.register(dartAnalyzer); if (verbose) { console.log(`📝 Registered Dart analyzer`); } } return registry; } /** * Get supported languages info * @returns {Object[]} - Array of language info objects */ function getSupportedLanguages() { return [ { name: 'typescript', displayName: 'TypeScript', extensions: ['.ts', '.tsx', '.mts', '.cts'], analyzerClass: TypeScriptAnalyzer }, { name: 'javascript', displayName: 'JavaScript', extensions: ['.js', '.jsx', '.mjs', '.cjs'], analyzerClass: TypeScriptAnalyzer // Shares analyzer with TypeScript }, { name: 'dart', displayName: 'Dart', extensions: ['.dart'], analyzerClass: DartAnalyzer } ]; } /** * Get analyzer class for a language * @param {string} language - Language name * @returns {Class|null} - Analyzer class or null */ function getAnalyzerClass(language) { const langLower = language.toLowerCase(); switch (langLower) { case 'typescript': case 'javascript': case 'ts': case 'js': return TypeScriptAnalyzer; case 'dart': return DartAnalyzer; default: return null; } } module.exports = { // Registration registerBuiltInAnalyzers, // Analyzer classes TypeScriptAnalyzer, DartAnalyzer, // Utilities getSupportedLanguages, getAnalyzerClass };