<blockquote>
<p>Now thinking about it again we can just strip away the scope part and search for the type only - in find_scope_members() we don't look for the type's scope anyway. So it will be simple on the TM side when the parser gets fixed (can post the patch separately from this pull request to avoid adding more and more stuff).</p>
</blockquote>

<p>OK.  To try my parser fix I did the following, and it seemed to work.  Maybe it's stupid, maybe it's naive, or maybe not.  If it's that simple, I'd love to see it added here (doesn't add any kind of burden on the review IMO).</p>

<div class="highlight highlight-source-diff"><pre><span class="pl-c1">diff --git a/tagmanager/src/tm_workspace.c b/tagmanager/src/tm_workspace.c</span>
index 898b6ab..6bd2e4e 100644
<span class="pl-md">--- a/tagmanager/src/tm_workspace.c</span>
<span class="pl-mi1">+++ b/tagmanager/src/tm_workspace.c</span>
<span class="pl-mdr">@@ -846,6 +846,15 @@</span> find_scope_members_tags (const GPtrArray *all, TMTag *type_tag, gboolean namespa
 }


<span class="pl-mi1">+static const gchar *strip_scope(const gchar *scoped_name, langType lang)</span>
<span class="pl-mi1">+{</span>
<span class="pl-mi1">+    const gchar *sep = tm_tag_context_separator(lang);</span>
<span class="pl-mi1">+    const gchar *base = g_strrstr(scoped_name, sep);</span>
<span class="pl-mi1">+</span>
<span class="pl-mi1">+    return base ? &base[strlen(sep)] : scoped_name;</span>
<span class="pl-mi1">+}</span>
<span class="pl-mi1">+</span>
<span class="pl-mi1">+</span>
 /* Gets all members of the type with the given name; search them inside tags_array */
 static GPtrArray *
 find_scope_members (const GPtrArray *tags_array, const gchar *type_name, TMSourceFile *file,
<span class="pl-mdr">@@ -897,9 +906,11 @@</span> find_scope_members (const GPtrArray *tags_array, const gchar *type_name, TMSourc
         /* intermediate typedef - resolve to the real type */
         if (tag->type == tm_tag_typedef_t)
         {
<span class="pl-md">-            if (tag->var_type && tag->var_type[0] != '\0')</span>
<span class="pl-mi1">+            const gchar *var_type = tag->var_type ? strip_scope(tag->var_type, tag->lang) : NULL;</span>
<span class="pl-mi1">+</span>
<span class="pl-mi1">+            if (var_type && var_type[0] != '\0')</span>
             {
<span class="pl-md">-                type_name = tag->var_type;</span>
<span class="pl-mi1">+                type_name = var_type;</span>
                 file = tag->file;
                 continue;
             }
<span class="pl-mdr">@@ -998,7 +1009,7 @@</span> find_scope_members_all(const GPtrArray *tags, const GPtrArray *searched_array, l
             if (!(tag->type & member_types) || member ||
                 member_at_method_scope(tags, current_scope, tag, lang))
             {
<span class="pl-md">-                gchar *tag_type = g_strdup(tag->var_type);</span>
<span class="pl-mi1">+                gchar *tag_type = g_strdup(strip_scope(tag->var_type, tag->lang));</span>

                 /* remove pointers in case the type contains them */
                 g_strdelimit(tag_type, "*^", ' ');</pre></div>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br>Reply to this email directly or <a href="https://github.com/geany/geany/pull/862#issuecomment-175066866">view it on GitHub</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/ABDrJx7BWLfSDsab8YcKnALA7xcjNxZIks5pd4PTgaJpZM4HB6zU.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/geany/geany/pull/862#issuecomment-175066866"></link>
  <meta itemprop="name" content="View Pull Request"></meta>
</div>
<meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>