프로젝트 소개

SNAFU(Symbol Name Ambiguity Fixer-Upper)는 개발자가 소스 코드에서 더 명확하고 모호성이 적은 심볼 이름을 선택할 수 있도록 돕는 명령줄 개발 도구입니다. 이 도구는 심볼 이름이 오해받기 쉬운 정도를 정량화하는 이름 모호성 수(NAN)라는 지표를 도입합니다. SNAFU는 다단계 에이전트 파이프라인을 통해 작동합니다. 먼저, 소스 파일에서 심볼을 추출하고, 함수 본문이나 문서 문자열과 같은 주변 맥락 없이 LLM에 전송하여 개발자가 코드를 처음 읽을 때의 인지 부하를 시뮬레이션합니다. LLM은 이름에 대한 여러 가지 가능한 해석과 그 확률을 제공하며, SNAFU는 이를 바탕으로 Shannon 엔트로피를 계산하고 NAN을 도출합니다. 여기서 낮은 점수는 더 명확한 이름을 의미합니다. 다음으로, 인간-루프 단계에서 사용자는 심볼의 실제 의도된 의미를 확인합니다. LLM은 그 확인된 의미만을 표현하는 새로운 이름을 제안하며, 이 제안된 이름은 새로운 NAN을 계산하기 위해 다시 평가됩니다. 새로운 이름이 모호성을 줄이지 못하면(양의 델타), 해당 제안은 폐기됩니다. 살아남은 제안들은 최종적으로 전체 맥락을 가진 LLM에 의해 검증되어, 새로운 이름이 합리적이고 확인된 의미와 일치하는지 확인합니다. 마지막으로, 제안된 이름 변경 사항이 사용자에게 보고됩니다. SNAFU는 Python 3.14 이상과 `uv` 패키지 관리자가 필요합니다. `any-llm` 라이브러리를 통해 여러 LLM 제공업체를 지원하며, 사용자는 `--model` 플래그를 사용하여 다른 모델을 지정할 수 있습니다. 기본적으로 Python을 이해하며, Ruby, C#, Java, JavaScript, TypeScript, PHP, Rust, Go 등 다른 언어에 대해서는 Tree-sitter를 사용하여 심볼을 추출합니다.