83 void endVisit(AST::CallExpression *node)
override
86 AST::ExpressionNode *base = node->base;
88 while (base && base->kind == AST::Node::Kind_FieldMemberExpression) {
89 auto memberExpr =
static_cast<AST::FieldMemberExpression *>(base);
90 name.prepend(memberExpr->name);
92 base = memberExpr->base;
95 if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(base)) {
96 processComments(idExpr->identifierToken.begin());
98 name = idExpr->name.toString() + name;
99 const int identLineNo = idExpr->identifierToken.startLine;
100 switch (trFunctionAliasManager.trFunctionByName(name)) {
103 if (!node->arguments) {
105 << qPrintable(QStringLiteral(
"%1() requires at least one argument.\n")
109 if (
auto expr = AST::cast<AST::TemplateLiteral *>(node->arguments->expression)) {
112 << qPrintable(QStringLiteral(
"%1() template strings with "
113 "arguments are not supported for translation.\n").arg(name));
119 if (!createString(node->arguments->expression, &source))
124 if (AST::ArgumentList *commentNode = node->arguments->next) {
125 if (!createString(commentNode->expression, &comment)) {
128 if (commentNode->next)
132 if (!m_metaStrings.sourcetext().isEmpty())
134 << qPrintable(
"//% cannot be used with %1(). Ignoring\n"_L1.arg(name));
136 if (!m_metaStrings.label().isEmpty() && m_metaStrings.msgid().isEmpty())
137 yyMsg(identLineNo) << qPrintable(
138 "labels cannot be used with text-based translation. Ignoring\n"_L1);
141 comment, QString(), m_fileName,
142 node->firstSourceLocation().startLine, QStringList(),
143 TranslatorMessage::Unfinished, plural);
145 ParserTool::transcode(m_metaStrings.extracomment().simplified()));
146 msg.setId(m_metaStrings.msgid());
147 if (!m_metaStrings.msgid().isEmpty())
148 msg.setLabel(m_metaStrings.label());
149 msg.setExtras(m_metaStrings.extra());
155 if (! (node->arguments && node->arguments->next)) {
156 yyMsg(identLineNo) << qPrintable(QStringLiteral(
"%1() requires at least two arguments.\n").arg(name));
161 if (!createString(node->arguments->expression, &context))
164 AST::ArgumentList *sourceNode = node->arguments->next;
167 if (!createString(sourceNode->expression, &source))
170 if (!m_metaStrings.sourcetext().isEmpty())
171 yyMsg(identLineNo) << qPrintable(QStringLiteral(
"//% cannot be used with %1(). Ignoring\n").arg(name));
173 if (!m_metaStrings.label().isEmpty() && m_metaStrings.msgid().isEmpty())
174 yyMsg(identLineNo) << qPrintable(
175 "labels cannot be used with text-based translation. Ignoring\n"_L1);
179 if (AST::ArgumentList *commentNode = sourceNode->next) {
180 if (!createString(commentNode->expression, &comment)) {
184 if (commentNode->next)
189 comment, QString(), m_fileName,
190 node->firstSourceLocation().startLine, QStringList(),
191 TranslatorMessage::Unfinished, plural);
193 ParserTool::transcode(m_metaStrings.extracomment().simplified()));
194 msg.setId(m_metaStrings.msgid());
195 if (!m_metaStrings.msgid().isEmpty())
196 msg.setLabel(m_metaStrings.label());
197 msg.setExtras(m_metaStrings.extra());
203 if (!node->arguments) {
204 yyMsg(identLineNo) << qPrintable(QStringLiteral(
"%1() requires at least one argument.\n").arg(name));
209 if (!createString(node->arguments->expression, &id))
212 if (!m_metaStrings.msgid().isEmpty()) {
213 yyMsg(identLineNo) << qPrintable(QStringLiteral(
"//= cannot be used with %1(). Ignoring\n").arg(name));
217 bool plural = node->arguments->next;
219 TranslatorMessage msg(QString(), ParserTool::transcode(m_metaStrings.sourcetext()),
220 QString(), QString(), m_fileName,
221 node->firstSourceLocation().startLine, QStringList(),
222 TranslatorMessage::Unfinished, plural);
224 ParserTool::transcode(m_metaStrings.extracomment().simplified()));
226 msg.setLabel(m_metaStrings.label());
227 msg.setExtras(m_metaStrings.extra());