Commit ca017ef2 authored by Rene Saarsoo's avatar Rene Saarsoo
Browse files

Implement @alias & @inheritdoc as builtin tag classes.

parent 7139830e
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
require "jsduck/builtins/inheritdoc"

module JsDuck::Builtins
  class Alias < Inheritdoc
    def initialize
      @pattern = "alias"
    end

    # For backwards compatibility decide whether the @alias was used
    # as @inheritdoc (@alias used to have the meaning of @inheritdoc
    # before) or as a real Ext4 style alias definition.
    def parse(p)
      if p.look(/\s+([\w.]+)?#\w+/)
        parse_as_inheritdoc(p)
      else
        parse_as_alias(p)
      end
    end

    # @alias widget.foo
    def parse_as_alias(p)
      p.add_tag(:alias)
      p.maybe_ident_chain(:name)
    end
  end
end
+22 −0
Original line number Diff line number Diff line
require "jsduck/builtins/tag"

module JsDuck::Builtins
  class Inheritdoc < Tag
    def initialize
      @pattern = ["inheritdoc", "inheritDoc"]
    end

    # @inheritdoc class.name#static-type-member
    def parse(p)
      parse_as_inheritdoc(p)
    end

    # This separate method exits to allow it to be also called from
    # @alias tag implementation.
    def parse_as_inheritdoc(p)
      p.add_tag(:inheritdoc)
      p.maybe_ident_chain(:cls)
      p.maybe_member_reference
    end
  end
end
+0 −32
Original line number Diff line number Diff line
@@ -33,9 +33,6 @@ module JsDuck
    end

    BUILTIN_TAGS = {
      "inheritdoc" => [:at_inheritdoc],
      "inheritDoc" => [:at_inheritdoc],
      "alias" => [:at_alias_or_inheritdoc],
    }

    def parse(input, filename="", linenr=0)
@@ -187,35 +184,6 @@ module JsDuck
      @current_tag[:doc] =~ /^ {4,}[^\n]*\Z/
    end

    #
    # Routines for parsing of concrete tags...
    #

    # For backwards compatibility decide whether the @alias was used
    # as @inheritdoc (@alias used to have the meaning of @inheritdoc
    # before).
    def at_alias_or_inheritdoc
      if look(/\s+([\w.]+)?#\w+/)
        at_inheritdoc
      else
        at_alias
      end
    end

    # matches @alias <ident-chain>
    def at_alias
      add_tag(:alias)
      skip_horiz_white
      @current_tag[:name] = ident_chain
    end

    # matches @inheritdoc class.name#static-type-member
    def at_inheritdoc
      add_tag(:inheritdoc)
      maybe_ident_chain(:cls)
      maybe_member_reference
    end

    #
    # Parsing helpers ...
    #