Files
Rules/.cursor/rules/file-encoding.mdc
T
PapaTramp 40aee1d3ef rules: file encoding for PowerShell (Windows) and shell (Linux)
Add alwaysApply file-encoding rule, shell-spec, .editorconfig and .gitattributes templates so agents save .ps1 as UTF-8 BOM+CRLF and .sh as UTF-8+LF; document runtime JSON/spool without BOM.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-25 09:17:43 +10:00

52 lines
2.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: Кодировка и переносы строк для Windows (PowerShell) и Linux (shell)
alwaysApply: true
---
# Кодировка файлов (Windows / Linux)
Исходники и runtime-текст должны сохраняться в кодировке, которую ожидает среда выполнения. Неверная кодировка ломает парсинг PowerShell/bash, regex по JSON и spool-файлы на диске.
## Windows — PowerShell (`.ps1`, `.psm1`, `.psd1`)
| Параметр | Значение |
|----------|----------|
| Кодировка исходников | **UTF-8 with BOM** (PS 5.1, кириллица в комментариях и строках) |
| Переносы | **CRLF** |
| EditorConfig | `charset = utf-8-bom`, `end_of_line = crlf` для `[*.ps1]` |
- Не сохранять `.ps1` как UTF-16 LE/BE, CP1251 или «Unicode» без явной необходимости.
- JSON и текст на диск для API/SAC/spool: **UTF-8 без BOM** — `[System.IO.File]::WriteAllText($path, $text, (New-Object System.Text.UTF8Encoding $false))`.
- Чтение legacy/spool: UTF-8 → UTF-16 LE (BOM `FF FE` или `{` + `0x00` в начале файла).
## Linux — shell (`.sh`, исполняемые скрипты)
| Параметр | Значение |
|----------|----------|
| Кодировка | **UTF-8 без BOM** |
| Переносы | **LF** |
| Shebang | `#!/usr/bin/env bash` или `#!/bin/sh` |
- Не коммитить `.sh` с **CRLF** и **BOM** — на Linux: `$'\r': command not found`, сбой shebang.
- После правки на Windows: `dos2unix path/to/script.sh` или в `.gitattributes`: `*.sh text eol=lf`.
## Python, JSON, конфиги в git
| Тип | Кодировка | EOL |
|-----|-----------|-----|
| `*.py` | UTF-8 без BOM | LF (или по `.editorconfig` проекта) |
| `*.json`, `*.yaml`, `*.md` | UTF-8 без BOM | LF или CRLF по проекту |
| `*.vue`, `*.ts`, `*.js` | UTF-8 без BOM | LF |
## Обязательно в репозитории
- **`.editorconfig`** — явные правила для `*.ps1`, `*.sh`, `*.py`.
- **`.gitattributes`** — минимум: `*.ps1 text eol=crlf`, `*.sh text eol=lf`.
## Агент
1. Перед записью файла — проверить `.editorconfig` / `.gitattributes` **текущего проекта**.
2. Если их нет — следовать таблицам выше.
3. Не перекодировать бинарники и файлы, которые уже корректны.
4. При правке PowerShell, который пишет файлы на диск (`spool`, логи, экспорт) — явно задавать UTF-8 без BOM, если файл читает другой процесс или Linux.