mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-02 15:46:33 +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: 398e112c8c
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;
|
String condition_text() const override;
|
||||||
virtual bool condition_matches() const override { return m_supports->matches(); }
|
virtual bool condition_matches() const override { return m_supports->matches(); }
|
||||||
|
|
||||||
|
Supports const& supports() const { return m_supports; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CSSSupportsRule(JS::Realm&, NonnullRefPtr<Supports>&&, CSSRuleList&);
|
CSSSupportsRule(JS::Realm&, NonnullRefPtr<Supports>&&, CSSRuleList&);
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,12 @@
|
||||||
|
|
||||||
namespace Web::CSS {
|
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)
|
Supports::Supports(JS::Realm& realm, NonnullOwnPtr<Condition>&& condition)
|
||||||
: m_condition(move(condition))
|
: m_condition(move(condition))
|
||||||
{
|
{
|
||||||
|
@ -115,4 +121,56 @@ String Supports::to_string() const
|
||||||
return m_condition->to_string();
|
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;
|
String declaration;
|
||||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||||
String to_string() const;
|
String to_string() const;
|
||||||
|
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Selector {
|
struct Selector {
|
||||||
String selector;
|
String selector;
|
||||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||||
String to_string() const;
|
String to_string() const;
|
||||||
|
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Feature {
|
struct Feature {
|
||||||
Variant<Declaration, Selector> value;
|
Variant<Declaration, Selector> value;
|
||||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||||
String to_string() const;
|
String to_string() const;
|
||||||
|
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Condition;
|
struct Condition;
|
||||||
|
@ -44,6 +47,7 @@ public:
|
||||||
|
|
||||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||||
String to_string() const;
|
String to_string() const;
|
||||||
|
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Condition {
|
struct Condition {
|
||||||
|
@ -57,6 +61,7 @@ public:
|
||||||
|
|
||||||
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
[[nodiscard]] bool evaluate(JS::Realm&) const;
|
||||||
String to_string() const;
|
String to_string() const;
|
||||||
|
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
static NonnullRefPtr<Supports> create(JS::Realm& realm, NonnullOwnPtr<Condition>&& condition)
|
static NonnullRefPtr<Supports> create(JS::Realm& realm, NonnullOwnPtr<Condition>&& condition)
|
||||||
|
@ -67,6 +72,8 @@ public:
|
||||||
bool matches() const { return m_matches; }
|
bool matches() const { return m_matches; }
|
||||||
String to_string() const;
|
String to_string() const;
|
||||||
|
|
||||||
|
void dump(StringBuilder&, int indent_levels = 0) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Supports(JS::Realm&, NonnullOwnPtr<Condition>&&);
|
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)
|
void dump_supports_rule(StringBuilder& builder, CSS::CSSSupportsRule const& supports, int indent_levels)
|
||||||
{
|
{
|
||||||
indent(builder, 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);
|
indent(builder, indent_levels);
|
||||||
builder.appendff(" Rules ({}):\n", supports.css_rules().length());
|
builder.appendff(" Rules ({}):\n", supports.css_rules().length());
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue