The changes below replace the __init__
method name on the calltip with its class and so make the calltip look more consistent with the others, as shown in #3334 (comment).
diff --git a/src/editor.c b/src/editor.c
index 20b9c56cb..a21aa8667 100644
--- a/src/editor.c
+++ b/src/editor.c
@@ -1878,6 +1878,17 @@ static gchar *find_calltip(const gchar *word, GeanyFiletype *ft)
g_free(scope);
if (constructor_tags->len != 0)
{ /* found constructor tag, so use it instead of the class tag */
+ TMTag *constructor_tag;
+ foreach_ptr_array(constructor_tag, i, constructor_tags)
+ {
+ if (constructor_tag->type == tm_tag_method_t && constructor_tag->scope != NULL)
+ {
+ g_free(constructor_tag->name);
+ constructor_tag->name = g_strdup(constructor_tag->scope);
+ g_free(constructor_tag->scope);
+ constructor_tag->scope = NULL;
+ }
+ }
g_ptr_array_free(tags, TRUE);
tags = constructor_tags;
}
To reproduce use the following simple test file and trigger the calltip on __init__
, then on LocalClass
and then on EncodedWord
.
class LocalClass(object):
def __init__(self, arg1, arg2=None):
super().__init__()
# custom class from above
LocalClass()
# class imported via global tags file
EncodedWord()
# imported via global tags file in ctags format
# EncodedWord /unknown 1;" kind:class signature:(*args, **kw)
However, this crashes Geany upon the last triggered calltip on EncodedWord
.
It seems in tm_tags_find
on calculating the tagCount
there is no last
tag found and it is NULL, so the calculation is "0 - first +1" which results in wrong numbers obviously.
I changed the calculation to *tagCount = (last) ? last - first + 1 : 1;
to return 1 as tagCount
when we did not find a last
tag but only the first one.
This made it much more stable but I still got a few random crashes which I cannot reliably reproduce and also sometimes after all three calltips have been shown, the calltip on LocalClass
is missing :(.
Sorry for the vague description.
I'm not sure whether it is worth to proceed with this, it already required quite some efforts for a rather small and specific feature.
If anyone has a quick clue what I'm doing wrong, I could give it another try. Otherwise I think I'll leave it as is.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.