Skip to content

Commit f191513

Browse files
author
Zachary Scott
authored
Merge pull request #406 from jeremyevans/frozen-string-comment
Ignore frozen_string_literal magic comment (Fixes #389)
2 parents 31d3127 + 653ac30 commit f191513

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

lib/rdoc/encoding.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,21 @@ def self.read_file filename, encoding, force_transcode = false
7474
nil
7575
end
7676

77+
def self.remove_frozen_string_literal string
78+
string =~ /\A(?:#!.*\n)?(.*\n)/
79+
first_line = $1
80+
81+
if first_line =~ /\A# +frozen[-_]string[-_]literal[=:].+$/i
82+
string.sub! first_line, ''
83+
end
84+
end
85+
7786
##
7887
# Sets the encoding of +string+ based on the magic comment
7988

8089
def self.set_encoding string
90+
remove_frozen_string_literal string
91+
8192
string =~ /\A(?:#!.*\n)?(.*\n)/
8293

8394
first_line = $1
@@ -90,6 +101,8 @@ def self.set_encoding string
90101

91102
string.sub! first_line, ''
92103

104+
remove_frozen_string_literal string
105+
93106
return unless Object.const_defined? :Encoding
94107

95108
enc = Encoding.find name

test/test_rdoc_encoding.rb

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,45 @@ def test_class_set_encoding_bad
217217
end
218218
end
219219

220+
def test_skip_frozen_string_literal
221+
skip "Encoding not implemented" unless Object.const_defined? :Encoding
222+
223+
expected = "# frozen_string_literal: false\nhi everybody"
224+
225+
@tempfile.write expected
226+
@tempfile.flush
227+
228+
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8
229+
assert_equal "hi everybody", contents
230+
assert_equal Encoding::UTF_8, contents.encoding
231+
end
232+
233+
def test_skip_frozen_string_literal_after_coding
234+
skip "Encoding not implemented" unless Object.const_defined? :Encoding
235+
236+
expected = "# coding: utf-8\n# frozen-string-literal: false\nhi everybody"
237+
238+
@tempfile.write expected
239+
@tempfile.flush
240+
241+
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8
242+
assert_equal "hi everybody", contents
243+
assert_equal Encoding::UTF_8, contents.encoding
244+
end
245+
246+
def test_skip_frozen_string_literal_before_coding
247+
skip "Encoding not implemented" unless Object.const_defined? :Encoding
248+
249+
expected = "# frozen_string_literal: false\n# coding: utf-8\nhi everybody"
250+
251+
@tempfile.write expected
252+
@tempfile.flush
253+
254+
contents = RDoc::Encoding.read_file @tempfile.path, Encoding::UTF_8
255+
assert_equal "hi everybody", contents
256+
assert_equal Encoding::UTF_8, contents.encoding
257+
end
258+
220259
def test_sanity
221260
skip "Encoding not implemented" unless Object.const_defined? :Encoding
222261

0 commit comments

Comments
 (0)