| # 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. |