Home Manual Reference Source Test Repository

src/Doc/ExternalDoc.js

import logger from 'color-logger';
import AbstractDoc from './AbstractDoc.js';
import ParamParser from '../Parser/ParamParser.js';

/**
 * Doc Class from virtual comment node of external.
 */
export default class ExternalDoc extends AbstractDoc {
  /**
   * apply own tag.
   * @private
   */
  _apply() {
    super._apply();

    delete this._value.export;
    delete this._value.importPath;
    delete this._value.importStyle;
  }

  /** specify ``external`` to kind. */
  ['@_kind']() {
    super['@_kind']();
    if (this._value.kind) return;
    this._value.kind = 'external';
  }

  /** take out self name from tag */
  ['@_name']() {
    let value = this._findTagValue(['@_name', '@external']);
    if (!value) {
      logger.w(`can not resolve name.`);
    }

    this._value.name = value;

    let tags = this._findAll(['@_name', '@external']);
    if (!tags) {
      logger.w(`can not resolve name.`);
      return;
    }

    let name;
    for (let tag of tags) {
      let {tagName, tagValue} = tag;
      if (tagName === '@_name') {
        name = tagValue;
      } else if (tagName === '@external') {
        let {typeText, paramDesc} = ParamParser.parseParamValue(tagValue, true, false, true);
        name = typeText;
        this._value.externalLink = paramDesc;
      }
    }

    this._value.name = name;
  }

  /** take out self memberof from file path. */
  ['@_memberof']() {
    super['@_memberof']();
    if (this._value.memberof) return;
    this._value.memberof = this._pathResolver.filePath;
  }

  /** specify name to longname */
  ['@_longname']() {
    super['@_longname']();
    if (this._value.longname) return;
    this._value.longname = this._value.name;
  }

  /** for @external */
  ['@external']() {
    // avoid unknown tag.
  }
}