GNU GLOBAL 대응 언어를 대폭 늘린 Pygments Parser 도입

GNU GLOBAL 6.3.2부터 Pygments를 사용하는 플러그인 서버(이하 Pygments Parer)가 제공됩니다.
파이톤이 쓴 문법 고작자Pygments를 활용해 파이그먼트가 지원하는 다양한 프로그래밍 언어의 태그를 가능하게 한 것이다.
구체적으로 GLOBAL-6.3.2(2014년 9월 4일 출시)의 새로운 기능 GLOBAL의 저자가 쓴 것처럼 기호 라벨만 검색할 수 있는 25가지 내용을 포함한다면 150개 언어에 대응해야 한다.
개인적으로는 루비, 고, 자바스크립트 등을 표시하는 데 쓰인다.
이런 Pygments Parer, GLOBAL의 플러그인 Parer의 설정 자체가 어렵고 Pygments Parer도 일부 소프트웨어에 의존하기 때문에 가져오는 방법이 이해하기 어려울 것 같습니다.따라서 Pygments Parer의 가져오기 방법에 대해 설명하고 싶습니다.

Exubrant Ctags 활용


신속하게 설치하기 전에 약간의 예비 지식이 필요하다.
gtags에서 생성된 탭에는 정의 탭과 기호 탭이 있습니다.인용 라벨은 좀 특수해서 전문적인 참고 라벨 인덱스가 없습니다.1
기호 태그는 Pygments만 생성할 수 있습니다.기호 태그만 점프할 수 있지만 정의와 참조도 모두 기호입니다.
정의 라벨과 참고 라벨을 구분하는 것이 가장 좋다.따라서 Pygments Parser가 설치되었을 때Exuberant Ctags Exuberant Ctags를 사용하여 정의 태그를 생성합니다.
Pygments와 ctags 두 출력을 조합하여 정의, 참조, 기호의 모든 종류의 표기 점프를 이용할 수 있습니다.

또한 Exubrant Ctags에서 지원하지 않는 언어에는 기호 태그만 생성됩니다.

설치하다.


Mac의 경우


Mac에서 Homebrew를 사용하는 것은 매우 간단합니다.
$ brew install global --with-exuberant-ctags --with-pygments
이렇게 하면 Pygments의 포장과 Exubrant Ctags도 자동으로 설치됩니다.

Unix 시스템 OS의 경우


필요한 물건

  • 파이thhon2.6 이후(GLOBAL-6.3.3 이후의 Pygments Parer 중 3.x도 OK)

  • Pygments 파이톤 포장(1.6이하 추천)

  • Exuberant Ctags 5.5 이후
  • 설치하다.


    Pygments 패키지를 설치합니다.
    $ sudo pip install Pygments
    
    Exubrant Ctags를 설치합니다.
    나는 대부분의 발행에 포장이 있다고 생각한다.
    Ubuntu Linux의 경우 다음과 같습니다.
    $ sudo apt-get install exuberant-ctags
    
    GNU GLOBAL을 설치합니다.
    http://www.gnu.org/software/global/download.html から最新の global-x.x.x.tar.gz をダウンロード
    $ tar xf global-x.x.x.tar.gz
    $ cd global-x.x.x
    $ ./configure
    $ make
    $ sudo make install
    
    또한 ./configure를 실행할 때python의 실행 파일을 정확하게 찾으면
    checking for python... /usr/bin/python
    
    이런 로그에서 동작의 실행 파일을 정확하게 찾을 수 있다면
    checking for exuberant ctags program... using /usr/bin/ctags
    
    의 로그가 출력됩니다.

    시험해 보다


    태그 정보


    GNU GLOBAL이 설치된 기본 상태에서 내장 필터가 작동합니다.
    내장 서버는 C/C++, Java, PHP 등의 제한된 언어만 지원합니다.
    플러그인 파서를 사용하려면 gtags를 실행할 때 '탭' 을 지정하고 사용하고자 하는 파서를 표시해야 합니다.
    $ gtags --gtagslabel=pygments
    
    # 環境変数で指定することもできます
    $ export GTAGSLABEL=pygments
    $ gtags
    
    탭으로 지정할 수 있는 것은/usr/local/etc/gtags/gtags입니다.conf2에 정의된 다음 항목입니다.
    default:\
            :tc=native:
    native:\
            :tc=gtags:tc=htags:
    user:\
            :tc=user-custom:tc=htags:
    ctags:\
            :tc=exuberant-ctags:tc=htags:
    pygments:\
            :tc=pygments-parser:tc=htags:
    
    아무것도 지정하지 않으면 지정한 것이다default.
    Pygments 서버를 사용할 때는 레이블pygments을 지정합니다.
    또한 이 파일tc=은 다른 정의를 즉석에서 읽는다는 뜻이다.

    실행 예

    $ cat hello.rb
    class Hello
      def hello
        puts message
      end
    
      def message; 'hello, world'; end
    end
    $ gtags --gtagslabel=pygments
    $ global -x message hello.rb
    message             6 hello.rb         def message; 'hello, world'; end
    $ global -rx message hello.rb
    message             3 hello.rb             puts message
    
    정의 및 참조 태그를 각각 검색할 수 있습니다.

    문제 해결


    플러그인 서버가 호출되었는지 확인

    gtags에서 --debug 옵션을 제공하여 대상 파일이 플러그인 서버로 호출되었는지 확인할 수 있습니다.
    $ gtags --debug
    .....
    File './hello.rb' is handled as follows:
    suffix:   |.rb|
    language: |Ruby|
    parser:   |parser|
    library:  |/usr/local/lib/gtags/pygments-parser.la|
    .....
    
    확장자.rbhello.rb는 루비 언어로 판단되어 pygments-parser라고 불린다.
    원하는 플러그인 서버가 호출되지 않았다면
  • 설치 절차가 정확합니까?
  • 파일의 내용을 정확하게 설정했습니까?
  • 확인해 보는 게 좋을 거야.

    태그 생성 확인

    gtags에서는 -d 옵션과 레이블 파일 이름을 사용하여 레이블 파일의 내용을 덤프할 수 있습니다.
    $ gtags -d GTAGS
     __.COMPNAME     __.COMPNAME
     __.COMPRESS     __.COMPRESS ddefine ttypedef
     __.VERSION      __.VERSION 6
    Hello   1 @n 1 class @n
    hello   1 @n 2 def @n
    message 1 @n 6 def @n; 'hello, world'; end
    
    $ gtags -d GRTAGS
     __.COMPACT      __.COMPACT
     __.COMPLINE     __.COMPLINE
     __.COMPNAME     __.COMPNAME
     __.VERSION      __.VERSION 6
    Hello   1 @n 9
    h       1 @n 9-1
    hello   1 @n 10
    message 1 @n 3
    new     1 @n 9
    puts    1 @n 3
    
    처음 몇 줄은 관리 데이터이고, 다음 줄마다 시작하는 필드는 표시입니다.GTAGS에는 정의 라벨이 있고, GRTAGS에는 기호 라벨이 있다.GTAGS, GRTAGS 각각 원하는 태그가 생성되었는지 확인합니다.
  • (기대GTAGS의 라벨이 생성되지 않은 경우) 동작 장치를 설치했습니까?
  • Pygments가 제대로 설치되어 있습니까?
  • 확인해 보는 게 좋을 거야.

    Tips


    내장 추진기와 병용하다


    Pygments Parer 속도가 느리므로 내부 프로세서에 해당하는 파일을 내부 프로세서로 설정하고 나머지는 Pygments Parer로 처리하는 것이 좋습니다.
    또한 환경 변수GTAGSLABEL--gtagslabel 옵션을 설정하지 않아도 Pygments Parer가 작동합니다.
    설정 파일을 ~/.globalrc 이름으로 복사합니다.
    $ cp /usr/local/etc/gtags/gtags.conf ~/.globalrc    # gtags.conf の場所は環境により読み替えてください
    
    편집~/.globalrc.
    default:\
            :tc=native:
    ↓
    default:\
            :tc=native:tc=pygments:
    
    이렇게 하면 환경 변수인 GTAGSLABEL 또는 --gtagslabel 옵션을 설정하지 않아도 Pygments Parer가 작동합니다.
    또한 내부 장치를 처리할 수 있는 파일의 경우 내부 장치가 우선적으로 사용됩니다.

    끝말


    정확성이 부족하고 속도가 느리다는 단점도 있지만, 한 번만 설정하면 많은 언어에 대응할 수 있는 피그먼트 파어는 GNU GLOBAL 이용자들에게 편리할 것으로 보인다.
    사용 후의 피드백을 받을 수 있다면 정말 좋겠다.
    인용 탭은 기호 탭과 정의 탭에서 내보냅니다.기호 태그에서 정의 태그에도 동일한 식별자가 있는 태그는 참조 태그입니다. 
    환경에 따라 경로를 다시 읽으십시오.Mac의 Homebrew/usr/local/etc/gtags/gtags.conf에서 Linux는 대부분 /usr/local/share/gtags/gtags.conf이다. 

    좋은 웹페이지 즐겨찾기