Module RDoc::ParserFactory
In: lib/rdoc/parsers/parserfactory.rb
CodeObject Include Context Alias Attr AnyMethod Constant Require ClassModule NormalModule SingleClass AnonClass NormalClass TopLevel RubyParser RubyToken RuntimeError Error Error AttributeFormatter AnsiFormatter OverstrikeFormatter HtmlFormatter DefaultDisplay NamedThing IncludedModule Attribute Constant MethodSummary AliasName ClassEntry TopLevelEntry Description MethodDescription ModuleDescription ClassDescription Formatter SimpleFormatter HTML HTMLInOne XML CHM Context Method Class File Element Edge Node Subgraph Digraph SimpleElement Port Options Diagram Fortran95parser RDoc SimpleParser Token Markup TemplatePage Stats C_Parser NameDescriptor Cache Reader Writer Driver MethodEntry RI AllReferences Display Paths RI MarkUp Generator TokenStream ParserFactory DOT RDoc dot/f_4.png

A parser is simple a class that implements

  #initialize(file_name, body, options)

and

  #scan

The initialize method takes a file name to be used, the body of the file, and an RDoc::Options object. The scan method is then called to return an appropriately parsed TopLevel code object.

The ParseFactory is used to redirect to the correct parser given a filename extension. This magic works because individual parsers have to register themselves with us as they are loaded in. The do this using the following incantation

   require "rdoc/parsers/parsefactory"

   module RDoc

     class XyzParser
       extend ParseFactory                  <<<<
       parse_files_matching /\.xyz$/        <<<<

       def initialize(file_name, body, options)
         ...
       end

       def scan
         ...
       end
     end
   end

Just to make life interesting, if we suspect a plain text file, we also look for a shebang line just in case it‘s a potential shell script

Methods

Public Class methods

Alias an extension to another extension. After this call, files ending "new_ext" will be parsed using the same parser as "old_ext"

Return a parser that can handle a particular extension

Find the correct parser for a particular file name. Return a SimpleParser for ones that we don‘t know

Public Instance methods

Record the fact that a particular class parses files that match a given extension

[Validate]