diff options
author | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-11-27 10:45:24 +0000 |
---|---|---|
committer | hsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-11-27 10:45:24 +0000 |
commit | 55518710865bd7258422807524403c91347519a2 (patch) | |
tree | 4146c423ab0c55ed35d9d860e64d7e3a7e2a9efb /lib/rdoc/parser/ruby.rb | |
parent | 2d9f20e1cfdc7532a8acef4da9b8b7a788c4e99a (diff) | |
download | ruby-55518710865bd7258422807524403c91347519a2.tar.gz |
Merge rdoc-6.0.0.beta4 from upstream.
It version applied `frozen_string_literal: true`
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60920 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rdoc/parser/ruby.rb')
-rw-r--r-- | lib/rdoc/parser/ruby.rb | 78 |
1 files changed, 36 insertions, 42 deletions
diff --git a/lib/rdoc/parser/ruby.rb b/lib/rdoc/parser/ruby.rb index c81f152b56..f1856acce8 100644 --- a/lib/rdoc/parser/ruby.rb +++ b/lib/rdoc/parser/ruby.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true ## # This file contains stuff stolen outright from: # @@ -239,8 +239,8 @@ class RDoc::Parser::Ruby < RDoc::Parser def collect_first_comment skip_tkspace - comment = '' - comment.force_encoding @encoding if @encoding + comment = ''.dup + comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding first_line = true first_comment_tk_kind = nil @@ -318,8 +318,7 @@ class RDoc::Parser::Ruby < RDoc::Parser end ## - # Looks for a true or false token. Returns false if TkFALSE or TkNIL are - # found. + # Looks for a true or false token. def get_bool skip_tkspace @@ -342,7 +341,7 @@ class RDoc::Parser::Ruby < RDoc::Parser def get_class_or_module container, ignore_constants = false skip_tkspace name_t = get_tk - given_name = '' + given_name = ''.dup # class ::A -> A is in the top level if :on_op == name_t[:kind] and '::' == name_t[:text] then # bug @@ -379,7 +378,7 @@ class RDoc::Parser::Ruby < RDoc::Parser if prev_container == container and !ignore_constants given_name = name_t[:text] else - given_name << '::' << name_t[:text] + given_name << '::' + name_t[:text] end end @@ -574,27 +573,28 @@ class RDoc::Parser::Ruby < RDoc::Parser # # This routine modifies its +comment+ parameter. - def look_for_directives_in context, comment - @preprocess.handle comment, context do |directive, param| + def look_for_directives_in container, comment + @preprocess.handle comment, container do |directive, param| case directive when 'method', 'singleton-method', 'attr', 'attr_accessor', 'attr_reader', 'attr_writer' then false # handled elsewhere when 'section' then - context.set_current_section param, comment.dup + break unless container.kind_of?(RDoc::Context) + container.set_current_section param, comment.dup comment.text = '' break end end - remove_private_comments comment + comment.remove_private end ## # Adds useful info about the parser to +message+ def make_message message - prefix = "#{@file_name}:" + prefix = "#{@file_name}:".dup tk = peek_tk prefix << "#{tk[:line_no]}:#{tk[:char_no]}:" if tk @@ -913,7 +913,7 @@ class RDoc::Parser::Ruby < RDoc::Parser return unless body - value.replace body + con.value = body record_location con con.line = line_no read_documentation_modifiers con, RDoc::CONSTANT_MODIFIERS @@ -928,7 +928,7 @@ class RDoc::Parser::Ruby < RDoc::Parser def parse_constant_body container, constant, is_array_or_hash # :nodoc: nest = 0 - rhs_name = '' + rhs_name = ''.dup get_tkread @@ -944,7 +944,7 @@ class RDoc::Parser::Ruby < RDoc::Parser elsif (:on_kw == tk[:kind] && 'def' == tk[:text]) then nest += 1 elsif (:on_kw == tk[:kind] && %w{do if unless case begin}.include?(tk[:text])) then - if (RDoc::RipperStateLex::EXPR_LABEL & tk[:state]) == 0 + if (tk[:state] & RDoc::RipperStateLex::EXPR_LABEL) == 0 nest += 1 end elsif [:on_rparen, :on_rbrace, :on_rbracket].include?(tk[:kind]) || @@ -990,14 +990,13 @@ class RDoc::Parser::Ruby < RDoc::Parser column = tk[:char_no] line_no = tk[:line_no] - text = comment.text - - singleton = !!text.sub!(/(^# +:?)(singleton-)(method:)/, '\1\3') + comment.text = comment.text.sub(/(^# +:?)(singleton-)(method:)/, '\1\3') + singleton = !!$~ co = - if text.sub!(/^# +:?method: *(\S*).*?\n/i, '') then - parse_comment_ghost container, text, $1, column, line_no, comment - elsif text.sub!(/# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i, '') then + if (comment.text = comment.text.sub(/^# +:?method: *(\S*).*?\n/i, '')) && !!$~ then + 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 end @@ -1194,7 +1193,9 @@ class RDoc::Parser::Ruby < RDoc::Parser tmp = RDoc::CodeObject.new read_documentation_modifiers tmp, RDoc::ATTR_MODIFIERS - if comment.text.sub!(/^# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i, '') then + regexp = /^# +:?(attr(_reader|_writer|_accessor)?): *(\S*).*?\n/i + if regexp =~ comment.text then + comment.text = comment.text.sub(regexp, '') rw = case $1 when 'attr_reader' then 'R' when 'attr_writer' then 'W' @@ -1227,7 +1228,8 @@ class RDoc::Parser::Ruby < RDoc::Parser skip_tkspace false - singleton = !!comment.text.sub!(/(^# +:?)(singleton-)(method:)/, '\1\3') + comment.text = comment.text.sub(/(^# +:?)(singleton-)(method:)/, '\1\3') + singleton = !!$~ name = parse_meta_method_name comment, tk @@ -1290,6 +1292,7 @@ class RDoc::Parser::Ruby < RDoc::Parser token_listener meth do meth.params = '' + look_for_directives_in meth, comment comment.normalize comment.extract_call_seq meth @@ -1336,6 +1339,7 @@ class RDoc::Parser::Ruby < RDoc::Parser return unless name meth = RDoc::AnyMethod.new get_tkread, name + look_for_directives_in meth, comment meth.singleton = single == SINGLE ? true : singleton record_location meth @@ -1458,8 +1462,7 @@ class RDoc::Parser::Ruby < RDoc::Parser name_t2 = get_tk if (:on_kw == name_t[:kind] && 'self' == name_t[:text]) || (:on_op == name_t[:kind] && '%' == name_t[:text]) then - # NOTE: work around '[' being consumed early and not being re-tokenized - # as a TkAREF + # NOTE: work around '[' being consumed early if :on_lbracket == name_t2[:kind] get_tk name = '[]' @@ -1535,7 +1538,7 @@ class RDoc::Parser::Ruby < RDoc::Parser when :on_comment, :on_embdoc then @read.pop if :on_nl == end_token[:kind] and "\n" == tk[:text][-1] and - (!continue or (RDoc::RipperStateLex::EXPR_LABEL & tk[:state]) != 0) then + (!continue or (tk[:state] & RDoc::RipperStateLex::EXPR_LABEL) != 0) then if method && method.block_params.nil? then unget_tk tk read_documentation_modifiers method, modifiers @@ -1642,7 +1645,7 @@ class RDoc::Parser::Ruby < RDoc::Parser def parse_statements(container, single = NORMAL, current_method = nil, comment = new_comment('')) raise 'no' unless RDoc::Comment === comment - comment.force_encoding @encoding if @encoding + comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding nest = 1 save_visibility = container.visibility @@ -1685,12 +1688,12 @@ class RDoc::Parser::Ruby < RDoc::Parser comment.empty? comment = '' - comment.force_encoding @encoding if @encoding + comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding end while tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) do - comment << tk[:text] - comment << "\n" unless "\n" == tk[:text].chars.to_a.last + comment += tk[:text] + comment += "\n" unless "\n" == tk[:text].chars.to_a.last if tk[:text].size > 1 && "\n" == tk[:text].chars.to_a.last then skip_tkspace false # leading spaces @@ -1740,7 +1743,7 @@ class RDoc::Parser::Ruby < RDoc::Parser end when 'until', 'while' then - if (RDoc::RipperStateLex::EXPR_LABEL & tk[:state]) == 0 + if (tk[:state] & RDoc::RipperStateLex::EXPR_LABEL) == 0 nest += 1 skip_optional_do_after_expression end @@ -1756,7 +1759,7 @@ class RDoc::Parser::Ruby < RDoc::Parser skip_optional_do_after_expression when 'case', 'do', 'if', 'unless', 'begin' then - if (RDoc::RipperStateLex::EXPR_LABEL & tk[:state]) == 0 + if (tk[:state] & RDoc::RipperStateLex::EXPR_LABEL) == 0 nest += 1 end @@ -1809,7 +1812,7 @@ class RDoc::Parser::Ruby < RDoc::Parser unless keep_comment then comment = new_comment '' - comment.force_encoding @encoding if @encoding + comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding container.params = nil container.block_params = nil end @@ -2054,15 +2057,6 @@ class RDoc::Parser::Ruby < RDoc::Parser end ## - # Removes private comments from +comment+ - #-- - # TODO remove - - def remove_private_comments comment - comment.remove_private - end - - ## # Scans this Ruby file for Ruby constructs def scan |