Skip to content

docs: add doxygen coverage and remove AI slop comments#2508

Open
doodlum wants to merge 7 commits into
devfrom
claude/quizzical-bassi-ab0def
Open

docs: add doxygen coverage and remove AI slop comments#2508
doodlum wants to merge 7 commits into
devfrom
claude/quizzical-bassi-ab0def

Conversation

@doodlum

@doodlum doodlum commented Jun 13, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Added /** @brief */ doxygen documentation to public methods across 118/119 header files, bringing coverage from ~12% to 99.2%
  • Removed ~200 AI-generated slop comments that restated what code does (e.g. "Check if X", "Initialize Y", "Clean up Z")
  • Standardized all /// doxygen-style comments to /** */ block format for consistency
  • Preserved comments that explain WHY, hidden constraints, workarounds, shader register docs, and non-obvious behavior

Scope

  • 125 files changed (+3924/-811 lines)
  • All Feature headers, Utils headers, Menu renderer headers, CSEditor headers, TruePBR headers, and core infrastructure headers documented
  • CPP files cleaned of slop comments only (no doxygen added to implementation files per convention)

Behavioral fix included

src/Utils/Input.hMatchesKeyboardCombo now rejects combos whose prefix entries contain a non-keyboard device or a non-modifier key (previously such combos could spuriously match on the final key alone). This is a correctness fix surfaced during the doxygen review of that function, included here because it is a one-liner with no test infrastructure needed; it should receive a behavioral review.

Test plan

  • Verify build compiles without errors
  • MatchesKeyboardCombo: confirm a combo with a mouse-button prefix returns false; confirm a normal Ctrl+K combo still matches

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Documentation

    • Expanded Doxygen-style API documentation across the codebase, including core utilities, editor UI, weather system widgets, and shader/feature interfaces.
    • Added/clarified parameter and return-value descriptions for many public methods.
  • Bug Fixes

    • Improved HDR UI/HDR copy safety with additional early-exit checks and null validation during buffer/redirection operations.
  • New Features

    • Added custom cursor rendering support for the menu UI (with fallback when unavailable).
    • Added a vertical blur dispatch thread-group helper for volumetric lighting.

- Add doxygen documentation to public methods across 118/119 header
  files (99.2% coverage, up from ~12%)
- Remove ~200 AI-generated slop comments that restated what code does
- Standardize comment style: convert all /// doxygen to /** */ blocks
- Preserve comments that explain WHY, hidden constraints, workarounds,
  and non-obvious behavior

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 4fdcda37-84d3-4fa4-b55b-8b5d21b20bdb

📥 Commits

Reviewing files that changed from the base of the PR and between 1dc3812 and 8a9bd36.

📒 Files selected for processing (3)
  • src/Feature.h
  • src/Features/SubsurfaceScattering.h
  • src/Features/UnifiedWater.h
💤 Files with no reviewable changes (1)
  • src/Features/UnifiedWater.h
✅ Files skipped from review due to trivial changes (2)
  • src/Feature.h
  • src/Features/SubsurfaceScattering.h

📝 Walkthrough

Walkthrough

Documentation is expanded across many headers for buffer helpers, editor widgets, engine and menu APIs, feature contracts, weather registries, shader and material utilities, and supporting helper headers. HDR display implementation paths also add stricter UI redirection and copy guards.

Changes

Documentation and API comment expansion

Layer / File(s) Summary
Editor, menu, and profiling docs
src/Buffer.h, src/CSEditor/..., src/Deferred.h, src/EngineFix.h, src/EngineFixes/..., src/Menu/..., src/Profiler.h, src/SceneSettingsManager.h, src/ShaderFileWatcher.h, src/State.h
Buffer helpers, CSEditor widgets, core engine/menu/profile APIs, scene settings, state, and shader dependency tracking gain expanded Doxygen comments; CursorLoader also adds DrawCustomCursor.
Feature, weather, and registry docs
src/Feature.h, src/Features/..., src/Globals.h, src/Hooks.h, src/WeatherManager.h, src/WeatherVariableRegistry.h
Feature headers across rendering, weather, water, terrain, and registry systems gain extensive Doxygen coverage, with a few API declarations added or clarified.
Shader, material, and utility docs
src/ShaderTools/..., src/TruePBR..., src/Utils/..., src/I18n/I18n.h, src/FeatureIssues.h, src/FeatureCategories.h, src/FeatureConstraints.h, src/FeatureBuffer.h
Shader compiler/cache contracts, material wrappers, utility headers, serialization helpers, and profiler/support headers are documented in depth across several files.
HDR API docs and implementation safety
src/Features/HDRDisplay.h, src/Features/HDRDisplay.cpp
HDRDisplay headers receive expanded API documentation, and the implementation tightens non-D3D12 UI redirection and D3D12 copy guards.
CSEditor weather-widget docs
src/CSEditor/Weather/..., src/CSEditor/WeatherUtils.h
Weather editor widget and utility headers gain structured Doxygen comments for lifecycle, settings, search, and rendering helpers.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Poem

🐰 I hopped through headers, neat and bright,
With Doxygen stars all tucked in sight.
A shader winked, a buffer sang,
HDR paths gave a careful clang.
Docs bloom like carrots in the code—
A cozy trail along the road.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/quizzical-bassi-ab0def

@github-actions

Copy link
Copy Markdown

No actionable suggestions for changed features.

doodlum and others added 2 commits June 13, 2026 15:26
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove boilerplate /** @brief */ comments that restate method names
(GetName, GetDisplayName, GetCategory, GetShaderDefineName, IsCore,
LoadSettings, SaveSettings, RestoreDefaultSettings, GetSingleton,
HasShaderDefine) across ~40 feature headers and the Feature base class.
Keep only comments that add non-obvious behavior, constraints, or side
effects.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
src/CSEditor/Widget.h (1)

452-461: ⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Remove the duplicate SimpleFormWidget definition.

src/CSEditor/Weather/SimpleFormWidget.h already defines this class, and that header also includes ../Widget.h. Keeping a second SimpleFormWidget in Widget.h will reintroduce the type in the same translation unit and break builds; please keep a single definition and reference it from the other header instead.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/CSEditor/Widget.h` around lines 452 - 461, The file contains a duplicate
definition of class SimpleFormWidget (derived from Widget); remove this
duplicate class block from the header so only the canonical SimpleFormWidget
definition remains, and replace it with an `#include` of the dedicated header that
contains the real definition where callers need it; ensure no other translation
unit relies on the removed inline definition (update includes to pull in the
single canonical header) so there is only one SimpleFormWidget type in the
build.
src/Feature.cpp (1)

77-87: ⚠️ Potential issue | 🟡 Minor

Check unknown features before parsing Info/Version (src/Feature.cpp lines 77-87).

REL::Version featureVersion(...) is constructed before Feature::IsFeatureKnown(...), so an unknown feature with a non-parseable Info/Version can hit the catch and be reported as VERSION_MISMATCH instead of UNKNOWN. Do the IsFeatureKnown lookup first and only parse featureVersion in the known-feature branch.

src/ShaderFileWatcher.h (1)

61-75: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Clarify direct vs. transitive dependents.

GetDependents() only returns the immediate entries in hlsliToHlsl, but the new doc says it returns files that “transitively include” the input. Either update the comment to say “direct dependents” or recurse through the graph if transitive invalidation is intended.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/ShaderFileWatcher.h` around lines 61 - 75, The doc is wrong:
GetDependents currently returns only direct dependents; update GetDependents to
compute transitive dependents by performing a graph traversal (BFS/DFS) over the
hlsliToHlsl adjacency map: normalize hlsliFile as now, then use a queue/stack
plus a visited set to walk all reachable nodes from normalizedInc, accumulate
each dependent into result without duplicates, keep the existing
std::lock_guard(lock) on mutex while reading the map, and finally return the
collected vector; reference symbols: GetDependents, hlsliToHlsl, mutex.
src/Utils/Input.h (1)

110-133: ⚠️ Potential issue | 🟡 Minor

Tighten MatchesKeyboardCombo combo-input contract (or validate/normalize combos)
MatchesKeyboardCombo only uses combo.back() for the key and treats every earlier element as contributing to Ctrl/Shift/Alt. The hotkey combos created by the menu path are normalized to [optional Ctrl/Shift/Menu modifiers..., final pressed key], so non-modifier entries before the last element won’t come from there. However, combo deserialization in src/Utils/Input.h accepts arbitrary arrays of InputCombo values without enforcing “modifier-only before last”, so a persisted/edited config containing non-modifier entries earlier could be incorrectly accepted.

  • Make MatchesKeyboardCombo reject any earlier entries that aren’t Ctrl/Shift/Alt (or validate/normalize in the combo JSON parsing).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Utils/Input.h` around lines 110 - 133, MatchesKeyboardCombo currently
assumes all combo entries except combo.back() are modifiers; update the function
to validate that every element before the last is a modifier (Ctrl/Shift/Alt)
and belongs to the keyboard device, and return false if any earlier element is
non-modifier or non-keyboard. Concretely, inside MatchesKeyboardCombo iterate
combo[0..combo.size()-2] (using InputCombo::GetKey and GetDevice and comparing
to InputDeviceType::Keyboard) and check each modKey against
VK_CONTROL/VK_LCONTROL/VK_RCONTROL, VK_SHIFT/VK_LSHIFT/VK_RSHIFT, or
VK_MENU/VK_LMENU/VK_RMENU; if any entry fails those checks, return false before
evaluating current key state. This tightens the contract here; alternatively you
may also normalize/validate combos at JSON parse time, but implement the above
guard in MatchesKeyboardCombo to prevent accepting malformed persisted combos.
🧹 Nitpick comments (1)
src/Features/PerformanceOverlay.cpp (1)

1-3: Consider a tighter conventional-commit title and explicit issue linkage when applicable.

Current PR title is descriptive but exceeds the 50-char guideline. Suggested title:
docs(doxygen): expand api coverage and trim comments

If any runtime-flow adjustments in this PR are intended to fix tracked issues, add PR keywords like Closes #... or Addresses #... in the description.

As per coding guidelines, "When reviewing PRs, please provide suggestions for Conventional Commit Titles ... Issue References ...".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/Features/PerformanceOverlay.cpp` around lines 1 - 3, The PR title exceeds
the 50-character conventional-commit guideline; please update the commit/PR
title to a tighter conventional commit style such as "docs(doxygen): expand api
coverage and trim comments" and, if this change addresses a tracked issue, add
an explicit issue linkage in the PR description using keywords like "Closes
`#123`" or "Addresses `#123`"; ensure the commit message and PR description follow
the repo's Conventional Commit guidance so reviewers can quickly see the scope
and any issue associations.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/SceneSettingsManager.h`:
- Around line 16-22: The class comment for SceneSettingsManager currently says
"mutations applied immediately" which conflicts with Update()'s doc stating
scene transitions are deferred until the next frame; update the class overview
to state that setting mutations are applied immediately but the actual scene
transition (the application of those settings to the scene) is deferred and
performed on the next frame by SceneSettingsManager::Update(), so callers
understand the immediate state change vs. next-frame application timing.

---

Outside diff comments:
In `@src/CSEditor/Widget.h`:
- Around line 452-461: The file contains a duplicate definition of class
SimpleFormWidget (derived from Widget); remove this duplicate class block from
the header so only the canonical SimpleFormWidget definition remains, and
replace it with an `#include` of the dedicated header that contains the real
definition where callers need it; ensure no other translation unit relies on the
removed inline definition (update includes to pull in the single canonical
header) so there is only one SimpleFormWidget type in the build.

In `@src/ShaderFileWatcher.h`:
- Around line 61-75: The doc is wrong: GetDependents currently returns only
direct dependents; update GetDependents to compute transitive dependents by
performing a graph traversal (BFS/DFS) over the hlsliToHlsl adjacency map:
normalize hlsliFile as now, then use a queue/stack plus a visited set to walk
all reachable nodes from normalizedInc, accumulate each dependent into result
without duplicates, keep the existing std::lock_guard(lock) on mutex while
reading the map, and finally return the collected vector; reference symbols:
GetDependents, hlsliToHlsl, mutex.

In `@src/Utils/Input.h`:
- Around line 110-133: MatchesKeyboardCombo currently assumes all combo entries
except combo.back() are modifiers; update the function to validate that every
element before the last is a modifier (Ctrl/Shift/Alt) and belongs to the
keyboard device, and return false if any earlier element is non-modifier or
non-keyboard. Concretely, inside MatchesKeyboardCombo iterate
combo[0..combo.size()-2] (using InputCombo::GetKey and GetDevice and comparing
to InputDeviceType::Keyboard) and check each modKey against
VK_CONTROL/VK_LCONTROL/VK_RCONTROL, VK_SHIFT/VK_LSHIFT/VK_RSHIFT, or
VK_MENU/VK_LMENU/VK_RMENU; if any entry fails those checks, return false before
evaluating current key state. This tightens the contract here; alternatively you
may also normalize/validate combos at JSON parse time, but implement the above
guard in MatchesKeyboardCombo to prevent accepting malformed persisted combos.

---

Nitpick comments:
In `@src/Features/PerformanceOverlay.cpp`:
- Around line 1-3: The PR title exceeds the 50-character conventional-commit
guideline; please update the commit/PR title to a tighter conventional commit
style such as "docs(doxygen): expand api coverage and trim comments" and, if
this change addresses a tracked issue, add an explicit issue linkage in the PR
description using keywords like "Closes `#123`" or "Addresses `#123`"; ensure the
commit message and PR description follow the repo's Conventional Commit guidance
so reviewers can quickly see the scope and any issue associations.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: c2c7250a-005f-4b9f-a802-5a5366133ba2

📥 Commits

Reviewing files that changed from the base of the PR and between 45fbb03 and f67a4b3.

📒 Files selected for processing (125)
  • src/Buffer.h
  • src/CSEditor/EditorWindow.cpp
  • src/CSEditor/EditorWindow.h
  • src/CSEditor/InteriorOnlyPanel.h
  • src/CSEditor/LightEditor.h
  • src/CSEditor/PaletteWindow.h
  • src/CSEditor/Weather/CellLightingWidget.cpp
  • src/CSEditor/Weather/CellLightingWidget.h
  • src/CSEditor/Weather/ImageSpaceWidget.h
  • src/CSEditor/Weather/LensFlareWidget.h
  • src/CSEditor/Weather/LightingTemplateWidget.h
  • src/CSEditor/Weather/PrecipitationWidget.h
  • src/CSEditor/Weather/ReferenceEffectWidget.h
  • src/CSEditor/Weather/SimpleFormWidget.h
  • src/CSEditor/Weather/VolumetricLightingWidget.h
  • src/CSEditor/Weather/WeatherWidget.cpp
  • src/CSEditor/Weather/WeatherWidget.h
  • src/CSEditor/WeatherUtils.h
  • src/CSEditor/Widget.h
  • src/Deferred.h
  • src/EngineFix.h
  • src/EngineFixes/ShadowmapCascadeCullingFix.h
  • src/EngineFixes/ShadowmapCascadeRasterizerFix.h
  • src/Feature.cpp
  • src/Feature.h
  • src/FeatureBuffer.h
  • src/FeatureCategories.h
  • src/FeatureConstraints.h
  • src/FeatureIssues.cpp
  • src/FeatureIssues.h
  • src/Features/CloudShadows.cpp
  • src/Features/CloudShadows.h
  • src/Features/DynamicCubemaps.cpp
  • src/Features/DynamicCubemaps.h
  • src/Features/ExponentialHeightFog.h
  • src/Features/ExtendedMaterials.h
  • src/Features/ExtendedTranslucency.h
  • src/Features/GrassCollision.h
  • src/Features/GrassLighting.h
  • src/Features/HDRDisplay.cpp
  • src/Features/HDRDisplay.h
  • src/Features/HairSpecular.h
  • src/Features/IBL.cpp
  • src/Features/IBL.h
  • src/Features/InteriorSun.h
  • src/Features/InverseSquareLighting.h
  • src/Features/InverseSquareLighting/Common.h
  • src/Features/LODBlending.h
  • src/Features/LightLimitFix.h
  • src/Features/LinearLighting.h
  • src/Features/PerformanceOverlay.cpp
  • src/Features/PerformanceOverlay/ABTesting/ABTestAggregator.h
  • src/Features/PerformanceOverlay/ABTesting/ABTesting.h
  • src/Features/ScreenSpaceGI.h
  • src/Features/ScreenSpaceShadows.h
  • src/Features/ScreenSpaceShadows/bend_sss_cpu.h
  • src/Features/ScreenshotFeature.h
  • src/Features/Skin.h
  • src/Features/SkySync.h
  • src/Features/Skylighting.h
  • src/Features/SubsurfaceScattering.h
  • src/Features/TerrainBlending.cpp
  • src/Features/TerrainBlending.h
  • src/Features/TerrainHelper.cpp
  • src/Features/TerrainHelper.h
  • src/Features/TerrainShadows.h
  • src/Features/TerrainVariation.cpp
  • src/Features/TerrainVariation.h
  • src/Features/UnifiedWater.h
  • src/Features/UnifiedWater/Flowmap.h
  • src/Features/UnifiedWater/WaterCache.h
  • src/Features/Upscaling.h
  • src/Features/Upscaling/FidelityFX.h
  • src/Features/Upscaling/Streamline.h
  • src/Features/VolumetricLighting.h
  • src/Features/VolumetricShadows.cpp
  • src/Features/VolumetricShadows.h
  • src/Features/WaterEffects.h
  • src/Features/WetnessEffects.cpp
  • src/Features/WetnessEffects.h
  • src/Globals.h
  • src/Hooks.h
  • src/I18n/I18n.h
  • src/Menu.h
  • src/Menu/AdvancedSettingsRenderer.h
  • src/Menu/BackgroundBlur.h
  • src/Menu/CursorLoader.h
  • src/Menu/FeatureListRenderer.h
  • src/Menu/HomePageRenderer.h
  • src/Menu/IconLoader.h
  • src/Menu/MenuHeaderRenderer.h
  • src/Menu/ProfilingRenderer.h
  • src/Menu/SettingsTabRenderer.h
  • src/Profiler.h
  • src/SceneSettingsManager.h
  • src/SettingsOverrideManager.cpp
  • src/SettingsOverrideManager.h
  • src/ShaderCache.h
  • src/ShaderFileWatcher.h
  • src/ShaderTools/BSShader.h
  • src/ShaderTools/BSShaderHooks.h
  • src/ShaderTools/ShaderCompiler.h
  • src/State.h
  • src/TruePBR.h
  • src/TruePBR/BSLightingShaderMaterialPBR.h
  • src/TruePBR/BSLightingShaderMaterialPBRLandscape.h
  • src/Utils/D3D.cpp
  • src/Utils/D3D.h
  • src/Utils/ExternalEmittance.h
  • src/Utils/FileSystem.cpp
  • src/Utils/Form.cpp
  • src/Utils/Form.h
  • src/Utils/Format.cpp
  • src/Utils/Game.cpp
  • src/Utils/Input.h
  • src/Utils/LegitProfiler.h
  • src/Utils/Moon.h
  • src/Utils/Serialize.h
  • src/Utils/SphericalHarmonics.h
  • src/Utils/Subrect.h
  • src/Utils/UI.cpp
  • src/Utils/UI.h
  • src/Utils/WinApi.h
  • src/WeatherManager.h
  • src/WeatherVariableRegistry.h
💤 Files with no reviewable changes (18)
  • src/Features/TerrainVariation.cpp
  • src/CSEditor/Weather/CellLightingWidget.cpp
  • src/Features/IBL.cpp
  • src/Utils/Form.cpp
  • src/Features/CloudShadows.cpp
  • src/Utils/Format.cpp
  • src/Utils/UI.cpp
  • src/Features/TerrainHelper.cpp
  • src/Utils/FileSystem.cpp
  • src/Features/VolumetricShadows.cpp
  • src/Features/WetnessEffects.cpp
  • src/SettingsOverrideManager.cpp
  • src/Features/DynamicCubemaps.cpp
  • src/Features/TerrainBlending.cpp
  • src/Utils/Game.cpp
  • src/CSEditor/Weather/WeatherWidget.cpp
  • src/CSEditor/EditorWindow.cpp
  • src/Features/HDRDisplay.cpp

Comment thread src/SceneSettingsManager.h
doodlum and others added 2 commits June 13, 2026 15:49
The doxygen coverage pass incorrectly deleted standalone // and ///
comments from .cpp function bodies and .h section dividers that were
not replaced by /** */ blocks. Restore them without reverting any
legitimate code changes or added doxygen.

- Restored section comments in EditorWindow.cpp, WeatherWidget.cpp,
  CellLightingWidget.cpp, PerformanceOverlay.cpp, and ~15 utility/
  feature cpp files (pure comment-only deletions)
- Restored // section group dividers and field annotations in
  Menu.h, State.h, Feature.h, FeatureIssues.h, Deferred.h
- Restored // section headers in CSEditor/EditorWindow.h,
  bend_sss_cpu.h, HomePageRenderer.h
- Restored // and /// comments in WetnessEffects.cpp, D3D.cpp
  that were alongside real code changes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- SceneSettingsManager: clarify that scene mutations are applied on the
  next frame by Update(), not immediately on event receipt
- ShaderFileWatcher: correct GetDependents() doc from "transitively" to
  "directly" (only looks up immediate hlsliToHlsl entries)
- Input: validate non-last combo entries are keyboard modifier keys;
  return false for any non-modifier or non-keyboard early entry

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jun 13, 2026

Copy link
Copy Markdown

✅ A pre-release build is available for this PR:
Download

Comment thread src/Utils/D3D.cpp Outdated

// Non-copyable, non-movable for simplicity
ScopedD3DMap(const ScopedD3DMap&) = delete;
ScopedD3DMap(const ScopedD3DMap&) = delete;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indentation regression (formatting). This line picked up an extra leading tab (3 tabs) while its sibling members (operator=, IsValid(), etc.) use 2. It misaligns inside the class and will fail clang-format / the FORMAT_CODE CI check. This looks like an accidental edit from the doxygen pass.

Suggested change
ScopedD3DMap(const ScopedD3DMap&) = delete;
ScopedD3DMap(const ScopedD3DMap&) = delete;

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed — removed the extra leading tab on the copy-ctor delete line to match its siblings.

Comment thread src/Utils/Input.h

bool requiresCtrl = false, requiresShift = false, requiresAlt = false;
for (size_t i = 0; i < combo.size() - 1; ++i) {
if (combo[i].GetDevice() != InputDeviceType::Keyboard)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Behavioral change in a docs-only PR. This hunk adds real runtime logic to MatchesKeyboardCombo (reject combos whose prefix contains a non-keyboard device or a non-modifier key), yet the PR is titled docs: and the description states "comments-only change, no code modifications" with a test plan of only "verify build compiles."

The change itself looks correct (it stops combos like a mouse-button or plain-key prefix from spuriously matching on the final key alone), so I am not asking to revert it. But it is undisclosed logic that the stated test plan will not exercise, and reviewers approving a "docs" PR will not scrutinize it. Please either split this into its own fix: commit/PR with a proper test note, or call it out explicitly in the description so it gets a behavioral review.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the PR description to explicitly call out the MatchesKeyboardCombo logic fix and add a behavioral test note.


// Disable checkbox if no HDR monitor detected AND HDR is not already enabled
// (Allow disabling HDR even on SDR if it's already on from saved settings)
if (!isHDRMonitor && !currentEnableHDR) {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lost "why" comment. The doxygen pass deleted the rationale for this non-obvious gate: (Allow disabling HDR even on SDR if it's already on from saved settings). The condition !isHDRMonitor && !currentEnableHDR reads as arbitrary without it, and the PR description explicitly claims it "Preserved comments that explain WHY." This one slipped through. Suggest restoring it:

Suggested change
if (!isHDRMonitor && !currentEnableHDR) {
// Disable the checkbox only when no HDR monitor is detected AND HDR is not already on
// (allow disabling HDR even on SDR if it was enabled from saved settings).
if (!isHDRMonitor && !currentEnableHDR) {

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Restored the why-comment explaining the HDR checkbox gate (allow disabling even on SDR if saved settings had it on).

doodlum and others added 2 commits June 13, 2026 16:43
- Fix indentation regression on ScopedD3DMap copy-ctor delete (extra tab)
- Restore why-comment on HDRDisplay::DrawSettings HDR checkbox gate

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants