Как размножаться между аспектами
Я применяю аспекты, но, кажется, что-то делаю не так. Представление знаменитой эталонной картинки.
В моем случае А это:
deps_aspect = aspect(
implementation = _deps_aspect_impl,
attr_aspects = ["resource_deps"],
attrs = {
},
)
Для A(W), _deps_aspect_impl
возвращает:
return struct(
dep_files = set(),
)
Теперь, если я правильно понял документацию, я смогу получить доступ к A(W) dep_files
с помощью resource_deps
в A (Y).
Если для A (Y), _deps_aspect_impl
Я делаю:
print("DIR: %s" % dir(ctx.rule.attr))
Здесь нет resource_deps
напечатано (и я не могу получить к нему доступ).
Я понимаю, что-то не так или как это должно работать?
1 ответ
Так что проблема была в том, что я не уловил разные нюансы правильно.
attr_aspects
рекурсивны Что означает, что как только вы подадите заявку, они распространятся вниз по графику. Таким образом, атрибуты являются глобальными для этого применения. Возможно, было бы лучше иметь возможность указыватьkind
->attr
отображение.Из-за 1. вам действительно нужно взглянуть на
kind
Таким образом, у вас есть разные пути кода (единственное, что я сделал правильно).Данные НЕ могут распространяться через теневой график. Я представлял это раньше. Вы можете распространять только по "твердому" правилу
attrs
,