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;
101 case TrFunctionAliasManager::Function_qsTr:
102 case TrFunctionAliasManager::Function_QT_TR_NOOP: {
103 int startOffset = node->firstSourceLocation().begin();
104 if (!node->arguments) {
106 << qPrintable(QStringLiteral(
"%1() requires at least one argument.\n")
110 if (
auto expr = AST::cast<AST::TemplateLiteral *>(node->arguments->expression)) {
113 << qPrintable(QStringLiteral(
"%1() template strings with "
114 "arguments are not supported for translation.\n").arg(name));
120 if (!createString(node->arguments->expression, &source))
125 if (AST::ArgumentList *commentNode = node->arguments->next) {
126 if (!createString(commentNode->expression, &comment)) {
129 if (commentNode->next)
133 if (!m_metaStrings.sourcetext().isEmpty())
135 << qPrintable(
"//% cannot be used with %1(). Ignoring\n"_L1.arg(name));
137 if (!m_metaStrings.label().isEmpty())
138 yyMsg(identLineNo) << qPrintable(
139 "labels cannot be used with text-based translation. Ignoring\n"_L1);
141 int endOffset = node->lastSourceLocation().end();
143 m_fileName, node->firstSourceLocation().startLine,
144 QStringList(), TranslatorMessage::Unfinished, plural);
145 msg.setExtraComment(transcode(m_metaStrings.extracomment().simplified()));
146 msg.setId(m_metaStrings.msgid());
153 case TrFunctionAliasManager::Function_qsTranslate:
154 case TrFunctionAliasManager::Function_QT_TRANSLATE_NOOP: {
155 int startOffset = node->firstSourceLocation().begin();
156 if (! (node->arguments && node->arguments->next)) {
157 yyMsg(identLineNo) << qPrintable(QStringLiteral(
"%1() requires at least two arguments.\n").arg(name));
162 if (!createString(node->arguments->expression, &context))
165 AST::ArgumentList *sourceNode = node->arguments->next;
168 if (!createString(sourceNode->expression, &source))
171 if (!m_metaStrings.sourcetext().isEmpty())
172 yyMsg(identLineNo) << qPrintable(QStringLiteral(
"//% cannot be used with %1(). Ignoring\n").arg(name));
174 if (!m_metaStrings.label().isEmpty())
175 yyMsg(identLineNo) << qPrintable(
176 "labels cannot be used with text-based translation. Ignoring\n"_L1);
180 if (AST::ArgumentList *commentNode = sourceNode->next) {
181 if (!createString(commentNode->expression, &comment)) {
185 if (commentNode->next)
188 int endOffset = node->lastSourceLocation().end();
189 TranslatorMessage msg(context, transcode(source), comment, QString(), m_fileName,
190 node->firstSourceLocation().startLine, QStringList(),
191 TranslatorMessage::Unfinished, plural);
192 msg.setExtraComment(transcode(m_metaStrings.extracomment().simplified()));
193 msg.setId(m_metaStrings.msgid());
200 case TrFunctionAliasManager::Function_qsTrId:
201 case TrFunctionAliasManager::Function_QT_TRID_NOOP: {
202 if (!node->arguments) {
203 yyMsg(identLineNo) << qPrintable(QStringLiteral(
"%1() requires at least one argument.\n").arg(name));
206 int startOffset = node->firstSourceLocation().begin();
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;
218 int endOffset = node->lastSourceLocation().end();
219 TranslatorMessage msg(QString(), transcode(m_metaStrings.sourcetext()), QString(),
220 QString(), m_fileName, node->firstSourceLocation().startLine,
221 QStringList(), TranslatorMessage::Unfinished, plural);
222 msg.setExtraComment(transcode(m_metaStrings.extracomment().simplified()));
224 msg.setLabel(m_metaStrings.label());