17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-11-13 00:34:30 +01:00

fix: the bugs and vulnerabilities SonarCloud reports on PR #216

This commit is contained in:
2026-11-07 22:11:08 +01:00
parent 8e85def98f
commit 7667e5b2ec
65 changed files with 910 additions and 121 deletions

29
pr-reviews/PR-243.md Normal file
View File

@@ -0,0 +1,29 @@
# Review PR #243 — Editor, NMT location: assign the place from the camera; //$g found in included files
Autor: @miloszunio · base: `feat/switch-blades` · 3 pliki, +55/−1
https://github.com/MaSzyna-EU07/maszyna/pull/243
**Werdykt: Request changes (konflikty + struktura kodu)**
## Podsumowanie
1. „Przypisz z kamery” — odwrotność „The scenery is here”: kliknięty punkt mapy = obecna pozycja kamery, z tego liczony jest początek układu (`E0 = E + x`, `N0 = N − z`).
2. „Środek zapisany w pliku scenerii” — przywraca początek z linii `//$g`.
3. `read_georeference()` szuka `//$g` także w plikach `include` (jeden poziom).
Bardzo przydatne — dziś jeden błędny klik psuł georeferencję.
## Co sprawdziłem
- Wzór kamery jest zgodny z istniejącą konwersją w `editormode.cpp` (`config.north + Camera.Pos.z`, `config.east - Camera.Pos.x`). ✔
- Kolejność `{m_georeference_origin.y, m_georeference_origin.x}` zgadza się z `nmt_place_scenery` (`Point.x = east`). ✔
- `read_georeference()` jest wołane co klatkę w `render_nmt_place`, ale ma cache `m_georeference_read`, więc pliki czytane są raz. ✔
## Uwagi
1. **Konflikty.** GitHub pokazuje stan `dirty` — PR wymaga rebase na aktualny `feat/switch-blades`. Jest też `split/3-switch-blades` — warto ustalić, na którą gałąź ma finalnie trafić.
2. **Zagnieżdżenie i wcięcia w `read_georeference()`.** Wewnętrzna pętla nie została wcięta po dodaniu zewnętrznego `for`, a głębokość to teraz for→for→if→if→if — Sonar zgłosi S134 i prawdopodobnie S3776. Proponuję:
- helper `std::optional<std::filesystem::path> include_target(std::string_view line)` w anonimowym namespace,
- helper `bool parse_georeference_line(std::string const &line, …)`,
- pętlę po plikach z wczesnym `continue`.
3. **Ścieżki include.** `Global.asCurrentSceneryPath / name` — sprawdzić wielkość liter (na Linuksie `irt/IRT_sceneria.inc` vs `irt/irt_sceneria.inc`); funkcja dla głównego pliku już ma fallback na porównanie bez wielkości liter, include'y nie.
4. **Limit `files.size() < 8`** — magiczna liczba, warto nazwaną stałą z komentarzem.
5. **Ochrona przed pomyłką u źródła.** Skoro problemem jest przypadkowe „The scenery is here”, rozważyć potwierdzenie (popup) tego przycisku, gdy sceneria ma już `//$g` albo ułożone tory. Nowe przyciski to dobra droga powrotu, ale prewencja byłaby jeszcze lepsza.
6. Opis PR zawiera link do sesji Claude Code — do usunięcia przed merge (nie wnosi nic dla recenzenta).