[geany/geany] f147f3: Reduce some repetitions in tag type mapping code

Colomban Wendling git-noreply at xxxxx
Fri Jun 10 21:57:32 UTC 2016


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Jiří Techet <techet at gmail.com>
Date:        Fri, 06 May 2016 15:02:32 UTC
Commit:      f147f36dafd3c3241c159faf9ac533b7b7d9c7ed
             https://github.com/geany/geany/commit/f147f36dafd3c3241c159faf9ac533b7b7d9c7ed

Log Message:
-----------
Reduce some repetitions in tag type mapping code

* Use a streamlined name for each map, `map_LANGUAGE`, where `LANGUAGE`
  is the CTags parser name from tm_parser.h.  This allows some further
  automation.
* Make sure the maps are referenced at the correct index in
  `parser_map`, even if they were not in the same order as in the
  `TMParserType` enumeration by using explicit sub-object initializers.
* As explicit sub-object initialization might lead to a missing
  initializer for a non-last index going unnoticed, add a check for
  uninitialized entries to properly reject them even for regex parsers.


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

Modified: tagmanager/src/tm_parser.c
215 lines changed, 117 insertions(+), 98 deletions(-)
===================================================================
@@ -31,7 +31,7 @@ typedef struct
 } TMParserMapEntry;
 
 
-static TMParserMapEntry c_map[] = {
+static TMParserMapEntry map_C[] = {
 	{'c', tm_tag_class_t},
 	{'d', tm_tag_macro_t},
 	{'e', tm_tag_enumerator_t},
@@ -47,7 +47,10 @@ static TMParserMapEntry c_map[] = {
 	{'x', tm_tag_externvar_t},
 };
 
-static TMParserMapEntry java_map[] = {
+/* C++, same as C */
+#define map_CPP map_C
+
+static TMParserMapEntry map_JAVA[] = {
 	{'c', tm_tag_class_t},
 	{'f', tm_tag_field_t},
 	{'i', tm_tag_interface_t},
@@ -57,17 +60,17 @@ static TMParserMapEntry java_map[] = {
 	{'g', tm_tag_enum_t},
 };
 
-static TMParserMapEntry makefile_map[] = {
+static TMParserMapEntry map_MAKEFILE[] = {
 	{'m', tm_tag_macro_t},
 	{'t', tm_tag_function_t},
 };
 
-static TMParserMapEntry pascal_map[] = {
+static TMParserMapEntry map_PASCAL[] = {
 	{'f', tm_tag_function_t},
 	{'p', tm_tag_function_t},
 };
 
-static TMParserMapEntry perl_map[] = {
+static TMParserMapEntry map_PERL[] = {
 	{'c', tm_tag_enum_t},
 	{'f', tm_tag_other_t},
 	{'l', tm_tag_macro_t},
@@ -76,7 +79,7 @@ static TMParserMapEntry perl_map[] = {
 	{'d', tm_tag_prototype_t},
 };
 
-static TMParserMapEntry php_map[] = {
+static TMParserMapEntry map_PHP[] = {
 	{'c', tm_tag_class_t},
 	{'d', tm_tag_macro_t},
 	{'f', tm_tag_function_t},
@@ -87,7 +90,7 @@ static TMParserMapEntry php_map[] = {
 	{'v', tm_tag_variable_t},
 };
 
-static TMParserMapEntry python_map[] = {
+static TMParserMapEntry map_PYTHON[] = {
 	{'c', tm_tag_class_t},
 	{'f', tm_tag_function_t},
 	{'m', tm_tag_method_t},
@@ -98,7 +101,7 @@ static TMParserMapEntry python_map[] = {
 };
 
 /* different parser than tex.c from universal-ctags */
-static TMParserMapEntry latex_map[] = {
+static TMParserMapEntry map_LATEX[] = {
 	{'f', tm_tag_function_t},
 	{'c', tm_tag_class_t},
 	{'m', tm_tag_member_t},
@@ -108,20 +111,20 @@ static TMParserMapEntry latex_map[] = {
 	{'s', tm_tag_struct_t},
 };
 
-static TMParserMapEntry asm_map[] = {
+static TMParserMapEntry map_ASM[] = {
 	{'d', tm_tag_macro_t},
 	{'l', tm_tag_namespace_t},
 	{'m', tm_tag_function_t},
 	{'t', tm_tag_struct_t},
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry conf_map[] = {
+static TMParserMapEntry map_CONF[] = {
 	{'n', tm_tag_namespace_t},
 	{'m', tm_tag_macro_t},
 };
 
-static TMParserMapEntry sql_map[] = {
+static TMParserMapEntry map_SQL[] = {
 	{'c', tm_tag_undef_t},
 	{'d', tm_tag_prototype_t},
 	{'f', tm_tag_function_t},
@@ -148,7 +151,7 @@ static TMParserMapEntry sql_map[] = {
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry docbook_map[] = {
+static TMParserMapEntry map_DOCBOOK[] = {
 	{'f', tm_tag_function_t},
 	{'c', tm_tag_class_t},
 	{'m', tm_tag_member_t},
@@ -157,39 +160,39 @@ static TMParserMapEntry docbook_map[] = {
 	{'s', tm_tag_struct_t},
 };
 
-static TMParserMapEntry erlang_map[] = {
+static TMParserMapEntry map_ERLANG[] = {
 	{'d', tm_tag_macro_t},
 	{'f', tm_tag_function_t},
 	{'m', tm_tag_undef_t},
 	{'r', tm_tag_struct_t},
 	{'t', tm_tag_typedef_t},
 };
 
-static TMParserMapEntry css_map[] = {
+static TMParserMapEntry map_CSS[] = {
 	{'c', tm_tag_class_t},
 	{'s', tm_tag_struct_t},
 	{'i', tm_tag_variable_t},
 };
 
-static TMParserMapEntry ruby_map[] = {
+static TMParserMapEntry map_RUBY[] = {
 	{'c', tm_tag_class_t},
 	{'f', tm_tag_method_t},
 	{'m', tm_tag_namespace_t},
 	{'F', tm_tag_member_t},
 };
 
-static TMParserMapEntry tcl_map[] = {
+static TMParserMapEntry map_TCL[] = {
 	{'c', tm_tag_class_t},
 	{'m', tm_tag_member_t},
 	{'p', tm_tag_function_t},
 	{'n', tm_tag_namespace_t},
 };
 
-static TMParserMapEntry sh_map[] = {
+static TMParserMapEntry map_SH[] = {
 	{'f', tm_tag_function_t},
 };
 
-static TMParserMapEntry d_map[] = {
+static TMParserMapEntry map_D[] = {
 	{'c', tm_tag_class_t},
 	{'e', tm_tag_enumerator_t},
 	{'f', tm_tag_function_t},
@@ -205,12 +208,12 @@ static TMParserMapEntry d_map[] = {
 	{'x', tm_tag_externvar_t},
 };
 
-static TMParserMapEntry diff_map[] = {
+static TMParserMapEntry map_DIFF[] = {
 	{'f', tm_tag_function_t},
 };
 
 /* different parser than in universal-ctags */
-static TMParserMapEntry vhdl_map[] = {
+static TMParserMapEntry map_VHDL[] = {
 	{'c', tm_tag_variable_t},
 	{'t', tm_tag_typedef_t},
 	{'v', tm_tag_variable_t},
@@ -228,11 +231,11 @@ static TMParserMapEntry vhdl_map[] = {
 	{'A', tm_tag_typedef_t},
 };
 
-static TMParserMapEntry lua_map[] = {
+static TMParserMapEntry map_LUA[] = {
 	{'f', tm_tag_function_t},
 };
 
-static TMParserMapEntry javascript_map[] = {
+static TMParserMapEntry map_JAVASCRIPT[] = {
 	{'f', tm_tag_function_t},
 	{'c', tm_tag_class_t},
 	{'m', tm_tag_method_t},
@@ -242,14 +245,14 @@ static TMParserMapEntry javascript_map[] = {
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry haskell_map[] = {
+static TMParserMapEntry map_HASKELL[] = {
 	{'t', tm_tag_typedef_t},
 	{'c', tm_tag_macro_t},
 	{'f', tm_tag_function_t},
 	{'m', tm_tag_namespace_t},
 };
 
-static TMParserMapEntry csharp_map[] = {
+static TMParserMapEntry map_CSHARP[] = {
 	{'c', tm_tag_class_t},
 	{'d', tm_tag_macro_t},
 	{'e', tm_tag_enumerator_t},
@@ -265,7 +268,7 @@ static TMParserMapEntry csharp_map[] = {
 	{'t', tm_tag_typedef_t},
 };
 
-static TMParserMapEntry freebasic_map[] = {
+static TMParserMapEntry map_FREEBASIC[] = {
 	{'c', tm_tag_macro_t},
 	{'f', tm_tag_function_t},
 	{'l', tm_tag_namespace_t},
@@ -275,7 +278,7 @@ static TMParserMapEntry freebasic_map[] = {
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry haxe_map[] = {
+static TMParserMapEntry map_HAXE[] = {
 	{'m', tm_tag_method_t},
 	{'c', tm_tag_class_t},
 	{'e', tm_tag_enum_t},
@@ -285,22 +288,22 @@ static TMParserMapEntry haxe_map[] = {
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry rest_map[] = {
+static TMParserMapEntry map_REST[] = {
 	{'n', tm_tag_namespace_t},
 	{'m', tm_tag_member_t},
 	{'d', tm_tag_macro_t},
 	{'v', tm_tag_variable_t},
 };
 
-static TMParserMapEntry html_map[] = {
+static TMParserMapEntry map_HTML[] = {
 	{'a', tm_tag_member_t},
 	{'f', tm_tag_function_t},
 	{'n', tm_tag_namespace_t},
 	{'c', tm_tag_class_t},
 	{'v', tm_tag_variable_t},
 };
 
-static TMParserMapEntry f77_map[] = {
+static TMParserMapEntry map_F77[] = {
 	{'b', tm_tag_undef_t},
 	{'c', tm_tag_macro_t},
 	{'e', tm_tag_undef_t},
@@ -319,14 +322,20 @@ static TMParserMapEntry f77_map[] = {
 	{'N', tm_tag_enumerator_t},
 };
 
+#define map_FORTRAN map_F77
+
+#define map_FERITE map_C
+
 /* different parser than in universal-ctags */
-static TMParserMapEntry matlab_map[] = {
+static TMParserMapEntry map_MATLAB[] = {
 	{'f', tm_tag_function_t},
 	{'s', tm_tag_struct_t},
 };
 
+#define map_GLSL map_C
+
 /* not in universal-ctags */
-static TMParserMapEntry vala_map[] = {
+static TMParserMapEntry map_VALA[] = {
 	{'c', tm_tag_class_t},
 	{'d', tm_tag_macro_t},
 	{'e', tm_tag_enumerator_t},
@@ -342,7 +351,7 @@ static TMParserMapEntry vala_map[] = {
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry actionscript_map[] = {
+static TMParserMapEntry map_ACTIONSCRIPT[] = {
 	{'f', tm_tag_function_t},
 	{'l', tm_tag_field_t},
 	{'v', tm_tag_variable_t},
@@ -355,29 +364,29 @@ static TMParserMapEntry actionscript_map[] = {
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry nsis_map[] = {
+static TMParserMapEntry map_NSIS[] = {
 	{'n', tm_tag_namespace_t},
 	{'f', tm_tag_function_t},
 	{'v', tm_tag_variable_t},
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry markdown_map[] = {
+static TMParserMapEntry map_MARKDOWN[] = {
 	{'v', tm_tag_variable_t},
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry txt2tags_map[] = {
+static TMParserMapEntry map_TXT2TAGS[] = {
 	{'m', tm_tag_member_t},
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry abc_map[] = {
+static TMParserMapEntry map_ABC[] = {
 	{'m', tm_tag_member_t},
 	{'s', tm_tag_struct_t},
 };
 
-static TMParserMapEntry verilog_map[] = {
+static TMParserMapEntry map_VERILOG[] = {
 	{'c', tm_tag_variable_t},
 	{'e', tm_tag_typedef_t},
 	{'f', tm_tag_function_t},
@@ -388,13 +397,13 @@ static TMParserMapEntry verilog_map[] = {
 	{'t', tm_tag_function_t},
 };
 
-static TMParserMapEntry r_map[] = {
+static TMParserMapEntry map_R[] = {
 	{'f', tm_tag_function_t},
 	{'l', tm_tag_other_t},
 	{'s', tm_tag_other_t},
 };
 
-static TMParserMapEntry cobol_map[] = {
+static TMParserMapEntry map_COBOL[] = {
 	{'d', tm_tag_variable_t},
 	{'f', tm_tag_function_t},
 	{'g', tm_tag_struct_t},
@@ -403,7 +412,7 @@ static TMParserMapEntry cobol_map[] = {
 	{'s', tm_tag_namespace_t},
 };
 
-static TMParserMapEntry objc_map[] = {
+static TMParserMapEntry map_OBJC[] = {
 	{'i', tm_tag_interface_t},
 	{'I', tm_tag_undef_t},
 	{'P', tm_tag_undef_t},
@@ -420,7 +429,7 @@ static TMParserMapEntry objc_map[] = {
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry asciidoc_map[] = {
+static TMParserMapEntry map_ASCIIDOC[] = {
 	{'n', tm_tag_namespace_t},
 	{'m', tm_tag_member_t},
 	{'d', tm_tag_macro_t},
@@ -429,13 +438,13 @@ static TMParserMapEntry asciidoc_map[] = {
 };
 
 /* not in universal-ctags */
-static TMParserMapEntry abaqus_map[] = {
+static TMParserMapEntry map_ABAQUS[] = {
 	{'c', tm_tag_class_t},
 	{'m', tm_tag_member_t},
 	{'n', tm_tag_interface_t},
 };
 
-static TMParserMapEntry rust_map[] = {
+static TMParserMapEntry map_RUST[] = {
 	{'n', tm_tag_namespace_t},
 	{'s', tm_tag_struct_t},
 	{'i', tm_tag_interface_t},
@@ -450,7 +459,7 @@ static TMParserMapEntry rust_map[] = {
 	{'F', tm_tag_method_t},
 };
 
-static TMParserMapEntry go_map[] = {
+static TMParserMapEntry map_GO[] = {
 	{'p', tm_tag_namespace_t},
 	{'f', tm_tag_function_t},
 	{'c', tm_tag_macro_t},
@@ -461,7 +470,7 @@ static TMParserMapEntry go_map[] = {
 	{'m', tm_tag_member_t},
 };
 
-static TMParserMapEntry json_map[] = {
+static TMParserMapEntry map_JSON[] = {
 	{'o', tm_tag_member_t},
 	{'a', tm_tag_member_t},
 	{'n', tm_tag_member_t},
@@ -470,8 +479,11 @@ static TMParserMapEntry json_map[] = {
 	{'z', tm_tag_member_t},
 };
 
+/* Zephir, same as PHP */
+#define map_ZEPHIR map_PHP
+
 /* not in universal-ctags */
-static TMParserMapEntry powershell_map[] = {
+static TMParserMapEntry map_POWERSHELL[] = {
 	{'f', tm_tag_function_t},
 	{'v', tm_tag_variable_t},
 };
@@ -483,61 +495,61 @@ typedef struct
     guint size;
 } TMParserMap;
 
-#define MAP_ENTRY(map) {map, (sizeof(map)/sizeof(TMParserMapEntry))}
+#define MAP_ENTRY(lang) [TM_PARSER_##lang] = {map_##lang, G_N_ELEMENTS(map_##lang)}
 
 /* keep in sync with TM_PARSER_* definitions in the header */
 static TMParserMap parser_map[] = {
-	MAP_ENTRY(c_map),
-	MAP_ENTRY(c_map),	/* C++ - same as C */
-	MAP_ENTRY(java_map),
-	MAP_ENTRY(makefile_map),
-	MAP_ENTRY(pascal_map),
-	MAP_ENTRY(perl_map),
-	MAP_ENTRY(php_map),
-	MAP_ENTRY(python_map),
-	MAP_ENTRY(latex_map),
-	MAP_ENTRY(asm_map),
-	MAP_ENTRY(conf_map),
-	MAP_ENTRY(sql_map),
-	MAP_ENTRY(docbook_map),
-	MAP_ENTRY(erlang_map),
-	MAP_ENTRY(css_map),
-	MAP_ENTRY(ruby_map),
-	MAP_ENTRY(tcl_map),
-	MAP_ENTRY(sh_map),
-	MAP_ENTRY(d_map),
-	MAP_ENTRY(f77_map),
-	MAP_ENTRY(c_map),	/* Ferite - same as C */
-	MAP_ENTRY(diff_map),
-	MAP_ENTRY(vhdl_map),
-	MAP_ENTRY(lua_map),
-	MAP_ENTRY(javascript_map),
-	MAP_ENTRY(haskell_map),
-	MAP_ENTRY(csharp_map),
-	MAP_ENTRY(freebasic_map),
-	MAP_ENTRY(haxe_map),
-	MAP_ENTRY(rest_map),
-	MAP_ENTRY(html_map),
-	MAP_ENTRY(f77_map),
-	MAP_ENTRY(c_map),	/* GLSL - same as C */
-	MAP_ENTRY(matlab_map),
-	MAP_ENTRY(vala_map),
-	MAP_ENTRY(actionscript_map),
-	MAP_ENTRY(nsis_map),
-	MAP_ENTRY(markdown_map),
-	MAP_ENTRY(txt2tags_map),
-	MAP_ENTRY(abc_map),
-	MAP_ENTRY(verilog_map),
-	MAP_ENTRY(r_map),
-	MAP_ENTRY(cobol_map),
-	MAP_ENTRY(objc_map),
-	MAP_ENTRY(asciidoc_map),
-	MAP_ENTRY(abaqus_map),
-	MAP_ENTRY(rust_map),
-	MAP_ENTRY(go_map),
-	MAP_ENTRY(json_map),
-	MAP_ENTRY(php_map),	/* Zephir - same as PHP */
-	MAP_ENTRY(powershell_map),
+	MAP_ENTRY(C),
+	MAP_ENTRY(CPP),
+	MAP_ENTRY(JAVA),
+	MAP_ENTRY(MAKEFILE),
+	MAP_ENTRY(PASCAL),
+	MAP_ENTRY(PERL),
+	MAP_ENTRY(PHP),
+	MAP_ENTRY(PYTHON),
+	MAP_ENTRY(LATEX),
+	MAP_ENTRY(ASM),
+	MAP_ENTRY(CONF),
+	MAP_ENTRY(SQL),
+	MAP_ENTRY(DOCBOOK),
+	MAP_ENTRY(ERLANG),
+	MAP_ENTRY(CSS),
+	MAP_ENTRY(RUBY),
+	MAP_ENTRY(TCL),
+	MAP_ENTRY(SH),
+	MAP_ENTRY(D),
+	MAP_ENTRY(FORTRAN),
+	MAP_ENTRY(FERITE),
+	MAP_ENTRY(DIFF),
+	MAP_ENTRY(VHDL),
+	MAP_ENTRY(LUA),
+	MAP_ENTRY(JAVASCRIPT),
+	MAP_ENTRY(HASKELL),
+	MAP_ENTRY(CSHARP),
+	MAP_ENTRY(FREEBASIC),
+	MAP_ENTRY(HAXE),
+	MAP_ENTRY(REST),
+	MAP_ENTRY(HTML),
+	MAP_ENTRY(F77),
+	MAP_ENTRY(GLSL),
+	MAP_ENTRY(MATLAB),
+	MAP_ENTRY(VALA),
+	MAP_ENTRY(ACTIONSCRIPT),
+	MAP_ENTRY(NSIS),
+	MAP_ENTRY(MARKDOWN),
+	MAP_ENTRY(TXT2TAGS),
+	MAP_ENTRY(ABC),
+	MAP_ENTRY(VERILOG),
+	MAP_ENTRY(R),
+	MAP_ENTRY(COBOL),
+	MAP_ENTRY(OBJC),
+	MAP_ENTRY(ASCIIDOC),
+	MAP_ENTRY(ABAQUS),
+	MAP_ENTRY(RUST),
+	MAP_ENTRY(GO),
+	MAP_ENTRY(JSON),
+	MAP_ENTRY(ZEPHIR),
+	MAP_ENTRY(POWERSHELL),
 };
 /* make sure the parser map is consistent and complete */
 G_STATIC_ASSERT(G_N_ELEMENTS(parser_map) == TM_PARSER_COUNT);
@@ -592,6 +604,13 @@ void tm_parser_verify_type_mappings(void)
 		gchar presence_map[256];
 		guint i;
 
+		if (! map->entries || map->size < 1)
+		{
+			g_warning("No tag types in TM for %s, is the language listed in parser_map?",
+					tm_ctags_get_lang_name(lang));
+			continue;
+		}
+
 		/* TODO: check also regex parser mappings. At the moment there's no way
 		 * to access regex parser definitions in ctags */
 		if (tm_ctags_is_using_regex_parser(lang))



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