I've been running this (well, almost… see below
My "small" patch on top just because:
diff --git a/src/tagmanager/tm_ctags.c b/src/tagmanager/tm_ctags.c
index a5cb9531e..16e2ebf04 100644
--- a/src/tagmanager/tm_ctags.c
+++ b/src/tagmanager/tm_ctags.c
@@ -119,12 +119,7 @@ static gboolean init_tag(TMTag *tag, TMSourceFile *file, const tagEntryInfo *tag
tag->name = g_strdup(tag_entry->name);
tag->type = type;
- /* ctags sets "isFileScope" also for files with an unknown extension -
- * make sure we set "local" only for files with a known C/C++ extension */
- if (file->lang == TM_PARSER_C || file->lang == TM_PARSER_CPP)
- tag->local = tag_entry->isFileScope && file->is_c_source;
- else
- tag->local = tag_entry->isFileScope;
+ tag->local = tag_entry->isFileScope && file->trust_file_scope;
tag->flags = tm_tag_flag_none_t;
if (isTagExtraBitMarked(tag_entry, XTAG_ANONYMOUS))
tag->flags |= tm_tag_flag_anon_t;
diff --git a/src/tagmanager/tm_source_file.c b/src/tagmanager/tm_source_file.c
index 599ae4fa7..e5a27419b 100644
--- a/src/tagmanager/tm_source_file.c
+++ b/src/tagmanager/tm_source_file.c
@@ -609,20 +609,28 @@ static gboolean tm_source_file_init(TMSourceFile *source_file, const char *file_
else
source_file->lang = tm_ctags_get_named_lang(name);
- source_file->is_c_source = FALSE;
+ source_file->trust_file_scope = TRUE;
+ /* ctags sets "isFileScope" for all C/C++ files without a known header
+ * extension, but we don't want to use it for files with a less conventional
+ * extension, not to exclude symbols we shouldn't */
if (source_file->lang == TM_PARSER_C || source_file->lang == TM_PARSER_CPP)
{
- const gchar **ext;
- const gchar *common_src_exts[] =
- {".c", ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++", ".CPP", ".CXX", NULL};
+ const gchar *ext = strrchr(source_file->short_name, '.');
- for (ext = common_src_exts; *ext; ext++)
+ source_file->trust_file_scope = FALSE;
+ if (ext)
{
- if (g_str_has_suffix(source_file->short_name, *ext))
+ const gchar *common_src_exts[] =
+ {"c", "C", "cc", "cp", "cpp", "cxx", "c++", "CPP", "CXX"};
+
+ for (guint i = 0; i < G_N_ELEMENTS(common_src_exts); i++)
{
- source_file->is_c_source = TRUE;
- break;
+ if (strcmp(ext + 1, common_src_exts[i]) == 0)
+ {
+ source_file->trust_file_scope = TRUE;
+ break;
+ }
}
}
}
diff --git a/src/tagmanager/tm_source_file.h b/src/tagmanager/tm_source_file.h
index f3ca0cbc8..342d1259c 100644
--- a/src/tagmanager/tm_source_file.h
+++ b/src/tagmanager/tm_source_file.h
@@ -36,7 +36,7 @@ typedef struct TMSourceFile
char *short_name; /**< Just the name of the file (without the path) */
GPtrArray *tags_array; /**< Sorted tag array obtained by parsing the object. @elementtype{TMTag} */
/* Flag indicating whether the file is a C/C++ source (i.e. not a header) based on its extension */
- gboolean is_c_source;
+ gboolean trust_file_scope;
} TMSourceFile;
GType tm_source_file_get_type(void);
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.