chore: ensure statics are only present once in the final app (#5588)
This commit is contained in:
@@ -10,13 +10,45 @@
|
||||
|
||||
namespace chatterino::filters {
|
||||
|
||||
const QMap<QString, Type> MESSAGE_TYPING_CONTEXT{
|
||||
{"author.badges", Type::StringList},
|
||||
{"author.color", Type::Color},
|
||||
{"author.name", Type::String},
|
||||
{"author.no_color", Type::Bool},
|
||||
{"author.subbed", Type::Bool},
|
||||
{"author.sub_length", Type::Int},
|
||||
{"channel.name", Type::String},
|
||||
{"channel.watching", Type::Bool},
|
||||
{"channel.live", Type::Bool},
|
||||
{"flags.action", Type::Bool},
|
||||
{"flags.highlighted", Type::Bool},
|
||||
{"flags.points_redeemed", Type::Bool},
|
||||
{"flags.sub_message", Type::Bool},
|
||||
{"flags.system_message", Type::Bool},
|
||||
{"flags.reward_message", Type::Bool},
|
||||
{"flags.first_message", Type::Bool},
|
||||
{"flags.elevated_message", Type::Bool},
|
||||
{"flags.hype_chat", Type::Bool},
|
||||
{"flags.cheer_message", Type::Bool},
|
||||
{"flags.whisper", Type::Bool},
|
||||
{"flags.reply", Type::Bool},
|
||||
{"flags.automod", Type::Bool},
|
||||
{"flags.restricted", Type::Bool},
|
||||
{"flags.monitored", Type::Bool},
|
||||
{"message.content", Type::String},
|
||||
{"message.length", Type::Int},
|
||||
{"reward.title", Type::String},
|
||||
{"reward.cost", Type::Int},
|
||||
{"reward.id", Type::String},
|
||||
};
|
||||
|
||||
ContextMap buildContextMap(const MessagePtr &m, chatterino::Channel *channel)
|
||||
{
|
||||
auto watchingChannel = getApp()->getTwitch()->getWatchingChannel().get();
|
||||
|
||||
/*
|
||||
* Looking to add a new identifier to filters? Here's what to do:
|
||||
* 1. Update validIdentifiersMap in Tokenizer.hpp
|
||||
* 1. Update validIdentifiersMap in Tokenizer.cpp
|
||||
* 2. Add the identifier to the list below
|
||||
* 3. Add the type of the identifier to MESSAGE_TYPING_CONTEXT in Filter.hpp
|
||||
* 4. Add the value for the identifier to the ContextMap returned by this function
|
||||
|
||||
@@ -22,37 +22,7 @@ namespace chatterino::filters {
|
||||
// For example, flags.highlighted is a boolean variable, so it is marked as Type::Bool
|
||||
// below. These variable types will be used to check whether a filter "makes sense",
|
||||
// i.e. if all the variables and operators being used have compatible types.
|
||||
static const QMap<QString, Type> MESSAGE_TYPING_CONTEXT = {
|
||||
{"author.badges", Type::StringList},
|
||||
{"author.color", Type::Color},
|
||||
{"author.name", Type::String},
|
||||
{"author.no_color", Type::Bool},
|
||||
{"author.subbed", Type::Bool},
|
||||
{"author.sub_length", Type::Int},
|
||||
{"channel.name", Type::String},
|
||||
{"channel.watching", Type::Bool},
|
||||
{"channel.live", Type::Bool},
|
||||
{"flags.action", Type::Bool},
|
||||
{"flags.highlighted", Type::Bool},
|
||||
{"flags.points_redeemed", Type::Bool},
|
||||
{"flags.sub_message", Type::Bool},
|
||||
{"flags.system_message", Type::Bool},
|
||||
{"flags.reward_message", Type::Bool},
|
||||
{"flags.first_message", Type::Bool},
|
||||
{"flags.elevated_message", Type::Bool},
|
||||
{"flags.hype_chat", Type::Bool},
|
||||
{"flags.cheer_message", Type::Bool},
|
||||
{"flags.whisper", Type::Bool},
|
||||
{"flags.reply", Type::Bool},
|
||||
{"flags.automod", Type::Bool},
|
||||
{"flags.restricted", Type::Bool},
|
||||
{"flags.monitored", Type::Bool},
|
||||
{"message.content", Type::String},
|
||||
{"message.length", Type::Int},
|
||||
{"reward.title", Type::String},
|
||||
{"reward.cost", Type::Int},
|
||||
{"reward.id", Type::String},
|
||||
};
|
||||
extern const QMap<QString, Type> MESSAGE_TYPING_CONTEXT;
|
||||
|
||||
ContextMap buildContextMap(const MessagePtr &m, chatterino::Channel *channel);
|
||||
|
||||
|
||||
@@ -2,8 +2,54 @@
|
||||
|
||||
#include "common/QLogging.hpp"
|
||||
|
||||
namespace {
|
||||
|
||||
const QRegularExpression TOKEN_REGEX(
|
||||
"((r|ri)?\\\")((\\\\\")|[^\\\"])*\\\"|" // String/Regex literal
|
||||
"[\\w\\.]+|" // Identifier or reserved keyword
|
||||
"(<=?|>=?|!=?|==|\\|\\||&&|\\+|-|\\*|\\/|%)+|" // Operator
|
||||
"[\\(\\)]|" // Parentheses
|
||||
"[{},]" // List
|
||||
);
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace chatterino::filters {
|
||||
|
||||
const QMap<QString, QString> VALID_IDENTIFIERS_MAP{
|
||||
{"author.badges", "author badges"},
|
||||
{"author.color", "author color"},
|
||||
{"author.name", "author name"},
|
||||
{"author.no_color", "author has no color?"},
|
||||
{"author.subbed", "author subscribed?"},
|
||||
{"author.sub_length", "author sub length"},
|
||||
{"channel.name", "channel name"},
|
||||
{"channel.watching", "/watching channel?"},
|
||||
{"channel.live", "channel live?"},
|
||||
{"flags.action", "action/me message?"},
|
||||
{"flags.highlighted", "highlighted?"},
|
||||
{"flags.points_redeemed", "redeemed points?"},
|
||||
{"flags.sub_message", "sub/resub message?"},
|
||||
{"flags.system_message", "system message?"},
|
||||
{"flags.reward_message", "channel point reward message?"},
|
||||
{"flags.first_message", "first message?"},
|
||||
{"flags.elevated_message", "hype chat message?"},
|
||||
// Ideally these values are unique, because ChannelFilterEditorDialog::ValueSpecifier::expressionText depends on
|
||||
// std::map layout in Qt 6 and internal implementation in Qt 5.
|
||||
{"flags.hype_chat", "hype chat message?"},
|
||||
{"flags.cheer_message", "cheer message?"},
|
||||
{"flags.whisper", "whisper message?"},
|
||||
{"flags.reply", "reply message?"},
|
||||
{"flags.automod", "automod message?"},
|
||||
{"flags.restricted", "restricted message?"},
|
||||
{"flags.monitored", "monitored message?"},
|
||||
{"message.content", "message text"},
|
||||
{"message.length", "message length"},
|
||||
{"reward.title", "point reward title"},
|
||||
{"reward.cost", "point reward cost"},
|
||||
{"reward.id", "point reward id"},
|
||||
};
|
||||
|
||||
QString tokenTypeToInfoString(TokenType type)
|
||||
{
|
||||
switch (type)
|
||||
@@ -77,7 +123,7 @@ QString tokenTypeToInfoString(TokenType type)
|
||||
|
||||
Tokenizer::Tokenizer(const QString &text)
|
||||
{
|
||||
QRegularExpressionMatchIterator i = tokenRegex.globalMatch(text);
|
||||
QRegularExpressionMatchIterator i = TOKEN_REGEX.globalMatch(text);
|
||||
while (i.hasNext())
|
||||
{
|
||||
auto capturedText = i.next().captured();
|
||||
@@ -278,7 +324,7 @@ TokenType Tokenizer::tokenize(const QString &text)
|
||||
return TokenType::STRING;
|
||||
}
|
||||
|
||||
if (validIdentifiersMap.keys().contains(text))
|
||||
if (VALID_IDENTIFIERS_MAP.keys().contains(text))
|
||||
{
|
||||
return TokenType::IDENTIFIER;
|
||||
}
|
||||
|
||||
@@ -8,49 +8,7 @@
|
||||
|
||||
namespace chatterino::filters {
|
||||
|
||||
static const QMap<QString, QString> validIdentifiersMap = {
|
||||
{"author.badges", "author badges"},
|
||||
{"author.color", "author color"},
|
||||
{"author.name", "author name"},
|
||||
{"author.no_color", "author has no color?"},
|
||||
{"author.subbed", "author subscribed?"},
|
||||
{"author.sub_length", "author sub length"},
|
||||
{"channel.name", "channel name"},
|
||||
{"channel.watching", "/watching channel?"},
|
||||
{"channel.live", "channel live?"},
|
||||
{"flags.action", "action/me message?"},
|
||||
{"flags.highlighted", "highlighted?"},
|
||||
{"flags.points_redeemed", "redeemed points?"},
|
||||
{"flags.sub_message", "sub/resub message?"},
|
||||
{"flags.system_message", "system message?"},
|
||||
{"flags.reward_message", "channel point reward message?"},
|
||||
{"flags.first_message", "first message?"},
|
||||
{"flags.elevated_message", "hype chat message?"},
|
||||
// Ideally these values are unique, because ChannelFilterEditorDialog::ValueSpecifier::expressionText depends on
|
||||
// std::map layout in Qt 6 and internal implementation in Qt 5.
|
||||
{"flags.hype_chat", "hype chat message?"},
|
||||
{"flags.cheer_message", "cheer message?"},
|
||||
{"flags.whisper", "whisper message?"},
|
||||
{"flags.reply", "reply message?"},
|
||||
{"flags.automod", "automod message?"},
|
||||
{"flags.restricted", "restricted message?"},
|
||||
{"flags.monitored", "monitored message?"},
|
||||
{"message.content", "message text"},
|
||||
{"message.length", "message length"},
|
||||
{"reward.title", "point reward title"},
|
||||
{"reward.cost", "point reward cost"},
|
||||
{"reward.id", "point reward id"},
|
||||
};
|
||||
|
||||
// clang-format off
|
||||
static const QRegularExpression tokenRegex(
|
||||
QString("((r|ri)?\\\")((\\\\\")|[^\\\"])*\\\"|") + // String/Regex literal
|
||||
QString("[\\w\\.]+|") + // Identifier or reserved keyword
|
||||
QString("(<=?|>=?|!=?|==|\\|\\||&&|\\+|-|\\*|\\/|%)+|") + // Operator
|
||||
QString("[\\(\\)]|") + // Parentheses
|
||||
QString("[{},]") // List
|
||||
);
|
||||
// clang-format on
|
||||
extern const QMap<QString, QString> VALID_IDENTIFIERS_MAP;
|
||||
|
||||
enum TokenType {
|
||||
// control
|
||||
|
||||
Reference in New Issue
Block a user