[PyQt] Possible small bug in docstring generation

Shaheed Haque srhaque at theiet.org
Sat Jun 17 11:51:02 BST 2017


On 16 June 2017 at 13:06, Phil Thompson <phil at riverbankcomputing.com> wrote:
> On 15 Jun 2017, at 7:58 pm, Shaheed Haque <srhaque at theiet.org> wrote:
>>
>> Attached is a patch that converts this SIP:
>>
>> ===========
>>        virtual void
>> openDialogIncidenceCreated(Akonadi::ITIPHandlerDialogDelegate::Recipient
>> recipient, const QString &question,
>> Akonadi::ITIPHandlerDialogDelegate::Action action =
>> Akonadi::ITIPHandlerDialogDelegate::ActionAsk, const KGuiItem
>> &buttonYes = KGuiItem(i18nc("@action:button dialog positive
>> answer","Send Email")), const KGuiItem &buttonNo =
>> KGuiItem(i18nc("@action:button dialog negative answer","Do Not
>> Send")));
>> ============
>>
>> into this C++ code:
>>
>> ============
>> PyDoc_STRVAR(doc_Akonadi_ITIPHandlerDialogDelegate_openDialogIncidenceCreated,
>> "openDialogIncidenceCreated(self,
>> Akonadi.ITIPHandlerDialogDelegate.Recipient, str,
>> Akonadi.ITIPHandlerDialogDelegate.Action =
>> Akonadi.ITIPHandlerDialogDelegate.ActionAsk, KGuiItem =
>> KGuiItem(i18nc(\"@action:button dialog positive answer\",\"Send
>> Email\")), KGuiItem = KGuiItem(i18nc(\"@action:button dialog negative
>> answer\",\"Do Not Send\")))");
>> .
>> .
>> .
>>    {
>>         ::Akonadi::ITIPHandlerDialogDelegate::Recipient a0;
>>        const  ::QString* a1;
>>        int a1State = 0;
>>         ::Akonadi::ITIPHandlerDialogDelegate::Action a2 =
>> Akonadi::ITIPHandlerDialogDelegate::ActionAsk;
>>        const  ::KGuiItem& a3def = KGuiItem(i18nc("@action:button
>> dialog positive answer","Send Email"));
>>        const  ::KGuiItem* a3 = &a3def;
>>        const  ::KGuiItem& a4def = KGuiItem(i18nc("@action:button
>> dialog negative answer","Do Not Send"));
>> ============
>>
>> As you can see, the PyDoc_STRVAR has the quotes escaped, but a3def and
>> a4def do not. Now, the patch as-is is slightly overkill in the sense
>> that it introduces a %q format code for prcode, which I expected would
>> be needed for cases like:
>>
>>     ..., QString bar = "worst \"stri\\ng ever", ...
>>
>> to generate:
>>
>>     ..., QString bar = \"worst \\\"stri\\\\ng ever\", ...
>>
>> However, it seems that SIP's lexer does not like the escapes. I did
>> not feel comfortable patching that here and now, so as I say, that
>> make the %q arguably overkill.
>>
>> Please consider the patch, which is against sip-4.19.3.dev1706101519,
>> with or without the %q stuff.
>
> Can you try tonight's snapshot? Hopefully the lexer now supports escape characters properly.

I just tried sip-4.19.3.dev1706161918 and that seems to work nicely
for both the simple case of a quoted string, and also the
quoted-string-contains-escapes case.

Thanks! Shaheed


> Phil


More information about the PyQt mailing list