.bzl ファイル

問題を報告する

すべての .bzl ファイルで使用できるグローバル メソッドです。

メンバー

analysis_test_transition

transition analysis_test_transition(settings)

analytics-test ルールの依存関係に適用する構成移行を作成します。この移行は、analysis_test = True を含むルールの属性にのみ適用できます。このようなルールには機能の制限がある(たとえば、依存関係ツリーのサイズに制限がある)ため、この関数を使用して作成される遷移は、transition() を使用して作成される遷移に比べると潜在的なスコープは制限されます。

この関数は主に、分析テスト フレームワークのコアライブラリを容易にするように設計されています。ベスト プラクティスについては、ドキュメント(またはその実装)をご覧ください。

パラメータ

パラメータ 説明
settings required
この構成の移行によって設定される構成設定に関する情報を含む辞書。キーはビルド設定ラベルで、値は遷移後の新しい値です。その他の設定に変更はありません。これを使用して、分析テストに合格するために設定する必要がある特定の構成設定を宣言します。

アスペクト

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=[])

新しい側面を作成します。この関数の結果は、グローバル値で保存する必要があります。詳細については、アスペクトの概要をご覧ください。

パラメータ

パラメータ 説明
implementation 必須
この側面を実装する Starlark 関数。Target(アスペクトが適用されるターゲット)と ctx(ターゲットの作成元となったルール コンテキスト)の 2 つのパラメータを指定します。ターゲットの属性は ctx.rule フィールドで確認できます。この関数は、ターゲットに側面を適用するたびに、分析フェーズで評価されます。
attr_aspects 文字列シーケンス。デフォルトは [] です。
属性名のリスト。アスペクトは、これらの名前を持つターゲットの属性で指定された依存関係に沿って伝播します。ここで一般的な値は depsexports です。リストには、ターゲットのすべての依存関係に沿って伝播する単一の文字列 "*" を含めることもできます。
attrs dict; デフォルトは {}
特徴のすべての属性を宣言する辞書。これは属性名から「attr.label」や「attr.string」などの属性オブジェクトにマッピングされます(attr モジュールを参照)。アスペクト属性は、実装関数で ctx パラメータのフィールドとして利用できます。

_ で始まる暗黙的な属性は、デフォルト値を持ち、label 型または label_list 型である必要があります。

明示的な属性には string 型を指定し、values 制限を使用する必要があります。明示的な属性を使用すると、制限に従って、同じ名前、型、有効な値の属性を持つルールにのみ使用が制限されます。

required_providers デフォルトは [] です。
この属性を使用すると、アスペクトは、そのルールが必要なプロバイダをアドバタイズするルールを持つターゲットのみに伝播を制限できます。値は、個々のプロバイダまたはプロバイダのリストのいずれかを含むリストである必要があります。両方を含めることはできません。たとえば、[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] は有効な値ですが、[FooInfo, BarInfo, [BazInfo, QuxInfo]] は無効です。

ネストされたプロバイダのリストは、プロバイダの 1 つのリストを含むリストに自動的に変換されます。つまり、[FooInfo, BarInfo] は自動的に [[FooInfo, BarInfo]] に変換されます。

特定のルール(some_rule など)のターゲットを特定のアスペクトに表示するには、some_rule で、少なくとも 1 つの必須プロバイダ リストにあるすべてのプロバイダをアドバタイズする必要があります。たとえば、アスペクトの required_providers[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] の場合、このアスペクトは、some_ruleFooInfoまたは BarInfoまたは BazInfoQuxInfo の両方を提供する場合に限り、some_rule ターゲットを確認できます。

required_aspect_providers デフォルトは [] です。
この属性を使用して、他のアスペクトを検査できます。値は、個々のプロバイダまたはプロバイダのリストのいずれかを含むリストである必要があります。両方を含めることはできません。たとえば、[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] は有効な値ですが、[FooInfo, BarInfo, [BazInfo, QuxInfo]] は無効です。

ネストされたプロバイダのリストは、プロバイダの 1 つのリストを含むリストに自動的に変換されます。つまり、[FooInfo, BarInfo] は自動的に [[FooInfo, BarInfo]] に変換されます。

このアスペクトに別のアスペクト(other_aspect など)を可視化するには、other_aspect で、少なくとも 1 つのリストにあるすべてのプロバイダを指定する必要があります。[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] の例では、other_aspectFooInfoBarInfo、または BazInfoQuxInfo の両方またはいずれかを提供する場合にのみ、この側面が other_aspect を認識できます。

provides デフォルトは [] です。
実装関数が返すプロバイダのリスト。

実装関数で、ここにリストされているいずれかのタイプのプロバイダが戻り値から除外されている場合、エラーになります。ただし、実装関数がここに記載されていない追加のプロバイダを返す場合があります。

リストの各要素は、provider() によって返される *Info オブジェクトです。ただし、レガシー プロバイダは文字列名で表されます。ルールのターゲットを、必要なプロバイダを宣言するターゲットの依存関係として使用する場合、そのプロバイダをここで指定する必要はありません。実装関数がそれを返すだけで十分です。必須ではありませんが、指定することをおすすめします。ただし、アスペクトrequired_providers フィールドでは、プロバイダをここで指定する必要があります。

requires Aspectシーケンス(デフォルトは [])。
このアスペクトの前に伝播する必要があるアスペクトのリスト。
fragments stringシーケンス。デフォルトは []
ターゲット構成でアスペクトが要求する構成フラグメントの名前のリスト。
host_fragments 文字列シーケンス(デフォルトは [])。
アスペクトがホスト構成で必要とする構成フラグメントの名前のリスト。
toolchains sequence; デフォルトは []
設定すると、このルールに必要なツールチェーンのセット。リストには、String、Label、StarlarkToolchainTypeApi の各オブジェクトを任意の組み合わせで含めることができます。ツールチェーンは、現在のプラットフォームをチェックすることで検出され、ctx.toolchain を介してルール実装に提供されます。
incompatible_use_toolchain_transition デフォルトは False です。
非推奨。現在は使用されていないため、削除する必要があります。
doc string、または None。デフォルトは None
ドキュメント生成ツールで抽出できる特徴の説明。
apply_to_generating_rules デフォルトは False です。
true の場合、アスペクトは出力ファイルに適用されるときに、代わりに出力ファイルの生成ルールに適用されます。

たとえば、アスペクトが属性「deps」を通じて推移的に伝播され、それがターゲットの「alpha」に適用されるとします。「alpha」に「deps = [':beta_output']」がある場合、「beta_output」はターゲットの「beta」の宣言された出力です。「beta」には、アスペクトの「alpha」が「alpha」から "charlie] が True に指定され、「alpha」が 「alpha」から 「charlie」が false に引き継がれます。

デフォルトは False です。

exec_compatible_with 文字列シーケンス(デフォルトは []
この特徴のすべてのインスタンスに適用される実行プラットフォームの制約のリスト。
exec_groups dict または None。デフォルトは None
実行グループ名(文字列)の exec_groups への辞書。設定すると、アスペクトが単一のインスタンス内の複数の実行プラットフォームでアクションを実行できるようになります。詳しくは、実行グループのドキュメントをご覧ください。
subrules サブルールシーケンス(デフォルトは [])。
試験運用版: このアスペクトで使用されるサブルールのリスト。

configuration_field

LateBoundDefault configuration_field(fragment, name)

label タイプの属性の遅延バインドデフォルト値を参照します。値を決定する前に構成を作成する必要がある場合は、値「遅延制限」になります。この属性を値として使用する属性はすべて、非公開にする必要があります。

使用例:

ルール属性の定義:

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

ルール実装内のアクセス:

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

パラメータ

パラメータ 説明
fragment required
遅延バインド値を含む構成フラグメントの名前。
name required
構成フラグメントから取得する値の名前。

依存関係

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

depset を作成します。direct パラメータは、依存関係セットの直接要素のリストです。transitive パラメータは、その要素が、作成されたデプセットの間接要素になるデプセットのリストです。depset をリストに変換したときに要素が返される順序は、order パラメータで指定されます。詳細については、依存関係の概要をご覧ください。

依存関係のすべての要素(直接的および間接的)は、式 type(x) で取得される同じ型でなければなりません。

反復処理において重複を排除するためにハッシュベースのセットが使用されるため、depset のすべての要素をハッシュ可能にする必要があります。ただし、この不変条件は現在、すべてのコンストラクタで一貫してチェックされているわけではありません。整合性チェックを有効にするには、--compatible_always_check_depset_elements フラグを使用します。これは今後のリリースでのデフォルトの動作になります。問題 10313 をご覧ください。

また、現時点では要素を変更できない必要がありますが、今後この制限は緩和される予定です。

作成された依存関係の順序は、transitive 依存関係の順序と互換性が必要です。"default" の注文は他の注文と互換性があり、他のすべての注文はご自身にのみ対応しています。

パラメータ

パラメータ 説明
direct sequence; または None。デフォルトは None
依存関係の direct 要素のリスト。
order デフォルトは "default" です。
新しいデプセットの走査戦略。設定可能な値については、こちらをご覧ください。
transitive depsetシーケンスまたは None。デフォルトは None
その要素が depset の間接要素になる依存関係のリスト。

exec_group

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

ルールの実装時に特定の実行プラットフォーム用のアクションを作成するために使用できる実行グループを作成します。

パラメータ

パラメータ 説明
toolchains sequence; デフォルトは []
この実行グループが必要とするツールチェーンのセット。リストには、String、Label、StarlarkToolchainTypeApi の各オブジェクトを任意の組み合わせで含めることができます。
exec_compatible_with 文字列シーケンス(デフォルトは [])。
実行プラットフォーム上の制約のリスト。

module_extension

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

新しいモジュール拡張機能を作成します。グローバル値で保存し、エクスポートして MODULE.bazel ファイルで使用できるようにします。

パラメータ

パラメータ 説明
implementation required
このモジュール拡張機能を実装する関数。module_ctx という単一のパラメータを取ります。この関数は、ビルドの開始時に 1 回呼び出され、利用可能なリポジトリのセットを判定します。
tag_classes デフォルトは {} です。
拡張機能で使用されるすべてのタグクラスを宣言するための辞書。タグクラスの名前から tag_class オブジェクトにマッピングされます。
doc string、または None。デフォルトは None
ドキュメント生成ツールで抽出できるモジュール拡張機能の説明。
environ 文字列シーケンス(デフォルトは []
このモジュール拡張機能が依存する環境変数のリストを提供します。リスト内の環境変数が変更された場合、拡張機能が再評価されます。
os_dependent デフォルトは False です。
この拡張機能が OS 依存かどうかを示します
arch_dependent デフォルトは False です。
この拡張機能がアーキテクチャ依存かどうかを示します。

provider

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

プロバイダ シンボルを定義します。プロバイダは、呼び出してインスタンス化することも、ターゲットからそのプロバイダのインスタンスを取得するためのキーとして直接使用することもできます。例:
MyInfo = provider()
...
def _my_library_impl(ctx):
    ...
    my_info = MyInfo(x = 2, y = 3)
    # my_info.x == 2
    # my_info.y == 3
    ...

プロバイダの使用方法に関する包括的なガイドについては、ルール(プロバイダ)をご覧ください。

init が指定されていない場合、Provider 呼び出し可能値を返します。

init を指定すると、Provider 呼び出し可能値と未加工のコンストラクタ呼び出し可能値の 2 つの要素のタプルが返されます。詳細については、 ルール(カスタム プロバイダのカスタム初期化)と以下の init パラメータの説明をご覧ください。

パラメータ

パラメータ 説明
doc 文字列、または None。デフォルトは None
ドキュメント生成ツールで抽出できるプロバイダの説明。
fields stringシーケンスdict、または None。デフォルトは None
。指定すると、使用できるフィールドのセットが制限されます。
有効な値は次のとおりです。
  • フィールドのリスト:
    provider(fields = ['a', 'b'])

  • 辞書のフィールド名 -> ドキュメント:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
すべてのフィールドは省略可能です。
init callable、または None。デフォルトは None
インスタンス化中にプロバイダのフィールド値を前処理および検証するためのオプションのコールバック。init が指定された場合、provider() は 2 つの要素のタプル(通常のプロバイダ シンボルと未加工のコンストラクタ)を返します。

詳細な説明は次のとおりです。直感的な説明とユースケースについては、ルール(プロバイダのカスタム初期化)をご覧ください。

P を、provider() を呼び出して作成されたプロバイダ シンボルにします。概念的には、P のインスタンスはデフォルト コンストラクタ関数 c(*args, **kwargs) を呼び出して生成されます。この関数は次の処理を行います。

  • args が空でない場合、エラーが発生します。
  • provider() の呼び出し時に fields パラメータが指定されており、kwargsfields にリストされていないキーが含まれている場合、エラーが発生します。
  • それ以外の場合、c は、kwargsk: v エントリごとに、値が vk というフィールドを持つ新しいインスタンスを返します。
init コールバックが指定されていない場合、シンボル P 自体の呼び出しは、デフォルト コンストラクタ関数 c の呼び出しとして機能します。つまり、P(*args, **kwargs)c(*args, **kwargs) を返します。たとえば、
MyInfo = provider()
m = MyInfo(foo = 1)
は単純に mm.foo == 1 を持つ MyInfo インスタンスになるようにします。

ただし、init が指定されている場合、P(*args, **kwargs) の呼び出しでは代わりに次の処理が実行されます。

  1. コールバックは init(*args, **kwargs) として呼び出されます。つまり、P に渡された位置引数とキーワード引数とまったく同じです。
  2. init の戻り値は、キーがフィールド名の文字列である辞書 d である必要があります。有効になっていない場合はエラーが発生します。
  3. P の新しいインスタンスは、c(**d) のように、キーワード引数として d のエントリを使用してデフォルト コンストラクタを呼び出す場合と同様に生成されます。

注: 上記の手順は、*args または **kwargsinit のシグネチャと一致しない場合、init の本体の評価が失敗した場合(意図的に fail() の呼び出しによって)、または init の戻り値が想定されるスキーマの辞書ではない場合に発生することを意味します。

このように、init コールバックは位置引数と任意のロジックを前処理と検証に許可することで、通常のプロバイダ作成を一般化します。許可されている fields のリストを回避することはできません。

init が指定された場合、provider() の戻り値はタプル (P, r) になります。ここで、r は未加工のコンストラクタです。実際、r の動作は、前述のデフォルト コンストラクタ関数 c の動作とまったく同じです。通常、r は、名前の接頭辞がアンダースコアで始まる変数にバインドされているため、現在の .bzl ファイルのみが直接アクセスできます。

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

repository_rule

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

新しいリポジトリ ルールを作成します。グローバル値で保存し、WORKSPACE ファイルから読み込んで呼び出せるようにします。

パラメータ

パラメータ 説明
implementation required
このルールを実装する関数。repository_ctx という単一のパラメータが必要です。この関数は、ルールのインスタンスごとに読み込みフェーズで呼び出されます。
attrs dict または None。デフォルトは None
ルールのすべての属性を宣言するための辞書。属性名から属性オブジェクトにマッピングされます(attr モジュールを参照)。_ で始まる属性は限定公開であり、ラベルへの暗黙的な依存関係をファイルに追加するために使用できます(リポジトリ ルールは、生成されたアーティファクトに依存できません)。属性 name は暗黙的に追加されており、指定することはできません。
local デフォルトは False です。
このルールはローカル システムからすべてを取得し、フェッチごとに再評価する必要があることを示します。
environ 文字列シーケンス(デフォルトは []
このリポジトリ ルールが依存する環境変数のリストを提供します。リスト内の環境変数が変更されると、リポジトリが再取得されます。
configure デフォルトは False です。
リポジトリが構成のためにシステムを検査することを示します。
remotable デフォルトは False です。
試験運用版。このパラメータは試験運用中であり、いつでも変更される可能性があります。頼りにしないでください。---experimental_repo_remote_exec を設定することで、試験運用版で有効にできます。
リモート実行に対応。
doc string、または None。デフォルトは None
ドキュメント生成ツールで抽出できるリポジトリ ルールの説明。

ルール

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=[])

新しいルールを作成します。このルールを BUILD ファイルまたはマクロから呼び出してターゲットを作成できます。

ルールは、.bzl ファイル内のグローバル変数に割り当てる必要があります。グローバル変数の名前はルールの名前です。

テストルールの名前の末尾は _test にする必要がありますが、他のすべてのルールにこのサフィックスを付けることはできません。(この制限はルールにのみ適用され、ターゲットには適用されません)。

パラメータ

パラメータ 説明
implementation 必須
このルールを実装する Starlark 関数。パラメータは 1 つのみ(ctx)である必要があります。この関数は、分析フェーズでルールのインスタンスごとに呼び出されます。ユーザーが指定した属性にアクセスできる。宣言されたすべての出力を生成するアクションを作成する必要があります。
test bool; デフォルトは unbound
このルールがテストルールかどうか、つまり blaze test コマンドのサブジェクトかどうか。すべてのテストルールは、自動的に実行可能とみなされます。テストルールに executable = True を明示的に設定する必要はありません(推奨されません)。値のデフォルトは False です。詳細については、 ルールページをご覧ください。
attrs dict: デフォルトは {}
ルールのすべての属性を宣言するための辞書。属性名から属性オブジェクトにマッピングされます(attr モジュールを参照)。_ で始まる属性は限定公開であり、ラベルに暗黙的な依存関係を追加するために使用できます。属性 name は暗黙的に追加されているため、指定することはできません。属性 visibilitydeprecationtagstestonlyfeatures は暗黙的に追加されており、オーバーライドできません。ほとんどのルールに必要な属性は、ほんの一握りです。メモリ使用量を制限するために、ルール関数は attrs のサイズに上限を設けます。
outputs dictNone、または function。デフォルトは None
非推奨。このパラメータは非推奨で、まもなく削除されます。頼りにしないでください。これは ---incompatible_no_rule_outputs_param無効になります。このフラグを使用して、近く予定されている削除との互換性があることを確認します。
このパラメータは非推奨になりました。代わりに OutputGroupInfo または attr.output を使用するようにルールを移行します。

事前に宣言された出力を定義するためのスキーマ。output 属性や output_list 属性とは異なり、ユーザーはこれらのファイルのラベルを指定しません。事前に宣言された出力の詳細については、ルールページをご覧ください。

この引数の値は、辞書、または辞書を生成するコールバック関数のいずれかです。コールバックは、計算された依存関係の属性と同様に機能します。関数のパラメータ名はルールの属性と照合されます。たとえば、定義 def _my_func(srcs, deps): ... とともに outputs = _my_func を渡すと、関数は属性 srcsdeps にアクセスできます。辞書を直接指定したか、関数で指定したかにかかわらず、次のように解釈されます。

辞書の各エントリは、事前に宣言された出力を作成します。キーは識別子、値は出力のラベルを決定する文字列テンプレートです。ルールの実装関数で、この ID は ctx.outputs で出力の File へのアクセスに使用されるフィールド名になります。出力のラベルはルールと同じパッケージを持ちます。パッケージの後の部分は、"%{ATTR}" の形式の各プレースホルダを属性 ATTR の値から形成された文字列に置き換えることで生成されます。

  • 文字列型の属性は、そのまま置換されます。
  • ラベル型の属性は、パッケージの後にファイル拡張子を除いたラベルの一部になります。たとえば、ラベル "//pkg:a/b.c""a/b" になります。
  • 出力型の属性は、パッケージの後のラベルの一部になり、ファイル拡張子(上記の例では "a/b.c")を含みます。
  • プレースホルダで使用されるすべてのリスト型の属性(attr.label_list など)は、要素を 1 つだけ指定する必要があります。コンバージョンは、リスト以外のバージョン(attr.label)と同じです。
  • 他の属性タイプは、プレースホルダに表示されない場合があります。
  • 特別な非属性プレースホルダ %{dirname}%{basename} は、パッケージを除く、ルールのラベルの該当部分に展開されます。たとえば、"//pkg:a/b.c" では、ディレクトリ名は a、ベース名は b.c です。

実際には、最も一般的な置換プレースホルダは "%{name}" です。たとえば、「foo」という名前のターゲットの場合、出力辞書 {"bin": "%{name}.exe"} は、実装関数で ctx.outputs.bin としてアクセスできる foo.exe という名前の出力を事前に宣言します。

executable bool; デフォルトは unbound
このルールが実行可能と見なされるかどうか、つまり blaze run コマンドの対象になるかどうか。デフォルトは False です。詳細については、 ルールページをご覧ください。
output_to_genfiles デフォルトは False です。
true の場合、ファイルは bin ディレクトリではなく genfiles ディレクトリに生成されます。既存のルールとの互換性を確保するために必要な場合を除き(C++ のヘッダー ファイルを生成する場合など)、このフラグは設定しないでください。
fragments 文字列シーケンス(デフォルトは [])。
ターゲット構成でルールが必要とする構成フラグメントの名前のリスト。
host_fragments 文字列シーケンス(デフォルトは [])。
ホスト構成でルールが必要とする構成フラグメントの名前のリスト。
_skylark_testable デフォルトは False です。
(試験運用版)

true の場合、このルールは、Actions プロバイダを介して、そのアクションに依存するルールによって検査のためにアクションを公開します。プロバイダをルール自体で利用するには、ctx.created_actions() を呼び出します。

これは、Starlark ルールの分析時の動作をテストする場合にのみ使用してください。このフラグは今後削除される可能性があります。
toolchains sequence; デフォルトは []
設定すると、このルールに必要なツールチェーンのセット。リストには、String、Label、StarlarkToolchainTypeApi の各オブジェクトを任意の組み合わせで含めることができます。ツールチェーンは、現在のプラットフォームをチェックすることで検出され、ctx.toolchain を介してルール実装に提供されます。
incompatible_use_toolchain_transition デフォルトは False です。
非推奨。現在は使用されていないため、削除する必要があります。
doc string、または None。デフォルトは None
ドキュメント生成ツールで抽出できるルールの説明。
provides デフォルトは [] です。
実装関数が返すプロバイダのリスト。

実装関数で、ここにリストされているいずれかのタイプのプロバイダが戻り値から除外されている場合、エラーになります。ただし、実装関数がここに記載されていない追加のプロバイダを返す場合があります。

リストの各要素は、provider() によって返される *Info オブジェクトです。ただし、レガシー プロバイダは文字列名で表されます。ルールのターゲットを、必要なプロバイダを宣言するターゲットの依存関係として使用する場合、そのプロバイダをここで指定する必要はありません。実装関数がそれを返すだけで十分です。必須ではありませんが、指定することをおすすめします。ただし、アスペクトrequired_providers フィールドでは、プロバイダをここで指定する必要があります。

exec_compatible_with 文字列シーケンス(デフォルトは [])。
このルールタイプのすべてのターゲットに適用される実行プラットフォームの制約のリスト。
analysis_test デフォルトは False です。
true の場合、このルールは分析テストとして扱われます。

注: 分析テストルールは、主に Starlark コアライブラリで提供されているインフラストラクチャを使用して定義されます。詳しくは、テストをご覧ください。

ルールを分析テストルールとして定義した場合、その属性で analysis_test_transition を使用して定義された構成遷移を使用できますが、いくつかの制限が適用されます。

  • このルールのターゲットには、推移的依存関係の数が制限されます。
  • このルールは(test=True が設定されている場合と同様に)テストルールと見なされます。これは test の値よりも優先されます。
  • ルール実装関数でアクションを登録することはできません。代わりに、AnalysisTestResultInfo を提供して、合格/不合格の結果を登録する必要があります。
build_setting BuildSetting または None。デフォルトは None です。
設定されている場合は、このルールの build setting の種類を表します。config モジュールをご覧ください。これが設定されている場合、「build_setting_default」という名前の必須属性がこのルールに自動的に追加されます。この属性は、ここで渡された値に対応するタイプを指定します。
cfg デフォルトは None です。
設定した場合、分析前にルールが自身の構成に適用される構成の遷移を示します。
exec_groups dict または None。デフォルトは None
実行グループ名(文字列)の exec_groups への辞書。設定すると、単一のターゲット内の複数の実行プラットフォームでルールを実行することを許可します。詳しくは、実行グループのドキュメントをご覧ください。
initializer デフォルトは None です。
試験運用版: ルールの属性を初期化する Stalark 関数。

この関数は、ルールのインスタンスごとに読み込み時に呼び出されます。nametags などの汎用属性ではなく、ルールで定義された公開属性の値を使用して呼び出されます。

属性名から目的の値までの辞書を返す必要があります。返されない属性は影響を受けません。値として None を返すと、属性定義で指定されたデフォルト値が使用されます。

初期化子は、属性定義で指定されたデフォルト値の前に評価されます。そのため、イニシャライザのシグネチャのパラメータにデフォルト値が含まれている場合、属性定義のデフォルトが上書きされます(None を返す場合を除く)。

同様に、イニシャライザの署名のパラメータにデフォルトがない場合、パラメータは必須になります。このような場合は、属性の定義でデフォルト設定または必須設定を省略することをおすすめします。

処理されない属性には、**kwargs を使用することをおすすめします。

拡張ルールの場合、すべてのイニシャライザは、子から祖先に向かって呼び出されます。各イニシャライザには、認識されている公開属性のみが渡されます。

parent デフォルトは None です。
試験運用版: 拡張された Stalark ルール。設定すると、アドバタイズされたプロバイダだけでなく、公開属性もマージされます。このルールは、親の executabletest と一致します。fragmentstoolchainsexec_compatible_withexec_groups の値はマージされます。以前のパラメータや非推奨のパラメータは設定できません。
extendable boolLabelstring、または None。デフォルトは None
試験運用版: このルールを拡張できるルールを定義する許可リストのラベル。True または False に設定して、拡張を常に許可または禁止することもできます。Bazel では、拡張機能を常に許可しています。
subrules サブルールシーケンス(デフォルトは [])。
試験運用版: このルールで使用されるサブルールのリスト。

select

unknown select(x, no_match_error='')

select() は、ルール属性を構成可能にするヘルパー関数です。詳細については、ビルドの百科事典をご覧ください。

パラメータ

パラメータ 説明
x required
構成条件を値にマッピングする辞書。各キーは、config_setting または constraint_value インスタンスを識別するラベルまたはラベル文字列です。文字列の代わりにラベルを使用するケースについては、マクロに関するドキュメントをご覧ください。
no_match_error デフォルトは '' です。
条件が一致しない場合に報告するカスタムエラー(省略可)。

サブルール

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

サブルールの新しいインスタンスを作成します。この関数を使用するには、結果をグローバル変数に格納する必要があります。

パラメータ

パラメータ 説明
implementation 関数; 必須
このサブルールを実装する Starlark 関数
attrs dict; デフォルトは {}
サブルールのすべての(非公開)属性を宣言する辞書。

サブルールには、ラベルタイプの非公開属性(label または label-list)のみを含めることができます。これらのラベルに対応する解決された値は、Bazel によって名前付き引数としてサブルールの実装関数に自動的に渡されます(したがって、実装関数は属性名に一致する名前付きパラメータを受け入れる必要があります)。これらの値の型は次のとおりです。

  • executable=True のラベル属性の場合は FilesToRunProvider
  • allow_single_file=True のラベル属性の場合は File
  • Target(その他のラベル属性の場合)
  • [Target](すべてのラベルリスト属性)
toolchains sequence; デフォルトは []
設定すると、このサブルールに必要なツールチェーンのセット。リストには、String、Label、StarlarkToolchainTypeApi の各オブジェクトを任意の組み合わせで含めることができます。ツールチェーンは現在のプラットフォームをチェックすることで検出され、ctx.toolchains を介してサブルールの実装に提供されます。
fragments 文字列シーケンス(デフォルトは [])。
ターゲット構成でサブルールが必要とする構成フラグメントの名前のリスト。
subrules サブルールシーケンス(デフォルトは [])。
このサブルールに必要な他のサブルールのリスト。

tag_class

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

新しい tag_class オブジェクトを作成します。これは、タグのクラス(モジュール拡張機能で使用可能なデータ オブジェクト)の属性スキーマを定義します。

パラメータ

パラメータ 説明
attrs デフォルトは {} です。
このタグクラスのすべての属性を宣言するための辞書。属性名から属性オブジェクトにマッピングされます(attr モジュールを参照)。
doc string、または None。デフォルトは None
ドキュメント生成ツールで抽出できるタグクラスの説明。

visibility

None visibility(value)

現在初期化中の .bzl モジュールの読み込みの可視性を設定します。

モジュールの読み込みの可視性は、他の BUILD ファイルと .bzl ファイルによるモジュールの読み込みを許可するかどうかを制御します。(これは、ファイルが他のターゲットの依存関係として表示されるかどうかを管理する、基盤となる .bzl ソースファイルのターゲット可視性とは異なります)。読み込みの可視性はパッケージのレベルで機能する: モジュールを読み込むには、読み込みを行うファイルが、モジュールに対する可視性が付与されたパッケージ内に存在している必要があります。モジュールは、その可視性に関係なく、常に独自のパッケージ内でロードできます。

visibility() は .bzl ファイルごとに 1 回だけ、トップレベルでのみ呼び出せます。関数内で呼び出すことはできません。この呼び出しは、load() ステートメントのすぐ下と、引数を決定するために必要な簡単なロジックのすぐ下に配置することをおすすめします。

フラグ --check_bzl_visibility が false に設定されている場合、読み込みの可視性違反は警告を出力しますが、ビルドは失敗します。

パラメータ

パラメータ 説明
value required
パッケージ仕様の文字列のリスト、または単一のパッケージ仕様の文字列。

パッケージ仕様は package_group と同じ形式で指定しますが、除外パッケージ仕様は使用できません。つまり、仕様は次のような形式になります。

  • "//foo": パッケージ //foo
  • "//foo/...": パッケージ //foo とそのすべてのサブパッケージ。
  • "public" または "private": それぞれすべてのパッケージ、またはパッケージなし

「@」構文は使用できません。すべての仕様は、現在のモジュールのリポジトリを基準として解釈されます。

value が文字列のリストの場合、このモジュールに公開できるパッケージのセットは、各仕様で表されるパッケージを結合したものになります。(空のリストの効果は private と同じです)。value が単一の文字列の場合、シングルトン リスト [value] の場合と同様に扱われます。

--incompatible_package_group_has_public_syntax フラグと --incompatible_fix_package_group_reporoot_syntax フラグは、この引数には影響しません。"public""private" の値は常に使用でき、"//..." は常に「現在のリポジトリ内のすべてのパッケージ」と解釈されます。