@adguard/aglint
Version:
Universal adblock filter list linter.
60 lines (57 loc) • 2.42 kB
JavaScript
/*
* 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 };