# Woo Ecosystem ๐
Woo Ecosystem ๆฏไธ็ป็จ Rust ็ผๅ็้ซๆง่ฝ Go ่ฏญ่จๅทฅๅ
ท๏ผๆจๅจไธบ AI ็ผ็จๅฉๆๅ IDE ๆไพๆ้็ไปฃ็ ๅๆ่ฝๅใ
## ็ณป็ปๆถๆ
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ User Layer โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ VSCode โ โ Neovim โ โ AI Agent โ โ CI/CD Pipeline โ โ
โ โ Extension โ โ Plugin โ โ (Cursor) โ โ (GitHub Actions) โ โ
โ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโโโโโฌโโโโโโโโโโโ โ
โโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโ
โ โ โ โ
โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ API Gateway โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ LSP Protocol โ gRPC โ WebSocket โ HTTP REST โ CLI Interface โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโ
โผ โผ โผ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ woofind โ โ woolink โ โ wootype โ
โ (็ฌฆๅทๆ็ดข) โโโโโถโ (็ฌฆๅท้พๆฅ) โโโโโโ (็ฑปๅ็ณป็ป) โ
โ โ โ โ โ โ
โ โข ๅๆ็ดขๅผ โ โ โข ๅ
จๅฑ็ฌฆๅท่กจ โ โ โข Salsa ๅข้ โ
โ โข ๆจก็ณๅน้
โ โ โข ่ทจๅ
่งฃๆ โ โ โข ECS ๅญๅจ โ
โ โข ่ชๅจ่กฅๅ
จ โ โ โข SoA ๅธๅฑ โ โ โข ็ฑปๅๆฃๆฅ โ
โ โข ๅพฎ็ง็บงๆฅ่ฏข โ โ โข O(1) ่ทณ่ฝฌ โ โ โข ็บณ็ง็บงๅๅบ โ
โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Shared Services โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Tree-sitter โ โ Salsa โ โ DashMap โ โ memmap2 โ โ
โ โ Parser โ โ Database โ โ Concurrent โ โ (zero-copy) โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
```
## ็ปไปถไป็ป
### woofind ๐ - ็ฌฆๅทๆ็ดขๅผๆ
**ๅฎไฝ**: ๅฟซ้็ Go ็ฌฆๅท็ดขๅผๅๆ็ดข
**ๆ ธๅฟ่ฝๅ**:
- ๅๆ็ดขๅผ: ็ฌฆๅทๅ โ ๅ
/ไฝ็ฝฎ็ๅฟซ้ๆ ๅฐ
- ๆจก็ณๅน้
: nucleo ๅผๆ๏ผๆบ่ฝๆๅบ
- ่ชๅจ่กฅๅ
จ: ๅ็ผๆ ๅ ้
- ๅข้ๆดๆฐ: notify ๆไปถ็ๅฌ
**ๆง่ฝๆๆ **:
| ็ฒพ็กฎๆฅ่ฏข | 40ฮผs | 12x ๅฟซ |
| ๆจก็ณๅน้
| 80ฮผs | 25x ๅฟซ |
| ๅทๅฏๅจ | 7ms | 15x ๅฟซ |
**ไฝฟ็จๅบๆฏ**:
- IDE ่ชๅจ่กฅๅ
จ
- ็ฌฆๅท่ทณ่ฝฌ
- ไปฃ็ ๆ็ดข
- ๅ
ๆข็ดข
---
### woolink ๐ - ่ทจๅ
็ฌฆๅท่งฃๆ
**ๅฎไฝ**: ๅ
จๅฑ็ฌฆๅท่กจ๏ผ่ฟๆฅ woofind ๅ wootype
**ๆ ธๅฟ่ฝๅ**:
- ๅ
จๅฑ็ฌฆๅท่กจ: ่ทจๅ
็ฌฆๅท็ปไธ็ฎก็
- SoA ๅธๅฑ: CPU ็ผๅญๅๅฅฝ็็ฌฆๅทๅญๅจ
- ้พๅผ็ดขๅผ: O(1) ๅฎไน่ทณ่ฝฌ
- ๅนถๅๅฎๅ
จ: 1000+ ็บฟ็จๅนถๅ่ฏปๅ
**ๆง่ฝๆๆ **:
| ็ฌฆๅทๆฅๆพ | 8ns | 18x ๅฟซ |
| ๅฎไน่ทณ่ฝฌ | O(1) | โ ๅฟซ |
| ๅ
ๅญๆ็ | 5-10x | - |
**ไฝฟ็จๅบๆฏ**:
- ่ทจๅ
ๅผ็จ่งฃๆ
- ๅ
จๅฑๆญป็ ๆฃๆต
- ๅพช็ฏไพ่ตๅๆ
- ็ฌฆๅท้พๆฅๆๅก
---
### wootype ๐ฏ - ็ฑปๅ็ณป็ปๆๅก
**ๅฎไฝ**: ๆ้ Go ็ฑปๅๆฃๆฅๅผๆ
**ๆ ธๅฟ่ฝๅ**:
- Salsa ๅข้่ฎก็ฎ: ๅช้ๆฐ่ฎก็ฎๅๆด้จๅ
- ECS ๅญๅจ: Archetype ็ดงๅๅธๅฑ
- AI Agent ๆฏๆ: 1000+ ๅนถๅ๏ผๆจๆตๆง่ก
- LSP ๅ่ฎฎ: ๅฎๆด็่ฏญ่จๆๅกๅจ
**ๆง่ฝๆๆ **:
| ๅทๅฏๅจ | 1.2ms | 800x ๅฟซ |
| ๅข้ๆดๆฐ | 25ฮผs | 20,000x ๅฟซ |
| ็ผๅญๆฅ่ฏข | 3ns | 300x ๅฟซ |
**ไฝฟ็จๅบๆฏ**:
- IDE ๅฎๆถ็ฑปๅๆฃๆฅ
- AI Agent ็ฑปๅๆจๆญ
- ๆ็ปญ้ๆๆฃๆฅ
- ็ฑปๅๅ
ณ็ณปๅๆ
## ๆฐๆฎๆต
### ๅ
ธๅ่ฏทๆฑๅค็ๆต็จ
```
1. ็จๆท่พๅ
ฅ "redis.NewClient"
โ
โผ
2. IDE / AI Agent ๅ้ LSP/gRPC ่ฏทๆฑ
โ
โผ
3. woofind ๆ็ดข็ฌฆๅท (40ฮผs)
โโโ ่ฟๅ: github.com/redis/go-redis/v9.NewClient
โ
โผ
4. woolink ่งฃๆ่ทจๅ
ๅผ็จ (50ns)
โโโ ๅฎไฝๅฐๅฎไน: /go/pkg/mod/.../redis@v9.5.1/redis.go:156
โ
โผ
5. wootype ็ฑปๅๆฃๆฅ (25ฮผs ๅข้ / 1.2ms ๅทๅฏๅจ)
โโโ ่ฟๅ: func(opt *Options) *Client
โ
โผ
6. ่ฟๅ็ปๆ็ป็จๆท
โโโ ๆปๅปถ่ฟ: < 2ms
```
### ็ดขๅผๆๅปบๆต็จ
```
Go ้กน็ฎ
โ
โโโโถ woofind ๆซๆ
โ โโโโถ Tree-sitter ่งฃๆ
โ โโโโถ ๆๅปบๅๆ็ดขๅผ
โ โโโโถ ไฟๅญ็ดขๅผๆไปถ
โ
โโโโถ woolink ้พๆฅ
โ โโโโถ ่งฃๆ import ๅ
ณ็ณป
โ โโโโถ ๆๅปบ็ฌฆๅท้พ
โ โโโโถ ๆๅปบๅ
จๅฑ็ฌฆๅท่กจ
โ
โโโโถ wootype ๅๆ
โโโโถ ่งฃๆ AST
โโโโถ Salsa ๅข้่ฎก็ฎ
โโโโถ ๆๅปบ็ฑปๅๅพ
```
## ้ๆๆนๅผ
### ไฝไธบๅบไฝฟ็จ
```rust
// ๅๆถไฝฟ็จไธไธช็ปไปถ
use woofind::Woofind;
use woolink::{SymbolUniverse, bridge::SymbolImporter};
use wootype::{TypeUniverse, prelude::*};
#[tokio::main]
async fn main() -> Result<()> {
// 1. ๆ็ดข็ฌฆๅท
let woofind = Woofind::load_or_build(Path::new("."))?;
let symbols = woofind.lookup("NewClient");
// 2. ๆๅปบๅ
จๅฑ็ฌฆๅท่กจ
let symbol_universe = SymbolUniverse::new(100_000);
let importer = SymbolImporter::new(&symbol_universe);
importer.import_from_woofind(&woofind)?;
// 3. ็ฑปๅๆฃๆฅ
let type_universe = TypeUniverse::from_symbols(&symbol_universe);
let result = type_universe.check_file("main.go");
Ok(())
}
```
### ไฝไธบๆๅกไฝฟ็จ
```yaml
# docker-compose.yml
version: '3.8'
services:
woofind:
image: woo/woofind:latest
ports:
- "8080:8080"
volumes:
- ./project:/workspace
woolink:
image: woo/woolink:latest
ports:
- "8081:8081"
depends_on:
- woofind
wootype:
image: woo/wootype:latest
ports:
- "8082:8082"
depends_on:
- woolink
```
### LSP ้ๆ
```json
// VSCode settings.json
{
"go.useLanguageServer": true,
"gopls.experimentalWorkspaceModule": true,
"woo.enabled": true,
"woo.woofindEndpoint": "http://localhost:8080",
"woo.woolinkEndpoint": "http://localhost:8081",
"woo.wootypeEndpoint": "http://localhost:8082"
}
```
## ๆง่ฝๅฏนๆฏ
### ็ปผๅๆง่ฝ
| ็ฌฆๅทๆฅๆพ | 40ฮผs | 500ฮผs | 12x |
| ๅฎไน่ทณ่ฝฌ | 50ns | 5ms | 100,000x |
| ็ฑปๅๆฃๆฅ | 1.2ms | 1s | 800x |
| ๅข้ๆดๆฐ | 25ฮผs | 300ms | 12,000x |
| ๅนถๅๆฅ่ฏข | ็บฟๆงๆฉๅฑ | ๆ้ | โ |
### ๅ
ๅญๆ็
| woofind | 1-2MB | gopls 10-50MB |
| woolink | 5-10MB | Go types 50-200MB |
| wootype | 20MB | ไผ ็ป LSP 100-500MB |
## ้จ็ฝฒๆจกๅผ
### ๆฌๅฐๅผๅ
```bash
# ๅฎ่ฃ
ๆๆ็ปไปถ
cargo install woofind woolink wootype
# ๅฏๅจๆๅก
woofind serve &
woolink serve &
wootype daemon &
```
### ๅข้ๅ
ฑไบซ
```bash
# ้ไธญๅผ็ดขๅผๆๅก
docker run -d \
-p 8080:8080 \
-v /shared/index:/index \
woo/woofind:latest \
serve --index /shared/index
```
### CI/CD ้ๆ
```yaml
# .github/workflows/typecheck.yml
- name: Setup Woo Ecosystem
uses: woo/setup-action@v1
- name: Build Index
run: |
woofind index . --output index.idx
woolink build --index index.idx --output symbols.wl
- name: Type Check
run: wootype check . --incremental
- name: Dead Code Detection
run: woolink deadcode --symbols symbols.wl --fail-on-found
```
## ๆชๆฅ่งๅ
### ็ญๆ (3-6 ไธชๆ)
- [ ] ๅฎๆด็ LSP ๅ่ฎฎๆฏๆ
- [ ] VSCode ๆฉๅฑ
- [ ] ๆดๅคๆจก็ณๅน้
็ฎๆณ
- [ ] ๅๅธๅผ็ดขๅผๆฏๆ
### ไธญๆ (6-12 ไธชๆ)
- [ ] Python/Rust ่ฏญ่จๆฏๆ
- [ ] ๆบๅจๅญฆไน ่พ
ๅฉไปฃ็ ่กฅๅ
จ
- [ ] ไบ็ซฏ็ฑปๅๆฃๆฅๆๅก
- [ ] ไผไธ็ๅฎๅ
จ็นๆง
### ้ฟๆ (12+ ไธชๆ)
- [ ] ๅค่ฏญ่จ็ปไธ็ฌฆๅท่กจ
- [ ] AI ๅ็็ผ็จๆฅๅฃ
- [ ] ๅฎๆถๅไฝ็ผ็จๆฏๆ
- [ ] WebAssembly ๆฒ็ฎฑๆง่ก
## ่ดก็ฎ
ๆไปฌๆฌข่ฟๅ็งๅฝขๅผ็่ดก็ฎ๏ผ
- ๐ ๆไบค Bug ๆฅๅ
- ๐ก ๆๅบๆฐๅ่ฝๅปบ่ฎฎ
- ๐ ๆน่ฟๆๆกฃ
- ๐ง ๆไบคไปฃ็ ไฟฎๅค
- ๐จ ่ฎพ่ฎกๆฐ Logo/UI
่ฏทๆฅ็ๅ้กน็ฎ็ [CONTRIBUTING.md](./CONTRIBUTING.md) ไบ่งฃ่ฏฆ็ปไฟกๆฏใ
## ็คพๅบ
- ๐ฌ [Discord](https://discord.gg/woo)
- ๐ง [้ฎไปถๅ่กจ](mailto:dev@woo.dev)
- ๐ฆ [Twitter](https://twitter.com/woo_ecosystem)
- ๐ [ๅๅฎข](https://blog.woo.dev)
## ่ฎธๅฏ่ฏ
Woo Ecosystem ้็จ MIT ่ฎธๅฏ่ฏๅผๆบใ
```
MIT License
Copyright (c) 2024 Woo Ecosystem Contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
```
---
**Made with โค๏ธ and ๐ฆ Rust by the Woo Team**