public IEnumerable <AnalyserResultItem> Analyse(CssAnalyseArgs args) { var node = args.Node; var hashSet = new HashSet <ICssNode>(); var rules = node.GetAll <ICssStyleSheet>().SelectMany(styleSheet => styleSheet.Rules); foreach (var rule in rules) { if (rule.Type == CssRuleType.Unknown) { continue; } if (hashSet.Add(rule)) { if (!rule.GetAll <ICssProperty>().Any()) { yield return(CreateEmptyRuleResultItem(args, rule)); } } } var groups = node.GetAll <ICssGroupingRule>(); foreach (var group in groups) { if (group.Type == CssRuleType.Unknown) { continue; } if (hashSet.Add(group)) { if (!group.Rules.Any()) { yield return(CreateEmptyRuleResultItem(args, group)); } } } }
private AnalyserResultItem CreateEmptyRuleResultItem(CssAnalyseArgs args, ICssNode node) { string excerpt = null; if (args.Target == CssAnalyserTargets.HtmlStyleAttribute) { excerpt = args.Element.OuterHtml; } if (excerpt == null) { excerpt = node.ToCss(); } return(new AnalyserResultItem() { Category = Categories.Performance, Type = AnalyserResultType.Warning, Message = "Rule is empty", Excerpt = excerpt }); }