Coding Agents Tree-sitter Query ★ 181

pdavis68/RepoMapper

MCP sunucusu ve komut satırı aracı olarak, repository'nizdeki sohbet ile ilgili dosyaların dinamik haritasını function prototipleri ve ilgili dosyalarla birlikte relevans sırasına göre sunar. Aider.chat'in "Repo Map" işlevselliğine dayanır.

Claude Desktop config.json'a ekle

{
  "mcpServers": {
    "pdavis68-repomapper": {
      "command": "node",
      "args": [
        "~/.mcp/RepoMapper/index.js"
      ]
    }
  }
}

RepoMap - Komut Satırı Aracı ve MCP Sunucusu

RepoMap, öncelikle LLM'lerin karmaşık kod tabanlarını anlamalarına ve gezinmelerine yardımcı olmak için tasarlanmış güçlü bir araçtır. Hem istek üzerine analiz için komut satırı uygulaması hem de MCP (Model Context Protocol) sunucusu olarak işlev görür ve diğer uygulamalara sürekli depo haritalama özellikleri sağlar. Yazılım deposunun bir "haritasını" oluşturarak RepoMap, önemli dosyaları, kod tanımlarını ve bunların ilişkilerini vurgular. Tree-sitter'ı doğru kod ayrıştırması için ve PageRank algoritmasını kod öğelerini önem açısından sıralamak için kullanır; böylece en ilgili bilgiler her zaman önceliklendirilebilir.

İçindekiler


Aider

RepoMap, Aider'ın Repo map işlevselliğine %100 dayanmaktadır, ancak onunla herhangi bir kod paylaştığını düşünmüyorum. Bana izin verin açıklayım.

Orijinal çabam, RepoMap sınıfını Aider'dan almak, aider'a özgü tüm bağımlılıkları kaldırmak ve ardından bunu komut satırı aracına dönüştürmekti. Python benim ana dilim değil ve bunu çalıştırmak için gerçekten zorlandım.

Birkaç saat önce, farklı bir fikrim vardı. RepoMap'i ve bunun bazı ilişkili kodlarını aider'dan aldım ve bunları bir LLM'ye (Claude veya Gemini 2.5 Pro olduğunu hatırlayamıyorum) besleyerek temel olarak aider'ın uygulamasından bu için belirtimler oluşturmasını istedi. Dolayısıyla bu uygulamanın (MCP bitleri hariç) çok ayrıntılı bir belirtimini oluşturdu ve ardından bunu, Aider with Claude 3.7 ile besleyerek komut satırı sürümünü oluşturdu.

Daha sonra Aider w/Claude 3.7, Cline w/Gemini 2.5 Pro Preview & Gemini 2.5 Flash Preview ve Phind.com, Gemini.com, Claude.com, ChatGPT.com'un bir kombinasyonunu kullandım ve birkaç saat sonra, sonunda MCP sunucusunu halletim. Yine, Python'ın gerçekten benim ana dilim olmadığını unutmayın.


Örnek Çıktı

> python repomap.py . --chat-files repomap_class.py
Chat files: ['/mnt/programming/RepoMapper/repomap_class.py']
repomap_class.py:
(Rank value: 10.8111)

  36: CACHE_VERSION = 1
  39: TAGS_CACHE_DIR = os.path.join(os.getcwd(), f".repomap.tags.cache.v{CACHE_VERSION}")
  40: SQLITE_ERRORS = (sqlite3.OperationalError, sqlite3.DatabaseError)
  43: Tag = namedtuple("Tag", "rel_fname fname line name kind".split())
  46: class RepoMap:
  49:     def __init__(
  93:     def load_tags_cache(self):
 102:     def save_tags_cache(self):
 459:     def get_ranked_tags_map_uncached(
 483:         def try_tags(num_tags: int) -> Tuple[Optional[str], int]:
 512:     def get_repo_map(

utils.py:
(Rank value: 0.2297)

  18: Tag = namedtuple("Tag", "rel_fname fname line name kind".split())
  21: def count_tokens(text: str, model_name: str = "gpt-4") -> int:
  35: def read_text(filename: str, encoding: str = "utf-8", silent: bool = False) -> Optional[str]:

importance.py:
(Rank value: 0.1149)

   8: IMPORTANT_FILENAMES = {
  27: IMPORTANT_DIR_PATTERNS = {
  34: def is_important(rel_file_path: str) -> bool:
  56: def filter_important_files(file_paths: List[str]) -> List[str]:

    ...
    ...
    ...

Özellikler

  • Akıllı Kod Analizi: Kaynak kodu ayrıştırmak ve function/class tanımlarını çıkarmak için Tree-sitter'ı kullanır
  • İlgililik Sıralaması: Kod öğelerini önemine göre sıralamak için PageRank algoritmasını kullanır
  • Token-Farkında: LLM bağlam pencerelerine uyacak şekilde token limitlerini dikkate alır
  • Önbellekleme: Hızlı sonraki çalıştırmalar için kalıcı önbellekleme
  • Çok Dil: Python, JavaScript, TypeScript, Java, C/C++, Go, Rust ve daha fazlasını destekler
  • Önemli Dosya Algılaması: Otomatik olarak önemli dosyaları tanımlar ve önceliklendiriyor (README, requirements.txt, vb.)

Kurulum

pip install -r requirements.txt

Kullanım

Temel Kullanım

# Geçerli dizini haritala
python repomap.py .

# Belirli dizini özel token limitiyle haritala
python repomap.py src/ --map-tokens 2048

# Belirli dosyaları haritala
python repomap.py file1.py file2.py

# Chat dosyalarını (daha yüksek öncelik) diğer dosyalara karşı belirt
python repomap.py --chat-files main.py --other-files src/

# Bahsedilen dosyaları ve tanımlayıcıları belirt
python repomap.py --mentioned-files config.py --mentioned-idents "main_function"

# Ayrıntılı çıktıyı etkinleştir
python repomap.py . --verbose

# Önbellekleri yenilemeyi zorla
python repomap.py . --force-refresh

# Token sayımı için modeli belirt
python repomap.py . --model gpt-3.5-turbo

# Maksimum bağlam penceresini ayarla
python repomap.py . --max-context-window 8192

# Page Rank 0 olan dosyaları hariç tut
python repomap.py . --exclude-unranked

Araç dosyaları şu sırayla önceliklendiriyor:

  1. --chat-files: Bu dosyalar en yüksek önceliğe sahiptir, çünkü şu anda üzerinde çalıştığınız dosyalar olarak kabul edilir.
  2. --mentioned-files: Bu dosyalar yüksek önceliğe sahiptir, çünkü geçerli bağlamda açıkça bahsedilir.
  3. --other-files: Bu dosyalar en düşük önceliğe sahiptir ve ek bağlam sağlamak için kullanılır.

Gelişmiş Seçenekler

# Ayrıntılı çıktıyı etkinleştir
python repomap.py . --verbose

# Önbellekleri yenilemeyi zorla
python repomap.py . --force-refresh

# Token sayımı için modeli belirt
python repomap.py . --model gpt-3.5-turbo

# Maksimum bağlam penceresini ayarla
python repomap.py . --max-context-window 8192

# Page Rank 0 olan dosyaları hariç tut
python repomap.py . --exclude-unranked

# Daha yüksek öncelik için belirli dosya veya tanımlayıcıları bahset
python repomap.py . --mentioned-files config.py --mentioned-idents "main_function"

Nasıl Çalışır

  1. Dosya Bulma: Depoyu kaynak dosyaları arar
  2. Kod Ayrıştırması: Kodu ayrıştırmak ve tanımları/referansları çıkarmak için Tree-sitter'ı kullanır
  3. Grafik Oluşturma: Dosyaların düğüm olduğu ve sembol referanslarının kenar olduğu bir grafik oluşturur
  4. Sıralama: Dosya ve sembolleri önemine göre sıralamak için PageRank algoritmasını uygular
  5. Token Optimizasyonu: Token limitler içinde en önemli içeriğe uyması için ikili arama kullanır
  6. Çıktı Oluşturma: Sonuçları okunabilir bir kod haritası olarak biçimlendirir

Çıktı Formatı

Araç, kod tabanınızın yapılandırılmış bir görünümünü gösterir:

  • Dosya yolları ve önemli kod bölümleri
  • Function ve class tanımları
  • Kod öğeleri arasındaki temel ilişkiler
  • Gerçek kullanım ve referanslara göre önceliklendirilen

Bağımlılıklar

  • tiktoken: Çeşitli LLM modelleri için token sayımı
  • networkx: Grafik algoritmaları (PageRank)
  • diskcache: Kalıcı önbellekleme
  • grep-ast: Kod ayrıştırması için Tree-sitter entegrasyonu
  • tree-sitter: Kod ayrıştırma çerçevesi
  • pygments: Sözdizimi vurgulama ve sözcüksel analiz

Önbellekleme

Araç, sonraki çalıştırmaları hızlandırmak için kalıcı önbellekleme kullanır:

  • Önbellek dizini: .repomap.tags.cache.v1/
  • Dosyalar değiştiğinde otomatik olarak geçersiz kılınır
  • --force-refresh ile temizlenebilir

Desteklenen Diller

Şu anda Tree-sitter gramer'ine sahip dilleri destekler:

  • arduino
  • chatito
  • commonlisp
  • cpp
  • csharp
  • c
  • dart
  • d
  • elisp
  • elixir
  • elm
  • gleam
  • go
  • javascript
  • java
  • lua
  • ocaml_interface
  • ocaml
  • pony
  • properties
  • python
  • racket
  • r
  • ruby
  • rust
  • solidity
  • swift
  • udev
  • c_sharp
  • hcl
  • kotlin
  • php
  • ql
  • scala

Lisans

Bu uygulama, Aider projesinden RepoMap tasarımına dayanmaktadır.


MCP Sunucusu Olarak Çalıştırma

RepoMap, diğer uygulamaların depo haritalama yeteneklerine erişmesine olanak tanıyarak bir MCP (Model Context Protocol) sunucusu olarak da çalıştırılabilir.

Kurulum

  1. RepoMap MCP sunucusu iletişim için STDIO (standart giriş/çıkış) kullanır. Taşıma katmanı için ek yapılandırma gerekli değildir.
  2. RepoMap'i Cline (veya Roo gibi benzer araçlar) ile bir MCP sunucusu olarak ayarlamak için, Cline ayarları dosyanıza (örneğin cline_mcp_settings.json) aşağıdaki yapılandırmayı ekleyin:
{
  "mcpServers": {
    "RepoMapper": {
      "disabled": false,
      "timeout": 60,
      "type": "stdio",
      "command": "/usr/bin/python3",
      "args": [
        "/absolute/path/to/repomap_server.py"
      ]
    }
  }
}
  • "/absolute/path/to/repomap_server.py" yerine repomap_server.py dosyasının gerçek yolunu yazın.

Kullanım

  1. repomap_server.py script'ini çalıştırın:
python repomap_server.py
  1. Sunucu başlayacak ve STDIO üzerinden gelen istekleri dinleyecektir.
  2. Diğer uygulamalar daha sonra sunucu tarafından sağlanan repo_map aracını depo haritaları oluşturmak için kullanabilir. Haritamak istedikleri projeye mutlak yolu olarak project_root parametresini belirtmeleri gerekir.

Değişim Günlüğü

7/13/2025 - project.json bağımlılığı kaldırıldı. MCP sunucusu, LLM'nin dosya adları açısından çalışması için biraz daha kolay hale getirildi.

Benzer MCP sunucuları

Daha fazla: Coding Agents →