Branch: refs/heads/master Author: Jiří Techet techet@gmail.com Committer: Jiří Techet techet@gmail.com Date: Mon, 11 Apr 2022 15:05:35 UTC Commit: 13a58c2b2e58d4a3157e93a7f2bd0d006b884cdf https://github.com/geany/geany/commit/13a58c2b2e58d4a3157e93a7f2bd0d006b884c...
Log Message: ----------- Fix anonymous tag renaming for Fortran structures
See comment in the added code.
Modified Paths: -------------- src/tagmanager/tm_ctags.c
Modified: src/tagmanager/tm_ctags.c 16 lines changed, 16 insertions(+), 0 deletions(-) =================================================================== @@ -257,6 +257,7 @@ static void rename_anon_tags(TMSourceFile *source_file) gchar *orig_name, *new_name = NULL; guint j; guint new_name_len, orig_name_len; + gboolean inside_nesting = FALSE; guint scope_len = tag->scope ? strlen(tag->scope) : 0; gchar kind = tag->kind_letter;
@@ -332,6 +333,21 @@ static void rename_anon_tags(TMSourceFile *source_file) guint nested_scope_len = nested_tag->scope ? strlen(nested_tag->scope) : 0; gchar *pos;
+ /* In Fortran, we can create variables of anonymous structures: + * structure var1, var2 + * integer a + * end structure + * and the parser first generates tags for var1 and var2 which + * are on the same scope as the structure itself. So first + * we need to skip past the tags on the same scope and only + * afterwards we get the nested tags. + * */ + if ((source_file->lang == TM_PARSER_F77 || source_file->lang == TM_PARSER_FORTRAN) && + !inside_nesting && nested_scope_len == scope_len) + continue; + + inside_nesting = TRUE; + /* Terminate if outside of tag scope, see above */ if (nested_scope_len <= scope_len) break;
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).