최근 수정 시각 : 2026-01-02 09:29:13

Semantic


[[GitHub|
파일:GitHub 아이콘 화이트.svg파일:GitHub 로고 화이트.svg
]]
{{{#!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 · GitHub Wiki · GitHub Gist · GitHub Copilot
클라이언트 GitHub CLI · GitHub Desktop · GitHub Mobile
오픈 소스 Electron(Atom) · Linguist · Semantic · Tree-sitter
관련 문서 사건 사고 · GitHub Universe · npm
}}}}}}}}} ||
<colcolor=#fff,#fff><bgcolor=#000,#000> Semantic
<colbgcolor=#000,#000> 종류 폴리글랏 정적 분석 라이브러리
개발 GitHub
출시 2019년 2월 19일#
상태 개발 중단
최종 버전 0.7.0.0 (2019년 8월 1일)
개발 언어 Haskell
라이선스 MIT 라이선스#
링크 파일:GitHub 아이콘.svg파일:GitHub 아이콘 화이트.svg
1. 개요2. 역사3. 구조4. 지원 언어5. 기타

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를 대상으로 도입되었다.#

20204월 10일, semantic 기반 코드 내비게이션 기능에 CodeQLJava 지원이 추가되었다.#

2020년 4월 21일, semantic을 사용한 코드 내비게이션 기능이 JavaScript, PHP, TypeScript에 한해 베타를 끝내고 정식으로 공개되었다.#

2021년 즈음부터# 깃헙이 stackgraphs# 개발에 집중하기 시작하면서 개발이 뜸해지기 시작했다.#

2025년 4월 1일, 공식적으로 개발이 중단되었다.#

3. 구조

파일:4-codegen-language-support-pipeline.webp

내부적으로 Tree-sitter와 이에 기반한 문법 생태계를 사용해 언어를 증분 파싱한 후 haskell-tree-sitter 바인딩으로 Haskell파스 트리를 가져온다.

과거 구현에서는 À la carte 방식[1]으로 언어 범용적인 파스 트리 타입을 먼저 구축하고 각각의 Tree-sitter CSTAssignment를 사용해 해당 트리로 일일히 매핑했다.

현재는 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. 지원 언어

언어 Cabal 프로젝트
Ruby semantic-ruby
JavaScript/TypeScript semantic-typescript
Python semantic-python
Go semantic-go
PHP semantic-php
Java semantic-java
JSON semantic-json
JSX/TSX semantic-tsx
CodeQL semantic-codeql
Rust semantic-rust

5. 기타


[1] SWIERSTRA, W. (2008). Data types à la carte. Journal of Functional Programming, 18(4), 423–436. doi:10.1017/S0956796808006758