Skip to content
This repository has been archived by the owner on Apr 3, 2023. It is now read-only.

코드 분석

Jongmoon Yoon edited this page Sep 6, 2016 · 3 revisions

개요

자주 보지않는 코드이므로 코드를 보는 시점에 도움이 될 수 있도록 포인트를 잡아주는 내용을 정리한다.

구성

주로 수정하게 되는 내용들

  • /jsdoc-plugin/*.js
    • ko, codepen 등 기존 jsdoc 미지원 기능을 지원하기 위한 커스텀태그(@)핸들러
  • /tmpl/*.tmpl
    • HTML 페이지 레이아웃을 구성하는 파일들
  • /publish.js
    • 소스코드를 읽어와 HTML 을 빌드하는 메인 코드
  • /static/scripts/*.js
    • 페이지에서 사용할 스크립트

/tmpl

layout.tmpl

HTML 메인

/static/scripts

main.js

페이지의 메인 javascript

/publish.js

buildNav()

사이드 메뉴를 구성하는 함수

현재 group 을 지정하는 방법

  • 각 namespace 혹은 class 별로 부여된 group 이름으로 navigation 메뉴를 grouping 한다.
  • 현재는 하나의 namespace에 대해 하나의 group만을 지정할 수 있다.

같은 namespace 에 대해 다른 group 을 지정할 수 있는가?

  • jsdoc 에서 동일한 namespace 를 갖는 method 를 정확히 구분해 주는 것이 전제되어야 한다.
    • 동일한 namespace 를 갖는 methodA 와 methodB 에 대해서 구분해주어야 한다!

메뉴 구성 시 jsdoc 에서 전달 받는 members 정보를 가지고, method 를 구분해 줄 수 있는 방법이 존재하는지 확인해보자! members 에는 정보가 없다.

예제:

{
  classes: [{name: 'Child', kind: 'class', group:Y}, {name: 'Parent', kind: 'class', group:Y}, ],
  externals: [],
  events:[{name: 'testEvent', kind: 'event', memberOf: 'namespace.Car', ...}],
  globals: [],
  mixins: [],
  modules: [],
  namespaces: [{name: 'namespace', kind: 'namespace',...}, {name: 'namespace', kind: 'namespace',...}],
  interfaces: [],
  tutorials:[]
}

그러나 방법은 있다! publish.js 의 전역 데이터인 data 변수를 가지고 정보를 접근할 수 있다. 즉, buildNav 의 파라미터인 members 자체에는 method 정보가 없지만 find 를 통해 data로부터 특정 태그(eg.@group)에 대한 정보를 검색하여 가져올 수 있다.

  find({
    kind: 'function',
    memberof: v.longname,
    group: groupName //기존 위 정보에 추가하여 커스텀 태그인 group 과 일치하는 것도 검색 가능
  });

문제

JSDoc 자체에서 같은 namespace 끼리는 하나의 파일로 결과를 만들어 버림

JSDoc 자체를 수정해야하는 이슈!

JSDoc Tag 분석

@namespace

http://usejsdoc.org/tags-namespace.html

namespace 지정방법 @namespace [{<type>}] <SomeName>]

특이사항

  • @namespace 미지정 시 namespace 가 지정된 object 가 자동으로 namespace 로 매핑된다.
/**<br/>
 * My namespace.<br/>
 * @namespace<br/>
 */
var MyNamespace = {
    /** documented as MyNamespace.foo */
    foo: function() {},
    /** documented as MyNamespace.bar */
    bar: 1
};
  • 다른 Object 에 대해 동일한 namespace 를 지정한 경우 namespace 에 속한 메소드나 프로퍼티가 의도한 데로 매핑되길 기대할 수 없다.

@name

http://usejsdoc.org/tags-name.html

JSDoc 에서 자동으로 찾아준 이름과 주변 코드를 무시하고 강제로 이름을 지정하고 싶은 경우에만 제한적으로 사용한다. symbol 이름만 바꾸고 싶으면 @alias 를 쓰길 권고한다. @alias 는 해당 symbol 과 관련한 다른 정보들은 그대로 유지하기 때문이다.