Skip to main content

Source Atlas

License: MIT Python 3.8+ Ask DeepWiki

Source Atlas is a powerful multi-language code analyzer that combines Tree-sitter parsing, Language Server Protocol (LSP) integration, and Neo4j graph database to create comprehensive code knowledge graphs.

✨ Features

  • 🌍 Multi-Language Support: Analyze Java, Python, Go, and TypeScript codebases
  • 🔍 Deep Code Analysis: Extract classes, methods, dependencies, and relationships
  • 🧠 LSP Integration: Leverage Language Server Protocol for semantic analysis
  • 📊 Knowledge Graph: Build rich code graphs in Neo4j for advanced querying
  • 🎯 AST-Based: Uses Tree-sitter for accurate syntax parsing
  • ⚡ Incremental Analysis: Track code changes with AST hashing
  • 🔗 Relationship Tracking: Discover implements, extends, uses, and calls relationships

🏗️ Architecture

graph TB
    A[Source Code] --> B[Tree-sitter Parser]
    B --> C[AST Analysis]
    C --> D[LSP Service]
    D --> E[Code Analyzer]
    E --> F[Code Chunks]
    F --> G[Neo4j Knowledge Graph]

Components:

  • Analyzers: Language-specific code analyzers (Java, Python, Go, TypeScript)
  • Extractors: Extract specific code elements (classes, methods, endpoints)
  • LSP Service: Integrates with language servers for semantic information
  • Neo4j Service: Manages code graph database operations
  • Models: Domain models for code chunks, methods, and relationships

📋 Prerequisites

  • Python: 3.8 or higher
  • Neo4j: 5.x running locally or remotely
  • Language-specific tools (for the languages you want to analyze):
    • Java: JDK 11+ (for LSP server)
    • Python: Python 3.8+
    • Go: Go 1.16+
    • TypeScript: Node.js 14+

🚀 Installation

1. Clone the repository

git clone https://github.com/quyen-ngv/source-atlas.git
cd source-atlas

2. Create virtual environment

python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/Mac
source .venv/bin/activate

3. Install dependencies

pip install -r requirements.txt

4. Set up Neo4j

Download and install Neo4j Desktop or use Docker:

docker run -d \
  --name neo4j \
  -p 7474:7474 -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/your_password \
  neo4j:5.14.0

5. Configure environment

Create a .env file from the template:

cp .env.example .env

Edit .env with your settings:

APP_NEO4J_URL=bolt://localhost:7687
APP_NEO4J_USER=neo4j
APP_NEO4J_PASSWORD=your_password
APP_NEO4J_DATABASE=neo4j

💻 Quick Start

Basic Usage

python -m source_atlas analyze \
  --project-path /path/to/your/project \
  --language java \
  --project-id my-project \
  --output ./output

Using as a Library

from pathlib import Path
from analyzers.analyzer_factory import AnalyzerFactory
from neo4jdb.neo4j_service import Neo4jService

# Create analyzer
analyzer = AnalyzerFactory.create_analyzer(
    language="java",
    root_path="/path/to/project",
    project_id="my-project",
    branch="main"
)

# Analyze project
with analyzer:
    chunks = analyzer.parse_project(Path("/path/to/project"))

# Import to Neo4j
neo4j_service = Neo4jService(
    url="bolt://localhost:7687",
    user="neo4j",
    password="your_password"
)
neo4j_service.neo4j_service.import_code_chunks(
                chunks=chunks,
                batch_size=500,
                main_branch='main',
                base_branch='main',
                pull_request_id=None
            )

🔧 Configuration

Environment Variables

Variable Description Default Required
APP_NEO4J_URL Neo4j connection URL bolt://localhost:7687 Yes
APP_NEO4J_USER Neo4j username neo4j Yes
APP_NEO4J_PASSWORD Neo4j password - Yes
APP_NEO4J_DATABASE Neo4j database name neo4j Yes
NEO4J_MAX_CONNECTION_POOL_SIZE Max connection pool size 50 No
NEO4J_CONNECTION_TIMEOUT Connection timeout (seconds) 30.0 No

See docs/configuration.md for detailed configuration options.

📚 Documentation

🎯 Examples

Analyze a Java Project

python -m source_atlas analyze \
  --project-path ./examples/java_project \
  --language java \
  --project-id example-java \
  --branch main

Query the Knowledge Graph

// Find all classes in a package
MATCH (c:Class {package: "com.example.service"})
RETURN c.className, c.filePath

// Find method call relationships
MATCH (m1:Method)-[:CALLS]->(m2:Method)
RETURN m1.name, m2.name

// Find implementation hierarchies
MATCH (c:Class)-[:IMPLEMENTS]->(i:Class)
RETURN c.fullClassName, i.fullClassName

🗂️ Project Structure

source_atlas/
├── analyzers/          # Language-specific code analyzers
│   ├── base_analyzer.py
│   ├── java_analyzer.py
│   └── analyzer_factory.py
├── extractors/         # Code element extractors
│   ├── java/
│   ├── python/
│   ├── go/
│   └── typescript/
├── lsp/               # LSP service integration
│   ├── lsp_service.py
│   └── implements/
├── models/            # Domain models
│   └── domain_models.py
├── neo4jdb/           # Neo4j integration
│   ├── neo4j_service.py
│   └── neo4j_dto.py
├── utils/             # Utility functions
└── config/            # Configuration

🤝 Contributing

We welcome contributions! Please see our Contributing Guidelines for details.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Tree-sitter - Incremental parsing system
  • Neo4j - Graph database platform
  • LSP - Language Server Protocol

📧 Contact

🐛 Issues & Support

If you encounter any issues or have questions:


Made with ❤️ by Nguyen Van Quyen

Metadata

Release files for source-atlas 0.1.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for source-atlas 0.1.9
File Size Uploaded
source_atlas-0.1.9.tar.gz 338.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for source-atlas 0.1.9
File Interpreter ABI Platform
source_atlas-0.1.9-py3-none-any.whl Python 3 none any Details

Total release size: 802.2 kB

Release files / source_atlas-0.1.9.tar.gz

Download URL source_atlas-0.1.9.tar.gz
Size 338.4 kB
Tags Source
SHA-256 checksum
How to use checksums
e3a437dfb49620b11b7bd9693a64d030166afb995639c0d93018e43331a67945
BLAKE2b-256 checksum
How to use checksums
9748e1a9b6b3285765bf266d57fddff3fad712ca664bbf890f1469074a6366ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release files / source_atlas-0.1.9-py3-none-any.whl

Download URL source_atlas-0.1.9-py3-none-any.whl
Size 463.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6401adc910e368baf0520328cc4a4e3b5edde844d3f57d78ada5c1c018e750a7
BLAKE2b-256 checksum
How to use checksums
70d7e55e74c0e5a56e457fbc835253f9a9dcd7687dcedbd1c3009d2647c6b10f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.7

Release history Release notifications | RSS feed

This release

0.1.9 This release

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page