Bug 391824

Summary: False positive check "qstring-allocations" for function translate
Product: [Developer tools] clazy Reporter: Roman <dismine>
Component: generalAssignee: Unassigned bugs mailing-list <unassigned-bugs>
Status: RESOLVED NOT A BUG    
Severity: normal CC: smartins
Priority: NOR    
Version: unspecified   
Target Milestone: ---   
Platform: Other   
OS: Linux   
Latest Commit: Version Fixed In:
Attachments: compilable-testcase

Description Roman 2018-03-13 15:27:19 UTC
In my code i use little hack. If wrap string to a function translate, it will be marked for translation. No matter what namespace contains this function. So, i have

#define translate(context, source, disambiguation) QmuTranslation::translate((context), (source), (disambiguation))

And use it like this:

translate("QmuParserErrorMsg", "Unexpected token \"$TOK$\" found at position $POS$.", "Math parser error messages. Left untouched \"$TOK$\" and $POS$") 

When lupdate will parse a source code it will mark a string for translation. But clazy doesn't recognize this case and warn about "qstring-allocations". Where for canonical translate functions it doesn't.
Comment 1 Sergio Martins 2018-03-13 15:32:51 UTC
Can you show a compilable-testcase.
Must be minimal, as I'll shove the code directly into clazy's unit-tests

thanks
Comment 2 Roman 2018-03-13 17:16:47 UTC
Created attachment 111374 [details]
compilable-testcase

Minimal project that shows false positive warning. Uncomment strings to test canonical way.
Comment 3 Sergio Martins 2018-03-14 19:58:26 UTC
tr() doesn't take QString as argument, so there's no allocation

You can either use const char* in your translate function, or:
 translate(QStringLiteral("context"), QStringLiteral("string"), QStringLiteral("disambiguation"));

I don't see a way clazy could distinguish this case
Comment 4 Roman 2018-03-15 06:37:51 UTC
Yes, you are right. This ticket should be closed.