Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ root = true
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8-bom
# Без BOM: так сохранено большинство файлов (и так пишут редакторы по умолчанию);
# компилятор C# и без BOM читает исходники как UTF-8.
charset = utf-8

[*.{yml,yaml,json,jsonc}]
indent_size = 2
Expand Down Expand Up @@ -76,4 +78,7 @@ dotnet_diagnostic.RCS1001.severity = none
dotnet_diagnostic.RCS1003.severity = none
# IDE0028 — стиль collection-инициализаторов, чистая косметика.
dotnet_diagnostic.IDE0028.severity = none
# RCS1139 — «добавь <summary>»: doc-комментарий члена часто состоит из одного <param> —
# смысл члена ясен из имени, пояснять нужно только аргумент.
dotnet_diagnostic.RCS1139.severity = none
# =====================================================================================
19 changes: 15 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,20 @@ jobs:
run: dotnet test XiControl.sln -c Release --no-build --nologo

# Информационный шаг: показывает дрейф стиля, но НЕ роняет CI — и это
# осознанно навсегда (решение Фазы 4): в Loc.cs и OsdForm.cs намеренное
# колоночное выравнивание, которое dotnet format схлопывает. Правила же
# анализаторов и так жёсткие — они входят в Build через TreatWarningsAsErrors.
# осознанно навсегда (решение Фазы 4). Правила анализаторов и так жёсткие —
# они входят в Build через TreatWarningsAsErrors.
# --severity warn: info-подсказки анализаторов (LibraryImport, абзацы в doc-
# комментариях…) — это советы IDE, а не дрейф стиля; шаг ловит пробелы/кодировку.
# --exclude — файлы с намеренным ручным выравниванием (колонки, таблицы,
# плотные инициализаторы), которое dotnet format схлопывает. Список держать
# в синхроне с CLAUDE.md («не гонять dotnet format»), XIC-52.
- name: Format check (non-blocking)
continue-on-error: true
run: dotnet format XiControl.sln --verify-no-changes --severity info
run: >
dotnet format XiControl.sln --verify-no-changes --severity warn
--exclude src/Ui/OsdForm.cs
--exclude src/Wmi/Mifs.cs
--exclude src/Ui/TrayApp.cs
--exclude src/Ui/Settings/SettingsToolkit.cs
--exclude src/SystemIntegration/AlsSensor.cs
--exclude src/SystemIntegration/PowerProfileGuard.cs
10 changes: 7 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,13 @@ MSR.** Это не техническое ограничение, а осозн
`dotnet test XiControl.sln` — все зелёные; чистую логику покрывай тестом (образцы — в
`tests/XiControl.Tests`, фейки в `Fakes.cs`), UI и железо — глазами.
Иконки — глазами (см. ниже). Группируй изменения, не перезапускай приложение по мелочи.
- **`dotnet format` не гонять по `OsdForm.cs`** — там намеренное колоночное выравнивание
(маппинг иконок), формат его схлопывает. (`Loc.cs` больше не в этом списке: строки уехали
в JSON, сам файл — обычный загрузчик.)
- **`dotnet format` не гонять по файлам с ручным выравниванием** — формат его схлопывает:
`src/Ui/OsdForm.cs` (колоночный маппинг иконок), `src/Wmi/Mifs.cs` (таблицы «код ↔ процент»),
`src/Ui/TrayApp.cs` (висячий отступ лямбд), `src/Ui/Settings/SettingsToolkit.cs` (плотные
инициализаторы), `src/SystemIntegration/AlsSensor.cs` (колонка комментариев COM-интерфейса),
`src/SystemIntegration/PowerProfileGuard.cs` (`else` под `if`). Тот же список стоит в
`--exclude` шага Format check в `ci.yml` — держать их в синхроне (XIC-52). Исходники —
UTF-8 **без BOM** (`.editorconfig`).

Внешние PR (в т.ч. от других вайб-кодеров с нейронками) — приветствуются, но проходят через тот
же фильтр: driver-free, не усложняем, локализация на месте, собирается чисто. Ветки ребейзим на
Expand Down
8 changes: 6 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,18 @@ Exe после sln-сборки лежит в `src\bin\x64\Release\net8.0-window
- Деградируйте мягко: железо-зависимые вызовы — в try/catch с `Log.Ex`, приложение
не падает на несовместимой модели.
- UI-поток не блокируем: долгие WMI/PnP-вызовы — в `Task.Run`.
- В таблице иконок `OsdForm` — намеренное колоночное выравнивание;
`dotnet format` по этому файлу не гонять.
- В нескольких файлах намеренное ручное выравнивание (таблица иконок `OsdForm`, таблицы
`Mifs` и др.) — `dotnet format` по ним не гонять; полный список — в `--exclude` шага
Format check в `.github/workflows/ci.yml`.

## Процесс

1. Синхронизируйте форк с `main` (кнопка «Sync fork») — `main` здесь часто уходит вперёд.
2. Фича — в отдельной ветке от свежего `main`, не в форк-`main`.
3. PR должен собираться чисто и проходить CI (build + tests — жёсткие гейты).
Красная проверка `security/snyk` на PR из форка, который трогает `.csproj`, —
ожидаема и мержу не мешает: Snyk не может склонировать чужой форк («failed to clone»),
это сбой доступа, а не найденная уязвимость.
4. Проверка на железе приветствуется, но не обязательна: мейнтейнер проверяет на
Xiaomi Book Pro 14 (TM2424). Укажите в PR, на какой модели тестировали вы.

Expand Down
2 changes: 1 addition & 1 deletion src/Config/AppConfig.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Text.Json.Serialization;
using System.Text.Json.Serialization;
using XiControl.Wmi;

namespace XiControl.Config;
Expand Down
2 changes: 1 addition & 1 deletion src/Program.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using XiControl.Config;
using XiControl.Localization;
using XiControl.SystemIntegration;
Expand Down
8 changes: 4 additions & 4 deletions src/SystemIntegration/TouchpadHaptics.cs
Original file line number Diff line number Diff line change
Expand Up @@ -189,10 +189,10 @@ private struct HIDP_CAPS
}

[DllImport("hid.dll")] private static extern void HidD_GetHidGuid(out Guid guid);
[DllImport("hid.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.U1)] private static extern bool HidD_SetOutputReport(SafeFileHandle h, byte[] buf, int len);
[DllImport("hid.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.U1)] private static extern bool HidD_GetInputReport(SafeFileHandle h, byte[] buf, int len);
[DllImport("hid.dll")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool HidD_GetPreparsedData(SafeFileHandle h, out IntPtr pp);
[DllImport("hid.dll")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool HidD_FreePreparsedData(IntPtr pp);
[DllImport("hid.dll", SetLastError = true)][return: MarshalAs(UnmanagedType.U1)] private static extern bool HidD_SetOutputReport(SafeFileHandle h, byte[] buf, int len);
[DllImport("hid.dll", SetLastError = true)][return: MarshalAs(UnmanagedType.U1)] private static extern bool HidD_GetInputReport(SafeFileHandle h, byte[] buf, int len);
[DllImport("hid.dll")][return: MarshalAs(UnmanagedType.U1)] private static extern bool HidD_GetPreparsedData(SafeFileHandle h, out IntPtr pp);
[DllImport("hid.dll")][return: MarshalAs(UnmanagedType.U1)] private static extern bool HidD_FreePreparsedData(IntPtr pp);
[DllImport("hid.dll")] private static extern int HidP_GetCaps(IntPtr pp, out HIDP_CAPS caps);
[DllImport("setupapi.dll", SetLastError = true)]
private static extern IntPtr SetupDiGetClassDevsW(ref Guid g, IntPtr enumerator, IntPtr hwnd, int flags);
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/AppController.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using XiControl.Config;
using XiControl.Config;
using XiControl.Localization;
using XiControl.SystemIntegration;
using XiControl.Wmi;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/FlyoutForm.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Drawing.Drawing2D;
using System.Drawing.Drawing2D;

namespace XiControl.Ui;

Expand Down
2 changes: 1 addition & 1 deletion src/Ui/FormChrome.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;

namespace XiControl.Ui;

Expand Down
2 changes: 1 addition & 1 deletion src/Ui/ModeUi.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using XiControl.Wmi;
using XiControl.Wmi;

namespace XiControl.Ui;

Expand Down
2 changes: 1 addition & 1 deletion src/Ui/MonitorForm.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Drawing.Drawing2D;
using System.Drawing.Drawing2D;
using System.Management;
using XiControl.Config;
using XiControl.Localization;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/QuickPanelForm.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Runtime.InteropServices;
using System.Runtime.InteropServices;
using XiControl.Config;
using XiControl.Localization;
using XiControl.SystemIntegration;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Settings/AboutTab.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Diagnostics;
using System.Diagnostics;
using XiControl.Config;
using XiControl.Localization;
using XiControl.SystemIntegration;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Settings/BatteryTab.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using XiControl.Config;
using XiControl.Config;
using XiControl.Localization;

namespace XiControl.Ui.Settings;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Settings/GeneralTab.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using XiControl.Config;
using XiControl.Config;
using XiControl.Localization;

namespace XiControl.Ui.Settings;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Settings/KeysTab.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using XiControl.Config;
using XiControl.Config;
using XiControl.Localization;

namespace XiControl.Ui.Settings;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Settings/NavStrip.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Drawing.Drawing2D;
using System.Drawing.Drawing2D;
using XiControl.Localization;

namespace XiControl.Ui.Settings;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Settings/PerfTab.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Drawing.Drawing2D;
using System.Drawing.Drawing2D;
using XiControl.Config;
using XiControl.Localization;
using XiControl.Wmi;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Settings/SettingsPane.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace XiControl.Ui.Settings;
namespace XiControl.Ui.Settings;

/// <summary>
/// Базовая панель вкладки настроек: вертикальный поток карточек с прокруткой.
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Settings/SettingsTheme.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace XiControl.Ui.Settings;
namespace XiControl.Ui.Settings;

/// <summary>
/// Палитра окна настроек (Win11-стиль). Читается из системной темы на каждую пересборку
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/Settings/SettingsToolkit.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Drawing.Drawing2D;
using System.Drawing.Drawing2D;
using XiControl.Localization;

namespace XiControl.Ui.Settings;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/SettingsActions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using XiControl.Localization;
using XiControl.Localization;
using XiControl.SystemIntegration;
using XiControl.Wmi;

Expand Down
2 changes: 1 addition & 1 deletion src/Ui/SettingsForm.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Microsoft.Win32;
using Microsoft.Win32;
using XiControl.Config;
using XiControl.Localization;
using XiControl.SystemIntegration;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/SvgIcons.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Reflection;
using System.Reflection;
using Svg;

namespace XiControl.Ui;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/ToggleSwitch.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Drawing.Drawing2D;
using System.Drawing.Drawing2D;

namespace XiControl.Ui;

Expand Down
2 changes: 1 addition & 1 deletion src/Ui/TrayApp.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Diagnostics;
using System.Diagnostics;
using Microsoft.Win32;
using XiControl.Config;
using XiControl.Input;
Expand Down
2 changes: 1 addition & 1 deletion src/Ui/TrayIconController.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using XiControl.SystemIntegration;
using XiControl.SystemIntegration;
using XiControl.Wmi;

namespace XiControl.Ui;
Expand Down
2 changes: 1 addition & 1 deletion tests/XiControl.Tests/AppConfigMigrationTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using FluentAssertions;
using FluentAssertions;
using XiControl.Config;
using XiControl.Wmi;
using Xunit;
Expand Down
2 changes: 1 addition & 1 deletion tests/XiControl.Tests/AppControllerTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using FluentAssertions;
using FluentAssertions;
using XiControl.Config;
using XiControl.Localization;
using XiControl.SystemIntegration;
Expand Down
2 changes: 1 addition & 1 deletion tests/XiControl.Tests/Fakes.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Microsoft.Win32;
using Microsoft.Win32;
using XiControl.SystemIntegration;
using XiControl.Wmi;

Expand Down
2 changes: 1 addition & 1 deletion tests/XiControl.Tests/FlyoutPaletteTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using FluentAssertions;
using FluentAssertions;
using XiControl.Ui;
using Xunit;

Expand Down
2 changes: 1 addition & 1 deletion tests/XiControl.Tests/ModeUiTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using FluentAssertions;
using FluentAssertions;
using XiControl.Ui;
using Xunit;

Expand Down
2 changes: 1 addition & 1 deletion tests/XiControl.Tests/TrayIconControllerTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using FluentAssertions;
using FluentAssertions;
using XiControl.Ui;
using XiControl.Wmi;
using Xunit;
Expand Down
Loading