123456789_123456789_123456789_123456789_123456789_

Module: RDoc

Overview

RDoc produces documentation for Ruby source files by parsing the source and extracting the definition for classes, modules, methods, includes and requires. It associates these with optional documentation contained in an immediately preceding comment block then renders the result using an output formatter.

For a simple introduction to writing or generating documentation using RDoc see the README.

Roadmap

If you think you found a bug in RDoc see CONTRIBUTING@Bugs

If you want to use RDoc to create documentation for your Ruby source files, see Markup and refer to rdoc --help for command line usage.

If you want to set the default markup format see RDoc::Markup@Markup+Formats

If you want to store rdoc configuration in your gem (such as the default markup format) see RDoc::Options@Saved+Options

If you want to write documentation for Ruby files see ::RDoc::Parser::Ruby

If you want to write documentation for extensions written in C see ::RDoc::Parser::C

If you want to generate documentation using rake see Task.

If you want to drive RDoc programmatically, see RDoc.

If you want to use the library to format text blocks into HTML or other formats, look at Markup.

If you want to make an RDoc plugin such as a generator or directive handler see RDoc.

If you want to write your own output generator see Generator.

If you want an overview of how RDoc works see CONTRIBUTING

Credits

RDoc is currently being maintained by Eric Hodel drbrain@segment7.net.

Dave Thomas dave@pragmaticprogrammer.com is the original author of RDoc.

  • The Ruby parser in rdoc/parse.rb is based heavily on the outstanding work of Keiju ISHITSUKA of Nippon Rational Inc, who produced the Ruby parser for irb and the rtags package.

Constant Summary

  • ATTR_MODIFIERS =

    RDoc modifiers for attributes

    # File 'lib/rdoc.rb', line 89
    GENERAL_MODIFIERS
  • CLASS_MODIFIERS =

    RDoc modifiers for classes

    # File 'lib/rdoc.rb', line 84
    GENERAL_MODIFIERS
  • CONSTANT_MODIFIERS =

    RDoc modifiers for constants

    # File 'lib/rdoc.rb', line 94
    GENERAL_MODIFIERS
  • DOT_DOC_FILENAME =

    Name of the dotfile that contains the description of files to be processed in the current directory

    # File 'lib/rdoc.rb', line 74
    ".document"
  • GENERAL_MODIFIERS =

    General RDoc modifiers

    # File 'lib/rdoc.rb', line 79
    %w[nodoc].freeze
  • KNOWN_CLASSES =

    Ruby's built-in classes, modules and exceptions

    # File 'lib/rdoc/known_classes.rb', line 7
    {
      "rb_cArray"            => "Array",
      "rb_cBasicObject"      => "BasicObject",
      "rb_cBignum"           => "Bignum",
      "rb_cClass"            => "Class",
      "rb_cData"             => "Data",
      "rb_cDir"              => "Dir",
      "rb_cEncoding"         => "Encoding",
      "rb_cFalseClass"       => "FalseClass",
      "rb_cFile"             => "File",
      "rb_cFixnum"           => "Fixnum",
      "rb_cFloat"            => "Float",
      "rb_cHash"             => "Hash",
      "rb_cIO"               => "IO",
      "rb_cInteger"          => "Integer",
      "rb_cModule"           => "Module",
      "rb_cNilClass"         => "NilClass",
      "rb_cNumeric"          => "Numeric",
      "rb_cObject"           => "Object",
      "rb_cProc"             => "Proc",
      "rb_cRange"            => "Range",
      "rb_cRefinement"       => "Refinement",
      "rb_cRegexp"           => "Regexp",
      "rb_cRubyVM"           => "RubyVM",
      "rb_cSocket"           => "Socket",
      "rb_cString"           => "String",
      "rb_cStruct"           => "Struct",
      "rb_cSymbol"           => "Symbol",
      "rb_cThread"           => "Thread",
      "rb_cTime"             => "Time",
      "rb_cTrueClass"        => "TrueClass",
    
      "rb_eArgError"         => "ArgumentError",
      "rb_eEOFError"         => "EOFError",
      "rb_eException"        => "Exception",
      "rb_eFatal"            => "fatal",
      "rb_eFloatDomainError" => "FloatDomainError",
      "rb_eIOError"          => "IOError",
      "rb_eIndexError"       => "IndexError",
      "rb_eInterrupt"        => "Interrupt",
      "rb_eLoadError"        => "LoadError",
      "rb_eNameError"        => "NameError",
      "rb_eNoMemError"       => "NoMemoryError",
      "rb_eNotImpError"      => "NotImplementedError",
      "rb_eRangeError"       => "RangeError",
      "rb_eRuntimeError"     => "RuntimeError",
      "rb_eScriptError"      => "ScriptError",
      "rb_eSecurityError"    => "SecurityError",
      "rb_eSignal"           => "SignalException",
      "rb_eStandardError"    => "StandardError",
      "rb_eSyntaxError"      => "SyntaxError",
      "rb_eSystemCallError"  => "SystemCallError",
      "rb_eSystemExit"       => "SystemExit",
      "rb_eTypeError"        => "TypeError",
      "rb_eZeroDivError"     => "ZeroDivisionError",
    
      "rb_mComparable"       => "Comparable",
      "rb_mEnumerable"       => "Enumerable",
      "rb_mErrno"            => "Errno",
      "rb_mFConst"           => "File::Constants",
      "rb_mFileTest"         => "FileTest",
      "rb_mGC"               => "GC",
      "rb_mKernel"           => "Kernel",
      "rb_mMath"             => "Math",
      "rb_mProcess"          => "Process"
    }
  • METHOD_MODIFIERS =

    RDoc modifiers for methods

    # File 'lib/rdoc.rb', line 99
    GENERAL_MODIFIERS +
    %w[arg args yield yields notnew not-new not_new doc]
  • VERSION =

    RDoc version you are using

    # File 'lib/rdoc/version.rb', line 8
    '8.0.0'
  • VISIBILITIES =

    Method visibilities

    # File 'lib/rdoc.rb', line 68
    [:public, :protected, :private]

Class Method Summary

  • .home

    Searches and returns the directory for settings.

  • .load_yaml

    Loads the YAML backend used for .rdoc_options.

  • .safe_mtime(file)

    Returns File.mtime(file), or nil if the file cannot be stat'd (missing, permission denied, etc.).

  • .yaml_serializer

    The minimal YAML serializer module loaded by .load_yaml as a fallback.

Class Method Details

.home

Searches and returns the directory for settings.

  1. $HOME/.rdoc directory, if it exists.
  2. The rdoc directory under the path specified by the XDG_DATA_HOME environment variable, if it is set.
  3. $HOME/.local/share/rdoc directory.

Other than the home directory, the containing directory will be created automatically.

[ GitHub ]

  
# File 'lib/rdoc.rb', line 153

def self.home
  rdoc_dir = begin
              File.expand_path('~/.rdoc')
            rescue ArgumentError
            end

  if File.directory?(rdoc_dir)
    rdoc_dir
  else
    require 'fileutils'
    begin
      # XDG
      xdg_data_home = ENV["XDG_DATA_HOME"] || File.join(File.expand_path("~"), '.local', 'share')
      unless File.exist?(xdg_data_home)
        FileUtils.mkdir_p xdg_data_home
      end
      File.join xdg_data_home, "rdoc"
    rescue Errno::EACCES
    end
  end
end

.load_yaml

Loads the YAML backend used for .rdoc_options.

Psych is preferred and used whenever it can be required. Requiring yaml is not attempted as a fallback because yaml is merely a thin wrapper that loads Psych anyway. When Psych is genuinely unavailable, a minimal serializer shipped with RubyGems or Bundler is loaded instead, so that RDoc does not need a runtime dependency on Psych. Callers branch on whether Psych is defined and use .yaml_serializer otherwise.

[ GitHub ]

  
# File 'lib/rdoc.rb', line 112

def self.load_yaml
  begin
    gem 'psych'
  rescue NameError => e # --disable-gems
    raise unless e.name == :gem
  rescue Gem::LoadError
  end

  begin
    require 'psych'
  rescue ::LoadError
    # Psych is unavailable; load the stub serializer shipped with RubyGems,
    # or Bundler's copy on RubyGems older than 3.5 (Ruby 3.2) where
    # rubygems/yaml_serializer does not exist yet.
    begin
      require 'rubygems/yaml_serializer'
    rescue ::LoadError
      require 'bundler/yaml_serializer'
    end
  end
end

.safe_mtime(file)

Returns File.mtime(file), or nil if the file cannot be stat'd (missing, permission denied, etc.).

[ GitHub ]

  
# File 'lib/rdoc.rb', line 179

def self.safe_mtime(file)
  File.mtime(file)
rescue SystemCallError
  nil
end

.yaml_serializer

The minimal YAML serializer module loaded by .load_yaml as a fallback. Only meaningful when Psych is not defined.

[ GitHub ]

  
# File 'lib/rdoc.rb', line 138

def self.yaml_serializer
  defined?(Gem::YAMLSerializer) ? Gem::YAMLSerializer : Bundler::YAMLSerializer
end