diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 000000000..6ee552b62 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,11 @@ +# copilot-instructions.md + +This file provides guidance to Copilot Agent when working with code in this repository. + +## Codebase Overview + +Vitest is a next-generation testing framework powered by Vite. This is a monorepo using pnpm workspaces. + +## Essential references + +- Agent-specific guide: See [AGENTS.md](../AGENTS.md) diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..790f2c23a --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,144 @@ +# Vitest AI Agent Guide + +This document provides comprehensive information for AI agents working on the Vitest codebase. + +## Project Overview + +Vitest is a next-generation testing framework powered by Vite. This is a monorepo using pnpm workspaces with the following key characteristics: + +- **Language**: TypeScript/JavaScript (ESM-first) +- **Package Manager**: pnpm (required) +- **Node Version**: ^18.0.0 || >=20.0.0 +- **Build System**: Vite + Rollup +- **Monorepo Structure**: 15+ packages in `packages/` directory + +## Setup and Development + +### Initial Setup +1. Run `pnpm install` to install dependencies +2. Run `pnpm build` to build all packages +3. Install Playwright browsers when working with browser features: `npx playwright install --with-deps` + +### Key Scripts +- `pnpm build` - Build all packages +- `pnpm dev` - Watch mode for development +- `pnpm lint` - Run ESLint +- `pnpm lint:fix` - Fix linting issues automatically +- `pnpm typecheck` - Run TypeScript type checking + +## Testing + +### Running Tests +- **All tests**: `CI=true pnpm test:ci` +- **Examples**: `CI=true pnpm test:examples` +- **Specific test suite**: `CI=true cd test/ && pnpm test ` +- **Core directory test**: `CI=true pnpm test ` (for `test/core`) +- **Browser tests**: `CI=true pnpm test:browser:playwright` or `CI=true pnpm test:browser:webdriverio` + +### Testing Utilities +- **`runInlineTests`** from `test/test-utils/index.ts` - You must use this for complex file system setups (>1 file) +- **`runVitest`** from `test/test-utils/index.ts` - You can use this to run Vitest programmatically +- **No mocking policy** - You must never mock anything in tests + +## Project Structure + +### Core Packages (`packages/`) +- `vitest` - Main testing framework +- `vite-node` - Vite SSR runtime +- `browser` - Browser testing support +- `ui` - Web UI for test results +- `runner` - Test runner core +- `expect` - Assertion library +- `spy` - Mocking and spying utilities +- `snapshot` - Snapshot testing +- `coverage-v8` / `coverage-istanbul` - Code coverage +- `utils` - Shared utilities +- `mocker` - Module mocking + +### Test Organization (`test/`) +- `test/core` - Core functionality tests +- `test/browser` - Browser-specific tests +- Various test suites organized by feature + +### Important Directories +- `docs/` - Documentation (Vite-powered) +- `examples/` - Example projects and integrations +- `scripts/` - Build and development scripts +- `.github/` - GitHub Actions workflows +- `patches/` - Package patches via pnpm + +## Code Style and Conventions + +### Formatting and Linting +- **Always run** `pnpm lint:fix` after making changes +- Fix non-auto-fixable errors manually + +### TypeScript +- Strict TypeScript configuration +- Use `pnpm typecheck` to verify types +- Configuration files: `tsconfig.base.json`, `tsconfig.build.json`, `tsconfig.check.json` + +### Code Quality +- ESM-first approach +- Follow existing patterns in the codebase +- Use utilities from `@vitest/utils/*` when available. Never import from `@vitest/utils` main entry point directly. + +## Common Workflows + +### Adding New Features +1. Identify the appropriate package in `packages/` +2. Follow existing code patterns +3. Add tests using testing utilities +4. Run `pnpm build && pnpm typecheck && pnpm lint:fix` +5. Add tests with relevant test suites + +### Debugging +- Use VS Code: `⇧⌘B` (Shift+Cmd+B) or `Ctrl+Shift+B` for dev tasks +- Check `scripts/` directory for specialized development tools + +### Documentation +- Main docs in `docs/` directory +- Built with `pnpm docs:build` +- Local dev server: `pnpm docs` + +## Dependencies and Tools + +### Key Dependencies +- **Vite** - Build tool and dev server +- **Rollup** - Bundler +- **ESLint** - Linting +- **TypeScript** - Type checking +- **Playwright** - Browser testing +- **Chai/Expect** - Assertions +- **Tinypool** - Worker threading +- **Tinybench** - Benchmarking + +### Development Tools +- **tsx** - TypeScript execution +- **ni/nr** - Package manager abstraction +- **bumpp** - Version bumping +- **changelogithub** - Changelog generation + +## Browser Testing +- Two modes: Playwright and WebDriverIO +- Separate test commands for each +- Component testing supported (Vue, React, Svelte, Lit, Marko) + +## Performance Considerations +- This is a performance-critical testing framework +- Pay attention to import costs and bundle size +- Use lazy loading where appropriate +- Consider worker thread implications + +## Troubleshooting + +### Common Issues +- Ensure pnpm is used (not npm/yarn) +- Build before running tests +- Check Node.js version compatibility +- Playwright browsers must be installed for browser tests + +### Getting Help +- Check existing issues and documentation +- Review CONTRIBUTING.md for detailed guidelines +- Follow patterns in existing code diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 000000000..ca0892328 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,11 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Codebase Overview + +Vitest is a next-generation testing framework powered by Vite. This is a monorepo using pnpm workspaces. + +## Essential references + +- Agent-specific guide: See [AGENTS.md](AGENTS.md)