UNPKG

@adguard/aglint

Version:

Universal adblock filter list linter.

60 lines (57 loc) 2.42 kB
/* * AGLint v3.0.0 (build date: Wed, 21 May 2025 13:24:14 GMT) * (c) 2025 AdGuard Software Ltd. * Released under the MIT license * https://github.com/AdguardTeam/AGLint#readme */ import { RuleCategory, NetworkRuleType, modifierValidator } from '@adguard/agtree'; import { SEVERITY } from '../severity.js'; /** * Rule that checks modifiers validity for basic (network) rules */ const InvalidModifiers = { meta: { severity: SEVERITY.error, }, events: { onRule: (context) => { // Get actually iterated adblock rule const ast = context.getActualAdblockRuleAst(); if (ast.category === RuleCategory.Network && ast.type === NetworkRuleType.NetworkRule) { // get lint of syntaxes to validate modifiers for const validateSyntax = context.getLinterConfig().syntax; // validate modifiers for every syntax and collect problems if any validateSyntax.forEach((agent) => { if (!ast.modifiers) { return; } ast.modifiers.children.forEach((modifier) => { const validationResult = modifierValidator.validate(agent, modifier, ast.exception); if (validationResult.valid && !validationResult.warn) { return; } // default invalid modifier message let message = `Invalid modifier: '${modifier.value}'`; // needed for deprecated modifiers which are valid but not recommended // so should be just _warned_ about let customSeverity; if (validationResult.warn) { message = validationResult.warn; customSeverity = SEVERITY.warn; } if (validationResult.error) { message = validationResult.error; } context.report({ message, node: modifier, customSeverity, }); }); }); } }, }, }; export { InvalidModifiers };