| [[GitHub| | ||
| {{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -1px -11px" | <colbgcolor=#000,#000><colcolor=#fff,#fff> 관련 인물 | 톰 프레스턴 워너 |
| 서비스 | 저장소 · GitHub Pages · GitHub Action · GitHub Packages · Codespace · GitHub Wiki · GitHub Gist · GitHub Copilot | |
| 클라이언트 | GitHub CLI · GitHub Desktop · GitHub Mobile | |
| 오픈 소스 | Electron(Atom) · Linguist · Semantic · Tree-sitter | |
| 관련 문서 | 사건 사고 · GitHub Universe · One Dark · npm | |
| <colcolor=#fff,#fff><bgcolor=#000,#000> Semantic | |
| <colbgcolor=#000,#000> 종류 | 폴리글랏 정적 분석 라이브러리 |
| 개발 | GitHub |
| 출시 | 2019년 2월 19일# |
| 상태 | 개발 중단 |
| 최종 버전 | 0.7.0.0 (2019년 8월 1일) |
| 개발 언어 | Haskell |
| 라이선스 | MIT 라이선스# |
| 링크 | |
1. 개요
GitHub이 개발했던 폴리글랏(다중 언어) 정적 분석 Haskell 라이브러리.한때 GitHub 코드 저장소의 코드 내비게이션 기능의 백엔드로 사용되기도 했다.
2. 역사
2015년 즈음, semantic diff 기능을 구현하기 위해 개발되기 시작했다.#2019년 6월 11일, semantic 기반 정의 이동 기능이 Go, JavaScript, Python, Ruby, TypeScript를 대상으로 도입되었다. #
2019년 7월 17일, semantic 기반 정의 이동 기능에 PHP도 지원이 추가되었다.#
2019년 8월 16일, semantic 기반 GTR(레퍼런스 이동) 기능이 Go, JavaScript, PHP, Python, Ruby, TypeScript 대상으로 도입되었다.#
2019년 11월 13일, semantic 기반 코드 내비게이션 기능이 Go, Python, Ruby를 대상으로 도입되었다.#
2020년 4월 10일, semantic 기반 코드 내비게이션 기능에 CodeQL과 Java 지원이 추가되었다.#
2020년 4월 21일, semantic을 사용한 코드 내비게이션 기능이 JavaScript, PHP, TypeScript에 한해 베타를 끝내고 정식으로 공개되었다.#
2021년 즈음부터# 깃헙이 stackgraphs# 개발에 집중하기 시작하면서 개발이 뜸해지기 시작했다.#
2025년 4월 1일, 공식적으로 개발이 중단되었다.#
3. 구조
내부적으로 Tree-sitter와 이에 기반한 문법 생태계를 사용해 언어를 증분 파싱한 후
haskell-tree-sitter 바인딩으로 Haskell로 파스 트리를 가져온다.과거 구현에서는 À la carte 방식[1]으로 언어 범용적인 파스 트리 타입을 먼저 구축하고 각각의 Tree-sitter CST를
Assignment를 사용해 해당 트리로 일일히 매핑했다.현재는 2019년 3월 Tree-sitter에 named field가 구현됨에 따라
node-types.json에 CST의 타입 정보를 정적으로 출력할 수 있게 되었고, 이를 기반으로 template-haskell (TH)을 사용해 각 언어별 트리 타입을 자동으로 생성하도록 하며 alacarte 트리를 제거했다.#577. 이후 기존의 ad hoc한 Assigning 매핑은 GHC Generics로 Tree-sitter CST를 생성된 TH 트리로 자동으로 unmarshal되도록 리팩토링되었다.# 다만 이 영향으로 untyped alacarte 트리일 때 구현이 간편했던 semantic diff, graph 등의 기능들을 새 strictly typed tree에서 구현하기 힘들게 되면서 해당 기능들이 제거되었다.#662구조에 대한 자세한 내용은 codegen 문서를 보아도 좋다.
4. 지원 언어
5. 기타
- GitHub Packages에 도커 컨테이너가 올라와 있다.#
[1] SWIERSTRA, W. (2008). Data types à la carte. Journal of Functional Programming, 18(4), 423–436. doi:10.1017/S0956796808006758