86 lines
3.1 KiB
Markdown
86 lines
3.1 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## Development Commands
|
|
|
|
**Essential commands:**
|
|
- `npm install` - Install dependencies and run post-install hooks
|
|
- `npm run build:browser` - Builds all packages, including example applications and bundles the Browser application (preferred during development)
|
|
- `npm run compile` - Compile TypeScript packages only
|
|
- `npm run lint` - Run ESLint across all packages
|
|
- `npm run test` - Run all tests
|
|
|
|
**Application commands:**
|
|
- `npm run start:browser` - Start browser example at localhost:3000
|
|
- `npm run start:electron` - Start electron application
|
|
- `npm run watch` - Watch mode for development
|
|
|
|
**Package-specific (using lerna):**
|
|
- `npx lerna run compile --scope @theia/package-name` - Build specific package
|
|
- `npx lerna run test --scope @theia/package-name` - Test specific package
|
|
- `npx lerna run watch --scope @theia/package-name --include-filtered-dependencies --parallel` - Watch package with dependencies
|
|
|
|
## Architecture
|
|
|
|
**Monorepo Structure:**
|
|
- Lerna-managed monorepo with 80+ packages
|
|
- `/packages/` - Runtime packages (core + extensions)
|
|
- `/dev-packages/` - Development tooling
|
|
- `/examples/` - Sample applications and examples for API usage
|
|
|
|
**Platform-specific code organization:**
|
|
- `package-name/src/common/*` - Basic JavaScript APIs, runs everywhere
|
|
- `package-name/src/browser/*` - Browser/DOM APIs
|
|
- `package-name/src/node/*` - Node.js APIs
|
|
- `package-name/src/electron-browser/*` - Electron renderer process
|
|
- `package-name/src/electron-main/*` - Electron main process
|
|
|
|
**Extension System:**
|
|
- Dependency Injection via InversifyJS (property injection preferred)
|
|
- Contribution Points pattern for extensibility
|
|
- Three extension types: Theia extensions (build-time), VS Code extensions (runtime), Theia plugins (runtime)
|
|
- `theiaExtensions` in package.json defines module entry points
|
|
|
|
## Key Patterns
|
|
|
|
For more information also look at:
|
|
- @doc/coding-guidelines.md
|
|
- @doc/Testing.md
|
|
- @doc/Plugin-API.md (VS Code extension plugin API)
|
|
|
|
**Code Style:**
|
|
- 4 spaces indentation, single quotes, undefined over null
|
|
- PascalCase for types/enums, camelCase for functions/variables
|
|
- Arrow functions preferred, explicit return types required
|
|
- Property injection over constructor injection
|
|
|
|
**File Naming:**
|
|
- kebab-case for files (e.g., `document-provider.ts`)
|
|
- File name matches main exported type
|
|
- Platform folders follow strict dependency rules
|
|
|
|
**Architecture Patterns:**
|
|
- Main-Ext pattern for plugin API (browser Main ↔ plugin host Ext)
|
|
- Services as classes with DI, avoid exported functions
|
|
- ContributionProvider instead of @multiInject
|
|
- URI strings for cross-platform file paths, never raw paths
|
|
|
|
**Testing:**
|
|
- Unit tests: `*.spec.ts`
|
|
- UI tests: `*.ui-spec.ts`
|
|
- Slow tests: `*.slow-spec.ts`
|
|
|
|
## Technical Requirements
|
|
|
|
- Node.js ≥18.17.0, <21
|
|
- TypeScript ~5.4.5 with strict settings
|
|
- React 18.2.0 for UI components
|
|
- Monaco Editor for code editing
|
|
|
|
**Key Technologies:**
|
|
- Express.js for backend HTTP server
|
|
- InversifyJS for dependency injection
|
|
- Lerna for monorepo management
|
|
- Webpack for application bundling
|