Skip to content

Allow to return nil from a defn of a component#64

Merged
darkleaf merged 1 commit intomasterfrom
allow-return-nil-from-component
Nov 7, 2025
Merged

Allow to return nil from a defn of a component#64
darkleaf merged 1 commit intomasterfrom
allow-return-nil-from-component

Conversation

@darkleaf
Copy link
Owner

@darkleaf darkleaf commented Nov 5, 2025

Мы уже несколько раз подорвались на коде вида

(defn my-component [{flag `flag}] (when flag (side-effect)))

в тестах flag взведен, и все работает, т.к. side-effect у нас возвращает не nil,
но в проде он не взведен и приложение не запускается с ошибкой "A component fn must not return nil"

Можно было бы как-то внутри di вести учет nil компонентов, чтобы компонент для пользователя был настоящим nil но я что-то не могу придумать такого случая в реальности:

(defn other-component [{component `possible-nil-component :or {component (create-default-impl ...)}}] ...)

в этом случае сам компонент должен вернуть дефолтную реализацию.


@darkleaf darkleaf requested review from KGOH and krevedkokun November 5, 2025 18:55
@darkleaf darkleaf assigned darkleaf and unassigned KGOH and krevedkokun Nov 5, 2025
(dependencies [_])
(build [_ _ add-stop]
(let [obj (variable)]
(validate-obj! obj variable)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а в чём вообще была проблема из-за которой появился запрет на возврат буквального nil из компонента?

Copy link
Owner Author

@darkleaf darkleaf Nov 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Собранный компонент - это значение.
Когда функа использует компонент, он может быть required или optional, это объявляется через :or в дестракчеринге.
Если компонент nil - то в процессе запуска об этом будет ошибка.

Тот факт, что в миграциях у нас может быть nil из-за when - это прикол нашего проекта.
Попробую через middleware в проекте поправить, посмотрим как приживется

тут наверное проблема в том, что в clojure смешивается nil и undefined

@darkleaf darkleaf merged commit 57066b6 into master Nov 7, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

3 participants