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.
- π 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
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
- 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+
git clone https://github.com/quyen-ngv/source-atlas.git
cd source-atlaspython -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/Mac
source .venv/bin/activatepip install -r requirements.txtDownload 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.0Create a .env file from the template:
cp .env.example .envEdit .env with your settings:
APP_NEO4J_URL=bolt://localhost:7687
APP_NEO4J_USER=neo4j
APP_NEO4J_PASSWORD=your_password
APP_NEO4J_DATABASE=neo4jpython -m source_atlas analyze \
--project-path /path/to/your/project \
--language java \
--project-id my-project \
--output ./outputfrom 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
)| 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.
- Architecture Overview - System design and components
- Configuration Guide - All configuration options
- Contributing Guidelines - How to contribute
- Security Policy - Security and vulnerability reporting
python -m source_atlas analyze \
--project-path ./examples/java_project \
--language java \
--project-id example-java \
--branch main// 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.fullClassNamesource_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
We welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Tree-sitter - Incremental parsing system
- Neo4j - Graph database platform
- LSP - Language Server Protocol
- Author: Nguyen Van Quyen
- Email: quyennv.4work@gmail.com
- GitHub: @quyen-ngv
If you encounter any issues or have questions:
- Check our documentation
- Search existing issues
- Create a new issue
Made with β€οΈ by Nguyen Van Quyen