[geany/geany] f61a64: Remove the TagEntrySetArglistFunction hook
Jiří Techet
git-noreply at xxxxx
Fri Jun 10 21:57:18 UTC 2016
Branch: refs/heads/master
Author: Jiří Techet <techet at gmail.com>
Committer: Jiří Techet <techet at gmail.com>
Date: Mon, 21 Mar 2016 17:28:36 UTC
Commit: f61a64be29cbba0162f92eb5c1fe4aa2af33fd33
https://github.com/geany/geany/commit/f61a64be29cbba0162f92eb5c1fe4aa2af33fd33
Log Message:
-----------
Remove the TagEntrySetArglistFunction hook
The direct python parser -> tagmanager callback is rather hacky
and unnecessary as we can do the same in the normal ctags callback
upon receiving a tag.
Modified Paths:
--------------
tagmanager/ctags/entry.c
tagmanager/ctags/entry.h
tagmanager/ctags/parse.c
tagmanager/ctags/parse.h
tagmanager/ctags/python.c
tagmanager/src/tm_source_file.c
Modified: tagmanager/ctags/entry.c
6 lines changed, 0 insertions(+), 6 deletions(-)
===================================================================
@@ -400,12 +400,6 @@ extern void makeTagEntry (const tagEntryInfo *const tag)
}
}
-extern void setTagArglistByName (const char *tag_name, const char *arglist)
-{
- if (NULL != TagEntrySetArglistFunction)
- TagEntrySetArglistFunction(tag_name, arglist);
-}
-
extern void initTagEntry (tagEntryInfo *const e, const char *const name)
{
Assert (File.source.name != NULL);
Modified: tagmanager/ctags/entry.h
1 lines changed, 0 insertions(+), 1 deletions(-)
===================================================================
@@ -95,7 +95,6 @@ extern void closeTagFile (const boolean resize);
extern void beginEtagsFile (void);
extern void endEtagsFile (const char *const name);
extern void makeTagEntry (const tagEntryInfo *const tag);
-extern void setTagArglistByName (const char *tag_name, const char *arglist);
extern void initTagEntry (tagEntryInfo *const e, const char *const name);
#endif /* _ENTRY_H */
Modified: tagmanager/ctags/parse.c
1 lines changed, 0 insertions(+), 1 deletions(-)
===================================================================
@@ -33,7 +33,6 @@ static parserDefinitionFunc* BuiltInParsers[] = { PARSER_LIST };
parserDefinition** LanguageTable = NULL;
static unsigned int LanguageCount = 0;
tagEntryFunction TagEntryFunction = NULL;
-tagEntrySetArglistFunction TagEntrySetArglistFunction = NULL;
/*
* FUNCTION DEFINITIONS
Modified: tagmanager/ctags/parse.h
2 lines changed, 0 insertions(+), 2 deletions(-)
===================================================================
@@ -37,7 +37,6 @@ typedef void (*simpleParser) (void);
typedef boolean (*rescanParser) (const unsigned int passCount);
typedef void (*parserInitialize) (langType language);
typedef int (*tagEntryFunction) (const tagEntryInfo *const tag);
-typedef void (*tagEntrySetArglistFunction) (const char *tag_name, const char *arglist);
typedef struct sKindOption {
boolean enabled; /* are tags for kind enabled? */
@@ -129,7 +128,6 @@ extern void checkRegex (void);
/* Extra stuff for Tag Manager */
extern tagEntryFunction TagEntryFunction;
-extern tagEntrySetArglistFunction TagEntrySetArglistFunction;
extern void setTagEntryFunction(tagEntryFunction entry_function);
#endif /* _PARSE_H */
Modified: tagmanager/ctags/python.c
30 lines changed, 0 insertions(+), 30 deletions(-)
===================================================================
@@ -63,29 +63,6 @@ static boolean isIdentifierCharacter (int c)
return (boolean) (isalnum (c) || c == '_');
}
-static const char *get_class_name_from_parent (const char *parent)
-{
- const char *result;
-
- if (parent == NULL)
- return NULL;
-
- result = strrchr (parent, '.');
- if (result != NULL)
- {
- result++;
- parent = result;
- }
-
- result = strrchr (parent, '/');
- if (result != NULL)
- result++;
- else
- result = parent;
-
- return result;
-}
-
/* follows PEP-8, and always reports single-underscores as protected
* See:
* - http://www.python.org/dev/peps/pep-0008/#method-names-and-instance-variables
@@ -140,13 +117,6 @@ static void makeFunctionTag (vString *const function,
tag.kindName = PythonKinds[K_FUNCTION].name;
tag.kind = PythonKinds[K_FUNCTION].letter;
tag.extensionFields.arglist = arglist;
- /* add argument list of __init__() methods to the class tag */
- if (strcmp (vStringValue (function), "__init__") == 0 && parent != NULL)
- {
- const char *parent_tag_name = get_class_name_from_parent (vStringValue (parent));
- if (parent_tag_name != NULL)
- setTagArglistByName (parent_tag_name, arglist);
- }
if (vStringLength (parent) > 0)
{
Modified: tagmanager/src/tm_source_file.c
68 lines changed, 35 insertions(+), 33 deletions(-)
===================================================================
@@ -109,6 +109,35 @@ gchar *tm_get_real_path(const gchar *file_name)
return NULL;
}
+/* add argument list of __init__() Python methods to the class tag */
+static void update_python_arglist(const TMTag *tag)
+{
+ guint i;
+ const char *parent_tag_name;
+
+ if (tag->type != tm_tag_method_t || tag->scope == NULL ||
+ g_strcmp0(tag->name, "__init__") != 0)
+ return;
+
+ parent_tag_name = strrchr(tag->scope, '.');
+ if (parent_tag_name)
+ parent_tag_name++;
+ else
+ parent_tag_name = tag->scope;
+
+ /* going in reverse order because the tag was added recently */
+ for (i = current_source_file->tags_array->len; i > 0; i--)
+ {
+ TMTag *prev_tag = (TMTag *) current_source_file->tags_array->pdata[i - 1];
+ if (g_strcmp0(prev_tag->name, parent_tag_name) == 0)
+ {
+ g_free(prev_tag->arglist);
+ prev_tag->arglist = g_strdup(tag->arglist);
+ break;
+ }
+ }
+}
+
/*
This function is registered into the ctags parser when a file is parsed for
the first time. The function is then called by the ctags parser each time
@@ -119,34 +148,15 @@ static int tm_source_file_tags(const tagEntryInfo *tag)
{
if (NULL == current_source_file)
return 0;
- g_ptr_array_add(current_source_file->tags_array,
- tm_tag_new(current_source_file, tag));
- return TRUE;
-}
-/* Set the argument list of tag identified by its name */
-static void tm_source_file_set_tag_arglist(const char *tag_name, const char *arglist)
-{
- guint i;
+ TMTag *tm_tag = tm_tag_new(current_source_file, tag);
- if (NULL == arglist ||
- NULL == tag_name ||
- NULL == current_source_file)
- {
- return;
- }
+ if (tm_tag->lang == TM_PARSER_PYTHON)
+ update_python_arglist(tm_tag);
- /* going in reverse order because the tag was added recently */
- for (i = current_source_file->tags_array->len; i > 0; i--)
- {
- TMTag *tag = (TMTag *) current_source_file->tags_array->pdata[i - 1];
- if (g_strcmp0(tag->name, tag_name) == 0)
- {
- g_free(tag->arglist);
- tag->arglist = g_strdup(arglist);
- break;
- }
- }
+ g_ptr_array_add(current_source_file->tags_array, tm_tag);
+
+ return TRUE;
}
/* Initializes a TMSourceFile structure from a file name. */
@@ -189,8 +199,6 @@ static gboolean tm_source_file_init(TMSourceFile *source_file, const char *file_
installLanguageMapDefaults();
if (NULL == TagEntryFunction)
TagEntryFunction = tm_source_file_tags;
- if (NULL == TagEntrySetArglistFunction)
- TagEntrySetArglistFunction = tm_source_file_set_tag_arglist;
}
if (name == NULL)
@@ -339,8 +347,6 @@ gboolean tm_source_file_parse(TMSourceFile *source_file, guchar* text_buf, gsize
installLanguageMapDefaults();
if (NULL == TagEntryFunction)
TagEntryFunction = tm_source_file_tags;
- if (NULL == TagEntrySetArglistFunction)
- TagEntrySetArglistFunction = tm_source_file_set_tag_arglist;
}
current_source_file = source_file;
if (! LanguageTable [source_file->lang]->enabled)
@@ -407,8 +413,6 @@ const gchar *tm_source_file_get_lang_name(TMParserType lang)
installLanguageMapDefaults();
if (NULL == TagEntryFunction)
TagEntryFunction = tm_source_file_tags;
- if (NULL == TagEntrySetArglistFunction)
- TagEntrySetArglistFunction = tm_source_file_set_tag_arglist;
}
return getLanguageName(lang);
}
@@ -425,8 +429,6 @@ TMParserType tm_source_file_get_named_lang(const gchar *name)
installLanguageMapDefaults();
if (NULL == TagEntryFunction)
TagEntryFunction = tm_source_file_tags;
- if (NULL == TagEntrySetArglistFunction)
- TagEntrySetArglistFunction = tm_source_file_set_tag_arglist;
}
return getNamedLanguage(name);
}
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list