Bug 391824 - False positive check "qstring-allocations" for function translate
Summary: False positive check "qstring-allocations" for function translate
Status: RESOLVED NOT A BUG
Alias: None
Product: clazy
Classification: Developer tools
Component: general (show other bugs)
Version: unspecified
Platform: Other Linux
: NOR normal
Target Milestone: ---
Assignee: Unassigned bugs mailing-list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-03-13 15:27 UTC by Roman
Modified: 2018-03-15 06:37 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
compilable-testcase (1.40 KB, application/zip)
2018-03-13 17:16 UTC, Roman
Details

Note You need to log in before you can comment on or make changes to this bug.
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.