@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
JavaScript
/**
* 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
};