diff --git a/lib/banzai/filter/autolink_legacy_filter.rb b/lib/banzai/filter/autolink_filter.rb similarity index 89% rename from lib/banzai/filter/autolink_legacy_filter.rb rename to lib/banzai/filter/autolink_filter.rb index 1c4e3557dc9c06c5fb0fefc338d153f6728924ec..8b2399ab3d2d24d075ab81151f22d85786d32245 100644 --- a/lib/banzai/filter/autolink_legacy_filter.rb +++ b/lib/banzai/filter/autolink_filter.rb @@ -2,10 +2,10 @@ require 'uri' -# TODO: This is now a legacy filter, and is only used with the Ruby parser. -# The current markdown parser now properly handles autolinking. -# The Ruby parser is now only for benchmarking purposes. -# issue: https://gitlab.com/gitlab-org/gitlab/-/issues/454601 +# This filter handles autolinking when a pipeline does not +# use the MarkdownFilter, which handles it's own autolinking. +# This happens in particular for the SingleLinePipeline and the +# CommitDescriptionPipeline. # # rubocop:disable Rails/OutputSafety -- this is legacy/unused, no need fixing. # rubocop:disable Gitlab/NoCodeCoverageComment -- no coverage needed for a legacy filter @@ -16,15 +16,11 @@ module Filter # # Based on HTML::Pipeline::AutolinkFilter # - # Note that our CommonMark parser, `commonmarker` (using the autolink extension) - # handles standard autolinking, like http/https. We detect additional - # schemes (smb, rdar, etc). - # # Context options: # :autolink - Boolean, skips all processing done by this filter when false # :link_attr - Hash of attributes for the generated links # - class AutolinkLegacyFilter < HTML::Pipeline::Filter + class AutolinkFilter < HTML::Pipeline::Filter include ActionView::Helpers::TagHelper include Gitlab::Utils::SanitizeNodeLink @@ -67,7 +63,12 @@ class AutolinkLegacyFilter < HTML::Pipeline::Filter }.freeze def call - return doc if MarkdownFilter.glfm_markdown?(context) && context[:pipeline] != :single_line + if MarkdownFilter.glfm_markdown?(context) && + context[:pipeline] != :single_line && + context[:pipeline] != :commit_description + return doc + end + return doc if context[:autolink] == false doc.xpath(TEXT_QUERY).each do |node| diff --git a/lib/banzai/filter/spaced_link_filter.rb b/lib/banzai/filter/spaced_link_filter.rb index 94b84ccd874a0ec3cea6a545c8bbc13ef44bfcbd..479565a9f5378a2771bcb3ce12a7390ce0092b03 100644 --- a/lib/banzai/filter/spaced_link_filter.rb +++ b/lib/banzai/filter/spaced_link_filter.rb @@ -6,7 +6,7 @@ module Banzai module Filter # HTML Filter for markdown links with spaces in the URLs # - # Based on Banzai::Filter::AutolinkLegacyFilter + # Based on Banzai::Filter::AutolinkFilter # # CommonMark does not allow spaces in the url portion of a link/url. # For example, `[example](page slug)` is not valid. diff --git a/lib/banzai/pipeline/broadcast_message_pipeline.rb b/lib/banzai/pipeline/broadcast_message_pipeline.rb index e447c840684c99af244d4799495e1ea155ed2f3e..91a0723a965f34da85db56474cb9778f0308614c 100644 --- a/lib/banzai/pipeline/broadcast_message_pipeline.rb +++ b/lib/banzai/pipeline/broadcast_message_pipeline.rb @@ -10,7 +10,7 @@ def self.filters Filter::BroadcastMessageSanitizationFilter, Filter::EmojiFilter, Filter::ColorFilter, - Filter::AutolinkLegacyFilter, + Filter::AutolinkFilter, Filter::ExternalLinkFilter ] end diff --git a/lib/banzai/pipeline/gfm_pipeline.rb b/lib/banzai/pipeline/gfm_pipeline.rb index 66caa9880fefee04bb7b6c5d529c43ec62f6492e..5d51037aae4efdd6948c02807bc07a03c5e14240 100644 --- a/lib/banzai/pipeline/gfm_pipeline.rb +++ b/lib/banzai/pipeline/gfm_pipeline.rb @@ -32,7 +32,7 @@ def self.filters Filter::TableOfContentsLegacyFilter, Filter::TableOfContentsTagLegacyFilter, Filter::TableOfContentsTagFilter, - Filter::AutolinkLegacyFilter, + Filter::AutolinkFilter, Filter::ExternalLinkFilter, Filter::SuggestionFilter, Filter::FootnoteFilter, diff --git a/lib/banzai/pipeline/single_line_pipeline.rb b/lib/banzai/pipeline/single_line_pipeline.rb index f3a93e21b8ba040a922188edf32bb6ee5095eee7..0de9157a2b0f46d6f71395ae55bcdfbbf2d1b3bc 100644 --- a/lib/banzai/pipeline/single_line_pipeline.rb +++ b/lib/banzai/pipeline/single_line_pipeline.rb @@ -10,7 +10,7 @@ def self.filters Filter::AssetProxyFilter, Filter::EmojiFilter, Filter::CustomEmojiFilter, - Filter::AutolinkLegacyFilter, + Filter::AutolinkFilter, Filter::ExternalLinkFilter, *reference_filters ] diff --git a/spec/lib/banzai/filter/autolink_legacy_filter_spec.rb b/spec/lib/banzai/filter/autolink_filter_spec.rb similarity index 93% rename from spec/lib/banzai/filter/autolink_legacy_filter_spec.rb rename to spec/lib/banzai/filter/autolink_filter_spec.rb index 312f22b1b2f974000bdafece5bde4475620e2901..8b364be8663bbd1e99453540c97e942dc7f10276 100644 --- a/spec/lib/banzai/filter/autolink_legacy_filter_spec.rb +++ b/spec/lib/banzai/filter/autolink_filter_spec.rb @@ -2,11 +2,7 @@ require 'spec_helper' -# TODO: This is now a legacy filter, and is only used with the Ruby parser. -# The current markdown parser now properly handles autolinking. -# The Ruby parser is now only for benchmarking purposes. -# issue: https://gitlab.com/gitlab-org/gitlab/-/issues/454601 -RSpec.describe Banzai::Filter::AutolinkLegacyFilter, feature_category: :team_planning do +RSpec.describe Banzai::Filter::AutolinkFilter, feature_category: :team_planning do include FilterSpecHelper let_it_be(:context) { { markdown_engine: Banzai::Filter::MarkdownFilter::CMARK_ENGINE } } @@ -14,6 +10,26 @@ let(:link) { 'http://about.gitlab.com/' } let(:quotes) { ['"', "'"] } + context 'when using default markdown engine' do + it 'does nothing' do + exp = act = link + + expect(filter(act, {}).to_html).to eq exp + end + + it 'autolinks when using single_line pipeline' do + doc = filter("See #{link}", { pipeline: :single_line }) + + expect(doc.at_css('a').text).to eq link + end + + it 'autolinks when using commit_description pipeline' do + doc = filter("See #{link}", { pipeline: :commit_description }) + + expect(doc.at_css('a').text).to eq link + end + end + it 'does nothing when :autolink is false' do exp = act = link