Arquivos .bzl

Informar um problema

Métodos globais disponíveis em todos os arquivos .bzl.

Participantes

analysis_test_transition

transition analysis_test_transition(settings)

Cria uma transição de configuração que será aplicada às dependências de uma regra de teste de análise. Essa transição só pode ser aplicada em atributos de regras com analysis_test = True. Essas regras têm recursos restritos, por exemplo, o tamanho da árvore de dependências é limitado. Portanto, as transições criadas usando essa função têm um escopo limitado em comparação com as transições criadas usando transition().

Essa função foi projetada principalmente para facilitar a biblioteca principal do Analysis Test Framework. Consulte a documentação ou implementação dele para conferir as práticas recomendadas.

Parâmetros

Parâmetro Descrição
settings obrigatório
Um dicionário contendo informações sobre as definições de configuração que devem ser definidas por essa transição de configuração. As chaves são os rótulos de configuração do build, e os valores são os novos valores pós-transição. As demais configurações não foram alteradas. Use-o para declarar definições de configuração específicas que precisam ser definidas para aprovação em um teste de análise.

aspecto

Aspect aspect(implementation, attr_aspects=[], attrs={}, required_providers=[], required_aspect_providers=[], provides=[], requires=[], fragments=[], host_fragments=[], toolchains=[], incompatible_use_toolchain_transition=False, doc=None, *, apply_to_generating_rules=False, exec_compatible_with=[], exec_groups=None, subrules=[])

Cria um novo aspecto. O resultado dessa função precisa ser armazenado em um valor global. Consulte a introdução aos aspectos para mais detalhes.

Parâmetros

Parâmetro Descrição
implementation obrigatório
Uma função Starlark que implementa esse aspecto, com exatamente dois parâmetros: Target (o destino a que o aspecto é aplicado) e ctx (o contexto da regra de onde o destino é criado). Os atributos do destino estão disponíveis no campo ctx.rule. Essa função é avaliada durante a fase de análise para cada aplicação de um aspecto a um destino.
attr_aspects sequência de strings. O padrão é []
Lista de nomes de atributos. O aspecto é propagado pelas dependências especificadas nos atributos de um destino com esses nomes. Os valores comuns aqui incluem deps e exports. A lista também pode conter uma única string "*" para propagar em todas as dependências de um destino.
attrs dict; o padrão é {}
Um dicionário que declara todos os atributos do aspecto. Ele é mapeado de um nome de atributo para um objeto de atributo, como "attr.label" ou "attr.string". Consulte o módulo attr. Os atributos de aspecto estão disponíveis para a função de implementação como campos do parâmetro ctx.

Atributos implícitos que começam com _ precisam ter valores padrão e o tipo label ou label_list.

Atributos explícitos precisam ter o tipo string e usar a restrição values. Os atributos explícitos restringem o aspecto a ser usado apenas com regras que tenham atributos com o mesmo nome, tipo e valores válidos de acordo com a restrição.

required_providers O padrão é []
Esse atributo permite que o aspecto limite a propagação dele apenas aos destinos com regras que divulgam os provedores exigidos. O valor precisa ser uma lista com provedores individuais ou listas de provedores, mas não ambos. Por exemplo, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] é um valor válido, mas [FooInfo, BarInfo, [BazInfo, QuxInfo]] não é.

Uma lista não aninhada de provedores será automaticamente convertida em uma lista que contém uma lista de provedores. Ou seja, [FooInfo, BarInfo] será automaticamente convertido em [[FooInfo, BarInfo]].

Para tornar as segmentações de regras (por exemplo, some_rule) visíveis para um aspecto, o some_rule precisa anunciar todos os provedores de pelo menos uma das listas de provedores obrigatórias. Por exemplo, se a required_providers de um aspecto for [[FooInfo], [BarInfo], [BazInfo, QuxInfo]], esse aspecto só vai poder conferir as metas de some_rule se some_rule fornecer FooInfo, ou BarInfo, ou BazInfo e QuxInfo.

required_aspect_providers o padrão é []
Esse atributo permite que esse aspecto inspecione outros aspectos. O valor precisa ser uma lista com provedores individuais ou listas de provedores, mas não ambos. Por exemplo, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] é um valor válido, mas [FooInfo, BarInfo, [BazInfo, QuxInfo]] não é.

Uma lista não aninhada de provedores será automaticamente convertida em uma lista que contém uma lista de provedores. Ou seja, [FooInfo, BarInfo] será automaticamente convertido em [[FooInfo, BarInfo]].

Para que outro aspecto (por exemplo, other_aspect) fique visível para esse aspecto, o other_aspect precisa informar todos os provedores de pelo menos uma das listas. No exemplo de [[FooInfo], [BarInfo], [BazInfo, QuxInfo]], esse aspecto só vai poder ver other_aspect se other_aspect fornecer FooInfo, ou BarInfo, ou BazInfo e QuxInfo.

provides o padrão é []
Uma lista de provedores que a função de implementação precisa retornar.

Se a função de implementação omitir qualquer um dos tipos de provedores listados aqui do valor de retorno, isso constituirá um erro. No entanto, a função de implementação pode retornar outros provedores não listados aqui.

Cada elemento da lista é um objeto *Info retornado por provider(), mas um provedor legado é representado pelo nome da string dele.Quando um destino da regra é usado como dependência para um destino que declara um provedor necessário, não é necessário especificar esse provedor aqui. Basta que a função de implementação o retorne. No entanto, é uma prática recomendada especificá-lo, mesmo que isso não seja necessário. No entanto, o campo required_providers de um aspecto exige que os provedores sejam especificados aqui.

requires sequência de Aspectos. O padrão é []
Lista de aspectos que precisam ser propagados antes deste aspecto.
fragments sequência de strings. O padrão é []
Lista de nomes de fragmentos de configuração que o aspecto exige na configuração de destino.
host_fragments sequência de strings. O padrão é []
Lista de nomes de fragmentos de configuração que o aspecto exige na configuração do host.
toolchains sequência; o padrão é []
. Se definido, é o conjunto de conjuntos de ferramentas exigido por esta regra. A lista pode conter objetos String, Label ou StarlarkToolchainTypeApi, em qualquer combinação. Os conjuntos de ferramentas são encontrados verificando a plataforma atual e fornecidos à implementação da regra via ctx.toolchain.
incompatible_use_toolchain_transition O padrão é False
Descontinuado, ele não está mais em uso e precisa ser removido.
doc string; ou None; o padrão é None
Uma descrição do aspecto que pode ser extraído pelas ferramentas de geração de documentação.
apply_to_generating_rules O padrão é False
Se verdadeiro, o aspecto será aplicado à regra de geração do arquivo de saída, quando aplicado a um arquivo de saída.

Por exemplo, suponha que um aspecto se propaga de modo transitivo pelo atributo `deps` e ele seja aplicado ao destino `alpha`. Suponha que `alpha` tenha `deps = [':beta_output']`, em que `beta_output` é uma saída declarada de um destino `beta`. Suponha que `beta` tenha um de destino `charlie` como um dos `deps` e ele será aplicado a `alpha`. Se `apply_to_generate_rules=the,'.

Falso por padrão.

exec_compatible_with sequência de strings. O padrão é [].
Uma lista de restrições na plataforma de execução que se aplicam a todas as instâncias desse aspecto.
exec_groups dict; ou None; o padrão é None
Ditado do nome do grupo de execução (string) para exec_groups. Se definido, permite que aspectos executem ações em várias plataformas de execução em uma única instância. Consulte a documentação dos grupos de execução para mais informações.
subrules sequência de Subregras. O padrão é []
Experimental: lista de subregras usadas por este aspecto.

configuration_field

LateBoundDefault configuration_field(fragment, name)

Refere-se a um valor padrão vinculado tardio para um atributo do tipo label. Um valor é "late-bound" se exigir que a configuração seja criada antes de determinar o valor. Qualquer atributo que use esse valor como um valor precisa ser particular.

Exemplo de uso:

Definindo um atributo de regra:

'_foo': attr.label(default=configuration_field(fragment='java', name='toolchain'))

Como acessar na implementação da regra:

  def _rule_impl(ctx):
    foo_info = ctx.attr._foo
    ...

Parâmetros

Parâmetro Descrição
fragment obrigatório
O nome de um fragmento de configuração que contém o valor de limite final.
name obrigatório
O nome do valor que você vai extrair do fragmento de configuração.

depset

depset depset(direct=None, order="default", *, transitive=None)

Cria um depset. O parâmetro direct é uma lista de elementos diretos do desset, e o parâmetro transitive é uma lista de depsets cujos elementos se tornam elementos indiretos do depset criado. A ordem em que os elementos são retornados quando o depset é convertido em uma lista é especificada pelo parâmetro order. Consulte a Visão geral de Depsets para ver mais informações.

Todos os elementos (diretos e indiretos) de um conjunto de dados precisam ser do mesmo tipo, conforme recebido pela expressão type(x).

Como um conjunto baseado em hash é usado para eliminar cópias durante a iteração, todos os elementos de um depset precisam ser criptografados com hash. No entanto, essa invariante não é verificada atualmente de forma consistente em todos os construtores. Use a sinalização --incompatible_always_check_depset_elements para ativar a verificação consistente. Esse será o comportamento padrão em versões futuras. Consulte o Problema 10313.

Além disso, os elementos precisam ser imutáveis no momento, embora essa restrição seja flexibilizada no futuro.

A ordem do conjunto de dados criado deve ser compatível com a ordem das dependências transitive. O pedido "default" é compatível com qualquer outro pedido, e todos os outros só são compatíveis com eles mesmos.

Parâmetros

Parâmetro Descrição
direct sequência ou None; o padrão é None
. Uma lista de elementos diretos de um conjunto de dados.
order o padrão é "default"
A estratégia de travessia do novo depset. Consulte aqui os valores possíveis.
transitive sequência de depsets; ou None; o padrão é None.
Uma lista de depsets com elementos que se tornam elementos indiretos do depset.

exec_group

exec_group exec_group(toolchains=[], exec_compatible_with=[])

Cria um grupo de execução que pode ser usado para gerar ações a uma plataforma específica durante a implementação da regra.

Parâmetros

Parâmetro Descrição
toolchains sequência: o padrão é []
. O conjunto de conjuntos de ferramentas que este grupo de execução requer. A lista pode conter objetos String, Label ou StarlarkToolchainTypeApi, em qualquer combinação.
exec_compatible_with sequência de strings. O padrão é [].
Uma lista de restrições na plataforma de execução.

module_extension

unknown module_extension(implementation, *, tag_classes={}, doc=None, environ=[], os_dependent=False, arch_dependent=False)

Cria uma nova extensão de módulo. Armazene-o em um valor global para que ele possa ser exportado e usado em um arquivo MODULE.bazel.

Parâmetros

Parâmetro Descrição
implementation obrigatório
A função que implementa a extensão desse módulo. É necessário usar um único parâmetro, module_ctx. A função é chamada uma vez no início de um build para determinar o conjunto de repositórios disponíveis.
tag_classes O padrão é {}
Um dicionário para declarar todas as classes de tag usadas pela extensão. Ele é mapeado do nome da classe de tags para um objeto tag_class.
doc string; ou None; o padrão é None
Uma descrição da extensão do módulo que pode ser extraída pelas ferramentas de geração de documentação.
environ sequência de strings. O padrão é [].
Fornece uma lista de variáveis de ambiente de que a extensão do módulo depende. Se uma variável de ambiente dessa lista for alterada, a extensão será reavaliada.
os_dependent o padrão é False
Indica se essa extensão é dependente do SO ou não
arch_dependent o padrão é False
Indica se essa extensão depende ou não da arquitetura

provider

unknown provider(doc=None, *, fields=None, init=None)

Define um símbolo de provedor. O provedor pode ser instanciado chamando-o ou usado diretamente como chave para recuperar uma instância desse provedor de um destino. Exemplo:
MyInfo = provider()
...
def _my_library_impl(ctx):
    ...
    my_info = MyInfo(x = 2, y = 3)
    # my_info.x == 2
    # my_info.y == 3
    ...

Consulte Regras (provedores) para ver um guia completo sobre como usar provedores.

Retorna um valor chamável Provider se init não for especificado.

Se init for especificado, retorna uma tupla de dois elementos: um valor chamável de Provider e um valor chamável de construtor bruto. Consulte Regras (inicialização personalizada de provedores personalizados) e veja mais detalhes sobre o parâmetro init abaixo.

Parâmetros

Parâmetro Descrição
doc string; ou None; o padrão é None
Uma descrição do provedor que pode ser extraída pelas ferramentas que geram documentação.
fields sequência de strings, dict ou None. O padrão é None
. Se especificado, restringe o conjunto de campos permitidos.
Os valores possíveis são:
  • lista de campos:
    provider(fields = ['a', 'b'])

  • nome do campo do dicionário -> documentação:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
Todos os campos são opcionais.
init chamável; ou None; o padrão é None
Um callback opcional para pré-processamento e validação dos valores de campo do provedor durante a instanciação. Se init for especificado, provider() retornará uma tupla de dois elementos: o símbolo de provedor normal e um construtor bruto.

Confira a seguir uma descrição precisa. Consulte Regras (inicialização personalizada de provedores) para conferir uma discussão intuitiva e casos de uso.

Permita que P seja o símbolo do provedor criado chamando provider(). Conceitualmente, uma instância de P é gerada chamando uma função de construtor padrão c(*args, **kwargs), que faz o seguinte:

  • Se args não estiver vazio, ocorrerá um erro.
  • Se o parâmetro fields foi especificado quando provider() foi chamado e se kwargs contém alguma chave que não estava listada em fields, ocorre um erro.
  • Caso contrário, c retorna uma nova instância que tem, para cada entrada k: v em kwargs, um campo chamado k com o valor v.
No caso em que um callback init não é fornecido, uma chamada para o símbolo P atua como uma chamada para a função de construtor padrão c. Em outras palavras, P(*args, **kwargs) retorna c(*args, **kwargs). Por exemplo,
MyInfo = provider()
m = MyInfo(foo = 1)
vai fazer com que m seja uma instância MyInfo com m.foo == 1.

Mas, no caso em que init for especificado, a chamada P(*args, **kwargs) realizará as seguintes etapas:

  1. O callback é invocado como init(*args, **kwargs), ou seja, com os mesmos argumentos de posição e palavra-chave que foram transmitidos para P.
  2. O valor de retorno de init precisa ser um dicionário, d, com chaves que são strings de nome de campo. Se não estiver, ocorrerá um erro.
  3. Uma nova instância de P é gerada como se você chamasse o construtor padrão com as entradas de d como argumentos de palavra-chave, como em c(**d).

Observação: as etapas acima implicam que um erro ocorre se *args ou **kwargs não corresponder à assinatura de init, se a avaliação do corpo de init falhar (talvez intencionalmente por uma chamada para fail()) ou se o valor de retorno de init não for um dicionário com o esquema esperado.

Dessa forma, o callback init generaliza a construção normal do provedor, permitindo argumentos posicionais e lógica arbitrária para pré-processamento e validação. Não é possível contornar a lista de fields permitidos.

Quando init é especificado, o valor de retorno de provider() se torna uma tupla (P, r), em que r é o construtor bruto. Na verdade, o comportamento de r é exatamente o mesmo da função de construtor padrão c discutida acima. Normalmente, r está vinculado a uma variável cujo nome é prefixado com um sublinhado, de modo que somente o arquivo .bzl atual tenha acesso direto a ela:

MyInfo, _new_myinfo = provider(init = ...)

repository_rule

callable repository_rule(implementation, *, attrs=None, local=False, environ=[], configure=False, remotable=False, doc=None)

Cria uma nova regra de repositório. Armazene-o em um valor global para que ele possa ser carregado e chamado no arquivo do ESPAÇO DE TRABALHO.

Parâmetros

Parâmetro Descrição
implementation necessária
a função que implementa essa regra. É necessário ter um único parâmetro, repository_ctx. A função é chamada durante a fase de carregamento de cada instância da regra.
attrs dict; ou None; o padrão é None
dicionário para declarar todos os atributos da regra. Ele é mapeado de um nome de atributo para um objeto de atributo (consulte o módulo attr). Atributos que começam com _ são particulares e podem ser usados para adicionar uma dependência implícita a um marcador em um arquivo (uma regra de repositório não pode depender de um artefato gerado). O atributo name é adicionado implicitamente e não deve ser especificado.
local o padrão é False
Indica que essa regra busca tudo no sistema local e precisa ser reavaliada a cada busca.
environ sequência de strings. O padrão é [].
Fornece uma lista das variáveis de ambiente de que esta regra de repositório depende. Se uma variável de ambiente dessa lista mudar, a busca do repositório será feita novamente.
configure o padrão é False
Indica que o repositório inspeciona o sistema para fins de configuração
remotable o padrão é False
Experimental. Esse parâmetro é experimental e pode ser alterado a qualquer momento. Não dependa disso. Ela pode ser ativada de forma experimental configurando ---experimental_repo_remote_exec
Compatível com execução remota.
doc string; ou None; o padrão é None
Uma descrição da regra de repositório que pode ser extraída pelas ferramentas de geração de documentação.

regra

callable rule(implementation, *, test=unbound, attrs={}, outputs=None, executable=unbound, output_to_genfiles=False, fragments=[], host_fragments=[], _skylark_testable=False, toolchains=[], incompatible_use_toolchain_transition=False, doc=None, provides=[], exec_compatible_with=[], analysis_test=False, build_setting=None, cfg=None, exec_groups=None, initializer=None, parent=None, extendable=None, subrules=[])

Cria uma nova regra, que pode ser chamada a partir de um arquivo BUILD ou de uma macro para criar destinos.

As regras precisam ser atribuídas às variáveis globais em um arquivo .bzl. O nome da variável global é o nome da regra.

As regras de teste precisam ter um nome terminado em _test, enquanto outras regras não podem ter esse sufixo. Essa restrição se aplica somente às regras, não aos destinos delas.

Parâmetros

Parâmetro Descrição
implementation necessária
a função Starlark que implementa essa regra precisa ter exatamente um parâmetro: ctx. A função é chamada durante a fase de análise para cada instância da regra. Ela pode acessar os atributos fornecidos pelo usuário. Ela precisa criar ações para gerar todas as saídas declaradas.
test bool; o padrão é unbound
Define se essa regra é uma regra de teste, ou seja, se pode ser o assunto de um comando blaze test. Todas as regras de teste são automaticamente consideradas executáveis. É desnecessário (e não recomendado) definir explicitamente executable = True para uma regra de teste. O valor padrão é False. Consulte a página Regras para mais informações.
attrs dict; o padrão é {}
para declarar todos os atributos da regra. Ele é mapeado de um nome de atributo para um objeto de atributo (consulte o módulo attr). Atributos que começam com _ são particulares e podem ser usados para adicionar uma dependência implícita a um rótulo. O atributo name é adicionado implicitamente e não deve ser especificado. Os atributos visibility, deprecation, tags, testonly e features são adicionados implicitamente e não podem ser substituídos. A maioria das regras só precisa de alguns atributos. Para limitar o uso da memória, a função de regra impõe um limite no tamanho das atributos.
outputs dict; ou None; ou função; o padrão é None
Descontinuado. Este parâmetro foi descontinuado e será removido em breve. Não dependa disso. Ela está desativada com o ---incompatible_no_rule_outputs_param. Use essa sinalização para verificar se seu código é compatível com a remoção iminente.
Este parâmetro foi descontinuado. Migre as regras para usar OutputGroupInfo ou attr.output.

Um esquema para definir saídas pré-declaradas. Ao contrário dos atributos output e output_list, o usuário não especifica os marcadores desses arquivos. Consulte a página Regras para saber mais sobre as saídas pré-declaradas.

O valor desse argumento é um dicionário ou uma função de callback que produz um dicionário. O callback funciona de maneira semelhante aos atributos de dependência computados: os nomes de parâmetro da função são comparados aos atributos da regra. Por exemplo, se você transmitir outputs = _my_func com a definição def _my_func(srcs, deps): ..., a função terá acesso aos atributos srcs e deps. Quer o dicionário seja especificado diretamente ou por meio de uma função, ele é interpretado da seguinte maneira:

Cada entrada no dicionário cria uma saída pré-declarada em que a chave é um identificador e o valor é um modelo de string que determina o rótulo da saída. Na função de implementação da regra, o identificador se torna o nome do campo usado para acessar o File da saída no ctx.outputs. O rótulo da saída tem o mesmo pacote que a regra, e a parte após o pacote é produzida substituindo cada marcador de posição do formulário "%{ATTR}" por uma string formada a partir do valor do atributo ATTR:

  • Os atributos do tipo string são substituídos na íntegra.
  • Os atributos do tipo rótulo se tornam parte do rótulo após o pacote, menos a extensão do arquivo. Por exemplo, o rótulo "//pkg:a/b.c" se torna "a/b".
  • Os atributos de saída se tornam parte do rótulo após o pacote, incluindo a extensão do arquivo (para o exemplo acima, "a/b.c").
  • Todos os atributos de lista (por exemplo, attr.label_list) usados em marcadores de posição precisam ter exatamente um elemento. A conversão é a mesma que a versão que não é de lista (attr.label).
  • Outros tipos de atributo podem não aparecer nos marcadores de posição.
  • Os marcadores especiais sem atributos %{dirname} e %{basename} são expandidos para essas partes do rótulo da regra, excluindo o pacote. Por exemplo, em "//pkg:a/b.c", o nome do diretório é a, e o nome de base é b.c.

Na prática, o marcador de substituição de substituição mais comum é "%{name}". Por exemplo, para um destino chamado "foo", o dict de saída {"bin": "%{name}.exe"} declara previamente uma saída chamada foo.exe, que pode ser acessada na função de implementação como ctx.outputs.bin.

executable bool; o padrão é unbound
Define se essa regra é considerada executável, ou seja, se pode ser o assunto de um comando blaze run. O padrão é False. Consulte a página Regras para mais informações.
output_to_genfiles o padrão é False
Se verdadeiro, os arquivos serão gerados no diretório genfiles em vez do diretório bin. A menos que você precise dessa sinalização para compatibilidade com as regras existentes (por exemplo, ao gerar arquivos principais para C++), não defina essa sinalização.
fragments sequência de strings. O padrão é []
Lista de nomes de fragmentos de configuração que a regra exige na configuração de destino.
host_fragments sequência de strings. O padrão é [].
Lista de nomes de fragmentos de configuração que a regra exige na configuração do host.
_skylark_testable O padrão é False
(Experimental)

Se for verdadeiro, essa regra vai expor as ações para inspeção por regras que dependem dela usando um provedor Actions. O provedor também fica disponível para a própria regra chamando ctx.created_actions().

Isso deve ser usado somente para testar o comportamento do tempo de análise das regras do Starlark. Essa sinalização poderá ser removida no futuro.
toolchains sequência; o padrão é []
. Se definido, é o conjunto de conjuntos de ferramentas exigido por esta regra. A lista pode conter objetos String, Label ou StarlarkToolchainTypeApi, em qualquer combinação. Os conjuntos de ferramentas são encontrados verificando a plataforma atual e fornecidos à implementação da regra via ctx.toolchain.
incompatible_use_toolchain_transition O padrão é False
Descontinuado, ele não está mais em uso e precisa ser removido.
doc string; ou None; o padrão é None
Uma descrição da regra que pode ser extraída pelas ferramentas que geram documentação.
provides o padrão é []
Uma lista de provedores que a função de implementação precisa retornar.

Se a função de implementação omitir qualquer um dos tipos de provedores listados aqui do valor de retorno, isso constituirá um erro. No entanto, a função de implementação pode retornar outros provedores não listados aqui.

Cada elemento da lista é um objeto *Info retornado por provider(), mas um provedor legado é representado pelo nome da string dele.Quando um destino da regra é usado como dependência para um destino que declara um provedor necessário, não é necessário especificar esse provedor aqui. Basta que a função de implementação o retorne. No entanto, é uma prática recomendada especificá-lo, mesmo que isso não seja necessário. No entanto, o campo required_providers de um aspecto exige que os provedores sejam especificados aqui.

exec_compatible_with sequência de strings. O padrão é [].
Uma lista de restrições na plataforma de execução que se aplica a todos os destinos desse tipo de regra.
analysis_test o padrão é False
Se verdadeiro, essa regra é tratada como um teste de análise.

Observação: as regras de teste de análise são definidas principalmente usando a infraestrutura fornecida nas principais bibliotecas do Starlark. Consulte Testes para conferir as orientações.

Se uma regra for definida como uma regra de teste de análise, ela poderá usar transições de configuração definidas com analysis_test_transition nos atributos, mas aceita algumas restrições:

  • Os destinos desta regra são limitados quanto ao número de dependências transitivas que eles podem ter.
  • A regra é considerada de teste, como se test=True tivesse sido definida. Ele substitui o valor de test
  • A função de implementação da regra não pode registrar ações. Em vez disso, ele precisa registrar um resultado de aprovação/reprovação fornecendo AnalysisTestResultInfo.
build_setting BuildSetting ou None; o padrão é None
. Se definido, descreve o tipo de build setting dessa regra. Consulte o módulo config. Se isso for definido, um atributo obrigatório chamado "build_setting_default" será adicionado automaticamente a esta regra, com um tipo correspondente ao valor transmitido aqui.
cfg O padrão é None
Se definido, aponta para a transição de configuração que a regra vai aplicar à própria configuração antes da análise.
exec_groups dict; ou None; o padrão é None
Ditado do nome do grupo de execução (string) para exec_groups. Se definido, permite que as regras executem ações em várias plataformas de execução em um único destino. Consulte a documentação dos grupos de execução para mais informações.
initializer o padrão é None
Experimental: a função Stalark que inicializa os atributos da regra.

A função é chamada no tempo de carregamento para cada instância da regra. Ela é chamada com valores de atributos públicos definidos pela regra (não com atributos genéricos, por exemplo, name ou tags).

Ela precisa retornar um dicionário dos nomes dos atributos para os valores desejados. Os atributos que não são retornados não são afetados. Retornar None como valor resulta no uso do valor padrão especificado na definição do atributo.

Os inicializadores são avaliados antes dos valores padrão especificados em uma definição de atributo. Consequentemente, se um parâmetro na assinatura do inicializador contiver um valor padrão, ele vai substituir o padrão da definição do atributo (exceto se retornar None).

Da mesma forma, se um parâmetro na assinatura do inicializador não tiver um padrão, ele se tornará obrigatório. É uma boa prática omitir as configurações padrão/obrigatórias na definição de um atributo nesses casos.

Recomendamos usar **kwargs para atributos que não são processados.

No caso de regras estendidas, todos os inicializadores são chamados, partindo do filho para ancestrais. Cada inicializador recebe apenas os atributos públicos que ele conhece.

parent o padrão é None
Experimental: a regra do Stalark que é estendida. Quando definido, os atributos públicos são mesclados, assim como os provedores anunciados. A regra corresponde a executable e test do pai. Os valores de fragments, toolchains, exec_compatible_with e exec_groups são mesclados. Não é possível definir parâmetros legados ou descontinuados.
extendable bool, Label, string ou None. O padrão é None
Experimental: um rótulo de uma lista de permissões que define quais regras podem estender essa regra. Ele também pode ser definido como "True/False" para sempre permitir/proibir a extensão. O padrão do Bazel é sempre permitir extensões.
subrules sequência de Subregras. O padrão é []
Experimental: lista de subregras usadas por essa regra.

select

unknown select(x, no_match_error='')

select() é a função auxiliar que torna um atributo de regra configurável. Consulte a enciclopédia de criação para mais detalhes.

Parâmetros

Parâmetro Descrição
x obrigatório
Um dict que mapeia condições de configuração para valores. Cada chave é um Label ou uma string de rótulo que identifica uma instância config_setting ou constraint_value. Consulte a documentação sobre macros para saber quando usar um rótulo em vez de uma string.
no_match_error o padrão é ''
Erro personalizado opcional a ser relatado se nenhuma condição corresponder.

sub-regra

Subrule subrule(implementation, attrs={}, toolchains=[], fragments=[], subrules=[])

Constrói uma nova instância de uma sub-regra. O resultado dessa função precisa ser armazenado em uma variável global antes de ser usado.

Parâmetros

Parâmetro Descrição
implementation função; obrigatório
A função Starlark que implementa essa sub-regra
attrs dict; o padrão é {}
Um dicionário para declarar todos os atributos (particulares) da sub-regra.

As subregras só podem ter atributos particulares que são rotulados por marcador (ou seja, marcador ou lista de marcadores). Os valores resolvidos correspondentes a esses rótulos são transmitidos automaticamente pelo Bazel para a função de implementação da sub-regra como argumentos nomeados. Assim, a função de implementação é obrigatória para aceitar parâmetros nomeados correspondentes aos nomes dos atributos. Os tipos desses valores serão:

  • FilesToRunProvider para atributos de rótulo com executable=True
  • File para atributos de rótulo com allow_single_file=True
  • Target para todos os outros atributos de rótulo
  • [Target] para todos os atributos da lista de rótulos
toolchains sequência; o padrão é []
. Se definido, é o conjunto de conjuntos de ferramentas exigido por esta sub-regra. A lista pode conter objetos String, Label ou StarlarkToolchainTypeApi, em qualquer combinação. Os conjuntos de ferramentas são encontrados verificando a plataforma atual e fornecidos à implementação da sub-regra via ctx.toolchains.
fragments sequência de strings. O padrão é []
Lista de nomes de fragmentos de configuração que a sub-regra exige na configuração de destino.
subrules sequência de Subregras. O padrão é []
Lista de outras subregras necessárias para esta sub-regra.

tag_class

tag_class tag_class(attrs={}, *, doc=None)

Cria um novo objeto tag_class, que define um esquema de atributo para uma classe de tags, que são objetos de dados utilizáveis por uma extensão de módulo.

Parâmetros

Parâmetro Descrição
attrs O padrão é {}
Um dicionário para declarar todos os atributos dessa classe de tag. Ele é mapeado de um nome de atributo para um objeto de atributo (consulte o módulo attr).
doc string; ou None; o padrão é None
Uma descrição da classe de tag que pode ser extraída pelas ferramentas de geração de documentação.

visibilidade

None visibility(value)

Define a visibilidade de carregamento do módulo .bzl que está sendo inicializado.

A visibilidade de carregamento de um módulo determina se outros arquivos BUILD e .bzl podem carregá-lo. Isso é diferente da visibilidade de destino do arquivo de origem .bzl subjacente, que determina se o arquivo pode aparecer como uma dependência de outros destinos. A visibilidade do carregamento funciona no nível dos pacotes: para carregar um módulo, o arquivo que está fazendo o carregamento deve estar em um pacote que tenha recebido visibilidade ao módulo. Um módulo pode sempre ser carregado dentro do próprio pacote, independentemente da visibilidade dele.

visibility() só pode ser chamado uma vez por arquivo .bzl e apenas no nível superior, não dentro de uma função. O estilo preferencial é colocar essa chamada logo abaixo das instruções load() e de qualquer lógica breve necessária para determinar o argumento.

Se a flag --check_bzl_visibility for definida como falsa, as violações de visibilidade do carregamento vão emitir avisos, mas não gerarão falha no build.

Parâmetros

Parâmetro Descrição
value obrigatório
Uma lista de strings de especificação do pacote ou uma única string de especificação de pacote.

As especificações do pacote seguem o mesmo formato de package_group, com a exceção de que especificações de pacote negativas não são permitidas. Ou seja, uma especificação pode ter os formatos:

  • "//foo": o pacote //foo.
  • "//foo/...": o pacote //foo e todos os subpacotes dele.
  • "public" ou "private": todos ou nenhum pacote, respectivamente.

A sintaxe "@" não é permitida. Todas as especificações são interpretadas em relação ao repositório do módulo atual.

Se value for uma lista de strings, o conjunto de pacotes concedido para esse módulo será a união dos pacotes representados por cada especificação. Uma lista vazia tem o mesmo efeito que private. Se value for uma string única, ela vai ser tratada como se fosse a lista de singleton [value].

As sinalizações --incompatible_package_group_has_public_syntax e --incompatible_fix_package_group_reporoot_syntax não afetam esse argumento. Os valores "public" e "private" estão sempre disponíveis, e "//..." é sempre interpretado como "todos os pacotes no repositório atual".