@felixgeelhaar/cclint
Version:
Catch CLAUDE.md drift before Claude misbehaves. Lints CLAUDE.md, skills, subagents, and hooks for Claude Code projects.
59 lines • 2.32 kB
JavaScript
import { JavaScriptValidator } from './validators/JavaScriptValidator.js';
import { PythonValidator } from './validators/PythonValidator.js';
import { GoValidator } from './validators/GoValidator.js';
import { BashValidator } from './validators/BashValidator.js';
import { SqlValidator } from './validators/SqlValidator.js';
import { JsonValidator } from './validators/JsonValidator.js';
import { YamlValidator } from './validators/YamlValidator.js';
/**
* Maps normalized language identifiers to the {@link LanguageValidator} that
* handles them.
*
* @remarks
* This is the one place that knows which validator owns which language, so
* adding a language means adding a validator module and a single registration
* — `CodeBlockRule` never grows a `switch`.
*/
export class ValidatorRegistry {
byLanguage = new Map();
registeredGroups;
constructor(registrations) {
this.registeredGroups = registrations;
for (const { languages, validator } of registrations) {
for (const language of languages) {
this.byLanguage.set(language, validator);
}
}
}
/** The validator for a language, or `undefined` when none is registered. */
get(language) {
return this.byLanguage.get(language);
}
/** All registrations, in declaration order, for cross-block passes. */
groups() {
return this.registeredGroups;
}
}
/**
* Build the registry of built-in language validators.
*
* @remarks
* `javascript` and `typescript` deliberately share one validator instance so
* their blocks are validated identically and grouped together for
* consistency checks.
*/
export function createDefaultValidatorRegistry() {
return new ValidatorRegistry([
{
languages: ['javascript', 'typescript'],
validator: new JavaScriptValidator(),
},
{ languages: ['python'], validator: new PythonValidator() },
{ languages: ['go'], validator: new GoValidator() },
{ languages: ['bash'], validator: new BashValidator() },
{ languages: ['sql'], validator: new SqlValidator() },
{ languages: ['json'], validator: new JsonValidator() },
{ languages: ['yaml'], validator: new YamlValidator() },
]);
}
//# sourceMappingURL=ValidatorRegistry.js.map