From 14e461fd33e5e9a2f4e2b36339c941691aefa6e2 Mon Sep 17 00:00:00 2001 From: Brett Walker Date: Tue, 8 Jul 2025 15:51:11 -0500 Subject: [PATCH] Add syntax for issue and workitem references Additional syntax for issue references: [issue:NUMBER] Additional syntax for workitem references: [work_item:NUMBER] Changelog: added --- app/models/issue.rb | 6 +- app/models/work_item.rb | 6 +- .../wip/extensible_reference_filters.yml | 9 --- .../references/issue_reference_filter_spec.rb | 40 +++----------- .../work_item_reference_filter_spec.rb | 55 +++++-------------- 5 files changed, 25 insertions(+), 91 deletions(-) delete mode 100644 config/feature_flags/wip/extensible_reference_filters.yml diff --git a/app/models/issue.rb b/app/models/issue.rb index 7f248861aea2e0..af402adc696c59 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -419,11 +419,7 @@ def self.alternative_reference_prefix_without_postfix end def self.alternative_reference_prefix_with_postfix - if Feature.enabled?(:extensible_reference_filters, Feature.current_request) - '[issue:' - else - '' - end + '[issue:' end def self.reference_postfix diff --git a/app/models/work_item.rb b/app/models/work_item.rb index ce85b1482b4e5d..54b02a2e6ab481 100644 --- a/app/models/work_item.rb +++ b/app/models/work_item.rb @@ -82,11 +82,7 @@ def namespace_reference_pattern end def alternative_reference_prefix_with_postfix - if Feature.enabled?(:extensible_reference_filters, Feature.current_request) - '[work_item:' - else - '' - end + '[work_item:' end def reference_pattern diff --git a/config/feature_flags/wip/extensible_reference_filters.yml b/config/feature_flags/wip/extensible_reference_filters.yml deleted file mode 100644 index b4d676ed2ea40a..00000000000000 --- a/config/feature_flags/wip/extensible_reference_filters.yml +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: extensible_reference_filters -feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/352861 -introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/181859 -rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/535018 -milestone: '18.1' -group: group::knowledge -type: wip -default_enabled: false diff --git a/spec/lib/banzai/filter/references/issue_reference_filter_spec.rb b/spec/lib/banzai/filter/references/issue_reference_filter_spec.rb index a8df45bdb92368..2b197780d1cd19 100644 --- a/spec/lib/banzai/filter/references/issue_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/references/issue_reference_filter_spec.rb @@ -198,43 +198,19 @@ def helper it_behaves_like 'an internal reference' end - context 'when feature flag extensible_reference_filters is enabled' do - before do - stub_feature_flags(extensible_reference_filters: true) - end - - context 'alternative [issue:XXX] internal reference' do - let(:written_reference) { "[issue:#{issue.iid}]" } - let(:reference) { "##{issue.iid}" } - - it_behaves_like 'an internal reference' - end - - context 'project [issue:project/path/XXX] reference' do - let(:reference) { "[issue:#{project.full_path}/#{issue.iid}]" } - - it_behaves_like 'a reference containing an element node' + context 'alternative [issue:XXX] internal reference' do + let(:written_reference) { "[issue:#{issue.iid}]" } + let(:reference) { "##{issue.iid}" } - it_behaves_like 'a reference with issue type information' - end + it_behaves_like 'an internal reference' end - context 'when feature flag extensible_reference_filters is disabled' do - before do - stub_feature_flags(extensible_reference_filters: false) - stub_commonmark_sourcepos_disabled - end + context 'project [issue:project/path/XXX] reference' do + let(:reference) { "[issue:#{project.full_path}/#{issue.iid}]" } - it 'alternative [issue:XXX] reference does not work' do - doc = reference_filter("[issue:#{issue.iid}]") - expect(doc.to_html).to eq("

[issue:#{issue.iid}]

") - end + it_behaves_like 'a reference containing an element node' - it 'project [issue:project/path/XXX] reference does not work' do - reference = "[issue:#{project.full_path}/#{issue.iid}]" - doc = reference_filter(reference) - expect(doc.to_html).to eq("

#{reference}

") - end + it_behaves_like 'a reference with issue type information' end context 'cross-project / cross-namespace complete reference' do diff --git a/spec/lib/banzai/filter/references/work_item_reference_filter_spec.rb b/spec/lib/banzai/filter/references/work_item_reference_filter_spec.rb index aec2f4fe01d21b..ef87e785601db9 100644 --- a/spec/lib/banzai/filter/references/work_item_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/references/work_item_reference_filter_spec.rb @@ -161,50 +161,25 @@ def item_url(item) it_behaves_like 'a work item reference' end - context 'when feature flag extensible_reference_filters is enabled' do - before do - stub_feature_flags(extensible_reference_filters: true) - end - - context 'on [work_item:XXX] reference' do - let_it_be(:written_reference) { "[work_item:#{work_item.iid}]" } - let_it_be(:reference) { written_reference } - let_it_be(:inner_text) { written_reference } - let_it_be(:work_item_link_reference) { item_url(work_item) } - let_it_be(:work_item_url) { work_item_link_reference.gsub('work_items', 'issues') } - - it_behaves_like 'a work item reference' - end - - context 'on cross project [work_item:project/path/XXX] reference' do - let_it_be(:work_item, reload: true) { create(:work_item, project: cross_project) } - let_it_be(:work_item_link_reference) { item_url(work_item) } - let_it_be(:work_item_url) { work_item_link_reference.gsub('work_items', 'issues') } - let_it_be(:written_reference) { "[work_item:#{cross_project.full_path}/#{work_item.iid}]" } - let_it_be(:reference) { written_reference } - let_it_be(:inner_text) { written_reference } + context 'on [work_item:XXX] reference' do + let_it_be(:written_reference) { "[work_item:#{work_item.iid}]" } + let_it_be(:reference) { written_reference } + let_it_be(:inner_text) { written_reference } + let_it_be(:work_item_link_reference) { item_url(work_item) } + let_it_be(:work_item_url) { work_item_link_reference.gsub('work_items', 'issues') } - it_behaves_like 'a work item reference' - end + it_behaves_like 'a work item reference' end - context 'when feature flag extensible_reference_filters is disabled' do - before do - stub_feature_flags(extensible_reference_filters: false) - stub_commonmark_sourcepos_disabled - end - - it 'alternative [work_item:XXX] reference does not work' do - doc = reference_filter("[work_item:#{work_item.iid}]") - expect(doc.to_html).to eq("

[work_item:#{work_item.iid}]

") - end + context 'on cross project [work_item:project/path/XXX] reference' do + let_it_be(:work_item, reload: true) { create(:work_item, project: cross_project) } + let_it_be(:work_item_link_reference) { item_url(work_item) } + let_it_be(:work_item_url) { work_item_link_reference.gsub('work_items', 'issues') } + let_it_be(:written_reference) { "[work_item:#{cross_project.full_path}/#{work_item.iid}]" } + let_it_be(:reference) { written_reference } + let_it_be(:inner_text) { written_reference } - it 'cross project [work_item:project/path/XXX] reference does not work' do - work_item = create(:issue, project: cross_project) - reference = "[work_item:#{cross_project.full_path}/#{work_item.iid}]" - doc = reference_filter(reference) - expect(doc.to_html).to eq("

#{reference}

") - end + it_behaves_like 'a work item reference' end # Example: -- GitLab