소스 광산(source mine)을 만들어 언어별 코드 사용법을 쉽게 검색
소스 광산(source mine)이란 뭔가?
I’d recommend creating an elixir folder and cloning all of the open-source projects I reference below into it. Makes it very easy to grep (I’d recommend ripgrep, which is much better than grep) for various API usage patterns.
Building a Elixir & Phoenix Application - Michael Bianco - mikebian.co
참고할 만한 소스 코드를 로컬에 받아놓고 쉽게 찾아볼 수 있게 한다는 아이디어다. 좋은 아이디어 같아서 나도 시작했다. 뭔가를 캐낼 수 있는 광산이 떠올라서 소스 광산이라고 이름을 붙였다.
ripgrep을 쌩으로 왜 쓰냐? 내겐 emacs가 있는데. emacs에 해당 기능을 구현해보기로 했다.
참고할 만한 프로젝트를 선정하고 clone
이후에 늘려가기로 하고 C#은 .NET 런타임 소스 코드인 dotnet/runtime 프로젝트를 clone했고 elixir는 웹프레임워크인 phoenixframework/phoenix 프로젝트를 클론했다.
각각 ~/source_mine/csharp
, ~/source_mine/elixir
디렉터리 밑에 clone했다.
소스 광산 디렉터리에서 검색하는 함수
(defun my/source-mine-csharp ()
(interactive)
(my/source-mine--do "csharp"))
(defun my/source-mine--do (lang)
(let ((search-terms (my/source-mine--use-region-or-empty))
(dir (my/source-mine--dir lang)))
(+vertico/project-search t search-terms dir)))
(defun my/source-mine--use-region-or-empty ()
(if (doom-region-active-p)
(buffer-substring (doom-region-beginning) (doom-region-end))
""))
doom emacs에서 구현한 +vertico/project-search-from-cwd
함수 덕에 아주 손쉽게 구현했다. 선택한 영역이 있으면 그걸 초기 쿼리 문자열로 사용하고 없다면 비워서 시작한다. my/source-mine--dir
함수 인자로 언어를 넘기면 해당 언어에 해당하는 소스 광산 디렉터리를 리턴하게 했다.
소스 광산 언어별 디렉터리 구하기
(defun my/source-mine--dir (lang)
(funcall
(plist-get
(nth 0 (auth-source-search
:host "source_mine"
:user lang
:requires '(:secret)))
:secret))
)
로컬 디렉터리를 사용해서 설정으로 뺐다. 이런 로컬 설정을 담아두는 파일을 분리하기 귀찮아서 auth-source로 다 퉁쳤다. 쓸데없는 암호화 되겠다.
machine source_mine login csharp password ~/source_mine/csharp
machine source_mine login elixir password ~/source_mine/elixir
~/authinfo
파일에 위와 같은 방식으로 설정하면 된다.
검색 함수 키바인딩
M-x my/source-mine-csharp
, M-x my/source-mine-elixir
같은 식으로 함수를 호출해도 되지만 하는 김에 키를 바인딩했다.
(map! :leader
(:prefix-map ("S" . "custom search")
(:prefix-map ("m" . "source mine")
:desc "csharp" "c" #'my/source-mine-csharp
:desc "elixir" "x" #'my/source-mine-elixir
)))
emacs로 웹브라우저 검색을 편하게 하자와 동일한 prefix 키로 시작하고 m
prefix 키를 하나 더 추가해서 키 바인딩을 했다. elixir 소스 광산을 검색하려면 SPC S m x
키를 누르면 된다.
링크
- Building a Elixir & Phoenix Application - Michael Bianco - mikebian.co
- doom emacs 전환 후기 - ohyecloudy.com
- emacs로 웹브라우저 검색을 편하게 하자 - ohyecloudy.com
- auth-source와 EasyPG 기본 제공 패키지를 사용한 비밀 번호를 포함한 계정 정보 관리 - ohyecloudy.com
- dotnet/runtime - github.com
- phoenixframework/phoenix - github.com
C-x C-s C-x C-c