К основному содержанию
правило официальный · GitHub

self-explanatory-code-commenting — правило для GitHub Copilot

Инструкция для GitHub Copilot, которая запрещает очевидные комментарии к коду и требует пояснять только неочевидные решения, бизнес-логику или ограничения API.

Установить в GitHub Copilot · Вручную: положить файлы Все способы и платформы ↓
.github/instructions/self-explanatory-code-commenting.instructions.md
Открыть на GitHub

Что делает self-explanatory-code-commenting

Правило задаёт рамки комментирования для GitHub Copilot. Ассистент перестаёт дублировать тривиальные действия в комментариях вроде инкремента счётчика или возврата поля объекта. Вместо этого фокус смещается на понятные имена функций и переменных. Если формулировка ясна из кода, комментарий не нужен.

Инструкция оставляет комментарии только для сложных случаев: неочевидных алгоритмов, регулярных выражений, ограничений внешних API, констант и стандартизированных заметок вроде TODO, FIXME или SECURITY. Под запрет попадают закомментированный старый код, списки изменений с именами авторов и декоративные разделители из символов.

Правило действует глобально на все файлы через маску **. Copilot будет следовать этим ограничениям во всём репозитории на любом поддерживаемом языке.

Какие задачи решает

  • убрать шум из очевидных комментариев, дублирующих код
  • заставить ассистента объяснять причины решений, а не действия
  • внедрить стандартные аннотации вроде TODO, FIXME и SECURITY
  • избавиться от закомментированного мёртвого кода и разделителей

Примеры запросов агенту

  • Напиши функцию расчёта налога и добавь комментарии только там, где логика неочевидна
  • Сделай рефакторинг этого метода, убрав лишние комментарии и дав понятные имена переменным
  • Опиши публичный интерфейс модуля с помощью JSDoc

Как установить self-explanatory-code-commenting

Вручную: положить файлы

.github/instructions/self-explanatory-code-commenting.instructions.md

Поле applyTo задаёт, к каким файлам применять

По шагам, с командами для каждой платформы: AGENTS.md и CLAUDE.md: что это, кто читает и какой выбрать

Вопросы о self-explanatory-code-commenting

Как установить self-explanatory-code-commenting в GitHub Copilot?

Сохраните файл правила по пути .github/instructions/self-explanatory-code-commenting.instructions.md в корне репозитория.

Зачем нужно это правило?

Оно заставляет модель писать самодокументируемый код и объяснять причину реализации («почему»), а не само действие («что»), предотвращая замусоривание исходников.

Какие комментарии правило разрешает оставлять?

Допускаются пояснения к нетривиальным алгоритмам, сложной бизнес-логике, регулярным выражениям, лимитам API, а также документация публичных интерфейсов и теги вроде TODO или HACK.

Исходный текст

self-explanatory-code-commenting.instructions.md · MIT
---
description: 'Guidelines for GitHub Copilot to write comments to achieve self-explanatory code with less comments. Examples are in JavaScript but it should work on any language that has comments.'
applyTo: '**'
---

# Self-explanatory Code Commenting Instructions

## Core Principle
**Write code that speaks for itself. Comment only when necessary to explain WHY, not WHAT.**
We do not need comments most of the time.

## Commenting Guidelines

### ❌ AVOID These Comment Types

**Obvious Comments**
```javascript
// Bad: States the obvious
let counter = 0;  // Initialize counter to zero
counter++;  // Increment counter by one
```

**Redundant Comments**
```javascript
// Bad: Comment repeats the code
function getUserName() {
    return user.name;  // Return the user's name
}
```

**Outdated Comments**
```javascript
// Bad: Comment doesn't match the code
// Calculate tax at 5% rate
const tax = price * 0.08;  // Actually 8%
```

### ✅ WRITE These Comment Types

**Complex Business Logic**
```javascript
// Good: Explains WHY this specific calculation
// Apply progressive tax brackets: 10% up to 10k, 20% above
const tax = calculateProgressiveTax(income, [0.10, 0.20], [10000]);
```

**Non-obvious Algorithms**
```javascript
// Good: Explains the algorithm choice
// Using Floyd-Warshall for all-pairs shortest paths
// because we need distances between all nodes
for (let k = 0; k < vertices; k++) {
    for (let i = 0; i < vertices; i++) {
        for (let j = 0; j < vertices; j++) {
            // ... implementation
        }
    }
}
```

**Regex Patterns**
```javascript
// Good: Explains what the regex matches
// Match email format: [email protected]
const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
```

**API Constraints or Gotchas**
```javascript
// Good: Explains external constraint
// GitHub API rate limit: 5000 requests/hour for authenticated users
await rateLimiter.wait();
const response = await fetch(githubApiUrl);
```

## Decision Framework

Before writing a comment, ask:
1. **Is the code self-explanatory?** → No comment needed
2. **Would a better variable/function name eliminate the need?** → Refactor instead
3. **Does this explain WHY, not WHAT?** → Good comment
4. **Will this help future maintainers?** → Good comment

## Special Cases for Comments

### Public APIs
```javascript
/**
 * Calculate compound interest using the standard formula.
 * 
 * @param {number} principal - Initial amount invested
 * @param {number} rate - Annual interest rate (as decimal, e.g., 0.05 for 5%)
 * @param {number} time - Time period in years
 * @param {number} compoundFrequency - How many times per year interest compounds (default: 1)
 * @returns {number} Final amount after compound interest
 */
function calculateCompoundInterest(principal, rate, time, compoundFrequency = 1) {
    // ... implementation
}
```

### Configuration and Constants
```javascript
// Good: Explains the source or reasoning
const MAX_RETRIES = 3;  // Based on network reliability studies
const API_TIMEOUT = 5000;  // AWS Lambda timeout is 15s, leaving buffer
```

### Annotations
```javascript
// TODO: Replace with proper user authentication after security review
// FIXME: Memory leak in production - investigate connection pooling
// HACK: Workaround for bug in library v2.1.0 - remove after upgrade
// NOTE: This implementation assumes UTC timezone for all calculations
// WARNING: This function modifies the original array instead of creating a copy
// PERF: Consider caching this result if called frequently in hot path
// SECURITY: Validate input to prevent SQL injection before using in query
// BUG: Edge case failure when array is empty - needs investigation
// REFACTOR: Extract this logic into separate utility function for reusability
// DEPRECATED: Use newApiFunction() instead - this will be removed in v3.0
```

## Anti-Patterns to Avoid

### Dead Code Comments
```javascript
// Bad: Don't comment out code
// const oldFunction = () => { ... };
const newFunction = () => { ... };
```

### Changelog Comments
```javascript
// Bad: Don't maintain history in comments
// Modified by John on 2023-01-15
// Fixed bug reported by Sarah on 2023-02-03
function processData() {
    // ... implementation
}
```

### Divider Comments
```javascript
// Bad: Don't use decorative comments
//=====================================
// UTILITY FUNCTIONS
//=====================================
```

## Quality Checklist

Before committing, ensure your comments:
- [ ] Explain WHY, not WHAT
- [ ] Are grammatically correct and clear
- [ ] Will remain accurate as code evolves
- [ ] Add genuine value to code understanding
- [ ] Are placed appropriately (above the code they describe)
- [ ] Use proper spelling and professional language

## Summary

Remember: **The best comment is the one you don't need to write because the code is self-documenting.**

© github · MIT · github/awesome-copilot

Похожие правила IDE

Все правила IDE по теме «Код-ревью и рефакторинг» →

Из того же набора928

Весь набор →
springboot Правило задаёт Copilot стиль кода для Spring Boot: внедрение зависимостей, конфигурация, логирование и проверка сборки. ★ 40 418звёзд репо springboot-4-migration Инструкция для GitHub Copilot по переводу проектов со Spring Boot 3.x на 4.0. Помогает обновить зависимости в Gradle Kotlin DSL, каталоги версий и имена стартеров. ★ 40 418звёзд репо spec-driven-workflow-v1 Правило ведёт разработку от формулировки требований к проектированию, реализации и проверке. Пригодится, когда нужно фиксировать решения и ход работы в отдельных файлах. ★ 40 418звёзд репо shell Правило, которое заставляет GitHub Copilot писать чистые и безопасные shell-скрипты. Применяется к файлам *.sh автоматически. ★ 40 418звёзд репо security-and-owasp Правило помогает GitHub Copilot находить небезопасные паттерны в веб-приложениях и предлагать исправления. Пригодится при работе с SQL-запросами, пользовательским вводом и файловыми путями. ★ 40 418звёзд репо scala2 Правило задаёт Copilot стиль Scala по гайду Databricks: неизменяемость, чистые функции, именование. Пригодится, если пишете на Scala 2.12 или 2.13. ★ 40 418звёзд репо scala-spark Набор инструкций для GitHub Copilot по разработке на Apache Spark в Scala. Помогает писать быстрые трансформации, настраивать партиционирование и избегать падений памяти. ★ 40 418звёзд репо rust Правило задаёт рекомендации для Rust-кода и применяется к файлам *.rs. Оно пригодится, когда Copilot пишет или проверяет код на Rust. ★ 40 418звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой