Skip to content

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants