From 45e4187844d11b78ecf56800e9437d236802faa2 Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Mon, 16 Feb 2026 12:14:54 +0100 Subject: [PATCH] Respect markup comment in non-ruby files Fixes #1597 --- lib/rdoc/parser.rb | 25 +++++++++++++------------ test/rdoc/parser/parser_test.rb | 32 +++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 21 deletions(-) diff --git a/lib/rdoc/parser.rb b/lib/rdoc/parser.rb index 2ac960e089..c2bc47f9cd 100644 --- a/lib/rdoc/parser.rb +++ b/lib/rdoc/parser.rb @@ -170,7 +170,7 @@ def self.for(top_level, content, options, stats) file_name = top_level.absolute_name return if binary? file_name - parser = use_markup content + parser = use_markup content, file_name unless parser then parse_name = file_name @@ -229,21 +229,22 @@ def self.remove_modeline(content) # # Any comment style may be used to hide the markup comment. - def self.use_markup(content) + def self.use_markup(content, file_path) markup = content.lines.first(3).grep(/markup:\s+(\w+)/) { $1 }.first - return unless markup + if markup + return RDoc::Parser::Ruby if markup == "tomdoc" - # TODO Ruby should be returned only when the filename is correct - return RDoc::Parser::Ruby if %w[tomdoc markdown].include? markup - - markup = Regexp.escape markup - - _, selected = RDoc::Parser.parsers.find do |_, parser| - /^#{markup}$/i =~ parser.name.sub(/.*:/, '') + markup = Regexp.escape markup + _, selected = RDoc::Parser.parsers.find do |_, parser| + /^#{markup}$/i =~ parser.name.sub(/.*:/, '') + end + selected + else + selected = RDoc::Parser.can_parse_by_name(file_path) + return if selected == RDoc::Parser::Simple + selected end - - selected end ## diff --git a/test/rdoc/parser/parser_test.rb b/test/rdoc/parser/parser_test.rb index 590aeeef91..0a44cd4151 100644 --- a/test/rdoc/parser/parser_test.rb +++ b/test/rdoc/parser/parser_test.rb @@ -232,7 +232,7 @@ def test_class_use_markup # coding: utf-8 markup: rd CONTENT - parser = @RP.use_markup content + parser = @RP.use_markup content, "" assert_equal @RP::RD, parser end @@ -242,9 +242,9 @@ def test_class_use_markup_markdown # coding: utf-8 markup: markdown CONTENT - parser = @RP.use_markup content + parser = @RP.use_markup content, "" - assert_equal @RP::Ruby, parser + assert_equal @RP::Markdown, parser end def test_class_use_markup_modeline @@ -253,7 +253,7 @@ def test_class_use_markup_modeline # markup: rd CONTENT - parser = @RP.use_markup content + parser = @RP.use_markup content, "" assert_equal @RP::RD, parser end @@ -266,7 +266,7 @@ def test_class_use_markup_modeline_shebang */ CONTENT - parser = @RP.use_markup content + parser = @RP.use_markup content, "" assert_equal @RP::RD, parser end @@ -277,7 +277,7 @@ def test_class_use_markup_shebang # coding: utf-8 markup: rd CONTENT - parser = @RP.use_markup content + parser = @RP.use_markup content, "" assert_equal @RP::RD, parser end @@ -287,13 +287,13 @@ def test_class_use_markup_tomdoc # coding: utf-8 markup: tomdoc CONTENT - parser = @RP.use_markup content + parser = @RP.use_markup content, "" assert_equal @RP::Ruby, parser end def test_class_use_markup_none - parser = @RP.use_markup '' + parser = @RP.use_markup '', '' assert_nil parser end @@ -303,11 +303,25 @@ def test_class_use_markup_unknown # :markup: RDoc CONTENT - parser = @RP.use_markup content + parser = @RP.use_markup content, "" assert_nil parser end + def test_class_use_markup_filepath + parser = @RP.use_markup "", "foo.rb" + + assert_equal @RP::Ruby, parser + end + + def test_class_use_markup_content_and_filepath + parser = @RP.use_markup <<~C, "foo.c" + /* :markup: markdown */ + C + + assert_equal @RP::Markdown, parser + end + def test_initialize with_top_level("file.rb", "") do |top_level, content| @RP.new top_level, content, @options, nil