Adds migration prompts
qt-migration-copilot-demo/pipeline/head There was a failure building this commit
qt-migration-copilot-demo/pipeline/head There was a failure building this commit
This commit is contained in:
3 files changed
+332
No files matched your search
@@ -0,0 +1,56 @@
|
||||
# GitHub Copilot Repository Instructions: C++23 Modernization
|
||||
|
||||
## Context
|
||||
- Language: C++
|
||||
- Target standard: C++23
|
||||
- Goal: modernize legacy C++11/14/17 code safely and incrementally
|
||||
|
||||
## Primary Rule
|
||||
Preserve existing behavior unless functional changes are explicitly requested.
|
||||
|
||||
## Balanced Modernization Policy
|
||||
- Prefer modern C++23 constructs when they clearly improve safety, readability, or maintainability.
|
||||
- Keep refactors focused and reviewable; avoid broad rewrites unless requested.
|
||||
- Prefer standard library solutions over custom or legacy patterns.
|
||||
- Respect toolchain limitations, ABI-sensitive interfaces, and repository-local style.
|
||||
|
||||
## Preferred Modernizations
|
||||
- Use `auto` where the type is obvious from the initializer; avoid it when it hides important type information.
|
||||
- Prefer structured bindings over `std::tie` or manual pair/tuple access when clearer.
|
||||
- Replace raw owning pointers and manual `delete` with RAII, usually `std::unique_ptr`.
|
||||
- Use `std::make_unique` and `std::make_shared`; prefer `std::shared_ptr` only for real shared ownership.
|
||||
- Use `std::string_view` for read-only string parameters only when lifetime safety is clear.
|
||||
- Prefer `std::span` for non-owning contiguous ranges.
|
||||
- Use `std::mdspan` only when multidimensional access is central and the change improves clarity or safety.
|
||||
- Prefer `.contains()` over `find(...) != end()` where available and clearer.
|
||||
- Prefer standard algorithms and ranges over manual loops when readability improves.
|
||||
- Use `[[nodiscard]]` where ignoring the result is likely a bug.
|
||||
- Prefer early returns over deeply nested control flow.
|
||||
- Use `std::optional` monadic operations (`and_then`, `transform`, `or_else`) when they make the code simpler.
|
||||
- Prefer `constexpr`, `if constexpr`, concepts, and `requires` over legacy `std::enable_if` / SFINAE where practical.
|
||||
- Add `noexcept`, `override`, `final`, `= default`, and `= delete` where correct and useful.
|
||||
- Prefer `enum class` over unscoped enums where practical.
|
||||
- Prefer `std::print` / `std::println` for console output when supported by the project toolchain.
|
||||
- Prefer typed `std::chrono` durations and `std::jthread` where appropriate.
|
||||
|
||||
## Avoid
|
||||
- Do not modernize mechanically if readability becomes worse.
|
||||
- Do not introduce unsupported C++23 features.
|
||||
- Do not introduce dangling references, dangling `std::string_view`, or unclear ownership.
|
||||
- Do not silently change ABI, object lifetime, exception behavior, or performance characteristics.
|
||||
- Do not rewrite unrelated code.
|
||||
|
||||
## Expected Copilot Behavior
|
||||
When making migration suggestions:
|
||||
- produce small, focused updates
|
||||
- explain non-trivial changes briefly
|
||||
- call out risky refactors explicitly
|
||||
- note compatibility or toolchain caveats
|
||||
- leave optional follow-up improvements separate
|
||||
|
||||
## Preferred Output
|
||||
Provide:
|
||||
- updated code
|
||||
- short rationale
|
||||
- compatibility/toolchain caveats
|
||||
- optional next modernization steps
|
||||
Reference in new issue
Block a user