[geany/geany] b814cf: Move language-specific part of constructor calltip lookup to tm_parser

Jiří Techet git-noreply at xxxxx
Sun Jan 9 22:32:40 UTC 2022


Branch:      refs/heads/master
Author:      Jiří Techet <techet at gmail.com>
Committer:   Enrico Tröger <enrico.troeger at uvena.de>
Date:        Sun, 09 Jan 2022 22:32:40 UTC
Commit:      b814cf666bc9f7c769839417eed267aa56bf6518
             https://github.com/geany/geany/commit/b814cf666bc9f7c769839417eed267aa56bf6518

Log Message:
-----------
Move language-specific part of constructor calltip lookup to tm_parser


Modified Paths:
--------------
    src/editor.c
    src/tagmanager/tm_parser.c
    src/tagmanager/tm_parser.h

Modified: src/editor.c
11 lines changed, 5 insertions(+), 6 deletions(-)
===================================================================
@@ -1849,6 +1849,7 @@ static gint find_start_bracket(ScintillaObject *sci, gint pos)
 
 static gchar *find_calltip(const gchar *word, GeanyFiletype *ft)
 {
+	const gchar *constructor_method;
 	GPtrArray *tags;
 	TMTag *tag;
 	GString *str = NULL;
@@ -1866,8 +1867,9 @@ static gchar *find_calltip(const gchar *word, GeanyFiletype *ft)
 
 	tag = TM_TAG(tags->pdata[0]);
 
-	if ((ft->id == GEANY_FILETYPES_D || ft->id == GEANY_FILETYPES_PYTHON) &&
-		(tag->type == tm_tag_class_t || tag->type == tm_tag_struct_t))
+	/* user typed e.g. 'a = Classname(' in Python so lookup __init__() arguments */
+	constructor_method = tm_parser_get_constructor_method(tag->lang);
+	if (constructor_method && (tag->type == tm_tag_class_t || tag->type == tm_tag_struct_t))
 	{
 		const TMTagType arg_types = tm_tag_function_t | tm_tag_prototype_t |
 			tm_tag_method_t | tm_tag_macro_with_arg_t;
@@ -1876,10 +1878,7 @@ static gchar *find_calltip(const gchar *word, GeanyFiletype *ft)
 			g_strjoin(scope_sep, tag->scope, tag->name, NULL);
 
 		g_ptr_array_free(tags, TRUE);
-		/* user typed e.g. 'new Classname(' so lookup D constructor Classname::this() 
-		 * same for Python __init__() */
-		tags = tm_workspace_find(ft->id == GEANY_FILETYPES_D ? "this" : "__init__",
-			scope, arg_types, NULL, ft->lang);
+		tags = tm_workspace_find(constructor_method, scope, arg_types, NULL, ft->lang);
 		g_free(scope);
 		if (tags->len == 0)
 		{


Modified: src/tagmanager/tm_parser.c
17 lines changed, 17 insertions(+), 0 deletions(-)
===================================================================
@@ -818,6 +818,23 @@ void tm_parser_verify_type_mappings(void)
 }
 
 
+/* Get the name of constructor method. Arguments of this method will be used
+ * for calltips when creating an object using the class name
+ * (e.g. after the opening brace in 'c = MyClass()' in Python) */
+const gchar *tm_parser_get_constructor_method(TMParserType lang)
+{
+	switch (lang)
+	{
+		case TM_PARSER_D:
+			return "this";
+		case TM_PARSER_PYTHON:
+			return "__init__";
+		default:
+			return NULL;
+	}
+}
+
+
 static gchar *replace_string_if_present(gchar *haystack, gchar *needle, gchar *subst)
 {
 	if (strstr(haystack, needle))


Modified: src/tagmanager/tm_parser.h
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -124,6 +124,8 @@ gchar tm_parser_get_tag_kind(TMTagType type, TMParserType lang);
 
 TMTagType tm_parser_get_subparser_type(TMParserType lang, TMParserType sublang, TMTagType type);
 
+const gchar *tm_parser_get_constructor_method(TMParserType lang);
+
 gchar *tm_parser_update_scope(TMParserType lang, gchar *scope);
 
 gboolean tm_parser_enable_role(TMParserType lang, gchar kind);



--------------
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