공부한 것
- Typescript의 키워드 declare와 namespace에 대하여 (속시원하진 않음)
- Javascript에서 Plugin.prototype.init() 과 Plugin.init()의 차이에 대하여 (속시원하진 않음)
- leetcode-cli 패키지의 코드 중 plain text로 표현될 만한 부분을 전부 떼어서 helper.js의 helper 객체에 떼려부어 놓은 형태가 흥미로웠다. 아니, 사실 약이 잔뜩 올랐다. 이 변수가 어떤 걸 뜻하는지 실마리를 찾아서 이 파일에 도달하면 또 저 파일의 메소드 결과값이라고 하고, 찾아가면 또 다른 파일을 찾아가야 하고, 그렇게 도달한 게 이름만으로는 전혀 연관있어 보이지도 않는 helper.js였다니… 그래도 마침내 끝에 도달했다는 점에서 만족스러웠다.
알게된 점: 다음부터 다른 패키지를 해석할 때는 config.js, helper.js 이런 파일들을 먼저 살펴보자. 큰 인사이트를 얻을 수 있을 것.
진행 중
- leetcode-cli 패키지의 구조를 조금 알게 되었다.
/lib/commands/user.js
에lib/core.js
의 core 객체를 임포트 받아서core.login()
,core.logout()
메소드를 호출하는 코드가 있는데, 알 수 없는 부분이 있다.
lib/core.js
에는lib/plugin.js
의 Plugin 객체를 임포트하여 core라는 변수로 받고,core.filters
,core.getProblem()
하는 식으로 속성과 메소드를 더 추가하여 최종적으로 core를 내보내기(export) 해주고 있다. 문제는, 정작core.login()
,core.logout()
이란 메소드는 정의하고 있지 않다는 점이다.
lib/plugin.js
에는 Plugin 객체를 정의하고 있는데 마찬가지로 어디에도.login()
,.logout()
메소드는 정의되어 있지 않다. 그렇다면plugin.js
스크립트 상위에서 임포트하고 있는 6개 파일 중 하나에 정의됐을까? require()로 불러오는 순간 그 스크립트는 전체가 한 번 실행된다고 했으니까.
- 하지만 6개 스크립트 어디에도
.login()
과.logout()
메소드는 없다. 아예 Plugin 객체 관련 코드가 없다.
- 검색 결과 엉뚱하게도
lib/plugins/cache.js
를 비롯한lib/plugins
디렉토리의 4개 파일 모두에서Plugin.login()
이 정의되어 있음을 발견함.
- (계속)
- 파일 경로를 어떻게 다루는지, 설정 값과 콘솔 출력 결과는 어떻게 꾸미는지 등을 해석하고 다녀보니 어쩌면 ‘문제 00번에 대한 제출(submission) 결과(runtime과 memory)들을 시각화로 비교하기’를 콘솔 창에 출력하게 만들 수도 있을 것 같다.
- 만약 콘솔 창에 출력하는 것으로 충분하게 만들 수 있다면 이대로 다듬어서 원본 leetcode-cli에 풀 리퀘스트를 요청하는 걸 단기 목표로 삼아봐도 될 것 같다..!
- 콘솔 창에 출력하는 결과가 시원치 않고 그래프로 그려야 만족스러울 것 같으면 leetcode-cli 프로젝트에 추가할 기능으로는 마땅치 않을 것 같다. 간단한 기능만 따로 떼어 새 프로젝트를 만들든가 하자.
Uploaded by N2T