envknob

package
v1.9.0 Latest Latest
Warning

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

Go to latest
Published: Sep 17, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

brandedknob.go — разбор ИМЁН РУЧЕК с приставкой платформы в прод-коде фундамента.

Что здесь находка

Строковый литерал, начинающийся с приставки, которую назвал ВЫЗЫВАЮЩИЙ, в не-проверочном коде фундамента — находка, КРОМЕ одного случая: он есть значение константы, чьё имя начинается с `Legacy`, то есть объявлен ОКНОМ перехода (см. шапку пакета). Так остаток перестаёт быть остатком: он назван решением, и его снятие видно диффом.

Почему приставку называет ВЫЗЫВАЮЩИЙ, а не этот файл

Приставка — предмет разбора, а не его принадлежность, и держать её здесь значило бы нарушить ровно ту норму, которую разбор стережёт: фундамент читают ОБА продукта, и имя платформы в нём — то самое, что снимается. Константа `BrandedPrefix = "KACHO_"` здесь стояла и БЫЛА НАЙДЕНА этим же гейтом — вердикт справедлив: литерал не «предикат», он такой же бренд платформы в фундаменте, как и остальные семь, только без окна.

Исключать собственный файл было нельзя: перечень прощённых не истекает сам и унаследовал бы следующую слепую зону. Приставка вынесена ПАРАМЕТРОМ — тогда разбор судит свой файл наравне с прочими и молчит на нём по существу, а не по послаблению. Это же отвечает и на «появится второй продукт»: словарь расширяется у вызывающего.

Глобального состояния это не заводит: приставка — довод вызова, а не изменяемая переменная уровня пакета (отвергнутая в шапке `envknob` альтернатива была про ЧТЕНИЕ ручек, а не про разбор дерева).

Чего разбор НЕ видит — названо

  1. имя, собранное конкатенацией (`"KACHO_" + suffix`): разбор судит литерал целиком. В дереве таких нет (проверено предикатом пробы), и появление такой формы — предмет расширения, а не край;
  2. имя, пришедшее из данных — файла настроек, чарта. Это не код фундамента;
  3. приставка ДРУГОГО продукта — ровно до тех пор, пока вызывающий её не назвал: словарь принадлежит ему.

Package envknob — ИМЯ РУЧКИ ФУНДАМЕНТА НЕЙТРАЛЬНО, и переход к нему имеет окно.

Предмет

Фундамент читал семь переменных окружения с приставкой ПЛАТФОРМЫ. Оператор, ставящий службу доступа БЕЗ платформы, настраивал её переменными с чужим брендом, а сменить их не мог: имя выбирает фундамент, и выбор уезжает пином к каждому потребителю разом. Норма «служба наследует от платформы код, но не имя» на них не выполнялась (`PRO-Robotech/corelib#11`).

Решение: нейтральное имя, приставку выбирает НЕ фундамент

Имя ручки называет её ПРЕДМЕТ (`MIGRATOR_DSN`), а не того, кто её читает. Прецедент в продукте есть: доводы образа переведены на `OCI_IMAGE_*`.

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

Стандартное имя не переприсваивается: у телеметрии ручка называется так, как её называет сама спецификация, а не нашей копией её имени с приставкой.

Окно, а не слом

Переход объявлен окном: читаются ОБА написания, нейтральное СИЛЬНЕЕ. Слом был бы отказом у каждого потребителя в день подъёма пина, причём отказом молчаливым — незаданная ручка обычно означает «умолчание», а не ошибку.

Окно ЗАКРЫВАЕТСЯ, и предикат его закрытия внешний: ни один профиль развёртывания и ни одна страница установки в деревьях-потребителях не называет прежнего написания. До тех пор прежнее имя остаётся в прод-коде фундамента НАЗВАННЫМ решением, а не остатком.

Что возвращается вызывающему — И ПОЧЕМУ ИМЯ, А НЕ ТОЛЬКО ЗНАЧЕНИЕ

Lookup возвращает ИМЯ, которым значение получено. Без него оператор, задавший прежнее написание, неотличим от задавшего новое, — и окно не закроется никогда: закрывать его будет нечем, кроме памяти.

Index

Constants

This section is empty.

Variables

View Source
var ErrNoPrefix = errors.New("envknob: приставка не названа — разбор без неё судил бы каждый литерал")

ErrNoPrefix — приставка не названа. Пустая приставка сделала бы находкой КАЖДЫЙ строковый литерал дерева: «не сужаем» здесь означало бы «всё подряд», и гейт утонул бы в находках с первого же прогона.

Functions

func Get

func Get(neutral, legacy string) string

Get — значение либо пустая строка. Для вызывающих, которым имя не нужно.

func Lookup

func Lookup(neutral, legacy string) (value, name string, ok bool)

Lookup — значение ручки по НЕЙТРАЛЬНОМУ имени, с окном на прежнее.

Возвращает значение, ИМЯ, которым оно получено, и найдено ли оно. Пустое значение заданной переменной значением НЕ считается: у всех семи ручек фундамента пустое означает «не задано», и трактовать его иначе значило бы завести восьмое поведение, о котором никто не решал.

legacy пустое — окна нет, читается только нейтральное имя.

func UsesLegacyName

func UsesLegacyName(neutral, legacy string) bool

UsesLegacyName сообщает, что значение пришло ПРЕЖНИМ написанием. Вызывающий, у которого есть журнал, обязан сказать это оператору: иначе окно не закроется.

Types

type BrandedKnob

type BrandedKnob struct {
	File string
	Line int
	// Name — само имя ручки.
	Name string
	// Const — имя константы, чьим значением литерал является; пусто, если он не
	// константа вовсе.
	Const string
	// InWindow — литерал объявлен окном перехода (`Legacy…`).
	InWindow bool
}

BrandedKnob — одно имя ручки с приставкой платформы и его координата.

func ScanBrandedKnobs

func ScanBrandedKnobs(path string, src []byte, prefix string) (found []BrandedKnob, literals int, err error)

ScanBrandedKnobs разбирает один файл и возвращает найденные имена с приставкой.

prefix — приставка, которую фундамент носить не вправе; её называет ВЫЗЫВАЮЩИЙ (почему — в шапке файла). Пустая отвергается ErrNoPrefix.

Второе возвращаемое — сколько строковых литералов осмотрено: «ноль находок» обязано быть отличимо от «ноль прочитанного».

func UnwindowedBrandedKnobs

func UnwindowedBrandedKnobs(all []BrandedKnob) []BrandedKnob

UnwindowedBrandedKnobs — те из найденных, что окном НЕ объявлены.

Jump to

Keyboard shortcuts

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