我使用vim,我希望能夠導航到遍佈多個Elm項目的函數和類型定義。我的理解是,最簡單的方法是使用ctags。如何將ctags用於多個Elm項目?
有一個現有的開放issue從2016年1月有各種建議,其中包括一個鏈接到ctags-elm其中規定:
--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
,您可以掃描所有來源:
$ ctags -R --languages=-all,+Elm
但是這種方法仍存在問題:
- 它忽略限定名稱,因此導航到
List.map
定義將嘗試提供的Dict.map
所有定義,Set.map
,Random.map
等 - 它掃描所有在我所有目錄中的
*.elm
文件,包括測試和舊的依賴關係。
基本上我想一個解決方案:
- 可以按照合格names☨自己的定義:導航到
List.map
應該更喜歡的map
定義在名爲List.elm
文件。 - 掃描所有
*.elm
文件中的每個項目的source-directories
- 忽略了每個項目的
tests
目錄一切 - 忽略所有內置
*.js
文件 - 可選掃描的庫源最新版本☨在每個項目的
elm-stuff/packages
目錄
這可能與ctags
,或與cta gs包裝解析每個項目的elm-packages.json
文件?
[☨] 關於合格的名稱:我知道,有些人縮寫預選賽,如:
import Math.Vector3 as V3
,我不會想到一個ctags的正則表達式來尋找V3.add
在Math/Vector3
。 較長期的解決方案將是一個理解Elm模塊和導入的工具,例如hasktags
對Haskell的支持。現在我可以忍受不理解縮寫限定符的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
謝謝,我已經編輯了這個問題來澄清如何存儲依賴關係的版本。 –