[前][次][番号順一覧][スレッド一覧]

ruby-changes:58929

From: aycabta <ko1@a...>
Date: Thu, 28 Nov 2019 08:26:43 +0900 (JST)
Subject: [ruby-changes:58929] 2d0a1a1869 (master): Fix ghost method line no

https://git.ruby-lang.org/ruby.git/commit/?id=2d0a1a1869

From 2d0a1a1869e601dc0d50a86a89fe98edcbd24f09 Mon Sep 17 00:00:00 2001
From: aycabta <aycabta@g...>
Date: Wed, 27 Nov 2019 11:58:38 +0900
Subject: Fix ghost method line no


diff --git a/lib/rdoc/comment.rb b/lib/rdoc/comment.rb
index 35cacdd..9e90999 100644
--- a/lib/rdoc/comment.rb
+++ b/lib/rdoc/comment.rb
@@ -24,6 +24,11 @@ class RDoc::Comment https://github.com/ruby/ruby/blob/trunk/lib/rdoc/comment.rb#L24
   attr_accessor :location
 
   ##
+  # Line where this Comment was written
+
+  attr_accessor :line
+
+  ##
   # For duck-typing when merging classes at load time
 
   alias file location # :nodoc:
diff --git a/lib/rdoc/parser/ruby.rb b/lib/rdoc/parser/ruby.rb
index 4d6c038..c87765b 100644
--- a/lib/rdoc/parser/ruby.rb
+++ b/lib/rdoc/parser/ruby.rb
@@ -244,6 +244,7 @@ class RDoc::Parser::Ruby < RDoc::Parser https://github.com/ruby/ruby/blob/trunk/lib/rdoc/parser/ruby.rb#L244
     comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
     first_line = true
     first_comment_tk_kind = nil
+    line_no = nil
 
     tk = get_tk
 
@@ -260,6 +261,7 @@ class RDoc::Parser::Ruby < RDoc::Parser https://github.com/ruby/ruby/blob/trunk/lib/rdoc/parser/ruby.rb#L261
         break if first_comment_tk_kind and not first_comment_tk_kind === tk[:kind]
         first_comment_tk_kind = tk[:kind]
 
+        line_no = tk[:line_no] if first_line
         first_line = false
         comment << comment_body
         tk = get_tk
@@ -273,7 +275,7 @@ class RDoc::Parser::Ruby < RDoc::Parser https://github.com/ruby/ruby/blob/trunk/lib/rdoc/parser/ruby.rb#L275
 
     unget_tk tk
 
-    new_comment comment
+    new_comment comment, line_no
   end
 
   ##
@@ -666,8 +668,9 @@ class RDoc::Parser::Ruby < RDoc::Parser https://github.com/ruby/ruby/blob/trunk/lib/rdoc/parser/ruby.rb#L668
   ##
   # Creates a comment with the correct format
 
-  def new_comment comment
+  def new_comment comment, line_no = nil
     c = RDoc::Comment.new comment, @top_level, :ruby
+    c.line = line_no
     c.format = @markup
     c
   end
@@ -1058,13 +1061,14 @@ class RDoc::Parser::Ruby < RDoc::Parser https://github.com/ruby/ruby/blob/trunk/lib/rdoc/parser/ruby.rb#L1061
   def parse_comment container, tk, comment
     return parse_comment_tomdoc container, tk, comment if @markup == 'tomdoc'
     column  = tk[:char_no]
-    line_no = tk[:line_no]
+    line_no = comment.line.nil? ? tk[:line_no] : comment.line
 
     comment.text = comment.text.sub(/(^# +:?)(singleton-)(method:)/, '\1\3')
     singleton = !!$~
 
     co =
       if (comment.text = comment.text.sub(/^# +:?method: *(\S*).*?\n/i, '')) && !!$~ then
+        line_no += $`.count("\n")
         parse_comment_ghost container, comment.text, $1, column, line_no, comment
       elsif (comment.text = comment.text.sub(/# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i, '')) && !!$~ then
         parse_comment_attr container, $1, $3, comment
@@ -1776,8 +1780,10 @@ class RDoc::Parser::Ruby < RDoc::Parser https://github.com/ruby/ruby/blob/trunk/lib/rdoc/parser/ruby.rb#L1780
             comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
           end
 
+          line_no = nil
           while tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) do
             comment_body = retrieve_comment_body(tk)
+            line_no = tk[:line_no] if comment.empty?
             comment += comment_body
             comment << "\n" unless comment_body =~ /\n\z/
 
@@ -1787,7 +1793,7 @@ class RDoc::Parser::Ruby < RDoc::Parser https://github.com/ruby/ruby/blob/trunk/lib/rdoc/parser/ruby.rb#L1793
             tk = get_tk
           end
 
-          comment = new_comment comment
+          comment = new_comment comment, line_no
 
           unless comment.empty? then
             look_for_directives_in container, comment
diff --git a/test/rdoc/test_rdoc_parser_ruby.rb b/test/rdoc/test_rdoc_parser_ruby.rb
index b2ea968..d9de1e7 100644
--- a/test/rdoc/test_rdoc_parser_ruby.rb
+++ b/test/rdoc/test_rdoc_parser_ruby.rb
@@ -776,6 +776,7 @@ end https://github.com/ruby/ruby/blob/trunk/test/rdoc/test_rdoc_parser_ruby.rb#L776
 
     blah = foo.method_list.first
     assert_equal 'Foo#blah', blah.full_name
+    assert_equal 3, blah.line
     assert_equal @top_level, blah.file
   end
 
@@ -825,6 +826,7 @@ end https://github.com/ruby/ruby/blob/trunk/test/rdoc/test_rdoc_parser_ruby.rb#L826
     blah = foo.method_list.first
     assert_equal 'Foo#yields', blah.full_name
     assert_equal 'yields(name)', blah.call_seq
+    assert_equal 3, blah.line
     assert_equal @top_level, blah.file
   end
 
@@ -1323,7 +1325,7 @@ EOF https://github.com/ruby/ruby/blob/trunk/test/rdoc/test_rdoc_parser_ruby.rb#L1325
     assert_equal 'foo',       foo.name
     assert_equal 'my method', foo.comment.text
     assert_equal @top_level,  foo.file
-    assert_equal 1,           foo.line
+    assert_equal 2,           foo.line
 
     assert_equal [],          foo.aliases
     assert_nil                foo.block_params
@@ -1344,8 +1346,8 @@ EOF https://github.com/ruby/ruby/blob/trunk/test/rdoc/test_rdoc_parser_ruby.rb#L1346
 
     stream = [
       {
-        :line_no => 1, :char_no => 1, :kind => :on_comment,
-        :text => "# File #{@top_level.relative_name}, line 1"
+        :line_no => 2, :char_no => 1, :kind => :on_comment,
+        :text => "# File #{@top_level.relative_name}, line 2"
       },
       { :line_no => 0, :char_no => 0, :kind => :on_nl, :text => "\n" },
       { :line_no => 1, :char_no => 1, :kind => :on_sp, :text => '' }
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]