-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
70 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,45 +1,70 @@ | ||
# EditorConfig | ||
|
||
## Какие проблемы / use cases | ||
|
||
- Генерация документации к editorconfig (под документации из ms learn) | ||
- Сравнение двух editorconfig | ||
- Получение списка изменений, которые editorconfig привнесёт в солюшен | ||
- Анализатор конфига - поиск отсутствующих, поиск не существующих значений/не валидные ключи или значения | ||
|
||
## Задачи | ||
|
||
- Автоматизировать генерацию документации к код-стайлу по editorconfig | ||
- Реализовать парсер editorconfig | ||
- Реализовать парсер документации из ms learn | ||
- Реализовать генератор файла документации | ||
- Автоматизировать сравнение двух editorconfig файлов | ||
- Реализовать парсер editorconfig | ||
- Реализовать сравнение результата парсинга | ||
- Реализовать output в читаемом формате о diff'е между конфигурациями | ||
- Реализовать возможность получить preview изменений от применений editorconfig'а | ||
- Найти способ с использованием Roslyn API получать превью изменений от применений правил | ||
- Интегрировать получение превью с Solution и editorconfig | ||
- Реализовать user friendly способ отображения собранных изменений | ||
- Реализовать анализатор editorconfig файла | ||
- Найти способ получать список всех доступных правил, их значений | ||
- Реализовать алгоритм обхода editorconfig файла и проверки значений в нём | ||
|
||
### Сценарии использования | ||
|
||
- Работа с editorconfig файлом, который лежит: | ||
- Локально | ||
- На репозитории удалённо | ||
- Работа с солюшеном, который лежит: | ||
- Локально | ||
- На репозитории удалённо | ||
- Поддерживаемые форматы вывода данных: | ||
- Markdown | ||
|
||
### Мысли на будущее | ||
|
||
- Реализовать типизацию для правил на случай, если нужно будет реализовать модификацию editorconfig в коде | ||
|
||
## Вопросы | ||
|
||
- Как поставлять решение? Поставленные задачи не являются частью активной разработки и смысла делать расширения для IDE нет. Из вариантов: консольное приложение или минимальный десктоп UI. | ||
# Configuin | ||
|
||
Configuin - это утилита для работы с .editorconfig'ом. | ||
|
||
## Возможности | ||
|
||
- Генерация документации к editorconfig (по документации из MS learn) | ||
- [in progress] Сравнение двух editorconfig | ||
- [in progress] Анализатор .editorconfig'а | ||
- [in progress] Форматирование editorconfig'а | ||
- [in progress] Предпросмотр изменений от editorconfig'а | ||
|
||
### Генерация документации к editorconfig | ||
|
||
Configuin парсит описание Roslyn, которые есть на сайте MS Learn, парсит .editorconfig файл предоставленный пользователем и генерирует документ с подробным описанием строк. Например, .editorconfig файл может содержать: | ||
```ini | ||
dotnet_diagnostic.IDE0040.severity = warning | ||
dotnet_style_require_accessibility_modifiers = always:warning | ||
``` | ||
|
||
При генерации кодстайла, для этих строк будет находиться описание и генерироваться такой output: | ||
|
||
```md | ||
## Add accessibility modifiers (IDE0040) | ||
|
||
Severity: Warning | ||
|
||
This style rule concerns requiring accessibility modifiers in declarations. | ||
|
||
### dotnet_style_require_accessibility_modifiers = always | ||
|
||
\```csharp | ||
// dotnet_style_require_accessibility_modifiers = always | ||
// dotnet_style_require_accessibility_modifiers = for_non_interface_members | ||
class MyClass | ||
{ | ||
private const string thisFieldIsConst = "constant"; | ||
} | ||
|
||
// dotnet_style_require_accessibility_modifiers = never | ||
class MyClass | ||
{ | ||
const string thisFieldIsConst = "constant"; | ||
} | ||
\``` | ||
``` | ||
|
||
### [in progress] Сравнение двух editorconfig | ||
|
||
Configuin сравнивает два .editorconfig файла и генерирует diff между ними. | ||
|
||
### [in progress] Анализатор .editorconfig'а | ||
|
||
Configuin анализирует editorconfig файл и: | ||
- Находит несуществующие правила | ||
- Находит не корректные значения | ||
- Генерирует список существующих правил, которые не указаны в .editorconfig | ||
|
||
### [in progress] Форматирование editorconfig'а | ||
|
||
### [in progress] Предпросмотр изменений от editorconfig'а | ||
|
||
Configuin генерирует список изменений, который будут получены, если к проекту применить .editorconfig. | ||
|
||
Алгоритм: | ||
- Запускается `dotnet format` для проекта и сохраняется список сообщений | ||
- Подменяется .editorconfig на то, который указал пользователь | ||
- Запускается `dotnet format` и сохраняется второй результат | ||
- Генерируется diff между результатами | ||
- Откатывается изменение .editorconfig'а |