2017-09-13 7 views
2

나는 vim을 사용하고 있으며 여러 Elm 프로젝트에 퍼져있는 함수와 타입 정의를 탐색 할 수 있기를 바랍니다. 내 이해는 이것에 대해 갈 수있는 가장 쉬운 방법은 ctags를 사용하는 것입니다.여러 Elm 프로젝트에서 ctags를 사용하려면 어떻게해야합니까?

$ ctags -R --languages=-all,+Elm 
: 당신이 ~/.ctags이를 설치하는 경우, 귀하의 모든 소스를 검색 할 수 있습니다

--langdef=Elm 
--langmap=Elm:.elm 
--regex-Elm=/^ *([[:lower:]][[:alnum:]_]+)[[:blank:]]*:[^:].*->.*/\1/f,function,functions/ 
--regex-Elm=/^ *([[:lower:]][[:alnum:]_]+)[[:blank:]]*:[^:][^-]+$/\1/c,constant,constants/ 
--regex-Elm=/^port +([[:lower:]][[:alnum:]_]+)[[:blank:]]*:[^:]/\1/p,port,ports/ 
--regex-Elm=/^type +([[:upper:]][[:alnum:]_]+)/\1/t,type,types/ 
--regex-Elm=/^type[[:blank:]]+alias[[:blank:]]+([[:upper:]][[:alnum:]_]+)/\1/a,type-alias,type-aliases/ 

: 제공 ctags-elm에 대한 링크를 포함하여 다양한 제안과 2016년 1월에서 기존의 열린 issue 있습니다


이 접근법은 여전히 ​​문제가있다 :

  • 은 자격을 갖춘 이름을 무시, 그래서 List.map의 정의로 이동하려는 시도는 Dict.map의 모든 정의, Set.mapRandom.map
  • 그것은 내 모든 디렉토리에있는 모든 *.elm 파일을 포함하여 테스트를 스캔을 제공합니다 및 오래된 종속성.

    • 자신의 정의에 자격을 갖춘 names☨를 수행하십시오 :

  • 는 기본적으로 나는 해결책을 원하는 List.map로 이동하는 것은 List.elm라는 이름의 파일에 map의 정의를 선호한다. 각 프로젝트의 source-directories
  • 는 무시 각 프로젝트의 tests 디렉토리에있는 모든 것을 무시 모든 내장 *.js 파일
  • 스캔 모든 *.elm 파일은
  • 선택적으로 각 프로젝트의 elm-stuff/packages 디렉토리에 라이브러리 소스의 최신 버전 ☨를 검색

ctags 또는 cta 각 프로젝트의 elm-packages.json 파일을 구문 분석하는 gs 래퍼? 자격을 갖춘 이름에 관한


[☨] : 나는 어떤 사람들이 같은 규정을 축약 것을 알고 있어요 :

import Math.Vector3 as V3 

와 나는 ctags를 정규식이 Math/Vector3V3.add을 찾기 위해 기대하지 않을 것이다 . 장기간의 솔루션은 Hersell을 위해 hasktags과 같은 Elm 모듈과 가져 오기를 이해하는 도구입니다. 지금은 생략 된 한정어를 이해하지 못하는 ctags로 살 수 있습니다.최신 버전에 대해서는


[☨] : 종속성 소스가 elm-stuff/packages/GITHUB-USERNAME/GITHUB-PROJECTNAME/VERSION-TAG로 다운로드하고, 시간이 지남에 따라이 여러 버전을 축적 할 수 있으며, 예를 들면 :

elm-stuff/packages/kfish/elm-gamepad/3.0.0 
elm-stuff/packages/kfish/elm-gamepad/3.1.0 
elm-stuff/packages/kfish/elm-gamepad/3.2.0 
elm-stuff/packages/kfish/elm-gamepad/3.4.0 

답변

3

난에 대답 할 수없는 엘름 - 특정 지점하지만 ...

는 각 프로젝트의 tests 디렉토리모든 것을 무시 0

~/.ctags이 추가 :

--exclude=tests 

~/.ctags이 추가 모든 내장 *.js 파일을 무시 그들이 특정 디렉토리에 컴파일되지 않은 경우 :

--exclude=\*.js 

또는 컴파일 된 디렉토리/디렉토리를 제외하십시오.

선택적으로

가 어떻게 "최신"정의합니까 각 프로젝트의 elm-stuff/packages 디렉토리에 라이브러리 소스의 최신 버전을 스캔? 를 작성, 사실

$ ctags -R -L list-of-files.txt . 

: 그 목표에 도달하기 위해 내가 생각할 수

유일한 방법은에서 보는 장소의 목록을 사전 컴파일하고 -L 플래그를 통해 ctags에 공급하는 것 쉘 스크립트를 사용하여 적절하게 list-of-files.txt을 생성하면 모든 문제점을 해결할 수 있습니다. 누군가 이미 그 생각을했을 것입니다 ...

$ man ctags을 참조하십시오.

+0

감사합니다. 종속성 버전이 저장되는 방법을 명확히하기 위해 질문을 편집했습니다. –