From 5e88dad262e0a47fd304ef55633fc14e9756896e Mon Sep 17 00:00:00 2001 From: Matthias Klumpp Date: Fri, 19 Jan 2024 00:39:54 +0100 Subject: [PATCH] validator: Make some length limitations more strict We do not want to enforce too strict style limits, however, some elements such as names and summary will universally regress usability of the component when displayed in pretty much all layouts. So, if people go excessively over reasonable limits, we will now emit a warning, as that will likely have been unintentional anyway. --- src/as-validator-issue-tag.h | 12 +++++++++++- src/as-validator.c | 16 ++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/as-validator-issue-tag.h b/src/as-validator-issue-tag.h index 5714dd9c..cf27bb3f 100644 --- a/src/as-validator-issue-tag.h +++ b/src/as-validator-issue-tag.h @@ -465,6 +465,11 @@ AsValidatorIssueTag as_validator_issue_tag_list[] = { N_("The component is missing a name ( tag).") }, + { "component-name-too-long", + AS_ISSUE_SEVERITY_WARNING, + N_("The name of this component is excessively long and can likely not be displayed properly in most layouts.") + }, + { "component-summary-missing", AS_ISSUE_SEVERITY_ERROR, N_("The component is missing a summary ( tag).") @@ -505,6 +510,11 @@ AsValidatorIssueTag as_validator_issue_tag_list[] = { N_("The summary text does not start with a capitalized word, project name or number.") }, + { "summary-too-long", + AS_ISSUE_SEVERITY_WARNING, + N_("The summary text is very long, and will likely not be displayed properly everywhere.") + }, + { "icon-stock-cached-has-url", AS_ISSUE_SEVERITY_ERROR, /* TRANSLATORS: Please do not translate AppStream tag and property names (in backticks). */ @@ -755,7 +765,7 @@ AsValidatorIssueTag as_validator_issue_tag_list[] = { }, { "screenshot-caption-too-long", - AS_ISSUE_SEVERITY_PEDANTIC, + AS_ISSUE_SEVERITY_INFO, N_("The screenshot caption is too long (should be <= 100 characters)"), }, diff --git a/src/as-validator.c b/src/as-validator.c index 3424a6e4..a40b9254 100644 --- a/src/as-validator.c +++ b/src/as-validator.c @@ -2921,6 +2921,8 @@ as_validator_validate_component_node (AsValidator *validator, AsContext *ctx, xm } else if (g_strcmp0 (node_name, "source_pkgname") == 0) { as_validator_check_appear_once (validator, iter, found_tags, FALSE); } else if (g_strcmp0 (node_name, "name") == 0) { + g_autofree gchar *lang = as_xml_get_prop_value (iter, "lang"); + as_validator_check_appear_once (validator, iter, found_tags, TRUE); if (g_str_has_suffix (node_content, ".")) as_validator_add_issue (validator, @@ -2928,6 +2930,13 @@ as_validator_validate_component_node (AsValidator *validator, AsContext *ctx, xm "name-has-dot-suffix", node_content); + if (lang == NULL && strlen (node_content) > 40) { + as_validator_add_issue (validator, + iter, + "component-name-too-long", + node_content); + } + } else if (g_strcmp0 (node_name, "summary") == 0) { g_autofree gchar *lang = NULL; const gchar *summary = node_content; @@ -2962,6 +2971,13 @@ as_validator_validate_component_node (AsValidator *validator, AsContext *ctx, xm "summary-first-word-not-capitalized", NULL); + if (lang == NULL && strlen (summary) > 90) { + as_validator_add_issue (validator, + iter, + "summary-too-long", + summary); + } + } else if (g_strcmp0 (node_name, "description") == 0) { as_validator_check_appear_once (validator, iter, found_tags, TRUE); as_validator_check_description_tag (validator, iter, mode, TRUE);