Skip to content

Commit

Permalink
Merge pull request #1365 from b4n/geanygendoc/unknown-type-crash
Browse files Browse the repository at this point in the history
geanygendoc: Fix crash if trying to document an unknown type
  • Loading branch information
b4n committed Jul 6, 2024
2 parents 372ffa2 + 8043a67 commit 3a90710
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 12 deletions.
6 changes: 6 additions & 0 deletions geanygendoc/data/filetypes/c.conf
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ doctypes = {
enumval.policy = FORWARD;
# usually, locals are just not documented and get in the way
local.policy = FORWARD;
# usually nothing useful to document
include.policy = PASS;
other.policy = PASS;

function = {
template = "/**\n * {symbol}:\n{for arg in argument_list} * @{arg}: {cursor}\n{end} * \n * {cursor}\n{if returns} * \n * Returns: \n{end}{if write_since}{if returns} * \n{end} * Since: \n{end} */\n";
Expand Down Expand Up @@ -77,6 +80,9 @@ doctypes = {
doxygen = {
# usually, locals are just not documented and get in the way
local.policy = FORWARD;
# usually nothing useful to document
include.policy = PASS;
other.policy = PASS;

function.template = "/**\n * {doxygen_prefix}brief {cursor}\n{for a in argument_list} * {doxygen_prefix}param {a} \n{end}{if returns} * {doxygen_prefix}returns \n{end}{if write_since} * {doxygen_prefix}since \n{end} * \n * \n */\n";
macro.template = "/**\n * {doxygen_prefix}brief {cursor}\n{for a in argument_list} * {doxygen_prefix}param {a} \n{end}{if returns} * {doxygen_prefix}returns \n{end}{if write_since} * {doxygen_prefix}since \n{end} * \n * \n */\n";
Expand Down
4 changes: 4 additions & 0 deletions geanygendoc/docs/manual.rst
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,8 @@ Known types
A field (of a class for example).
``function``
A function.
``include``
An include directive.
``interface``
An interface.
``local``
Expand All @@ -356,6 +358,8 @@ Known types
A method.
``namespace``
A namespace.
``other``
A non-specific type that highly depend on the language.
``package``
A package.
``prototype``
Expand Down
6 changes: 5 additions & 1 deletion geanygendoc/src/ggd-doc-type.c
Original file line number Diff line number Diff line change
Expand Up @@ -128,9 +128,12 @@ ggd_doc_type_get_setting (const GgdDocType *doctype,
{
GgdDocSetting *setting = NULL;
GList *tmp;
gssize match_len = strlen (match);
gssize match_len;

g_return_val_if_fail (doctype != NULL, NULL);
g_return_val_if_fail (match != NULL, NULL);

match_len = (gssize) strlen (match);

for (tmp = doctype->settings; tmp && ! setting; tmp = g_list_next (tmp)) {
if (ggd_doc_setting_matches (tmp->data, match, match_len)) {
Expand Down Expand Up @@ -177,6 +180,7 @@ ggd_doc_type_resolve_setting (const GgdDocType *doctype,
gchar *child_match = NULL;

g_return_val_if_fail (doctype != NULL, NULL);
g_return_val_if_fail (match != NULL, NULL);

/*g_debug ("Resolving match \"%s\"...", child_match);*/
if (nth_child) (*nth_child) = 0;
Expand Down
10 changes: 6 additions & 4 deletions geanygendoc/src/ggd-tag-utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,22 +252,24 @@ static const struct {
{ tm_tag_class_t, "class" },
{ tm_tag_enum_t, "enum" },
{ tm_tag_enumerator_t, "enumval" },
{ tm_tag_externvar_t, "extern" },
{ tm_tag_field_t, "field" },
{ tm_tag_function_t, "function" },
{ tm_tag_interface_t, "interface" },
{ tm_tag_include_t, "include" },
{ tm_tag_local_var_t, "local" },
{ tm_tag_macro_t, "define" },
{ tm_tag_macro_with_arg_t, "macro" },
{ tm_tag_member_t, "member" },
{ tm_tag_method_t, "method" },
{ tm_tag_namespace_t, "namespace" },
{ tm_tag_other_t, "other" },
{ tm_tag_package_t, "package" },
{ tm_tag_prototype_t, "prototype" },
{ tm_tag_struct_t, "struct" },
{ tm_tag_typedef_t, "typedef" },
{ tm_tag_union_t, "union" },
{ tm_tag_variable_t, "variable" },
{ tm_tag_externvar_t, "extern" },
{ tm_tag_macro_t, "define" },
{ tm_tag_macro_with_arg_t, "macro" }
{ tm_tag_variable_t, "variable" }
};

/**
Expand Down
17 changes: 10 additions & 7 deletions geanygendoc/src/ggd.c
Original file line number Diff line number Diff line change
Expand Up @@ -383,22 +383,25 @@ get_setting_from_tag (GgdDocType *doctype,
const TMTag *tag,
const TMTag **real_tag)
{
GgdDocSetting *setting;
GgdDocSetting *setting = NULL;
gchar *hierarchy;
gint nth_child;
GPtrArray *tag_array = doc->tm_file->tags_array;
GeanyFiletypeID geany_ft = FILETYPE_ID (doc->file_type);

hierarchy = ggd_tag_resolve_type_hierarchy (tag_array, geany_ft, tag);
/*g_debug ("type hierarchy for tag %s is: %s", tag->name, hierarchy);*/
setting = ggd_doc_type_resolve_setting (doctype, hierarchy, &nth_child);
*real_tag = tag;
if (setting) {
for (; nth_child > 0; nth_child--) {
*real_tag = ggd_tag_find_parent (tag_array, geany_ft, *real_tag);
if (hierarchy) {
gint nth_child;

setting = ggd_doc_type_resolve_setting (doctype, hierarchy, &nth_child);
if (setting) {
for (; nth_child > 0; nth_child--) {
*real_tag = ggd_tag_find_parent (tag_array, geany_ft, *real_tag);
}
}
g_free (hierarchy);
}
g_free (hierarchy);

return setting;
}
Expand Down

0 comments on commit 3a90710

Please sign in to comment.