Skip to content

Commit 6bca12c

Browse files
committed
docs: update
1 parent d82eb33 commit 6bca12c

3 files changed

Lines changed: 71 additions & 50 deletions

File tree

AGENTS.md

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,31 @@
11
# AGENTS.md
22

33
## Commands (pnpm, run from root)
4-
- `pnpm dev` / `pnpm build` — dev/build all packages
5-
- `pnpm test` — run all tests (vitest, workspace projects under `extensions/*`)
6-
- `pnpm test -- --run tests/path/to/file.test.ts` — run a single test file
7-
- `pnpm lint:fix` — ESLint auto-fix (`@vida0905/eslint-config`)
8-
- `pnpm typecheck` — type-check with `tsgo -b --noEmit`
4+
- `pnpm dev` — start dev server (all packages)
5+
- `pnpm build` — production build (all packages)
6+
- `pnpm lint:fix` — auto-fix lint issues (ESLint via `@vida0905/eslint-config`)
7+
- `pnpm typecheck` — type check with `tsgo`
8+
- `pnpm test` — run all tests (Vitest)
9+
- `pnpm vitest run path/to/file.test.ts` — run a single test file
910

1011
## Architecture
11-
- **Monorepo** (pnpm workspaces). Main extension: `extensions/vscode/` (VS Code extension using `reactive-vscode`). Shared code: `shared/` (constants, types, meta). Internal packages: `packages/language-core/`, `packages/language-service/`, `packages/language-server/` (bundled into the extension via tsdown, not standalone workspace packages).
12-
- Extension entry: `extensions/vscode/src/index.ts`. Key dirs: `api/` (npm registry), `commands/`, `composables/`, `core/`, `providers/`, `utils/`.
13-
- Tests live in `extensions/vscode/tests/` and `packages/*/tests/` using vitest + `jest-mock-vscode` + `msw` for HTTP mocking.
12+
Monorepo (pnpm workspaces) for VS Code extension around [npmx.dev](https://npmx.dev). Uses `reactive-vscode` for reactivity, `tsdown` for bundling, Volar for language server. Tests are colocated (`.test.ts` next to source).
13+
14+
### Workspaces
15+
- `extensions/vscode/` — thin client (language client, commands, providers). Commands in `src/commands/` must NOT import `reactive-vscode`; use `vscode` API directly.
16+
- `packages/shared` — constants, types, LSP protocol definitions
17+
- `packages/language-core` — extractors, API clients, workspace context
18+
- `packages/language-service` — Volar plugins (hover, completion, diagnostics, document-link, catalog)
19+
- `packages/language-server` — Volar server
20+
21+
### Key abstractions
22+
- **Extractor** — parses package files into dependency AST data
23+
- **WorkspaceContext** — per-folder state (package manager, catalogs, deps)
24+
- **Plugin** — Volar language service plugin consuming resolved deps
1425

1526
## Code Style
16-
- **TypeScript strict mode**, ESNext target, Bundler resolution, ESM (`"type": "module"`).
17-
- Use `interface` over `type`. Never use `any`. Avoid `as` casts—validate instead.
18-
- No `node:` built-in imports in `src/` (browser-compatible). No `semver` default import—use subpath.
19-
- No `reactive-vscode` composables in `src/commands/`—use `vscode` API directly.
20-
- Minimal comments—only when truly necessary (prefix hacks with `// HACK:`).
21-
- Conventional Commits: `type(scope): description` (lowercase subject).
22-
- Bundler: tsdown. Package manager: pnpm (deps managed via catalogs in `pnpm-workspace.yaml`).
27+
- ESM, strict TypeScript — never use `any` or type-cast with `as`; validate rather than assert
28+
- Imports: type imports first, then `#` aliases (`#state`, `#utils/`, `#core/`), then external packages, then relative — no blank lines between groups
29+
- No `node:` built-in imports in `src/` (browser-compat constraint); use `semver` subpath imports (not bare `semver`)
30+
- Naming: files/folders `kebab-case`, tests `*.test.ts`, functions `camelCase`, constants `SCREAMING_SNAKE_CASE`, types `PascalCase`
31+
- Commits: [Conventional Commits](https://www.conventionalcommits.org/)`type(scope): description` (lowercase subject)

CONTRIBUTING.md

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -82,46 +82,54 @@ This project is organized as a monorepo using pnpm workspaces:
8282

8383
```
8484
extensions/
85-
└── vscode/ # VS Code extension
86-
├── src/ # Extension source code
87-
│ ├── api/ # API clients (package, replacement, vulnerability)
88-
│ ├── commands/ # Command handlers (vscode API only, no reactive-vscode)
89-
│ ├── composables/ # Composables (reactive-vscode hooks)
90-
│ ├── core/ # Core logic
91-
│ │ ├── extractors/ # Extractors (JSON, YAML)
92-
│ │ └── workspace.ts # Workspace context resolution
93-
│ ├── providers/ # Providers
94-
│ │ ├── code-actions/ # Code action providers (quick fixes)
95-
│ │ ├── completion-item/ # Completion providers (version autocomplete)
96-
│ │ ├── diagnostics/ # Diagnostic providers
97-
│ │ ├── document-link/ # Document link providers (package links)
98-
│ │ └── hover/ # Hover providers
99-
│ ├── types/ # TypeScript types
100-
│ ├── utils/ # Utility functions
101-
│ ├── index.ts # Extension entry point
102-
│ └── state.ts # State management
103-
├── package.json
104-
└── tsdown.config.ts
105-
shared/ # Shared code across packages
106-
├── constants.ts
107-
├── meta.ts # Auto-generated extension metadata
108-
└── types.ts
109-
playground/ # Playground for testing
110-
res/ # Assets (e.g. marketplace icon)
111-
tests/ # Tests
112-
├── __setup__/ # Test setup and utilities
113-
├── code-actions/ # Code action tests
114-
├── diagnostics/ # Diagnostic tests
115-
├── fixtures/ # Test fixtures (workspace scenarios)
116-
└── utils/ # Utility tests
85+
└── vscode/ # VS Code extension (thin client)
86+
├── src/
87+
│ ├── commands/ # Command handlers (vscode API only, no reactive-vscode)
88+
│ ├── providers/ # VS Code provider registrations
89+
│ ├── utils/ # Extension-specific utilities
90+
│ ├── client.ts # Language client setup
91+
│ ├── index.ts # Extension entry point
92+
│ ├── request.ts # Request handling
93+
│ └── state.ts # State management
94+
└── tests/
95+
packages/
96+
├── shared/ # Shared code across packages
97+
│ └── src/
98+
│ ├── commands.ts # Command identifiers
99+
│ ├── constants.ts # Shared constants
100+
│ ├── meta.ts # Auto-generated extension metadata
101+
│ ├── protocol.ts # LSP protocol definitions
102+
│ └── types.ts # Shared types
103+
├── language-core/ # Core logic (extractors, API clients, workspace)
104+
│ └── src/
105+
│ ├── api/ # API clients (package, replacement, vulnerability)
106+
│ ├── extractors/ # File parsers (JSON, YAML)
107+
│ ├── utils/ # Core utilities (with colocated tests)
108+
│ ├── workspace.ts # Workspace context resolution
109+
│ └── types.ts # Core types
110+
├── language-service/ # Language service plugins (Volar)
111+
│ └── src/
112+
│ ├── plugins/ # Service plugins
113+
│ │ ├── diagnostics/ # Diagnostic rules (with colocated tests)
114+
│ │ ├── catalog.ts # Catalog resolution
115+
│ │ ├── document-link.ts
116+
│ │ ├── hover.ts
117+
│ │ └── version-completion.ts
118+
│ └── utils/ # Service utilities (with colocated tests)
119+
└── language-server/ # Language server (Volar)
120+
└── src/
121+
├── server.ts # Server setup
122+
└── workspace.ts # Server workspace handling
123+
playground/ # Playground for testing
124+
res/ # Assets (e.g. marketplace icon)
117125
```
118126

119127
### Key concepts
120128

121-
- **Extractor** – Parses a supported file (`package.json`, `pnpm-workspace.yaml`, `.yarnrc.yml`) and extracts dependency information with AST ranges. Each file format has its own extractor in `extensions/vscode/src/core/extractors/`.
129+
- **Extractor** – Parses a supported file (`package.json`, `pnpm-workspace.yaml`, `.yarnrc.yml`) and extracts dependency information with AST ranges. Each file format has its own extractor in `packages/language-core/src/extractors/`.
122130
- **WorkspaceContext** – Holds per-workspace-folder state: detected package manager, resolved catalogs, and memoized dependency info. Created lazily and invalidated when workspace-level files change.
123-
- **ResolvedDependencyInfo** – A dependency with its protocol resolved (e.g., `catalog:` → actual version, `npm:alias@version` → underlying package). Providers consume resolved dependencies instead of raw AST data.
124-
- **Provider** – VS Code language feature (hover, completion, diagnostics, etc.) that operates on resolved dependencies.
131+
- **ResolvedDependencyInfo** – A dependency with its protocol resolved (e.g., `catalog:` → actual version, `npm:alias@version` → underlying package). Plugins consume resolved dependencies instead of raw AST data.
132+
- **Plugin** – A Volar language service plugin (hover, completion, diagnostics, etc.) in `packages/language-service/` that operates on resolved dependencies.
125133

126134
## Code style
127135

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
| Package | Description |
1313
| ------- | ----------- |
1414
| [`extensions/vscode`](./extensions/vscode) | [VS Code extension](https://marketplace.visualstudio.com/items?itemName=npmx-dev.vscode-npmx) for npmx |
15+
| [`packages/shared`](./packages/shared) | Shared constants, types, and LSP protocol definitions |
16+
| [`packages/language-core`](./packages/language-core) | Core logic: extractors, API clients, workspace context |
17+
| [`packages/language-service`](./packages/language-service) | Volar language service plugins (hover, completion, diagnostics, etc.) |
18+
| [`packages/language-server`](./packages/language-server) | Volar language server |
1519

1620
## Features
1721

0 commit comments

Comments
 (0)