Как размножаться между аспектами

Я применяю аспекты, но, кажется, что-то делаю не так. Представление знаменитой эталонной картинки.

В моем случае А это:

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 ответ

Решение

Так что проблема была в том, что я не уловил разные нюансы правильно.

  1. attr_aspects рекурсивны Что означает, что как только вы подадите заявку, они распространятся вниз по графику. Таким образом, атрибуты являются глобальными для этого применения. Возможно, было бы лучше иметь возможность указывать kind -> attr отображение.

  2. Из-за 1. вам действительно нужно взглянуть на kindТаким образом, у вас есть разные пути кода (единственное, что я сделал правильно).

  3. Данные НЕ могут распространяться через теневой график. Я представлял это раньше. Вы можете распространять только по "твердому" правилу attrs,

Другие вопросы по тегам