mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 00:50:22 +00:00
LibWeb: Make dumping of @supports
more useful
The string representation doesn't tell you what the internals look like, which is what you want when dumping.
This commit is contained in:
parent
a7cbc7a6b8
commit
398e112c8c
Notes:
github-actions[bot]
2024-11-07 14:13:22 +00:00
Author: https://github.com/AtkinsSJ Commit: https://github.com/LadybirdBrowser/ladybird/commit/398e112c8c8 Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2202
4 changed files with 69 additions and 1 deletions
|
@ -27,6 +27,8 @@ public:
|
|||
String condition_text() const override;
|
||||
virtual bool condition_matches() const override { return m_supports->matches(); }
|
||||
|
||||
Supports const& supports() const { return m_supports; }
|
||||
|
||||
private:
|
||||
CSSSupportsRule(JS::Realm&, NonnullRefPtr<Supports>&&, CSSRuleList&);
|
||||
|
||||
|
|
|
@ -10,6 +10,12 @@
|
|||
|
||||
namespace Web::CSS {
|
||||
|
||||
static void indent(StringBuilder& builder, int levels)
|
||||
{
|
||||
for (int i = 0; i < levels; i++)
|
||||
builder.append(" "sv);
|
||||
}
|
||||
|
||||
Supports::Supports(JS::Realm& realm, NonnullOwnPtr<Condition>&& condition)
|
||||
: m_condition(move(condition))
|
||||
{
|
||||
|
@ -115,4 +121,56 @@ String Supports::to_string() const
|
|||
return m_condition->to_string();
|
||||
}
|
||||
|
||||
void Supports::Declaration::dump(StringBuilder& builder, int indent_levels) const
|
||||
{
|
||||
indent(builder, indent_levels);
|
||||
builder.appendff("Declaration: {}\n", declaration);
|
||||
}
|
||||
|
||||
void Supports::Selector::dump(StringBuilder& builder, int indent_levels) const
|
||||
{
|
||||
indent(builder, indent_levels);
|
||||
builder.appendff("Selector: {}\n", selector);
|
||||
}
|
||||
|
||||
void Supports::Feature::dump(StringBuilder& builder, int indent_levels) const
|
||||
{
|
||||
value.visit([&](auto& it) { it.dump(builder, indent_levels); });
|
||||
}
|
||||
|
||||
void Supports::InParens::dump(StringBuilder& builder, int indent_levels) const
|
||||
{
|
||||
value.visit(
|
||||
[&](NonnullOwnPtr<Condition> const& condition) { condition->dump(builder, indent_levels); },
|
||||
[&](Supports::Feature const& it) { it.dump(builder, indent_levels); },
|
||||
[&](GeneralEnclosed const& it) {
|
||||
indent(builder, indent_levels);
|
||||
builder.appendff("GeneralEnclosed: {}\n", it.to_string());
|
||||
});
|
||||
}
|
||||
|
||||
void Supports::Condition::dump(StringBuilder& builder, int indent_levels) const
|
||||
{
|
||||
indent(builder, indent_levels);
|
||||
StringView type_name = [](Type type) {
|
||||
switch (type) {
|
||||
case Type::And:
|
||||
return "AND"sv;
|
||||
case Type::Or:
|
||||
return "OR"sv;
|
||||
case Type::Not:
|
||||
return "NOT"sv;
|
||||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
}(type);
|
||||
builder.appendff("Condition: {}\n", type_name);
|
||||
for (auto const& child : children)
|
||||
child.dump(builder, indent_levels + 1);
|
||||
}
|
||||
|
||||
void Supports::dump(StringBuilder& builder, int indent_levels) const
|
||||
{
|
||||
m_condition->dump(builder, indent_levels);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,18 +24,21 @@ public:
|
|||
String declaration;
|
||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||
String to_string() const;
|
||||
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||
};
|
||||
|
||||
struct Selector {
|
||||
String selector;
|
||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||
String to_string() const;
|
||||
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||
};
|
||||
|
||||
struct Feature {
|
||||
Variant<Declaration, Selector> value;
|
||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||
String to_string() const;
|
||||
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||
};
|
||||
|
||||
struct Condition;
|
||||
|
@ -44,6 +47,7 @@ public:
|
|||
|
||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||
String to_string() const;
|
||||
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||
};
|
||||
|
||||
struct Condition {
|
||||
|
@ -57,6 +61,7 @@ public:
|
|||
|
||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||
String to_string() const;
|
||||
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||
};
|
||||
|
||||
static NonnullRefPtr<Supports> create(JS::Realm& realm, NonnullOwnPtr<Condition>&& condition)
|
||||
|
@ -67,6 +72,8 @@ public:
|
|||
bool matches() const { return m_matches; }
|
||||
String to_string() const;
|
||||
|
||||
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||
|
||||
private:
|
||||
Supports(JS::Realm&, NonnullOwnPtr<Condition>&&);
|
||||
|
||||
|
|
|
@ -778,7 +778,8 @@ void dump_media_rule(StringBuilder& builder, CSS::CSSMediaRule const& media, int
|
|||
void dump_supports_rule(StringBuilder& builder, CSS::CSSSupportsRule const& supports, int indent_levels)
|
||||
{
|
||||
indent(builder, indent_levels);
|
||||
builder.appendff(" Supports: {}\n", supports.condition_text());
|
||||
builder.append(" Supports:\n"sv);
|
||||
supports.supports().dump(builder, indent_levels + 2);
|
||||
indent(builder, indent_levels);
|
||||
builder.appendff(" Rules ({}):\n", supports.css_rules().length());
|
||||
|
||||
|
|
Loading…
Reference in a new issue