全球

在全域環境中註冊的物件、函式和模組。

會員

所有

bool all(elements)

如果所有元素的結果為 True 或集合為空白,則傳回 true。系統會使用 bool 函式將元素轉換為布林值。
all(["hello", 3, True]) == True
all([-1, 0, 1]) == False

參數

參數 說明
elements 必要
字串或元素集合。

analysis_test_transition

transition analysis_test_transition(settings)

建立設定轉換,並套用至分析測試規則的依附元件。這項轉換只能對含有 analysis_test = True 的規則屬性套用。這類規則在功能方面受到限制 (例如依附元件樹狀結構的大小有限),因此相較於使用轉換建立的轉場效果,使用這項功能建立的轉換作業僅限於潛在範圍。

此函式主要用於促進 Analysis Test Framework 核心程式庫。如要瞭解最佳做法,請參閱相關說明文件 (或其實作)。

參數

參數 說明
settings 必要
這個字典內含應由這個設定轉換所配置的設定資訊。鍵為建構設定標籤,而值是轉換後的新值。所有其他設定則維持不變。您可以用這個引數宣告要通過分析測試的特定配置設定。

不限

bool any(elements)

如有至少一個元素的評估結果為 True,則傳回 true。系統會使用 bool 函式將元素轉換為布林值。
any([-1, 0, 1]) == True
any([False, 0, ""]) == False

參數

參數 說明
elements 必要
字串或元素集合。

archive_override

None archive_override(module_name, urls, integrity='', strip_prefix='', patches=[], patch_cmds=[], patch_strip=0)

指定此依附元件應來自特定位置的封存檔案 (zip、gzip 等),而非登錄。這個指令只會在根模組中執行;也就是說,如果他人將某個模組做為依附元件使用,系統會忽略該模組本身的覆寫。

參數

參數 說明
module_name 必要
要套用這項覆寫設定的 Bazel 模組依附元件名稱。
urls string; or Iterable of strings; 必要
封存檔的網址,可以是 http(s):// 或 file:// 網址。
integrity default = ''
封存檔案的預期總和檢查碼,採用子資源完整性格式。
strip_prefix default = ''
要從擷取的檔案中移除的目錄前置字串。
patches Iterable of strings; default = []
一個標籤清單,指向要套用至這個模組的修補檔案。修補型檔案必須存在於頂層專案的原始碼樹狀結構中。系統會按照清單順序套用這些資料欄。
patch_cmds Iterable of strings; default = []
套用修補程式後,要套用至 Linux/Macos 的 Bash 指令序列。
patch_strip default = 0
與 Unix 修補程式的 --strip 引數相同。

切面

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

建立新切面。這個函式的結果必須儲存在全域值中。詳情請參閱切面簡介

參數

參數 說明
implementation 必要
用於實作此面向的 Starlark 函式,只有兩個參數:Target (套用該切面的目標) 和 ctx (建立目標的規則內容)。目標屬性可透過 ctx.rule 欄位取得。在分析階段,這個函式會針對單一方面的每個應用方式來評估。
attr_aspects sequence of strings; default = []
屬性名稱清單。切面會沿著目標屬性中指定的依附元件,採用這些名稱。這裡的常見值包括 depsexports。清單也可以包含單一字串 "*",以沿著目標的所有依附元件傳播。
attrs dict; or None; default = None
用於宣告切面所有屬性的字典。它會從屬性名稱對應至屬性物件,例如「attr.label」或「attr.string」(請參閱 attr 模組)。切面屬性可做為 ctx 參數的欄位,可導入函式。

開頭為 _ 的隱含屬性必須具備預設值,且類型為 labellabel_list

明確屬性必須具備 string 類型,且必須使用 values 限制。明確屬性會限制顯示方向,只有在規則具有相同名稱、類型及有效值的屬性時,才能用於相關限制。

required_providers default = []
這個屬性可讓切面限制僅對規則所宣傳所需供應商的目標套用。值必須是包含個別提供者或供應商清單的清單,但不能同時包含兩者。舉例來說,[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] 是有效值,但 [FooInfo, BarInfo, [BazInfo, QuxInfo]] 無效。

系統會將未巢狀結構的提供者清單自動轉換為包含一份供應商清單的清單。換句話說,[FooInfo, BarInfo] 會自動轉換成 [[FooInfo, BarInfo]]

如要向某個面向顯示部分規則 (例如 some_rule) 目標,some_rule 必須針對至少一份必要供應商清單中的供應商宣傳所有供應商。舉例來說,如果切面的 required_providers[[FooInfo], [BarInfo], [BazInfo, QuxInfo]],則只有在 some_rule 提供 FooInfo *或* BarInfo *或* BazInfo *和* QuxInfo 時,這個切面才能看見 some_rule 目標。

required_aspect_providers default = []
這個屬性可讓這個切面檢查其他切面。值必須是包含個別提供者或供應商清單的清單,但不能同時包含兩者。舉例來說,[[FooInfo], [BarInfo], [BazInfo, QuxInfo]] 是有效值,但 [FooInfo, BarInfo, [BazInfo, QuxInfo]] 無效。

系統會將未巢狀結構的提供者清單自動轉換為包含一份供應商清單的清單。換句話說,[FooInfo, BarInfo] 會自動轉換成 [[FooInfo, BarInfo]]

如要讓這個面向顯示其他部分 (例如 other_aspect),則「other_aspect」必須從至少其中一份清單中提供所有供應商。在 [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] 的範例中,只有在 other_aspect 提供 FooInfo *或* BarInfo「或」* BazInfo * 和* QuxInfo 的情況下,這個切面才能顯示 other_aspect

provides default = []
實作函式必須傳回的提供者清單。

如果實作函式從傳回值中省略此處所列任何類型的提供者,就會發生錯誤。不過,實作函式可能會傳回此處未列出的其他提供者。

清單的每個元素都是 provider() 傳回的 *Info 物件,但舊版供應器會以字串名稱表示。

requires sequence of Aspects; default = []
在這個面向之前導入的切面清單。
fragments sequence of strings; default = []
列出目標設定中必需的設定片段名稱。
host_fragments sequence of strings; default = []
列出切面需要主機設定中所需的設定片段名稱。
toolchains sequence; default = []
如果已設定,這項規則所需的工具鍊集。清單可包含 String、Label 或 StarlarkToolchainTypeApi 物件,不限組合。檢查目前的平台即可找到工具鍊,並透過 ctx.toolchain 提供給規則實作。
incompatible_use_toolchain_transition default = False
已淘汰,已淘汰,應移除。
doc default = ''
說明文件產生工具可擷取的切面。
apply_to_generating_rules default = False
如果設為「是」,將調整套用至輸出檔案時,會改為套用至輸出檔案產生的規則。

舉例來說,假設有一點會透過屬性 `deps` 傳播,且套用至目標 `alpha`。假設 `alpha` 具有 `deps = [':beta_output']`,其中 `beta_output` 是目標 `beta` 的宣告輸出內容。如果 `beta_output` 是針對 `beta_beta` 的宣告輸出內容,那麼 `beta` 就會將目標 `chargening` 設為其中一個 `

預設為 False。

exec_compatible_with sequence of strings; default = []
適用於此方面所有例項的執行平台限制條件清單。
exec_groups dict; or None; default = None
將執行群組名稱 (字串) 輸出為 exec_groups。設定後,切面可讓面向在單一執行個體的多個執行平台上執行動作。詳情請參閱執行群組說明文件

bazel_dep

None bazel_dep(name, version='', max_compatibility_level=-1, repo_name='', dev_dependency=False)

宣告其他 Bazel 模組的直接依附元件。

參數

參數 說明
name required
要新增為直接依附元件的模組名稱。
version default = '
要新增為直接依附元件的模組版本。
max_compatibility_level default = -1
要新增為直接依附元件的模組支援的 compatibility_level 數量上限。模組版本隱含支援的最低相容性層級,以及未指定這項屬性時的最大版本。
repo_name default = '
代表這個依附元件的外部存放區名稱。這會預設為模組名稱。
dev_dependency default = False
如果設為 true,如果目前的模組不是根模組,或已啟用「--ignore_dev_dependency」,系統就會忽略這個依附元件。

bind

None bind(name, actual=None)

警告:不建議使用 bind()。如要進一步探討問題和替代方案,請參閱考慮移除繫結

//external 套件中指定目標別名。

參數

參數 說明
name 必填
「//external」下的標籤做為別名名稱
actual string; or None; default = None
要加上別名的實際標籤

bool

bool bool(x=False)

布林值類型的建構函式。如果物件是 NoneFalse、空字串 ("")、數字 0 或空白集合 (例如 ()[]),就會傳回 False。否則,則會傳回 True

參數

參數 說明
x default = False
要轉換的變數。

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 必要
包含延遲值的設定片段名稱。
name 必要
要從設定片段取得的值名稱。

Depset

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

建立依附元件direct 參數是解碼器的直接元素清單,transitive 參數是位移清單,其中的元素會成為已建立的依附元件的間接元素。透過 order 參數指定將 depset 轉換為清單時,元素傳回的順序。詳情請參閱依附元件總覽

解碼器的所有元素 (直接和間接) 都必須採用相同類型,與 type(x) 運算式取得的類型相同。

由於會在疊代期間使用雜湊式組合排除重複項目,因此原始集的所有元素都應經過雜湊處理。不過,目前系統不會在所有建構函式中一致檢查這個不變量。使用 --incompatible_always_check_depset_elements 標記啟用一致的檢查功能;這會是日後版本的預設行為;詳情請參閱問題 10313

此外,元素目前不可變動,不過日後會放寬。

已建立的刪除集順序應與 transitive 元件集的順序相容"default" 訂單與任何其他訂單相容,所有其他訂單則相容。

回溯/前瞻相容性注意事項。這個函式目前接受位置 items 參數。此版本已淘汰且將於日後移除,而且移除的 direct 將成為 depset 函式的唯一位置參數。因此,以下兩種呼叫都具有同等效力,且符合未來趨勢:

depset(['a', 'b'], transitive = [...])
depset(direct = ['a', 'b'], transitive = [...])

參數

參數 說明
direct sequence; or None; default = None
子集合的「direct」元素清單。
order default = "default"
新 depset 的周遊策略。如要查看可能的值,請參閱這篇文章
transitive sequence of depsets; or None; default = None
元件清單,其中元素會成為解碼器的間接元素。

dict

dict dict(pairs=[], **kwargs)

根據選用的位置引數和一組選用的關鍵字引數建立字典。如果重複指定同一個鍵,系統會使用最後的值。透過關鍵字引數提供的項目會在透過位置引數提供項目之後出現。

參數

參數 說明
pairs default = []
一個字典,或是元素長度為 2 (鍵、值) 的可疊代項目。
kwargs 必填
其他項目的字典。

dir

list dir(x)

傳回字串清單:參數物件的屬性和方法名稱。

參數

參數 說明
x required
要檢查的物件。

列舉

list enumerate(list, start=0)

傳回一組配對 (雙元素元組)、索引 (int) 和輸入序列中的項目。
enumerate([24, 21, 84]) == [(0, 24), (1, 21), (2, 84)]

參數

參數 說明
list 必要
輸入序列。
start default = 0
起始索引。

exec_group

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

建立執行群組,可用於在規則實作期間,針對特定執行平台建立動作。

參數

參數 說明
toolchains sequence; default = []
這個執行群組所需的工具鍊組合。清單可包含 String、Label 或 StarlarkToolchainTypeApi 物件,不限組合。
exec_compatible_with sequence of strings; default = []
執行平台的限制清單。
copy_from_rule default = False
如果設為 true,這個執行群組會沿用該群組所附加規則的工具鍊和限制。如果設為任何其他字串,則會擲回錯誤。

失敗

None fail(msg=None, attr=None, *args)

造成執行作業失敗並發生錯誤。

參數

參數 說明
msg default = None
已淘汰:改用位置引數。這個引數就像隱式首位位置引數。
attr string; or None; default = None
已淘汰。讓含有這個字串的選用前置字元加入錯誤訊息。
args 必要
值清單,格式為 debugPrint (預設為 str),並用空格連接,顯示在錯誤訊息中。

float

float float(x=unbound)

傳回 x 為浮點值。
  • 如果 x 已是浮點值,float 會傳回不會變更。
  • 如果 x 是布林值,float 會回傳 1.0 代表 True,0.0 代表 False。
  • 如果 x 是 int,float 會傳回最接近的有限浮點值至 x;如果大小過大,就會傳回錯誤。
  • 如果 x 是字串,必須是有效的浮點常值,或是等於 (忽略大小寫) 至 NaNInfInfinity (可選擇在前面加上 +- 符號)。
如有其他任何值,都會導致錯誤。如果沒有引數,float() 會傳回 0.0。

參數

參數 說明
x default = unbound
要轉換的值。

getattr

unknown getattr(x, name, default=unbound)

傳回指定名稱的結構體欄位 (如有)。如未指定,系統會傳回 default (如有指定) 或引發錯誤。getattr(x, "foobar") 相當於 x.foobar
getattr(ctx.attr, "myattr")
getattr(ctx.attr, "myattr", "mydefault")

參數

參數 說明
x 必要
受存取其屬性的結構體。
name required
struct 屬性的名稱。
default default = unbound
如果結構體沒有指定名稱的屬性,則要傳回的預設值。

git_override

None git_override(module_name, remote, commit='', patches=[], patch_cmds=[], patch_strip=0)

指定依附元件應來自 Git 存放區的特定修訂版本。這個指令只會在根模組中執行;也就是說,如果他人將某個模組做為依附元件使用,系統會忽略該模組本身的覆寫。

參數

參數 說明
module_name 必要
要套用這項覆寫設定的 Bazel 模組依附元件名稱。
remote required
遠端 Git 存放區的網址。
commit default = ''
應查看的修訂版本。
patches Iterable of strings; default = []
一個標籤清單,指向要套用至這個模組的修補檔案。修補型檔案必須存在於頂層專案的原始碼樹狀結構中。系統會按照清單順序套用這些資料欄。
patch_cmds Iterable of strings; default = []
套用修補程式後,要套用至 Linux/Macos 的 Bash 指令序列。
patch_strip default = 0
與 Unix 修補程式的 --strip 引數相同。

Hasattr

bool hasattr(x, name)

如果物件 x 具有指定 name 的屬性或方法,則傳回 True,否則傳回 False。範例:
hasattr(ctx.attr, "myattr")

參數

參數 說明
x required
要檢查的物件。
name 必填
屬性的名稱。

hash

int hash(value)

傳回字串的雜湊值。這會使用與 Java String.hashCode() 相同的演算法進行確定性計算,也就是:
s[0] * (31^(n-1)) + s[1] * (31^(n-2)) + ... + s[n-1]
系統目前不支援字串以外的值雜湊。

參數

參數 說明
value 必要
要雜湊的字串值。

int

int int(x, base=unbound)

傳回 x 為 int 值。
  • 如果 x 已是 int,int 會傳回原值。
  • 如果 x 是布林值,int 會傳回 1 代表 True,0 則傳回 0 代表 False。
  • 如果 x 是字串,格式必須為 <sign><prefix><digits><sign>"+""-" 或空白 (會視為正數)。<digits> 是一串介於 0 到 base - 1 之間的數字,其中字母 a-z (或相等的 A-Z) 會用作 10 到 35 的數字。在 base 為 2/8/16 的情況下,<prefix> 是選用項目,可能分別為 0b/0o/0x (或相等的 0B/0O/0X);如果 base 是這些底數以外的其他值或特殊值 0,則前置字元必須留空。在 base 為 0 的情況下,系統會將字串解讀為整數常值,即根據使用的前置字串,選擇底數 2/8/10/16。如果 base 為 0,就不會使用前置字元,且存在多位數,則開頭數字不能為 0;為避免八進位數字和小數造成混淆。字串所代表的數字規模必須在 Int 類型允許的範圍內。
  • 如果 x 是浮點值,int 會傳回浮點數的整數值,無條件捨去為零。如果 x 為非有限 (NaN 或無限大) 就會發生錯誤。
如果 x 是任何其他類型,或值是不符合上述格式的字串,這個函式就會失敗。與 Python 的 int 函式不同,這個函式不允許零引數,也不允許字串引數使用多餘的空白。

示例:

int("123") == 123
int("-123") == -123
int("+123") == 123
int("FF", 16) == 255
int("0xFF", 16) == 255
int("10", 0) == 10
int("-0x10", 0) == -16
int("-0x10", 0) == -16
int("123.456") == 123

參數

參數 說明
x 必填
要轉換的字串。
base default = unbound
用來解譯字串值的底數;預設值為 10。必須介於 2 至 36 之間 (含首尾),或是 0 偵測 x 是否為整數常值。如果值不是字串,則請勿提供這個參數。

len

int len(x)

傳回字串、序列 (例如清單或元組)、字典或其他可疊代項目的長度。

參數

參數 說明
x required
要回報長度的值。

list

list list(x=[])

傳回與指定可疊代值具有相同元素的新清單。
list([1, 2]) == [1, 2]
list((2, 3, 2)) == [2, 3, 2]
list({5: "a", 2: "b", 4: "c"}) == [5, 2, 4]

參數

參數 說明
x default = []
要轉換的物件。

local_path_override

None local_path_override(module_name, path)

指定依附元件應來自本機磁碟上的特定目錄。這個指令只會在根模組中執行;也就是說,如果他人將某個模組做為依附元件使用,系統會忽略該模組本身的覆寫。

參數

參數 說明
module_name 必要
要套用這項覆寫設定的 Bazel 模組依附元件名稱。
path required
這個模組所在的目錄路徑。

最高

unknown max(*args)

傳回所有指定引數中最大的一個。如果只提供一個引數,則必須是不可空白的疊代。如果元素無法比較 (例如含有字串的 int),或是沒有提供引數,就會發生錯誤。
max(2, 5, 4) == 5
max([5, 6, 3]) == 6

參數

參數 說明
args 必要
要檢查的元素。

分鐘

unknown min(*args)

傳回所有指定引數的最小值。如果只提供一個引數,必須是不可空白的疊代。如果元素無法比較 (例如含有字串的 int),或沒有提供引數,就會發生錯誤。
min(2, 5, 4) == 2
min([5, 6, 3]) == 3

參數

參數 說明
args 必要
要檢查的元素。

module

None module(name='', version='', compatibility_level=0, repo_name='', bazel_compatibility=[])

宣告目前 Bazel 存放區所代表 Bazel 模組的特定屬性。這些屬性是模組的基本中繼資料 (例如名稱和版本),或影響目前模組的行為及其依附關係。

最多只能呼叫一次。只有在這個模組為根模組時,才能省略 (也就是說,不是由其他模組依附)。

參數

參數 說明
name default = ''
模組的名稱。只有在此模組為根模組時才能省略 (同理,不會用到其他模組)。有效的模組名稱必須符合以下條件:1) 只能使用小寫英文字母 (a 至 z)、數字 (0 至 9)、半形句號 (.)、連字號 (-) 和底線 (_);2) 開頭須為小寫英文字母;3) 結尾須為小寫英文字母或數字。
version default = ''
模組的版本。只有在此模組為根模組時才能省略 (同理,不會用到其他模組)。
compatibility_level default = 0
模組的相容性等級;每當出現重大不相容的變更時,就必須變更這個值。就 SemVer 而言,這基本上是模組的「主要版本」,但它不會內嵌在版本字串本身,但會以獨立欄位的形式存在。不同相容性等級的模組會視為不同名稱的模組,但最終依附元件圖表無法包含名稱相同但相容性等級不同的多個模組 (除非 multiple_version_override 正在使用中;詳情請參閱相關文章)。
repo_name default = ''
代表此模組的存放區名稱,如模組本身所示。根據預設,存放區的名稱是模組的名稱。如果專案的存放區名稱與其模組名稱不同,您可以指定這個值來簡化遷移程序。
bazel_compatibility Iterable of strings; default = []
一組 Bazel 版本,可讓使用者宣告哪些 Bazel 版本與這個模組相容。這不會影響依附元件解析作業,但 bzlmod 會使用這項資訊檢查您目前的 Bazel 版本是否相容。這個值的格式是部分限制值的字串,並以半形逗號分隔。支援的限制有三種:<=X.X.X:Bazel 版本必須等於或早於 X.X.X。新版本有已知不相容的變更時使用。>=X.X.X:Bazel 版本必須等於或高於 X.X.X.Used,才能使用某些只能在 X.X.X 之後才能使用的功能。 Bazel 版本 X.X.X 不相容。當 X.X.X 中的錯誤導致您受到影響,但在後續版本中修正時,可使用這個標記。

module_extension

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

建立新的模組擴充功能。請將其儲存在全域值內,以便匯出並在 MODULE.bazel 檔案中使用。

參數

參數 說明
implementation required
這是實作此模組擴充功能的函式。必須採用單一參數 module_ctx。系統會在建構開始時呼叫該函式一次,以確定可用的存放區組合。
tag_classes default = {}
這個字典用於宣告擴充功能使用的所有標記類別。這會從標記類別名稱對應至 tag_class 物件。
doc default = ''
模組擴充功能的說明,可透過文件產生工具擷取。
environ sequence of strings; default = []
提供此模組擴充功能依附的環境變數清單。如果這份清單中的環境變數有所變更,系統就會重新評估擴充功能。
os_dependent default = False
指出這項擴充功能是否與 OS 無關
arch_dependent default = False
指出這項擴充功能是否與架構無關

multiple_version_override

None multiple_version_override(module_name, versions, registry='')

指定依附元件應仍來自登錄檔,但應允許其多個版本並存。詳情請參閱說明文件。這個指令只會在根模組中執行;也就是說,如果他人將某個模組做為依附元件使用,系統會忽略該模組本身的覆寫。

參數

參數 說明
module_name 必要
要套用這項覆寫設定的 Bazel 模組依附元件名稱。
versions Iterable of strings;必要
明確指定可共存的版本。這些版本必須已存在於依附元件圖預先選取項目中。如果依附元件的依附元件具備相同相容性層級,系統會將其「升級」至最接近的可用版本;如果依附元件的版本高於任何相同相容性層級的允許版本,就會發生錯誤。
registry default = '
覆寫這個模組的登錄檔;應使用指定的登錄檔,而不是從預設的註冊資料庫尋找這個模組。

顯示

None print(sep=" ", *args)

args 列印為偵錯輸出內容。前方會加上 "DEBUG" 字串和這次呼叫的位置 (檔案和行號)。我們無法指定引數轉換為字串的確切方式,且隨時可能變更。其中可能與 str()repr() 所完成的格式不同,而且詳細程度可能不同。

不建議在正式版程式碼中使用 print,因為這會為使用者建立垃圾內容。針對淘汰項目,請盡可能使用 fail() 執行硬性錯誤。

參數

參數 說明
sep default = " "
物件之間的分隔符字串,預設為空格 (「 」)。
args 必要
要列印的物件。

提供者

unknown provider(doc='', *, 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,系統會傳回 2 個元素的元組:Provider 可呼叫的值和原始建構函式可呼叫的值。詳情請參閱「規則 (自訂提供者的自訂初始化)」和下方討論的 init 參數。

參數

參數 說明
doc default = ''
提供者的說明,可以由文件產生工具擷取。
fields sequence of strings; or dict; or None; default = None
若指定,系統會限制允許的欄位組合。
可能的值包括:
  • 欄位清單:
    provider(fields = ['a', 'b'])

  • 字典欄位名稱 -> 說明文件:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
所有欄位均為選填。
init callable; or None; default = None
非必要的回呼,用於在執行個體化期間預先處理及驗證提供者的欄位值。如果已指定 initprovider() 會傳回 2 個元素的元組:正規提供者符號和原始建構函式

詳細說明如下;請參閱規則 (自訂提供者初始化),參閱相關說明及相關用途。

P 成為透過呼叫 provider() 建立的提供者符號。在概念上,透過呼叫預設建構函式函式 c(*args, **kwargs) 來產生 P 的執行個體,該函式會執行下列作業:

  • 如果 args 不是空白,就會發生錯誤。
  • 如果呼叫 provider() 時指定了 fields 參數,且 kwargs 含有任何未列在 fields 中的鍵,就會發生錯誤。
  • 否則,c 會傳回新例項,其中 kwargs 中的每個 k: v 項目都有名為 k 且值為 v 的欄位。
如果「未」提供 init 回呼,對 P 符號的呼叫本身就會視為對預設建構函式函式 c 的呼叫;換句話說,P(*args, **kwargs) 會傳回 c(*args, **kwargs)。舉例來說,
MyInfo = provider()
m = MyInfo(foo = 1)
可直接讓 m 成為具有 m.foo == 1MyInfo 例項。

但在指定 init 的情況下,呼叫 P(*args, **kwargs) 會改為執行下列步驟:

  1. 回呼是以 init(*args, **kwargs) 形式叫用,也就是與傳遞至 P 的位置和關鍵字引數完全相同。
  2. init 的傳回值應該是字典 (d),其索引鍵為欄位名稱字串。否則就會發生錯誤。
  3. 系統會產生 P 的新例項,就如同使用 d 的項目做為關鍵字引數呼叫預設建構函式,如 c(**d) 所示。

注意:上述步驟暗示如果 *args**kwargsinit 的簽章不符,或評估 init 的主體失敗 (可能是刻意透過呼叫 fail()),或者 init 的傳回值不是符合預期結構定義的字典,就會發生錯誤。

這麼一來,init 回呼會允許預先處理和驗證的位置引數和任意邏輯,將一般提供者建構工作化。這項設定不會規避允許的 fields 清單。

如果指定 initprovider() 的傳回值就會成為元組 (P, r),其中 r原始建構函式。事實上,r 的行為與上述預設建構函式函式 c 的行為完全相同。一般來說,r 會繫結至名稱開頭為底線的變數,因此只有目前的 .bzl 檔案可直接存取:

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

範圍

sequence range(start_or_stop, stop_or_none=None, step=1)

建立項目從 startstop 的清單,使用 step 遞增。如果提供單一引數,項目範圍就會從 0 到該元素。
range(4) == [0, 1, 2, 3]
range(3, 9, 2) == [3, 5, 7]
range(3, 0, -1) == [3, 2, 1]

參數

參數 說明
start_or_stop 必要
提供停靠站時,起始元素的值;否則,停止值和實際開始的值為 0
stop_or_none int; or None; default = None
第一個項目的選用索引「不」加進結果清單中;系統會在達到 stop 前停止產生清單。
step default = 1
遞增量 (預設為 1)。不一定是負值。

register_execution_platforms()

None register_execution_platforms(*platform_labels)

註冊已經定義的平台,讓 Bazel 在工具鍊解決方案期間把這個平台當做執行平台使用。

參數

參數 說明
platform_labels sequence of strings;必要
要註冊的平台標籤。

register_execution_platforms(dev_dependency)

None register_execution_platforms(dev_dependency=False, *platform_labels)

指定在選取這個模組時,要註冊的已定義的執行平台。必須為絕對目標模式 (例如開頭為 @//)。詳情請參閱工具鍊解決方案

參數

參數 說明
dev_dependency default = False
如果為 true,如果目前的模組不是根模組,或已啟用「--ignore_dev_dependency」,系統就不會註冊執行平台。
platform_labels sequence of strings;必要
要註冊的平台標籤。

register_toolchains()

None register_toolchains(*toolchain_labels)

註冊已定義的工具鍊,讓 Bazel 在工具鍊解決方案中使用該工具鍊。請參閱定義註冊工具鍊的範例。

參數

參數 說明
toolchain_labels sequence of strings;必要
要註冊的工具鍊標籤。

register_toolchains(dev_dependency)

None register_toolchains(dev_dependency=False, *toolchain_labels)

指定在選取這個模組時,要註冊的已定義的工具鍊。必須為絕對目標模式 (例如開頭為 @//)。詳情請參閱工具鍊解決方案

參數

參數 說明
dev_dependency default = False
如果為 true,如果目前的模組不是根模組,或已啟用「--ignore_dev_dependency」,系統就不會註冊工具鍊。
toolchain_labels sequence of strings;必要
要註冊的工具鍊標籤。

repository_rule

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

建立新的存放區規則。請將其儲存在全域值中,以便從 WORKSPACE 檔案載入並呼叫此項目。

參數

參數 說明
implementation 必要的
函式。必須有單一參數 repository_ctx。在載入階段,系統會針對規則的每個執行個體呼叫此函式。
attrs dict; or None; default = None
字典,藉此宣告規則的所有屬性。它會從屬性名稱對應至屬性物件 (請參閱 attr 模組)。以 _ 開頭的屬性不會公開,可用於將標籤的隱含依附元件新增至檔案 (存放區規則無法依附產生的構件。name 屬性是以隱含方式新增,且不得指定。
local default = False
表示這項規則會從本機系統擷取任何內容,且每次擷取時都應重新評估。
environ sequence of strings; default = []
提供這個存放區規則依附的環境變數清單。如果這份清單中的環境變數有所變更,系統會重新擷取存放區。
configure default = False
表示存放區會檢查系統是否有設定用途
remotable default = False
實驗功能。這個參數仍在實驗階段,隨時可能變更。請勿依附於此項目。透過設定 ---experimental_repo_remote_exec
與遠端執行相容
doc default = ''
存放區規則的說明,可透過文件產生工具擷取。

Repr

string repr(x)

將任何物件轉換成字串形式。很適合用於偵錯。
repr("ab") == '"ab"'

參數

參數 說明
x 必要
要轉換的物件。

已還原

list reversed(sequence)

傳回新的取消凍結清單,其中包含了先前的可疊代序列元素。
reversed([3, 5, 4]) == [4, 5, 3]

參數

參數 說明
sequence 要復原的可疊代序列 (例如清單)。

規則

callable rule(implementation, test=False, attrs=None, outputs=None, executable=False, output_to_genfiles=False, fragments=[], host_fragments=[], _skylark_testable=False, toolchains=[], incompatible_use_toolchain_transition=False, doc='', *, provides=[], exec_compatible_with=[], analysis_test=False, build_setting=None, cfg=None, exec_groups=None, compile_one_filetype=None, name=None)

建立可透過 BUILD 檔案或巨集呼叫的新規則來建立指定目標。

您必須在 .bzl 檔案中將規則指派給全域變數,全域變數的名稱即規則名稱。

測試規則的名稱結尾須為 _test,所有其他規則則不得有這個後置字串。(這項限制僅適用於規則,不適用於其目標)。

參數

參數 說明
implementation 必要
實作這項規則的 Starlark 函式只能含有一個參數:ctx。在分析階段,系統會針對規則的每個例項呼叫這個函式。它可以存取使用者提供的屬性。必須建立動作來產生所有宣告的輸出內容。
test default = False
這項規則是否為測試規則,也就是是否適用於 blaze test 指令的主體。所有測試規則都會自動視為「可執行」;因此您不必 (也不建議) 為測試規則明確設定 executable = True。詳情請參閱 規則頁面
attrs dict; or None; default = None
字典,藉此宣告規則的所有屬性。它會從屬性名稱對應至屬性物件 (請參閱 attr 模組)。以 _ 開頭的屬性皆為不公開屬性,可用於對標籤新增隱含依附元件。name 屬性是以隱含方式新增,且不得指定。以隱含方式新增 visibilitydeprecationtagstestonlyfeatures 屬性,且無法覆寫。大部分規則只需要一些屬性。為了限制記憶體用量,規則函式會限制收件人的大小。
outputs dict; or None; or function; default = None
已淘汰。這個參數已淘汰,很快就會移除。請勿依附於此項目。透過 ---incompatible_no_rule_outputs_param 停用。使用此旗標來驗證您的程式碼是否與即將移除的程式碼相容。
這個參數已淘汰。遷移規則,改用 OutputGroupInfoattr.output

定義預先宣告的輸出內容的結構定義。與 outputoutput_list 屬性不同的是,使用者不會指定這些檔案的標籤。請參閱規則頁面,進一步瞭解預先宣告的輸出內容。

此引數的值可以是字典或可產生字典的回呼函式。回呼的運作方式與計算出的依附元件屬性類似:函式的參數名稱會與規則的屬性進行比對。舉例來說,如果傳遞 outputs = _my_func 含定義 def _my_func(srcs, deps): ...,函式就可以存取 srcsdeps 屬性。無論字典是直接或透過函式指定,都會解讀如下:

字典中的每個項目都會建立預先宣告的輸出內容,其中鍵為 ID,值是字串範本,用來決定輸出內容的標籤。在規則的實作函式中,ID 會成為用於存取 ctx.outputs 中輸出 File 的欄位名稱。輸出的標籤含有與規則相同的套件,產生套件後的部分,請將 "%{ATTR}" 格式的每個預留位置替換掉 ATTR 屬性值的字串。

  • 字串型屬性會逐字替換。
  • 套用標籤的屬性會變為套件後方的標籤,減去副檔名。舉例來說,"//pkg:a/b.c" 標籤會變為 "a/b"
  • 輸出類型的屬性會成為套件後方的標籤,包括副檔名 (如上例:"a/b.c")。
  • 預留位置中使用的所有清單類型屬性 (例如 attr.label_list) 都必須只有一個元素。該客戶的轉換與非名單版本 (attr.label) 相同。
  • 其他屬性類型可能無法顯示在預留位置中。
  • 特殊的非屬性預留位置 %{dirname}%{basename} 會展開為規則標籤的這些部分,但不包括套件。舉例來說,在 "//pkg:a/b.c" 中,目錄名稱為 a,基本名稱為 b.c

在實務上,最常見的替換預留位置為 "%{name}"。舉例來說,針對名為「foo」的目標,輸出內容 {"bin": "%{name}.exe"} 會預先宣告名為 foo.exe 的輸出內容,該輸出內容可在實作函式中做為 ctx.outputs.bin 存取。

executable default = False
這項規則是否視為可執行,也就是任何可能是 blaze run 指令的主體。詳情請參閱 規則頁面
output_to_genfiles default = False
如果設為 true,系統會在 Genfiles 目錄中產生檔案,而非 bin 目錄。除非需要與現有規則相容 (例如為 C++ 產生標頭檔案時),否則請勿設定此標記。
fragments sequence of strings; default = []
列出目標設定中規則所需設定片段的名稱。
host_fragments sequence of strings; default = []
列出主機設定中所需規則所需的設定片段名稱。
_skylark_testable default = False
(實驗功能)

如果為 true,這項規則會顯示相關動作,並透過「Actions」供應商執行相關規則來檢查動作。供應商也可以呼叫 ctx.created_actions(),在規則本身中使用提供者。

這只能用於測試 Starlark 規則的分析時間行為。我們日後可能會移除這個標記。
toolchains sequence; default = []
如果已設定,這項規則所需的工具鍊集。清單可包含 String、Label 或 StarlarkToolchainTypeApi 物件,不限組合。檢查目前的平台即可找到工具鍊,並透過 ctx.toolchain 提供給規則實作。
incompatible_use_toolchain_transition default = False
已淘汰,已淘汰,應移除。
doc default = ''
此規則的說明,可由文件產生工具擷取。
provides default = []
實作函式必須傳回的提供者清單。

如果實作函式從傳回值中省略此處所列任何類型的提供者,就會發生錯誤。不過,實作函式可能會傳回此處未列出的其他提供者。

清單的每個元素都是 provider() 傳回的 *Info 物件,但舊版供應器會以字串名稱表示。

exec_compatible_with sequence of strings; default = []
套用至執行平台上的限制清單,這些限制適用於此規則類型的所有目標。
analysis_test default = False
如果為 true,系統會將這項規則視為分析測試。

注意:分析測試規則主要使用 Starlark 程式庫中提供的基礎架構定義。如需相關指南,請參閱「測試」一節。

如果規則定義為分析測試規則,該規則就能對屬性使用以 analysis_test_transition 定義的設定轉換,但選擇採用部分限制:

  • 這項規則的目標受限於轉換依附元件的數量受限。
  • 系統會將這項規則視為測試規則 (就像已設定 test=True)。這會取代 test 的值
  • 規則實作函式可能無法登錄動作。而是必須透過提供 AnalysisTestResultInfo 來註冊通過/失敗結果。
build_setting BuildSetting; or None; default = None
如果已設定,請說明這項規則的 build setting 類型。請參閱 config 模組。如果設定了這個值,系統會自動在這項規則中加入名為「build_setting_default」的必要屬性,以及與此處傳入的值相對應的類型。
cfg default = None
如果設定這項政策,指向設定轉換時,規則會在分析前套用至自己的設定。
exec_groups dict; or None; default = None
將執行群組名稱 (字串) 輸出為 exec_groups。設定之後,規則就能在單一目標的多個執行平台上執行動作。詳情請參閱執行群組說明文件
compile_one_filetype sequence of strings; or None; default = None
由 --compile_one_dependency 使用:如有多項規則會使用指定的檔案,我們應該優先選擇這項規則,而非其他規則。
name string; or None; default = None
已淘汰。這個參數已淘汰,很快就會移除。請勿依附於此項目。透過 --+incompatible_remove_rule_name_parameter 停用。使用此旗標來驗證您的程式碼是否與即將移除的程式碼相容。
已淘汰:請勿使用。

這項規則的名稱,與 Bazel 瞭解的名稱,並回報於記錄、native.existing_rule(...)[kind]bazel query 等情境中。通常,這與繫結至這項規則的 Starlark 識別碼相同;舉例來說,名稱為 foo_library 的規則通常會宣告為 foo_library = rule(...),並在 BUILD 檔案中例項化為 foo_library(...)

如果省略這個參數,規則名稱會設為第一個 Starlark 全域變數名稱,以便與這項規則在其宣告的 .bzl 模組中繫結。因此,如果名稱為 foo_libraryfoo_library = rule(...) 不需要指定這個參數。

指定規則的明確名稱並不會改變您允許將規則執行個體化的情形。

選取

unknown select(x, no_match_error='')

select() 是一種輔助函式,讓規則屬性「可設定」。詳情請參閱建構百科全書

參數

參數 說明
x 必要
用來將設定條件對應至值的字典。每個鍵都是 Label 或標籤字串,可識別 config_setting 或 constraint_value 例項。如要瞭解何時該使用標籤而非字串,請參閱巨集說明文件
no_match_error default = '
如果沒有相符的條件,系統會回報自訂錯誤。

single_version_override

None single_version_override(module_name, version='', registry='', patches=[], patch_cmds=[], patch_strip=0)

指定依附元件應仍會來自登錄檔,但應固定其版本、覆寫其註冊資料庫,或是套用修補程式的清單。這個指令只會在根模組中執行;也就是說,如果他人將某個模組做為依附元件使用,系統會忽略該模組本身的覆寫。

參數

參數 說明
module_name 必要
要套用這項覆寫設定的 Bazel 模組依附元件名稱。
version default = '
在依附元件圖表中覆寫這個模組的宣告版本。也就是說,這個模組會「固定」至這個覆寫版本。如果全部要覆寫的項目是登錄檔或修補程式,則可省略這項屬性。
registry default = '
覆寫這個模組的登錄檔;應使用指定的登錄檔,而不是從預設的註冊資料庫尋找這個模組。
patches Iterable of strings; default = []
一個標籤清單,指向要套用至這個模組的修補檔案。修補型檔案必須存在於頂層專案的原始碼樹狀結構中。系統會按照清單順序套用這些資料欄。
patch_cmds Iterable of strings; default = []
套用修補程式後,要套用至 Linux/Macos 的 Bash 指令序列。
patch_strip default = 0
與 Unix 修補程式的 --strip 引數相同。

sorted

list sorted(iterable, *, key=None, reverse=False)

傳回新的排序清單,其中包含提供的可疊代序列所有元素。如果有任一對元素 x 與 x < y 之間無法比較 y,則會發生錯誤。這些元素會以遞增順序排序,除非反向引數為 True。在這種情況下,即以遞減方式排序。排序功能具有穩定度:比較相等的元素會保留原本的相對順序。
sorted([3, 5, 4]) == [3, 4, 5]

參數

參數 說明
iterable 需要
要排序的可疊代序列。
key default = None
在比較前套用至每個元素的選用函式。
reverse default = False
以遞減順序傳回結果。

str

string str(x)

將任何物件轉換成字串。很適合用於偵錯。
str("ab") == "ab"
str(8) == "8"

參數

參數 說明
x 必要
要轉換的物件。

tag_class

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

建立新的 tag_class 物件,為標記類別定義屬性結構定義,這些標記是模組擴充功能可使用的資料物件。

參數

參數 說明
attrs default = {}
用於宣告此標記類別所有屬性的字典。它會從屬性名稱對應至屬性物件 (請參閱 attr 模組)。
doc default = ''
標記類別的說明,可由文件產生工具擷取。

tuple

tuple tuple(x=())

傳回與指定可疊代值具有相同元素的元組。
tuple([1, 2]) == (1, 2)
tuple((2, 3, 2)) == (2, 3, 2)
tuple({5: "a", 2: "b", 4: "c"}) == (5, 2, 4)

參數

參數 說明
x default = ()
要轉換的物件。

類型

string type(x)

傳回其引數的類型名稱。這項功能在偵錯和類型檢查時相當實用。範例:
type(2) == "int"
type([1]) == "list"
type(struct(a = 2)) == "struct"
這個函式日後可能會變更。如要編寫與 Python 相容的程式碼,並確保程式碼具前瞻性,請只用於比較傳回值:
if type(x) == type([]):  # if x is a list

參數

參數 說明
x 必要
要檢查類型的物件。

use_extension

module_extension_proxy use_extension(extension_bzl_file, extension_name, *, dev_dependency=False, isolate=False)

傳回代表模組擴充功能的 Proxy 物件;您可以叫用其方法,建立模組擴充功能標記。

參數

參數 說明
extension_bzl_file 必要
定義模組擴充功能的 Starlark 檔案標籤。
extension_name required
要使用的模組擴充功能名稱。具有此名稱的符號必須由 Starlark 檔案匯出。
dev_dependency default = False
如果設為 true,如果目前的模組不是根模組,或已啟用「--ignore_dev_dependency」,系統會忽略模組擴充功能使用行為。
isolate default = False
實驗功能。這個參數仍在實驗階段,隨時可能變更。請勿依附於此項目。設定 ---experimental_isolated_extension_usages
如果設為 true,模組擴充功能的使用情形就會與此模組和其他模組中的其他用途隔離,因此可能會以實驗功能的形式啟用。為此用途建立的標記不會影響其他使用情形,擴充功能產生的存放區也會與擴充功能產生的所有其他存放區不同。

這個參數目前仍在實驗階段,只能搭配 --experimental_isolated_extension_usages 標記使用。

use_repo

None use_repo(extension_proxy, *args, **kwargs)

將指定模組擴充功能產生的一或多個存放區匯入目前模組的範圍。

參數

參數 說明
extension_proxy 需要
use_extension 呼叫傳回的模組擴充功能 Proxy 物件。
args required
要匯入的存放區名稱。
kwargs 必要
指定要匯入到目前模組 (名稱不同) 的特定存放區。金鑰應為目前範圍使用的名稱,而值則是模組擴充功能匯出的原始名稱。

顯示設定

None visibility(value)

設定目前正在初始化的 .bzl 模組載入瀏覽權限。

模組的載入能見度決定了其他 BUILD 和 .bzl 檔案是否可以載入該模組。(這與基礎 .bzl 來源檔案的目標瀏覽權限不同,後者用於控管檔案是否能做為其他目標的依附元件)。載入瀏覽權限在套件層級運作:如要載入模組,執行載入程序的檔案必須在授予模組瀏覽權限的套件中執行。無論模組的可見性為何,隨時都能在其套件內載入模組。

每個 .bzl 檔案只能呼叫 visibility(),且只能在頂層呼叫,無法在函式中呼叫。建議的樣式是將這項呼叫放在 load() 陳述式下方,以及決定引數所需的任何簡短邏輯。

如果將 --check_bzl_visibility 旗標設為 False,載入瀏覽權限違規事件會發出警告,但不會導致建構作業失敗。

參數

參數 說明
value 必要
套件規格字串清單,或單一套件規格字串。

套件規格的格式與 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" 值隨時可供使用,且 "//..." 一律會解讀為「目前存放區中的所有套件」。

工作區

None workspace(name)

這個函式只能在 WORKSPACE 檔案中使用,而且必須在 WORKSPACE 檔案中所有其他函式之前宣告。每個 WORKSPACE 檔案都應有 workspace 函式。

設定這個工作區的名稱。工作區名稱應為專案 Java 套件樣式的說明,使用底線做為分隔符,例如 github.com/bazelbuild/bazel 應使用 com_github_bazelbuild_bazel。

此名稱用於儲存存放區執行檔案的目錄。舉例來說,如果本機存放區中有執行檔案 foo/bar,且 WORKSPACE 檔案包含 workspace(name = 'baz'),則 runfile 會顯示在 mytarget.runfiles/baz/foo/bar 下方。如未指定工作區名稱,Runfile 就會連結至 bar.runfiles/foo/bar

遠端存放區規則名稱必須是有效的工作區名稱。舉例來說,您可以使用 maven_jar(name = 'foo') 而非 maven_jar(name = 'foo%bar'),因為 Bazel 會嘗試為包含 workspace(name = 'foo%bar')maven_jar 寫入 WORKSPACE 檔案。

參數

參數 說明
name 所需
工作區名稱。名稱只能使用英文字母、數字、底線、破折號和半形句號,而且開頭須為英文字母。

zip

list zip(*args)

傳回 tuplelist,其中 i-th tuple 包含每個引數序列或可疊代項目中的 i-th 元素。清單中採用的輸入大小最短。只會透過一個可疊代的引數傳回 1 元組的清單。沒有引數,會傳回空白清單。示例:
zip()  # == []
zip([1, 2])  # == [(1,), (2,)]
zip([1, 2], [3, 4])  # == [(1, 3), (2, 4)]
zip([1, 2], [3, 4, 5])  # == [(1, 3), (2, 4)]

參數

參數 說明
args 必要的
清單。