blob: 218ad3bf91838e2b7cea7f938fee38725944eccc [file] [view]
# DevTools Repo Guidelines for AI Assistants
Follow these rules when working in this repository.
## Repository Rules
### Dependencies
- **`packages/devtools_shared`**: Never introduce a Flutter dependency or a dependency on web-only Dart libraries.
- **Imports**: Never import `packages/devtools_app/lib/devtools_app.dart` in code under `packages/devtools_app/lib/src/`. It is acceptable in test code.
### Published Packages (`packages/devtools_shared`, `packages/devtools_app_shared`, `packages/devtools_extensions`)
- Document file changes in the respective `CHANGELOG.md` files.
- Ensure version numbers in `pubspec.yaml` are updated accordingly for required changes.
- Ensure no breaking changes are introduced. If introduced, they must be intentional and documented.
- The published packages should not depend on unpublished packages like `packages/devtools_app` and `packages/devtools_test`.
### Code Style
- **Style Guide**: Follow the DevTools style guide in [STYLE.md](STYLE.md).
- **Formatting & Analysis**: Always ensure code is formatted properly and has no analysis errors or warnings before completing a task.
### Code Quality & Maintainability
- **DRY (Don't Repeat Yourself)**: Identify blocks of code that are 90%+ identical to existing utility methods in this repo and flag them for duplication.
- **Meaningful Naming**: Variables should describe their intent (e.g., `timeoutInMs` instead of `t`).
- **Descriptive Pull Request**: Contributors should include the information recommended in the pull request template (in `.github/PULL_REQUEST_TEMPLATE.md`).
## Documentation
- All public members should have documentation.
- **Answer your own questions**: If you have a question, find the answer, and then document it where you first looked.
- **Documentation should be useful**: Explain the *why* and the *how*.
- **Introduce terms**: Assume the reader does not know everything. Link to definitions.
- Use `///` for public-quality documentation, even on private members.
## Running Tests
- **Standard Packages**: Run unit and widget tests with `flutter test`.
- **`packages/devtools_shared`**: Run tests with `dart test`.
- **Integration Tests**: Refer to the [Integration Test README](packages/devtools_app/integration_test/README.md) for instructions on running integration tests.
## UI Development Guidelines
### Constants and Magic Values
- **Avoid Raw Values**: Avoid using raw strings or numbers in UI code. Use named constants instead.
### Themes and Styles
- **Use Existing Themes**: Use existing theme values and text styles from `packages/devtools_app_shared/lib/src/ui/theme/theme.dart` (e.g., `Theme.of(context).regularTextStyle`).
- **Reuse Patterns**: Reuse common patterns and styles used in other UI code in the repository.
### Code Reuse
- **Use Shared Components & Utils**: Prefer using reusable components from `shared/ui/` (such as `packages/devtools_app/lib/src/shared/ui/common_widgets.dart`), primitives from `shared/primitives/`, and utilities from `shared/utils/` rather than creating things from scratch.
### Helper Widgets and Methods
- **Avoid Long Build Methods**: Use separate helper widgets instead of writing excessively long build methods to keep the structure clear.
- **Prefer Widgets Over Methods**: Create small, composable helper widgets rather than helper methods that return a widget at build time. This improves readability and allows Flutter to optimize tree updates better.