Skip to content
代码片段 群组 项目
提交 15a2c9fc 编辑于 作者: Vasilii Iakliushin's avatar Vasilii Iakliushin
浏览文件

Update documentation links linter

Contributes to
https://gitlab.com/gitlab-org/gitlab/-/issues/345474#note_1447561145

* Disallow `.md` extension usage
* Add todo list to fix offences
上级 f65be6e6
No related branches found
No related tags found
无相关合并请求
# This configuration was generated by
# `haml-lint --auto-gen-config`
# on 2022-10-19 13:09:51 +0200 using Haml-Lint version 0.40.1.
# on 2023-10-11 14:54:51 +0200 using Haml-Lint version 0.40.1.
# The point is for the user to remove these configuration records
# one by one as the lints are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of Haml-Lint, may require this file to be generated again.
\ No newline at end of file
# versions of Haml-Lint, may require this file to be generated again.
linters:
# Offense count: 201
DocumentationLinks:
exclude:
- "app/views/admin/application_settings/_account_and_limit.html.haml"
- "app/views/admin/application_settings/_ci_cd.html.haml"
- "app/views/admin/application_settings/_diagramsnet.html.haml"
- "app/views/admin/application_settings/_email.html.haml"
- "app/views/admin/application_settings/_error_tracking.html.haml"
- "app/views/admin/application_settings/_floc.html.haml"
- "app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml"
- "app/views/admin/application_settings/_gitpod.html.haml"
- "app/views/admin/application_settings/_kroki.html.haml"
- "app/views/admin/application_settings/_localization.html.haml"
- "app/views/admin/application_settings/_outbound.html.haml"
- "app/views/admin/application_settings/_plantuml.html.haml"
- "app/views/admin/application_settings/_projects_api_limits.html.haml"
- "app/views/admin/application_settings/_repository_check.html.haml"
- "app/views/admin/application_settings/_repository_storage.html.haml"
- "app/views/admin/application_settings/_runner_registrars_form.html.haml"
- "app/views/admin/application_settings/_signin.html.haml"
- "app/views/admin/application_settings/_sourcegraph.html.haml"
- "app/views/admin/application_settings/_spam.html.haml"
- "app/views/admin/application_settings/_terms.html.haml"
- "app/views/admin/application_settings/general.html.haml"
- "app/views/admin/application_settings/metrics_and_profiling.html.haml"
- "app/views/admin/application_settings/network.html.haml"
- "app/views/admin/application_settings/preferences.html.haml"
- "app/views/admin/application_settings/reporting.html.haml"
- "app/views/admin/application_settings/repository.html.haml"
- "app/views/admin/dashboard/index.html.haml"
- "app/views/admin/dev_ops_report/_score.html.haml"
- "app/views/clusters/clusters/_advanced_settings.html.haml"
- "app/views/clusters/clusters/_deprecation_alert.html.haml"
- "app/views/clusters/clusters/_multiple_clusters_message.html.haml"
- "app/views/clusters/clusters/_namespace.html.haml"
- "app/views/clusters/clusters/_provider_details_form.html.haml"
- "app/views/clusters/clusters/cloud_providers/_cloud_provider_selector.html.haml"
- "app/views/clusters/clusters/show.html.haml"
- "app/views/clusters/clusters/user/_form.html.haml"
- "app/views/groups/_import_group_from_another_instance_panel.html.haml"
- "app/views/groups/_import_group_from_file_panel.html.haml"
- "app/views/groups/settings/ci_cd/_auto_devops_form.html.haml"
- "app/views/notify/github_gists_import_errors_email.html.haml"
- "app/views/notify/pages_domain_auto_ssl_failed_email.html.haml"
- "app/views/notify/pages_domain_auto_ssl_failed_email.text.haml"
- "app/views/notify/pages_domain_disabled_email.html.haml"
- "app/views/notify/pages_domain_enabled_email.html.haml"
- "app/views/notify/pages_domain_verification_failed_email.html.haml"
- "app/views/notify/pages_domain_verification_succeeded_email.html.haml"
- "app/views/profiles/gpg_keys/index.html.haml"
- "app/views/profiles/keys/_key.html.haml"
- "app/views/profiles/keys/index.html.haml"
- "app/views/profiles/personal_access_tokens/index.html.haml"
- "app/views/profiles/show.html.haml"
- "app/views/profiles/two_factor_auths/show.html.haml"
- "app/views/projects/blob/_pipeline_tour_success.html.haml"
- "app/views/projects/blob/viewers/_route_map.html.haml"
- "app/views/projects/blob/viewers/_route_map_loading.html.haml"
- "app/views/projects/branch_defaults/_branch_names_fields.html.haml"
- "app/views/projects/branch_defaults/_default_branch_fields.html.haml"
- "app/views/projects/cleanup/_show.html.haml"
- "app/views/projects/commit/_signature_badge.html.haml"
- "app/views/projects/environments/index.html.haml"
- "app/views/projects/feature_flags/new.html.haml"
- "app/views/projects/feature_flags_user_lists/edit.html.haml"
- "app/views/projects/feature_flags_user_lists/new.html.haml"
- "app/views/projects/issues/_new_branch.html.haml"
- "app/views/projects/merge_requests/_page.html.haml"
- "app/views/projects/mirrors/_branch_filter.html.haml"
- "app/views/projects/mirrors/_mirror_repos.html.haml"
- "app/views/projects/mirrors/_mirror_repos_push.html.haml"
- "app/views/projects/pages_domains/_certificate.html.haml"
- "app/views/projects/pages_domains/_dns.html.haml"
- "app/views/projects/pages_domains/_helper_text.html.haml"
- "app/views/projects/runners/_group_runners.html.haml"
- "app/views/projects/settings/ci_cd/_autodevops_form.html.haml"
- "app/views/projects/settings/merge_requests/_merge_request_merge_commit_template.html.haml"
- "app/views/projects/settings/merge_requests/_merge_request_merge_method_settings.html.haml"
- "app/views/projects/settings/merge_requests/_merge_request_merge_suggestions_settings.html.haml"
- "app/views/projects/settings/merge_requests/_merge_request_squash_commit_template.html.haml"
- "app/views/projects/settings/merge_requests/_merge_request_squash_options_settings.html.haml"
- "app/views/projects/settings/operations/_alert_management.html.haml"
- "app/views/projects/usage_quotas/index.html.haml"
- "app/views/shared/_auto_devops_callout.html.haml"
- "app/views/shared/_auto_devops_implicitly_enabled_banner.html.haml"
- "app/views/shared/_custom_attributes.html.haml"
- "app/views/shared/_registration_features_discovery_message.html.haml"
- "app/views/shared/_service_ping_consent.html.haml"
- "app/views/shared/deploy_tokens/_form.html.haml"
- "app/views/shared/deploy_tokens/_new_deploy_token.html.haml"
- "app/views/shared/deploy_tokens/_table.html.haml"
- "app/views/shared/empty_states/_snippets.html.haml"
- "app/views/shared/integrations/gitlab_slack_application/_help.html.haml"
- "app/views/shared/integrations/gitlab_slack_application/_slack_integration_form.html.haml"
- "app/views/shared/integrations/mattermost_slash_commands/_help.html.haml"
- "app/views/shared/integrations/slack_slash_commands/_help.html.haml"
- "app/views/shared/issuable/form/_type_selector.html.haml"
- "app/views/shared/runners/_shared_runners_description.html.haml"
- "app/views/shared/web_hooks/_form.html.haml"
- "ee/app/views/admin/application_settings/_custom_templates_form.html.haml"
- "ee/app/views/admin/application_settings/_ee_network_settings.haml"
- "ee/app/views/admin/application_settings/_elasticsearch_form.html.haml"
- "ee/app/views/admin/application_settings/_ldap_access_setting.html.haml"
- "ee/app/views/admin/application_settings/_microsoft_application.haml"
- "ee/app/views/admin/application_settings/_saml_group_locks_setting.html.haml"
- "ee/app/views/admin/application_settings/_templates.html.haml"
- "ee/app/views/admin/dashboard/_elastic_and_geo.html.haml"
- "ee/app/views/admin/geo/shared/_hashed_storage_alerts.html.haml"
- "ee/app/views/admin/push_rules/_merge_request_approvals.html.haml"
- "ee/app/views/admin/push_rules/_merge_request_approvals_fields.html.haml"
- "ee/app/views/compliance_management/compliance_framework/_project_settings.html.haml"
- "ee/app/views/groups/_analytics_dashboards.html.haml"
- "ee/app/views/groups/_compliance_frameworks.html.haml"
- "ee/app/views/groups/_custom_project_templates_setting.html.haml"
- "ee/app/views/groups/_insights.html.haml"
- "ee/app/views/groups/_templates_setting.html.haml"
- "ee/app/views/groups/saml_providers/_info.html.haml"
- "ee/app/views/groups/security/policies/index.html.haml"
- "ee/app/views/groups/settings/_ip_restriction.html.haml"
- "ee/app/views/groups/settings/domain_verification/_certificate.html.haml"
- "ee/app/views/groups/settings/domain_verification/_dns.html.haml"
- "ee/app/views/groups/settings/domain_verification/_helper_text.html.haml"
- "ee/app/views/groups/settings/domain_verification/index.html.haml"
- "ee/app/views/notify/import_requirements_csv_email.html.haml"
- "ee/app/views/profiles/preferences/_code_suggestions_settings_self_assignment.html.haml"
- "ee/app/views/projects/merge_requests/_code_owner_approval_rules.html.haml"
- "ee/app/views/projects/mirrors/_branch_filter.html.haml"
- "ee/app/views/projects/mirrors/_mirror_repos_form.html.haml"
- "ee/app/views/projects/protected_environments/_group_environments_list.html.haml"
- "ee/app/views/projects/security/policies/index.html.haml"
- "ee/app/views/projects/settings/ci_cd/_auto_rollback.html.haml"
- "ee/app/views/projects/settings/ci_cd/_pipeline_subscriptions.html.haml"
- "ee/app/views/projects/settings/ci_cd/_protected_environments.html.haml"
- "ee/app/views/projects/settings/merge_requests/_merge_pipelines_settings.html.haml"
- "ee/app/views/projects/settings/merge_requests/_merge_request_approvals_settings.html.haml"
- "ee/app/views/projects/settings/merge_requests/_merge_trains_settings.html.haml"
- "ee/app/views/projects/settings/merge_requests/_suggested_reviewers_settings.html.haml"
- "ee/app/views/projects/settings/merge_requests/_target_branch_rules_settings.html.haml"
- "ee/app/views/search/results/_error.html.haml"
- "ee/app/views/shared/_ci_cd_only_link.html.haml"
- "ee/app/views/shared/_mirror_trigger_builds_setting.html.haml"
- "ee/app/views/shared/_new_user_signups_cap_reached_alert.html.haml"
- "ee/app/views/shared/empty_states/_geo_replication.html.haml"
- "ee/app/views/shared/issuable/form/_merge_request_blocks.html.haml"
- "ee/app/views/shared/labels/_create_label_help_text.html.haml"
- "ee/app/views/shared/promotions/_promote_advanced_search.html.haml"
- "ee/app/views/shared/promotions/_promote_burndown_charts.html.haml"
- "ee/app/views/shared/promotions/_promote_group_webhooks.html.haml"
- "ee/app/views/shared/promotions/_promote_mobile_devops.html.haml"
- "ee/app/views/shared/promotions/_promote_mr_features.html.haml"
- "ee/app/views/shared/promotions/_promote_repository_features.html.haml"
......@@ -47,7 +47,9 @@ def check(node)
def validate_node(node, match)
return if match.empty?
path_to_file = detect_path_to_file(match[:link])
link = match[:link]
path_to_file = detect_path_to_file(link)
unless File.file?(path_to_file)
record_lint(node, "help_page_path points to the unknown location: #{path_to_file}")
......@@ -57,6 +59,8 @@ def validate_node(node, match)
unless correct_anchor?(path_to_file, match[:anchor])
record_lint(node, "anchor (#{match[:anchor]}) is missing in: #{path_to_file}")
end
record_lint(node, "remove .md extension from the link: #{link}") if link.end_with?('.md')
end
def extract_link_and_anchor(ast_tree)
......
......@@ -11,49 +11,49 @@
shared_examples 'link validation rules' do |link_pattern|
context 'when link_to points to the existing file path' do
let(:haml) { "= link_to 'Description', #{link_pattern}('index.md')" }
let(:haml) { "= link_to 'Description', #{link_pattern}('index')" }
it { is_expected.not_to report_lint }
end
context 'when link_to points to the existing file with valid anchor' do
let(:haml) { "= link_to 'Description', #{link_pattern}('index.md', anchor: 'user-account'), target: '_blank'" }
let(:haml) { "= link_to 'Description', #{link_pattern}('index', anchor: 'user-account'), target: '_blank'" }
it { is_expected.not_to report_lint }
end
context 'when link_to points to the existing file path without .md extension' do
let(:haml) { "= link_to 'Description', #{link_pattern}('index')" }
context 'when link_to points to the existing file path with .md extension' do
let(:haml) { "= link_to 'Description', #{link_pattern}('index.md')" }
it { is_expected.not_to report_lint }
it { is_expected.to report_lint }
end
context 'when anchor is not correct' do
let(:haml) { "= link_to 'Description', #{link_pattern}('index.md', anchor: 'wrong')" }
let(:haml) { "= link_to 'Description', #{link_pattern}('index', anchor: 'wrong')" }
it { is_expected.to report_lint }
context "when #{link_pattern} has multiple options" do
let(:haml) { "= link_to 'Description', #{link_pattern}('index.md', key: :value, anchor: 'wrong')" }
let(:haml) { "= link_to 'Description', #{link_pattern}('index', key: :value, anchor: 'wrong')" }
it { is_expected.to report_lint }
end
end
context 'when file path is wrong' do
let(:haml) { "= link_to 'Description', #{link_pattern}('wrong.md'), target: '_blank'" }
let(:haml) { "= link_to 'Description', #{link_pattern}('wrong'), target: '_blank'" }
it { is_expected.to report_lint }
context 'when haml ends with block definition' do
let(:haml) { "= link_to 'Description', #{link_pattern}('wrong.md') do" }
let(:haml) { "= link_to 'Description', #{link_pattern}('wrong') do" }
it { is_expected.to report_lint }
end
end
context 'when link with wrong file path is assigned to a variable' do
let(:haml) { "- my_link = link_to 'Description', #{link_pattern}('wrong.md')" }
let(:haml) { "- my_link = link_to 'Description', #{link_pattern}('wrong')" }
it { is_expected.to report_lint }
end
......@@ -65,13 +65,13 @@
end
context 'when anchor belongs to a different element' do
let(:haml) { "= link_to 'Description', #{link_pattern}('index.md'), target: (anchor: 'blank')" }
let(:haml) { "= link_to 'Description', #{link_pattern}('index'), target: (anchor: 'blank')" }
it { is_expected.not_to report_lint }
end
context "when a simple #{link_pattern}" do
let(:haml) { "- url = #{link_pattern}('wrong.md')" }
let(:haml) { "- url = #{link_pattern}('wrong')" }
it { is_expected.to report_lint }
end
......@@ -83,13 +83,13 @@
end
context 'when link is a part of the tag' do
let(:haml) { ".data-form{ data: { url: #{link_pattern}('wrong.md') } }" }
let(:haml) { ".data-form{ data: { url: #{link_pattern}('wrong') } }" }
it { is_expected.to report_lint }
end
context 'when the second link is invalid' do
let(:haml) { ".data-form{ data: { url: #{link_pattern}('index.md'), wrong_url: #{link_pattern}('wrong.md') } }" }
let(:haml) { ".data-form{ data: { url: #{link_pattern}('index'), wrong_url: #{link_pattern}('wrong') } }" }
it { is_expected.to report_lint }
end
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册