suite check: заголовок правила больше не разбирается как ссылка

- заголовок правило объявляет, а не ссылается на него: при опечатке в префиксе
  одна ошибка формы давала вторую находку о неразрешённой ссылке
- числительные в итоге согласованы с существительным
This commit is contained in:
av
2026-07-27 09:55:11 +03:00
parent ccf046fb7b
commit 0b8cc125b3
3 changed files with 39 additions and 3 deletions
+14
View File
@@ -106,6 +106,20 @@ func TestCleanSuite(t *testing.T) {
}
}
// TestRuleHeadingIsNotAReference держит границу между объявлением и ссылкой.
// Заголовок с чужим префиксом — ошибка формы, и только она: разрешать заголовок
// по манифесту не к чему, иначе одна опечатка даёт две находки о разном.
func TestRuleHeadingIsNotAReference(t *testing.T) {
f := base()
f["conventions/time.md"] = strings.Replace(baseTime, "### TIME-1.", "### GTIM-1.", 1)
for _, got := range run(t, f) {
if got.Family == check.Links {
t.Errorf("заголовок разобран как ссылка: %s", got.Msg)
}
}
}
// rule собирает правило целиком, чтобы тесты не повторяли его форму.
func rule(id, title, norm, rationale string) string {
return "\n### " + id + ". " + title + "\n\n**ДОЛЖЕН.** " + norm + "\n\n**ПОЧЕМУ.** " + rationale + "\n"
+8 -1
View File
@@ -26,10 +26,17 @@ type Ref struct {
// бэктиках идентификатор стоит образцом записи, а не ссылкой на утверждение, —
// иначе строка «на конкретное правило ссылаются идентификатором (`SLOG-27`)»
// требовала бы, чтобы правило SLOG-27 существовало.
//
// Заголовки правил пропускаются: заголовок правило объявляет, а не ссылается
// на него, и разрешать его по манифесту не к чему.
func refsIn(d *doc.Document, from, to int) []Ref {
heading := make(map[int]bool, len(d.Rules))
for _, r := range d.Rules {
heading[r.Line] = true
}
var out []Ref
for n := from; n <= to; n++ {
if d.Fenced(n) {
if d.Fenced(n) || heading[n] {
continue
}
out = append(out, refsInLine(n, doc.StripInline(d.Line(n)))...)