Skip to content

Commit 45e4187

Browse files
committed
Respect markup comment in non-ruby files
Fixes #1597
1 parent 52e0817 commit 45e4187

2 files changed

Lines changed: 36 additions & 21 deletions

File tree

lib/rdoc/parser.rb

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def self.for(top_level, content, options, stats)
170170
file_name = top_level.absolute_name
171171
return if binary? file_name
172172

173-
parser = use_markup content
173+
parser = use_markup content, file_name
174174

175175
unless parser then
176176
parse_name = file_name
@@ -229,21 +229,22 @@ def self.remove_modeline(content)
229229
#
230230
# Any comment style may be used to hide the markup comment.
231231

232-
def self.use_markup(content)
232+
def self.use_markup(content, file_path)
233233
markup = content.lines.first(3).grep(/markup:\s+(\w+)/) { $1 }.first
234234

235-
return unless markup
235+
if markup
236+
return RDoc::Parser::Ruby if markup == "tomdoc"
236237

237-
# TODO Ruby should be returned only when the filename is correct
238-
return RDoc::Parser::Ruby if %w[tomdoc markdown].include? markup
239-
240-
markup = Regexp.escape markup
241-
242-
_, selected = RDoc::Parser.parsers.find do |_, parser|
243-
/^#{markup}$/i =~ parser.name.sub(/.*:/, '')
238+
markup = Regexp.escape markup
239+
_, selected = RDoc::Parser.parsers.find do |_, parser|
240+
/^#{markup}$/i =~ parser.name.sub(/.*:/, '')
241+
end
242+
selected
243+
else
244+
selected = RDoc::Parser.can_parse_by_name(file_path)
245+
return if selected == RDoc::Parser::Simple
246+
selected
244247
end
245-
246-
selected
247248
end
248249

249250
##

test/rdoc/parser/parser_test.rb

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ def test_class_use_markup
232232
# coding: utf-8 markup: rd
233233
CONTENT
234234

235-
parser = @RP.use_markup content
235+
parser = @RP.use_markup content, ""
236236

237237
assert_equal @RP::RD, parser
238238
end
@@ -242,9 +242,9 @@ def test_class_use_markup_markdown
242242
# coding: utf-8 markup: markdown
243243
CONTENT
244244

245-
parser = @RP.use_markup content
245+
parser = @RP.use_markup content, ""
246246

247-
assert_equal @RP::Ruby, parser
247+
assert_equal @RP::Markdown, parser
248248
end
249249

250250
def test_class_use_markup_modeline
@@ -253,7 +253,7 @@ def test_class_use_markup_modeline
253253
# markup: rd
254254
CONTENT
255255

256-
parser = @RP.use_markup content
256+
parser = @RP.use_markup content, ""
257257

258258
assert_equal @RP::RD, parser
259259
end
@@ -266,7 +266,7 @@ def test_class_use_markup_modeline_shebang
266266
*/
267267
CONTENT
268268

269-
parser = @RP.use_markup content
269+
parser = @RP.use_markup content, ""
270270

271271
assert_equal @RP::RD, parser
272272
end
@@ -277,7 +277,7 @@ def test_class_use_markup_shebang
277277
# coding: utf-8 markup: rd
278278
CONTENT
279279

280-
parser = @RP.use_markup content
280+
parser = @RP.use_markup content, ""
281281

282282
assert_equal @RP::RD, parser
283283
end
@@ -287,13 +287,13 @@ def test_class_use_markup_tomdoc
287287
# coding: utf-8 markup: tomdoc
288288
CONTENT
289289

290-
parser = @RP.use_markup content
290+
parser = @RP.use_markup content, ""
291291

292292
assert_equal @RP::Ruby, parser
293293
end
294294

295295
def test_class_use_markup_none
296-
parser = @RP.use_markup ''
296+
parser = @RP.use_markup '', ''
297297

298298
assert_nil parser
299299
end
@@ -303,11 +303,25 @@ def test_class_use_markup_unknown
303303
# :markup: RDoc
304304
CONTENT
305305

306-
parser = @RP.use_markup content
306+
parser = @RP.use_markup content, ""
307307

308308
assert_nil parser
309309
end
310310

311+
def test_class_use_markup_filepath
312+
parser = @RP.use_markup "", "foo.rb"
313+
314+
assert_equal @RP::Ruby, parser
315+
end
316+
317+
def test_class_use_markup_content_and_filepath
318+
parser = @RP.use_markup <<~C, "foo.c"
319+
/* :markup: markdown */
320+
C
321+
322+
assert_equal @RP::Markdown, parser
323+
end
324+
311325
def test_initialize
312326
with_top_level("file.rb", "") do |top_level, content|
313327
@RP.new top_level, content, @options, nil

0 commit comments

Comments
 (0)