check

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 10, 2026 License: AGPL-3.0 Imports: 11 Imported by: 0

Documentation

Overview

injection_named_exists.go — разбор: доказательство способности упасть, НАЗВАННОЕ пробой, обязано существовать (#2479).

───────────────────────────────────────────────────────────────────────────── ПРЕДМЕТ

Проба, чья шапка говорит «способность упасть доказана инъекцией — такой-то файл», делает утверждение о ДЕРЕВЕ. Утверждение это не компилируется и никем не сверяется: файл переименовали, унесли вместе с рефакторингом либо не написали вовсе — а шапка продолжает обещать доказательство. Гейт, потерявший способность краснеть, на чистом дереве выглядит РОВНО ТАК ЖЕ, как исправный, поэтому обещание доказательства читается как само доказательство.

Замер, из которого разбор выведен: на ревизии заведения упоминаний в комментариях было 122, не резолвилось ОДНО — шапка гейта осей адреса называла файл, которого в дереве не было с первого её дня.

───────────────────────────────────────────────────────────────────────────── У ЭТОГО РАЗБОРА ЕСТЬ БЛИЗНЕЦ В ПЛАТФОРМЕ — И ЭТО НАЗВАНО, А НЕ УМОЛЧАНО

Тот же разбор, поднятый до корня МОНОРЕПО, живёт в `tools/injectionproofgate` (задача #2519): этот обходит корень своего модуля и о платформе не высказывается — в самостоятельном клоне службы монорепо нет вовсе. Обещания соседних модулей платформы этому модулю не принадлежат.

Свести обе реализации в одну сегодня НЕЛЬЗЯ: модуль службы пинит платформу псевдоверсией, поэтому импортировать пакет, которого в пинованной ревизии ещё нет, он не может. Предикат сведения: пин указывает на ревизию, где тот пакет существует; до этого две реализации об одном предмете живут рядом осознанно.

───────────────────────────────────────────────────────────────────────────── СУДЯТСЯ КОММЕНТАРИИ, И ЭТО РЕШЕНИЕ, А НЕ УПРОЩЕНИЕ

Координата доказательства пишется ПРОЗОЙ — это её законное место, и разбор читает разобранные группы комментариев, а не сырой текст файла. Строковые литералы намеренно НЕ судятся: в них живут синтетические имена, которые инъекции кладут во временные каталоги, и дерева они не называют вовсе. Судить их значило бы краснеть на чужой фикстуре — то есть на собственном доказательстве.

Величина «в строках» всё равно печатается переписью: молчание о целом виде вхождений неотличимо от их отсутствия.

───────────────────────────────────────────────────────────────────────────── ЗАКОННЫХ ФОРМ КООРДИНАТЫ ТРИ, И РАСПОЗНАВАТЕЛЬ ЗНАЕТ ВСЕ ТРИ

Форма, о которой он не знает, даёт не красное и не зелёное, а МОЛЧАНИЕ. Измерено на этом дереве: наивный резолвер («имя рядом с называющим») дал 4 непопадания из 138, и все четыре оказались ЗАКОННЫМИ формами, а не находками.

СОСЕД        `<имя>_injection_test.go` — файл в каталоге называющего;
ПО МОДУЛЮ    то же имя, но доказательство лежит в ДРУГОМ пакете модуля
             (проба одного пакета ссылается на инъекцию соседнего);
КООРДИНАТОЙ  `internal/<пакет>/<имя>_injection_test.go` — путь от корня
             МОДУЛЯ службы, а не от корня монорепо: в самостоятельном клоне
             приставки `services/iam/` нет, и счёт от неё указывал бы наружу
             дерева.

Имя в примерах — ОБРАЗЕЦ с угловыми скобками, а не координата, и это не подгонка текста под инструмент: координата, названная в прозе, есть утверждение о дереве, и выдуманная — ложное. Разбор судит объявленные координаты, поэтому пример обязан не выглядеть ею.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AuditNamedInjections

func AuditNamedInjections(root string) ([]InjectionFinding, InjectionCensus, error)

AuditNamedInjections обходит дерево модуля от root и возвращает находки с переписью.

Обращения к пробе здесь нет намеренно: разбор, роняющий её изнутри, инъекции не поддаётся — синтетическому дереву некуда было бы подать вход.

func ScanFixedRefusalTexts

func ScanFixedRefusalTexts(root string, files []string) (RefusalTextCensus, []RefusalTextFinding, error)

ScanFixedRefusalTexts разбирает названные файлы и называет конструкции статуса на полосах чужой причины, чей текст не доказан фиксированным.

root служит только для печати координат. Пустой обход ошибкой ЗДЕСЬ не объявляется: пустоту судит вызывающий — у гейта дерева и у пробы инъекции законные пороги пустоты разные.

Types

type DeleteRevokeCensus

type DeleteRevokeCensus struct {
	Dirs         int // каталогов под api/ осмотрено
	Files        int // не-тестовых файлов Go разобрано
	EmitCalls    int // вызовов EmitReconcileEvent найдено
	OwnTyped     int // каталогов, у которых выведен СВОЙ тип
	WithDeleteGo int // из них несущих delete.go
	Population   int // судимых каталогов (свой тип И delete.go)
	Satisfying   int // из них эмитирующих отзыв своего типа
}

DeleteRevokeCensus — перепись одного обхода. Печатается ВСЕГДА: «ноль находок» обязано быть отличимо от «ноль прочитанного».

func ScanDeleteRevokeProducers

func ScanDeleteRevokeProducers(apiDir string) (DeleteRevokeCensus, []string, error)

ScanDeleteRevokeProducers обходит каталоги use-case под apiDir и называет те, у которых путь снятия собственного объекта остался без производителя отзыва.

Возвращает перепись, находки (по одной на каталог, в порядке имён — отказ на одном и том же дереве читается одинаково от прогона к прогону) и ошибку обхода. Пустой обход ошибкой ЗДЕСЬ не объявляется: пустоту судит вызывающий, потому что у гейта дерева и у пробы инъекции законные пороги пустоты разные.

func (DeleteRevokeCensus) String

func (c DeleteRevokeCensus) String() string

type InjectionCensus

type InjectionCensus struct {
	// GoFiles — исходников модуля разобрано.
	GoFiles int
	// NamingFiles / InComments — файлов, называющих доказательство, и самих
	// упоминаний В КОММЕНТАРИЯХ (судимая полоса).
	NamingFiles int
	InComments  int
	// InStrings — упоминаний в строковых литералах (полоса НЕ судимая; названа,
	// чтобы её отсутствие в вердикте не приняли за отсутствие вхождений).
	InStrings int
	// Resolved — из судимых упоминаний нашли свой файл.
	Resolved int
}

InjectionCensus — объём осмотренного. Печатается ВСЕГДА: «ноль находок» обязано быть отличимо от «ноль прочитанного».

type InjectionFinding

type InjectionFinding struct {
	NamedBy    string // координата называющего, от корня обхода
	Coordinate string // что названо
}

InjectionFinding — упоминание, у которого нет предмета.

type RefusalTextCensus

type RefusalTextCensus struct {
	Files          int // файлов Go (не-тестовых) разобрано
	Constructions  int // конструкций статуса найдено всего
	Population     int // из них на полосах чужой причины (код назван синтаксически)
	Fixed          int // из них с доказуемо фиксированным текстом
	CodeNotLiteral int // конструкций с ВЫЧИСЛЯЕМЫМ кодом — вне популяции (слепая зона)
	Constants      int // пакетных строковых констант проиндексировано
}

RefusalTextCensus — перепись одного обхода. Печатается ВСЕГДА: «ноль находок» обязано быть отличимо от «ноль прочитанного».

func (RefusalTextCensus) String

func (c RefusalTextCensus) String() string

type RefusalTextFinding

type RefusalTextFinding struct {
	File string // путь относительно названного корня
	Line int
	Code string // Unavailable / Internal
	Expr string // выражение текста, как оно записано
}

RefusalTextFinding — одна конструкция, чей текст не доказан фиксированным.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL