ตัวแปรส่วนกลาง

ออบเจ็กต์ ฟังก์ชัน และโมดูลที่ลงทะเบียนในสภาพแวดล้อมส่วนกลาง

สมาชิก

ทั้งหมด

bool all(elements)

แสดงค่าเป็นจริงหากองค์ประกอบทั้งหมดประเมินเป็นจริงหรือหากคอลเล็กชันว่างเปล่า ระบบจะแปลงองค์ประกอบเป็นบูลีนโดยใช้ฟังก์ชัน bool
all(["hello", 3, True]) == True
all([-1, 0, 1]) == False

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
elements ต้องระบุ
สตริงหรือคอลเล็กชันขององค์ประกอบ

analysis_test_transition

transition analysis_test_transition(settings)

สร้างการเปลี่ยนการกำหนดค่าที่จะใช้กับทรัพยากร Dependency ของกฎการทดสอบการวิเคราะห์ การเปลี่ยนนี้จะใช้ได้กับแอตทริบิวต์ของกฎที่มี analysis_test = True เท่านั้น กฎดังกล่าวมีความสามารถที่จำกัด (เช่น ขนาดของแผนผังการอ้างอิงจะถูกจำกัด) ดังนั้นทรานซิชันที่สร้างขึ้นโดยใช้ฟังก์ชันนี้จึงมีขอบเขตที่จำกัดเมื่อเทียบกับทรานซิชันที่สร้างขึ้นโดยใช้ transition

ฟังก์ชันนี้ออกแบบมาเพื่ออำนวยความสะดวกให้กับไลบรารีหลักของ Analysis Test Framework เป็นหลัก ดูแนวทางปฏิบัติแนะนำได้ในเอกสารประกอบ (หรือการใช้งาน)

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
settings required
พจนานุกรมที่มีข้อมูลเกี่ยวกับการตั้งค่าการกำหนดค่าที่ควรตั้งค่าโดยการเปลี่ยนการกำหนดค่านี้ คีย์คือป้ายกำกับการตั้งค่าบิลด์ และค่าคือค่าใหม่หลังการเปลี่ยนผ่าน การตั้งค่าอื่นๆ ทั้งหมดจะไม่มีการเปลี่ยนแปลง ใช้เพื่อประกาศการตั้งค่าการกำหนดค่าที่เฉพาะเจาะจงซึ่งการทดสอบการวิเคราะห์กำหนดให้ตั้งค่าเพื่อให้ผ่าน

ใดๆ

bool any(elements)

แสดงค่าเป็นจริงหากองค์ประกอบอย่างน้อย 1 รายการประเมินเป็นจริง ระบบจะแปลงองค์ประกอบเป็นบูลีนโดยใช้ฟังก์ชัน 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 ฯลฯ) ในตำแหน่งที่แน่นอน แทนที่จะมาจากรีจิสทรี คำสั่งนี้จะมีผลในโมดูลรูทเท่านั้น กล่าวคือ หากโมดูลอื่นใช้โมดูลหนึ่งเป็นทรัพยากร Dependency ระบบจะไม่สนใจการลบล้างของโมดูลนั้น

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
module_name ต้องระบุ
ชื่อของการอ้างอิงโมดูล Bazel ที่จะใช้การลบล้างนี้
urls string; or Iterable of strings; ต้องระบุ
URL ของที่เก็บถาวร อาจเป็น URL http(s):// หรือ file://
integrity default = ''
ผลรวมตรวจสอบที่คาดไว้ของไฟล์ที่เก็บถาวรในรูปแบบความสมบูรณ์ของทรัพยากรย่อย
strip_prefix default = ''
คำนำหน้าไดเรกทอรีที่จะนำออกจากไฟล์ที่แยก
patches Iterable of strings; default = []
A list of labels pointing to patch files to apply for this module. ไฟล์แพตช์ต้องอยู่ในโครงสร้างแหล่งที่มาของโปรเจ็กต์ระดับบนสุด ระบบจะใช้การตั้งค่าตามลำดับในรายการ
patch_cmds Iterable of strings; default = []
ลำดับของคำสั่ง Bash ที่จะใช้ใน Linux/Macos หลังจากใช้แพตช์แล้ว
patch_strip default = 0
เหมือนกับอาร์กิวเมนต์ --strip ของแพตช์ Unix

เฉพาะด้าน

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 ที่ใช้ลักษณะนี้ โดยมีพารามิเตอร์ 2 รายการ ได้แก่ Target (เป้าหมายที่ใช้ลักษณะ) และ ctx (บริบทของกฎที่สร้างเป้าหมายจาก) แอตทริบิวต์ของเป้าหมายจะพร้อมใช้งานผ่านช่องctx.rule ระบบจะประเมินฟังก์ชันนี้ในระหว่างระยะการวิเคราะห์สําหรับการใช้แง่มุมแต่ละอย่างกับเป้าหมาย
attr_aspects sequence of strings; default = []
List of attribute names. Aspect จะแพร่กระจายไปตามการขึ้นต่อกันที่ระบุไว้ในแอตทริบิวต์ของเป้าหมายที่มีชื่อเหล่านี้ ค่าที่พบบ่อยในที่นี้ ได้แก่ deps และ exports รายการยังอาจมีสตริงเดียว "*" เพื่อเผยแพร่ตามการขึ้นต่อกันทั้งหมดของเป้าหมาย
attrs dict; or None; default = None
พจนานุกรมที่ประกาศแอตทริบิวต์ทั้งหมดของ Aspect โดยจะแมปจากชื่อแอตทริบิวต์ไปยังออบเจ็กต์แอตทริบิวต์ เช่น `attr.label` หรือ `attr.string` (ดูโมดูล attr) แอตทริบิวต์ด้านลักษณะจะพร้อมใช้งานในฟังก์ชันการติดตั้งใช้งานเป็นฟิลด์ของพารามิเตอร์ ctx

แอตทริบิวต์โดยนัยที่ขึ้นต้นด้วย _ ต้องมีค่าเริ่มต้นและมีประเภทเป็น label หรือ label_list

แอตทริบิวต์ที่ชัดเจนต้องมีประเภท string และต้องใช้ข้อจำกัด values แอตทริบิวต์ที่ชัดเจนจะจำกัดแง่มุมให้ใช้ได้กับกฎที่มีแอตทริบิวต์ชื่อ ประเภท และค่าที่ถูกต้องเดียวกันตามข้อจำกัดเท่านั้น

required_providers default = []
แอตทริบิวต์นี้ช่วยให้แง่มุมจำกัดการเผยแพร่เฉพาะเป้าหมายที่มีกฎโฆษณาผู้ให้บริการที่จำเป็น ค่าต้องเป็นรายการที่มีผู้ให้บริการแต่ละรายหรือรายการของผู้ให้บริการ แต่ไม่ใช่ทั้ง 2 อย่าง เช่น [[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_rule ก็ต่อเมื่อ some_rule ให้ FooInfo *หรือ* BarInfo *หรือ* ทั้ง BazInfo *และ* QuxInfo

required_aspect_providers default = []
แอตทริบิวต์นี้ช่วยให้แง่มุมนี้ตรวจสอบแง่มุมอื่นๆ ได้ ค่าต้องเป็นรายการที่มีผู้ให้บริการแต่ละรายหรือรายการของผู้ให้บริการ แต่ไม่ใช่ทั้ง 2 อย่าง เช่น [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] เป็นค่าที่ถูกต้อง แต่ [FooInfo, BarInfo, [BazInfo, QuxInfo]] ไม่ถูกต้อง

ระบบจะแปลงรายการผู้ให้บริการที่ไม่ได้ซ้อนกันเป็นรายการที่มีรายการผู้ให้บริการ 1 รายการโดยอัตโนมัติ กล่าวคือ ระบบจะแปลง [FooInfo, BarInfo] เป็น [[FooInfo, BarInfo]] โดยอัตโนมัติ

หากต้องการให้แง่มุมอื่น (เช่น other_aspect) มองเห็นแง่มุมนี้ other_aspect ต้องระบุผู้ให้บริการทั้งหมดจากรายการอย่างน้อย 1 รายการ ในตัวอย่างของ [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] องค์ประกอบนี้จะเห็น other_aspect ก็ต่อเมื่อ other_aspect ระบุ FooInfo *หรือ* BarInfo *หรือ* ทั้ง BazInfo *และ* QuxInfo

provides default = []
รายชื่อผู้ให้บริการที่ฟังก์ชันการติดตั้งใช้งานต้องส่งคืน

หากฟังก์ชันการใช้งานละเว้นประเภทผู้ให้บริการใดๆ ที่ระบุไว้ที่นี่จากค่าที่แสดงผล จะถือว่าเป็นข้อผิดพลาด อย่างไรก็ตาม ฟังก์ชันการติดตั้งใช้งานอาจแสดงผู้ให้บริการเพิ่มเติมที่ไม่ได้ระบุไว้ที่นี่

แต่ละองค์ประกอบของรายการคือออบเจ็กต์ *Info ที่ provider() ส่งคืน ยกเว้นผู้ให้บริการเดิมที่จะแสดงด้วยชื่อสตริงแทน

requires sequence of Aspects; default = []
List of aspects required to be propagated before this aspect.
fragments sequence of strings; default = []
List of names of configuration fragments that the aspect requires in target configuration.
host_fragments sequence of strings; default = []
รายการชื่อของส่วนการกำหนดค่าที่แง่มุมต้องการในการกำหนดค่าโฮสต์
toolchains sequence; default = []
หากตั้งค่าไว้ ชุดเครื่องมือที่กฎนี้ต้องการ รายการอาจมีออบเจ็กต์ String, Label หรือ StarlarkToolchainTypeApi ในการผสมผสานใดก็ได้ ระบบจะค้นหา Toolchain โดยการตรวจสอบแพลตฟอร์มปัจจุบัน และส่งให้การติดตั้งใช้งานกฎผ่าน ctx.toolchain
incompatible_use_toolchain_transition default = False
เลิกใช้งานแล้ว ไม่ได้ใช้แล้วและควรนำออก
doc default = ''
รายละเอียดของแง่มุมที่เครื่องมือสร้างเอกสารสามารถดึงข้อมูลได้
apply_to_generating_rules default = False
หากเป็นจริง เมื่อใช้กับไฟล์เอาต์พุต ระบบจะใช้กับกฎการสร้างไฟล์เอาต์พุตแทน

ตัวอย่างเช่น สมมติว่า Aspect แพร่กระจายแบบทรานซิทีฟผ่านแอตทริบิวต์ `deps` และใช้กับเป้าหมาย `alpha` สมมติว่า `alpha` มี `deps = [':beta_output']` โดยที่ `beta_output` เป็นเอาต์พุตที่ประกาศของเป้าหมาย `beta` สมมติว่า `beta` มีเป้าหมาย `charlie` เป็นหนึ่งใน `deps` หาก `apply_to_generating_rules=True` สำหรับ Aspect นั้น Aspect จะแพร่กระจายผ่าน `alpha`, `beta` และ `charlie` หากเป็น False Aspect จะแพร่กระจายไปยัง `alpha` เท่านั้น

โดยค่าเริ่มต้นจะเป็นเท็จ

exec_compatible_with sequence of strings; default = []
รายการข้อจำกัดในแพลตฟอร์มการดำเนินการที่มีผลกับอินสแตนซ์ทั้งหมดของแง่มุมนี้
exec_groups dict; or None; default = None
Dict of execution group name (string) to exec_groups. หากตั้งค่าไว้ จะช่วยให้แง่มุมต่างๆ เรียกใช้การดำเนินการในแพลตฟอร์มการดำเนินการหลายรายการภายในอินสแตนซ์เดียวได้ ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับกลุ่มการดำเนินการ

bazel_dep

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

ประกาศการขึ้นต่อกันโดยตรงกับโมดูล Bazel อื่น

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
name ต้องระบุ
ชื่อของโมดูลที่จะเพิ่มเป็นทรัพยากร Dependency โดยตรง
version default = ''
เวอร์ชันของโมดูลที่จะเพิ่มเป็นทรัพยากร Dependency โดยตรง
max_compatibility_level default = -1
compatibility_level สูงสุดที่รองรับสำหรับโมดูลที่จะเพิ่มเป็นทรัพยากร Dependency โดยตรง เวอร์ชันของโมดูลจะแสดงถึง compatibility_level ขั้นต่ำที่รองรับ รวมถึงสูงสุดหากไม่ได้ระบุแอตทริบิวต์นี้
repo_name default = ''
ชื่อของที่เก็บภายนอกที่แสดงถึงการขึ้นต่อกันนี้ ซึ่งเป็นชื่อของโมดูลโดยค่าเริ่มต้น
dev_dependency default = False
หากเป็นจริง ระบบจะไม่สนใจการขึ้นต่อกันนี้หากโมดูลปัจจุบันไม่ใช่โมดูลรูทหรือเปิดใช้ `--ignore_dev_dependency`

เชื่อมโยง

None bind(name, actual=None)

คำเตือน: ไม่แนะนำให้ใช้ bind() ดูพิจารณานำ bind ออกเพื่อดูการอภิปรายอย่างละเอียดเกี่ยวกับปัญหาและทางเลือกอื่นๆ

กำหนดชื่อแทนให้กับเป้าหมายใน//externalแพ็กเกจ

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
name ต้องระบุ
ป้ายกำกับภายใต้ '//external' เพื่อใช้เป็นชื่อแทน
actual string; or None; default = None
ป้ายกำกับจริงที่จะใช้เป็นชื่อแทน

บูลีน

bool bool(x=False)

ตัวสร้างสำหรับประเภทบูลีน โดยจะแสดงผล False หากออบเจ็กต์เป็น None, False, สตริงว่าง (""), ตัวเลข 0 หรือคอลเล็กชันว่าง (เช่น (), []) ไม่เช่นนั้นจะแสดงผล 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 required
ชื่อของส่วนการกำหนดค่าที่มีค่าที่ผูกภายหลัง
name required
ชื่อของค่าที่จะรับจากส่วนกำหนดค่า

depset

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

สร้าง depset พารามิเตอร์ direct คือรายการองค์ประกอบโดยตรงของ depset และพารามิเตอร์ transitive คือรายการ depset ที่องค์ประกอบจะกลายเป็นองค์ประกอบโดยอ้อมของ depset ที่สร้างขึ้น ลำดับที่องค์ประกอบจะแสดงเมื่อแปลงชุดข้อมูลเป็นรายการจะระบุโดยพารามิเตอร์ order ดูข้อมูลเพิ่มเติมได้ที่ภาพรวมของ Depset

องค์ประกอบทั้งหมด (โดยตรงและโดยอ้อม) ของชุดการพึ่งพาต้องเป็นประเภทเดียวกันตามที่ได้รับจากนิพจน์ type(x)

เนื่องจากระบบใช้ชุดที่อิงตามแฮชเพื่อกำจัดรายการที่ซ้ำกันระหว่างการวนซ้ำ องค์ประกอบทั้งหมดของ Depset จึงควรแฮชได้ อย่างไรก็ตาม ปัจจุบันระบบไม่ได้ตรวจสอบตัวแปรนี้อย่างสม่ำเสมอในตัวสร้างทั้งหมด ใช้ Flag --incompatible_always_check_depset_elements เพื่อเปิดใช้การตรวจสอบที่สอดคล้องกัน ซึ่งจะเป็นลักษณะการทำงานเริ่มต้นในรุ่นต่อๆ ไป ดูปัญหา 10313

นอกจากนี้ องค์ประกอบต้องเปลี่ยนแปลงไม่ได้ในปัจจุบัน แต่ข้อจำกัดนี้จะผ่อนปรนในอนาคต

ลำดับของ Depset ที่สร้างขึ้นควรเข้ากันได้กับลำดับของ Depset transitive "default" ใช้ร่วมกับคำสั่งซื้ออื่นๆ ได้ แต่คำสั่งซื้ออื่นๆ จะใช้ร่วมกันเองได้เท่านั้น

หมายเหตุเกี่ยวกับความเข้ากันได้แบบย้อนหลัง/ไปข้างหน้า ปัจจุบันฟังก์ชันนี้ยอมรับพารามิเตอร์ items ตามตำแหน่ง ฟังก์ชันนี้เลิกใช้งานแล้วและจะถูกนำออกในอนาคต และหลังจากนำออกแล้ว direct จะกลายเป็นพารามิเตอร์ตำแหน่งเดียวของฟังก์ชัน depset ดังนั้น การเรียกใช้ทั้ง 2 รายการต่อไปนี้จึงมีความหมายเหมือนกันและพร้อมใช้งานในอนาคต

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
direct sequence; or None; default = None
รายการองค์ประกอบโดยตรงของ depset
order default = "default"
กลยุทธ์การข้ามสำหรับ depset ใหม่ ดูค่าที่เป็นไปได้ที่นี่
transitive sequence of depsets; or None; default = None
รายการของ Depset ที่องค์ประกอบจะกลายเป็นองค์ประกอบทางอ้อมของ Depset

dict

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

สร้างพจนานุกรมจากอาร์กิวเมนต์ตำแหน่งที่ไม่บังคับและชุดอาร์กิวเมนต์คีย์เวิร์ดที่ไม่บังคับ ในกรณีที่ระบุคีย์เดียวกันหลายครั้ง ระบบจะใช้ค่าสุดท้าย รายการที่ระบุผ่านอาร์กิวเมนต์คีย์เวิร์ดจะถือว่าอยู่หลังรายการที่ระบุผ่านอาร์กิวเมนต์ตำแหน่ง

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
pairs default = []
พจนานุกรมหรือการวนซ้ำที่มีองค์ประกอบแต่ละรายการยาว 2 (คีย์ ค่า)
kwargs ต้องระบุ
พจนานุกรมของรายการเพิ่มเติม

dir

list dir(x)

แสดงรายการสตริง ซึ่งเป็นชื่อของแอตทริบิวต์และเมธอดของออบเจ็กต์พารามิเตอร์

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x ต้องระบุ
ออบเจ็กต์ที่จะตรวจสอบ

แจกแจง

list enumerate(list, start=0)

แสดงรายการคู่ (ทูเพิล 2 องค์ประกอบ) พร้อมดัชนี (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 กลุ่มการดำเนินการนี้จะรับช่วง Toolchain และข้อจำกัดของกฎที่กลุ่มนี้แนบอยู่ หากตั้งค่าเป็นสตริงอื่น ระบบจะแสดงข้อผิดพลาด

ไม่สำเร็จ

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

ทำให้การดำเนินการล้มเหลวพร้อมข้อผิดพลาด

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
msg default = None
เลิกใช้งานแล้ว: ใช้อาร์กิวเมนต์ตามตำแหน่งแทน อาร์กิวเมนต์นี้ทําหน้าที่เหมือนอาร์กิวเมนต์ตําแหน่งนําหน้าโดยนัย
attr string; or None; default = None
เลิกใช้งานแล้ว ทำให้ระบบเพิ่มคำนำหน้าที่ไม่บังคับซึ่งมีสตริงนี้ลงในข้อความแสดงข้อผิดพลาด
args ต้องระบุ
รายการค่าที่จัดรูปแบบด้วย debugPrint (ซึ่งเทียบเท่ากับ str โดยค่าเริ่มต้น) และเชื่อมต่อด้วยช่องว่าง ซึ่งจะปรากฏในข้อความแสดงข้อผิดพลาด

จำนวนลอยตัว

float float(x=unbound)

แสดงผล x เป็นค่าทศนิยม
  • หาก x เป็นจำนวนทศนิยมอยู่แล้ว float จะแสดงผลโดยไม่มีการเปลี่ยนแปลง
  • หาก x เป็นบูลีน float จะแสดงผล 1.0 สำหรับ True และ 0.0 สำหรับ False
  • หาก x เป็น int float จะแสดงผลค่าทศนิยมแบบจำกัดที่ใกล้เคียงที่สุดกับ x หรือข้อผิดพลาดหากขนาดใหญ่เกินไป
  • หาก x เป็นสตริง สตริงนั้นต้องเป็นค่าคงที่แบบลอยตัวที่ถูกต้อง หรือต้องเท่ากับ (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) NaN, Inf หรือ Infinity โดยอาจมีเครื่องหมาย + หรือ - นำหน้าก็ได้
ค่าอื่นๆ จะทำให้เกิดข้อผิดพลาด หากไม่มีอาร์กิวเมนต์ 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 required
โครงสร้างที่มีการเข้าถึงแอตทริบิวต์
name ต้องระบุ
ชื่อของแอตทริบิวต์โครงสร้าง
default default = unbound
ค่าเริ่มต้นที่จะแสดงผลในกรณีที่โครงสร้างไม่มีแอตทริบิวต์ที่มีชื่อที่ระบุ

git_override

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

ระบุว่าควรใช้การขึ้นต่อกันจากคอมมิตที่เฉพาะเจาะจงของที่เก็บ Git คำสั่งนี้จะมีผลในโมดูลรูทเท่านั้น กล่าวคือ หากโมดูลอื่นใช้โมดูลหนึ่งเป็นทรัพยากร Dependency ระบบจะไม่สนใจการลบล้างของโมดูลนั้น

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
module_name ต้องระบุ
ชื่อของการอ้างอิงโมดูล Bazel ที่จะใช้การลบล้างนี้
remote ต้องระบุ
URL ของที่เก็บ Git ระยะไกล
commit default = ''
คอมมิตที่ควรเช็คเอาต์
patches Iterable of strings; default = []
A list of labels pointing to patch files to apply for this module. ไฟล์แพตช์ต้องอยู่ในโครงสร้างแหล่งที่มาของโปรเจ็กต์ระดับบนสุด ระบบจะใช้การตั้งค่าตามลำดับในรายการ
patch_cmds Iterable of strings; default = []
ลำดับของคำสั่ง Bash ที่จะใช้ใน Linux/Macos หลังจากใช้แพตช์แล้ว
patch_strip default = 0
เหมือนกับอาร์กิวเมนต์ --strip ของแพตช์ Unix

hasattr

bool hasattr(x, name)

แสดงผลเป็น True หากออบเจ็กต์ x มีแอตทริบิวต์หรือเมธอดของ name ที่ระบุ หรือแสดงผลเป็น False ตัวอย่าง
hasattr(ctx.attr, "myattr")

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x ต้องระบุ
ออบเจ็กต์ที่จะตรวจสอบ
name ต้องระบุ
ชื่อของแอตทริบิวต์

แฮช

int hash(value)

แสดงค่าแฮชสำหรับสตริง โดยจะคำนวณแบบดีเทอร์มินิสติกโดยใช้อัลกอริทึมเดียวกันกับ String.hashCode() ของ Java ซึ่งก็คือ
s[0] * (31^(n-1)) + s[1] * (31^(n-2)) + ... + s[n-1]
ปัจจุบันระบบยังไม่รองรับการแฮชค่าอื่นๆ นอกเหนือจากสตริง

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
value ต้องระบุ
ค่าสตริงที่จะแฮช

int

int int(x, base=unbound)

แสดงผล x เป็นค่า int
  • หาก x เป็นจำนวนเต็มอยู่แล้ว int จะแสดงผลโดยไม่มีการเปลี่ยนแปลง
  • หาก x เป็นบูลีน int จะแสดงค่า 1 สำหรับ True และ 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 จะไม่มีการใช้คำนำหน้า และหากมีตัวเลขมากกว่า 1 หลัก ตัวเลขนำหน้าต้องไม่ใช่ 0 เพื่อหลีกเลี่ยงความสับสนระหว่างเลขฐานแปดกับเลขฐานสิบ ขนาดของตัวเลขที่แสดงโดยสตริงต้องอยู่ภายในช่วงที่อนุญาตสำหรับประเภท int
  • หาก x เป็นจำนวนทศนิยม int จะแสดงผลค่าจำนวนเต็มของจำนวนทศนิยม โดยปัดเศษเข้าหาศูนย์ หาก x ไม่ใช่จำนวนจำกัด (NaN หรืออินฟินิตี้) จะถือว่าเป็นข้อผิดพลาด
ฟังก์ชันนี้จะทำงานไม่สำเร็จหาก x เป็นประเภทอื่น หรือหากค่าเป็นสตริงที่ไม่เป็นไปตามรูปแบบข้างต้น ฟังก์ชันนี้ไม่อนุญาตให้อาร์กิวเมนต์เป็น 0 และไม่อนุญาตให้มีช่องว่างที่ไม่จำเป็นสำหรับอาร์กิวเมนต์สตริง ซึ่งแตกต่างจากฟังก์ชัน int ของ Python

ตัวอย่าง

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)

ระบุว่าควรนำเข้าทรัพยากร Dependency จากไดเรกทอรีหนึ่งๆ ในดิสก์ภายใน คำสั่งนี้จะมีผลในโมดูลรูทเท่านั้น กล่าวคือ หากโมดูลอื่นใช้โมดูลหนึ่งเป็นทรัพยากร Dependency ระบบจะไม่สนใจการลบล้างของโมดูลนั้น

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
module_name ต้องระบุ
ชื่อของการอ้างอิงโมดูล Bazel ที่จะใช้การลบล้างนี้
path ต้องระบุ
เส้นทางไปยังไดเรกทอรีที่โมดูลนี้อยู่

สูงสุด

unknown max(*args)

แสดงผลอาร์กิวเมนต์ที่ใหญ่ที่สุดในอาร์กิวเมนต์ทั้งหมดที่ระบุ หากระบุอาร์กิวเมนต์เพียงรายการเดียว อาร์กิวเมนต์นั้นต้องเป็นอาร์กิวเมนต์ที่วนซ้ำได้ที่ไม่ว่างเปล่า และจะเกิดข้อผิดพลาดหากเปรียบเทียบองค์ประกอบไม่ได้ (เช่น จำนวนเต็มกับสตริง) หรือหากไม่ได้ระบุอาร์กิวเมนต์
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 ต้องระบุ
องค์ประกอบที่จะตรวจสอบ

โมดูล

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

ประกาศพร็อพเพอร์ตี้บางอย่างของโมดูล Bazel ที่แสดงโดยที่เก็บ Bazel ปัจจุบัน พร็อพเพอร์ตี้เหล่านี้เป็นได้ทั้งข้อมูลเมตาที่จำเป็นของโมดูล (เช่น ชื่อและเวอร์ชัน) หรือส่งผลต่อลักษณะการทำงานของโมดูลปัจจุบันและโมดูลที่ขึ้นต่อกัน

โดยควรเรียกใช้ได้ไม่เกิน 1 ครั้ง คุณจะละเว้นได้ก็ต่อเมื่อโมดูลนี้เป็นโมดูลรูท (กล่าวคือ หากโมดูลอื่นจะไม่ขึ้นอยู่กับโมดูลนี้)

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
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 เวอร์ชันปัจจุบันของคุณเข้ากันได้หรือไม่ รูปแบบของค่านี้คือสตริงของค่าข้อจำกัดบางอย่างที่คั่นด้วยคอมมา ระบบรองรับข้อจำกัด 3 อย่าง ได้แก่ <=X.X.X: เวอร์ชัน Bazel ต้องเท่ากับหรือเก่ากว่า X.X.X ใช้เมื่อมีการเปลี่ยนแปลงที่ไม่เข้ากันในเวอร์ชันใหม่กว่า >=X.X.X: Bazel เวอร์ชันต้องเป็น X.X.X ขึ้นไป ใช้เมื่อคุณขึ้นอยู่กับฟีเจอร์บางอย่างที่พร้อมใช้งานตั้งแต่เวอร์ชัน X.X.X เท่านั้น -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 ต้องระบุ
ฟังก์ชันที่ใช้ส่วนขยายโมดูลนี้ ต้องใช้พารามิเตอร์เดียวคือ module_ctx ฟังก์ชันนี้จะเรียกใช้ 1 ครั้งเมื่อเริ่มต้นการสร้างเพื่อกำหนดชุดที่เก็บที่พร้อมใช้งาน
tag_classes default = {}
พจนานุกรมเพื่อประกาศคลาสแท็กทั้งหมดที่ส่วนขยายใช้ โดยจะแมปจากชื่อของคลาสแท็กไปยังออบเจ็กต์ tag_class
doc default = ''
คำอธิบายของส่วนขยายโมดูลที่เครื่องมือสร้างเอกสารสามารถดึงข้อมูลได้
environ sequence of strings; default = []
ระบุรายการตัวแปรสภาพแวดล้อมที่ส่วนขยายโมดูลนี้ขึ้นอยู่กับ หากตัวแปรสภาพแวดล้อมในรายการนั้นมีการเปลี่ยนแปลง ระบบจะประเมินส่วนขยายอีกครั้ง
os_dependent default = False
ระบุว่าส่วนขยายนี้ขึ้นอยู่กับระบบปฏิบัติการหรือไม่
arch_dependent default = False
ระบุว่าส่วนขยายนี้ขึ้นอยู่กับสถาปัตยกรรมหรือไม่

multiple_version_override

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

ระบุว่าการขึ้นต่อกันยังคงมาจากรีจิสทรี แต่ควรอนุญาตให้มีหลายเวอร์ชันอยู่ร่วมกันได้ ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบ คำสั่งนี้จะมีผลในโมดูลรูทเท่านั้น กล่าวคือ หากโมดูลอื่นใช้โมดูลหนึ่งเป็นทรัพยากร Dependency ระบบจะไม่สนใจการลบล้างของโมดูลนั้น

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
module_name ต้องระบุ
ชื่อของการอ้างอิงโมดูล Bazel ที่จะใช้การลบล้างนี้
versions Iterable of strings; required
ระบุเวอร์ชันที่ได้รับอนุญาตให้ใช้งานร่วมกันอย่างชัดเจน โดยเวอร์ชันเหล่านี้ต้องมีอยู่ในกราฟการขึ้นต่อกันที่เลือกไว้ล่วงหน้าแล้ว การอ้างอิงในโมดูลนี้จะได้รับการ "อัปเกรด" เป็นเวอร์ชันที่สูงกว่าที่อนุญาตที่ใกล้ที่สุดในระดับความเข้ากันได้เดียวกัน ในขณะที่การอ้างอิงที่มีเวอร์ชันสูงกว่าเวอร์ชันที่อนุญาตในระดับความเข้ากันได้เดียวกันจะทำให้เกิดข้อผิดพลาด
registry default = ''
ลบล้างรีจิสทรีสำหรับโมดูลนี้ แทนที่จะค้นหาโมดูลนี้จากรายการรีจิสทรีเริ่มต้น ควรใช้รีจิสทรีที่ระบุ

พิมพ์

None print(sep=" ", *args)

พิมพ์ args เป็นเอาต์พุตการแก้ไขข้อบกพร่อง โดยจะมีสตริง "DEBUG" และตำแหน่ง (ไฟล์และหมายเลขบรรทัด) ของการเรียกนี้เป็นคำนำหน้า ระบบไม่ได้ระบุวิธีที่แน่นอนในการแปลงอาร์กิวเมนต์เป็นสตริง และอาจเปลี่ยนแปลงได้ทุกเมื่อ โดยเฉพาะอย่างยิ่ง การจัดรูปแบบอาจแตกต่างจาก (และละเอียดยิ่งกว่า) การจัดรูปแบบที่ทำโดย str() และ repr()

เราไม่แนะนำให้ใช้ print ในโค้ดเวอร์ชันที่ใช้งานจริงเนื่องจากจะสร้างสแปมให้ผู้ใช้ สำหรับการเลิกใช้งาน ให้ใช้ข้อผิดพลาดที่ชัดเจนโดยใช้ fail() ทุกครั้งที่ทำได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
sep default = " "
สตริงตัวคั่นระหว่างออบเจ็กต์ ค่าเริ่มต้นคือช่องว่าง (" ")
args required
ออบเจ็กต์ที่จะพิมพ์

provider

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
    ...

ดูคำแนะนำแบบละเอียดเกี่ยวกับวิธีใช้ผู้ให้บริการได้ที่กฎ (ผู้ให้บริการ)

แสดงผลค่าที่เรียกใช้ได้ Provider หากไม่ได้ระบุ init

หากระบุ 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
การเรียกกลับที่ไม่บังคับสำหรับการประมวลผลล่วงหน้าและการตรวจสอบค่าฟิลด์ของผู้ให้บริการในระหว่างการเริ่มต้น หากระบุ init provider() จะแสดงผลทูเพิลที่มี 2 องค์ประกอบ ได้แก่ สัญลักษณ์ของผู้ให้บริการปกติและตัวสร้างดิบ

คำอธิบายที่แม่นยำมีดังนี้ โปรดดูกฎ (การเริ่มต้นผู้ให้บริการที่กำหนดเอง) เพื่อดูการสนทนาและกรณีการใช้งานที่เข้าใจง่าย

ให้ P เป็นสัญลักษณ์ของผู้ให้บริการที่สร้างขึ้นโดยการเรียก provider() ในเชิงแนวคิด ระบบจะสร้างอินสแตนซ์ของ P โดยการเรียกฟังก์ชันตัวสร้างเริ่มต้น c(*args, **kwargs) ซึ่งจะทำสิ่งต่อไปนี้

  • หาก args ไม่ว่าง ระบบจะแสดงข้อผิดพลาด
  • หากมีการระบุพารามิเตอร์ fields เมื่อมีการเรียกใช้ provider() และหาก kwargs มีคีย์ที่ไม่ได้อยู่ในรายการ fields จะเกิดข้อผิดพลาดขึ้น
  • ไม่เช่นนั้น c จะแสดงผลอินสแตนซ์ใหม่ซึ่งมีฟิลด์ชื่อ k ที่มีค่า v สำหรับแต่ละรายการ k: v ใน kwargs
ในกรณีที่initไม่ได้ระบุ Callback การเรียกใช้สัญลักษณ์ P เองจะทำหน้าที่เป็นการเรียกใช้ฟังก์ชันตัวสร้างเริ่มต้น c กล่าวคือ P(*args, **kwargs) จะแสดงผล c(*args, **kwargs) ตัวอย่างเช่น
MyInfo = provider()
m = MyInfo(foo = 1)
จะทำให้ m เป็นอินสแตนซ์ MyInfo ที่มี m.foo == 1 โดยตรง

แต่ในกรณีที่ระบุ init ไว้ การเรียกใช้ P(*args, **kwargs) จะทำตามขั้นตอนต่อไปนี้แทน

  1. ระบบจะเรียกใช้ฟังก์ชันเรียกกลับเป็น init(*args, **kwargs) ซึ่งก็คือมีอาร์กิวเมนต์ตำแหน่งและอาร์กิวเมนต์คีย์เวิร์ดเหมือนกับที่ส่งไปยัง P ทุกประการ
  2. ค่าที่แสดงผลของ init คาดว่าจะเป็นพจนานุกรม d ซึ่งมีคีย์เป็นสตริงชื่อฟิลด์ ไม่เช่นนั้นจะเกิดข้อผิดพลาด
  3. ระบบจะสร้างอินสแตนซ์ใหม่ของ P ราวกับว่าเรียกใช้ตัวสร้างเริ่มต้นด้วยรายการของ d เป็นอาร์กิวเมนต์คีย์เวิร์ด ดังใน c(**d)

หมายเหตุ: ขั้นตอนข้างต้นหมายความว่าจะเกิดข้อผิดพลาดหาก *args หรือ **kwargs ไม่ตรงกับลายเซ็นของ init หรือการประเมินเนื้อหาของ init ล้มเหลว (อาจตั้งใจผ่านการเรียกใช้ fail()) หรือหากค่าที่ส่งคืนของ init ไม่ใช่พจนานุกรมที่มีสคีมาที่คาดไว้

ด้วยวิธีนี้ init Callback จะทำให้การสร้างผู้ให้บริการทั่วไปเป็นแบบทั่วไปโดยอนุญาตให้ใช้อาร์กิวเมนต์ตำแหน่งและตรรกะที่กำหนดเองสำหรับการประมวลผลล่วงหน้าและการตรวจสอบ แต่ไม่อนุญาตให้หลีกเลี่ยงรายการ fields ที่อนุญาต

เมื่อระบุ init ค่าที่ส่งคืนของ provider() จะกลายเป็นทูเพิล (P, r) โดยที่ r คือ raw constructor ในความเป็นจริงแล้ว ลักษณะการทำงานของ r ก็เหมือนกับฟังก์ชันตัวสร้างเริ่มต้น c ที่กล่าวถึงข้างต้น โดยปกติแล้ว r จะเชื่อมโยงกับตัวแปรที่มีชื่อขึ้นต้นด้วยขีดล่าง เพื่อให้เฉพาะไฟล์ .bzl ปัจจุบันเท่านั้นที่มีสิทธิ์เข้าถึงโดยตรง

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

ช่วง

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

สร้างรายการที่รายการต่างๆ จะเรียงจาก start ไปยัง stop โดยใช้การเพิ่มทีละ 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 required
ค่าขององค์ประกอบเริ่มต้นหากระบุองค์ประกอบสิ้นสุด มิฉะนั้นค่าขององค์ประกอบสิ้นสุดและค่าเริ่มต้นจริงจะเป็น 0
stop_or_none int; or None; default = None
ดัชนีที่ไม่บังคับของรายการแรกที่ไม่รวมอยู่ในรายการผลลัพธ์ การสร้างรายการจะหยุดก่อนถึง stop
step default = 1
การเพิ่ม (ค่าเริ่มต้นคือ 1) โดยอาจเป็นค่าลบก็ได้

register_execution_platforms()

None register_execution_platforms(*platform_labels)

ลงทะเบียนแพลตฟอร์มที่กำหนดไว้แล้วเพื่อให้ Bazel ใช้เป็นแพลตฟอร์มการดำเนินการระหว่างการแก้ปัญหา Toolchain ได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
platform_labels sequence of strings; required
ป้ายกำกับของแพลตฟอร์มที่จะลงทะเบียน

register_execution_platforms(dev_dependency)

None register_execution_platforms(dev_dependency=False, *platform_labels)

ระบุแพลตฟอร์มการดำเนินการที่กำหนดไว้แล้วเพื่อลงทะเบียนเมื่อเลือกโมดูลนี้ ควรเป็นรูปแบบเป้าหมายที่แน่นอน (เช่น ขึ้นต้นด้วย @ หรือ //) ดูข้อมูลเพิ่มเติมได้ที่การแก้ไข Toolchain

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
dev_dependency default = False
หากเป็นจริง ระบบจะไม่ลงทะเบียนแพลตฟอร์มการดำเนินการหากโมดูลปัจจุบันไม่ใช่โมดูลรูทหรือเปิดใช้ `--ignore_dev_dependency`
platform_labels sequence of strings; required
ป้ายกำกับของแพลตฟอร์มที่จะลงทะเบียน

register_toolchains()

None register_toolchains(*toolchain_labels)

ลงทะเบียน Toolchain ที่กำหนดไว้แล้วเพื่อให้ Bazel ใช้ได้ในระหว่างการแก้ปัญหา Toolchain ดูตัวอย่างการกำหนดและการลงทะเบียน Toolchain

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
toolchain_labels sequence of strings; ต้องระบุ
ป้ายกำกับของ Toolchain ที่จะลงทะเบียน

register_toolchains(dev_dependency)

None register_toolchains(dev_dependency=False, *toolchain_labels)

ระบุ Toolchain ที่กำหนดไว้แล้วเพื่อลงทะเบียนเมื่อเลือกโมดูลนี้ ควรเป็นรูปแบบเป้าหมายที่แน่นอน (เช่น ขึ้นต้นด้วย @ หรือ //) ดูข้อมูลเพิ่มเติมได้ที่การแก้ไข Toolchain

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
dev_dependency default = False
หากเป็นจริง ระบบจะไม่ลงทะเบียน Toolchain หากโมดูลปัจจุบันไม่ใช่โมดูลรูทหรือเปิดใช้ `--ignore_dev_dependency`
toolchain_labels sequence of strings; ต้องระบุ
ป้ายกำกับของ Toolchain ที่จะลงทะเบียน

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
dictionary to declare all the attributes of the rule. โดยจะแมปจากชื่อแอตทริบิวต์ไปยังออบเจ็กต์แอตทริบิวต์ (ดูโมดูล attr) แอตทริบิวต์ที่ขึ้นต้นด้วย _ เป็นแอตทริบิวต์ส่วนตัว และใช้เพื่อเพิ่มการอ้างอิงโดยนัยในป้ายกำกับไปยังไฟล์ได้ (กฎของที่เก็บจะขึ้นอยู่กับอาร์ติแฟกต์ที่สร้างขึ้นไม่ได้) ระบบจะเพิ่มแอตทริบิวต์ name โดยนัยและต้องไม่มีการระบุ
local default = False
ระบุว่ากฎนี้จะดึงข้อมูลทุกอย่างจากระบบในเครื่องและควรได้รับการประเมินใหม่ทุกครั้งที่ดึงข้อมูล
environ sequence of strings; default = []
ระบุรายการตัวแปรสภาพแวดล้อมที่กฎของที่เก็บนี้ขึ้นอยู่กับ หากตัวแปรสภาพแวดล้อมในรายการนั้นมีการเปลี่ยนแปลง ระบบจะดึงข้อมูลที่เก็บอีกครั้ง
configure default = False
ระบุว่าที่เก็บจะตรวจสอบระบบเพื่อวัตถุประสงค์ในการกำหนดค่า
remotable default = False
เวอร์ชันทดลอง พารามิเตอร์นี้อยู่ในขั้นทดลองและอาจมีการเปลี่ยนแปลงได้ทุกเมื่อ โปรดอย่าใช้ API นี้ อาจเปิดใช้ในเวอร์ชันทดลองได้โดยการตั้งค่า ---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 ที่ใช้กฎนี้ต้องมีพารามิเตอร์ 1 รายการเท่านั้น ซึ่งก็คือ ctx ระบบจะเรียกใช้ฟังก์ชันในระหว่างขั้นตอนการวิเคราะห์สำหรับกฎแต่ละอินสแตนซ์ เข้าถึงแอตทริบิวต์ที่ผู้ใช้ระบุได้ โดยต้องสร้างการดำเนินการเพื่อสร้างเอาต์พุตที่ประกาศไว้ทั้งหมด
test ค่าเริ่มต้น = False
กฎนี้เป็นกฎทดสอบหรือไม่ กล่าวคือ กฎนี้อาจเป็นเรื่องของคำสั่ง blaze test หรือไม่ กฎการทดสอบทั้งหมดจะถือว่าเป็นกฎที่เรียกใช้ได้โดยอัตโนมัติ คุณจึงไม่จำเป็นต้อง (และไม่ควร) ตั้งค่า executable = True สำหรับกฎการทดสอบอย่างชัดเจน ดูข้อมูลเพิ่มเติมได้ที่ หน้ากฎ
attrs dict; or None; default = None
dictionary to declare all the attributes of the rule. โดยจะแมปจากชื่อแอตทริบิวต์ไปยังออบเจ็กต์แอตทริบิวต์ (ดูโมดูล attr) แอตทริบิวต์ที่ขึ้นต้นด้วย _ เป็นแอตทริบิวต์ส่วนตัว และใช้เพื่อเพิ่มการอ้างอิงโดยนัยในป้ายกำกับได้ ระบบจะเพิ่มแอตทริบิวต์ name โดยนัยและต้องไม่มีการระบุ ระบบจะเพิ่มแอตทริบิวต์ visibility, deprecation, tags, testonly และ features โดยอัตโนมัติและจะลบล้างไม่ได้ กฎส่วนใหญ่ต้องการแอตทริบิวต์เพียงไม่กี่รายการ ฟังก์ชันกฎจะกำหนดขีดจำกัดขนาดของแอตทริบิวต์เพื่อจำกัดการใช้หน่วยความจำ
outputs dict; or None; or function; default = None
เลิกใช้งานแล้ว พารามิเตอร์นี้เลิกใช้งานแล้วและจะถูกนำออกเร็วๆ นี้ โปรดอย่าใช้ API นี้ ระบบจะปิด เมื่อใช้ Flag ---incompatible_no_rule_outputs_param ใช้ Flag นี้เพื่อยืนยันว่าโค้ดของคุณทำงานได้โดยไม่พึ่งพา API ที่กำลังจะถูกนำออก
พารามิเตอร์นี้เลิกใช้งานแล้ว ย้ายข้อมูลกฎเพื่อใช้ OutputGroupInfo หรือ attr.output แทน

สคีมาสําหรับกําหนดเอาต์พุตที่ประกาศไว้ล่วงหน้า ผู้ใช้ไม่ได้ระบุป้ายกำกับสำหรับไฟล์เหล่านี้ ซึ่งแตกต่างจากแอตทริบิวต์ output และ output_list ดูข้อมูลเพิ่มเติมเกี่ยวกับเอาต์พุตที่ประกาศล่วงหน้าได้ในหน้ากฎ

ค่าของอาร์กิวเมนต์นี้อาจเป็นพจนานุกรมหรือฟังก์ชันเรียกกลับที่สร้างพจนานุกรม Callback ทำงานคล้ายกับแอตทริบิวต์การอ้างอิงที่คำนวณแล้ว โดยชื่อพารามิเตอร์ของฟังก์ชันจะตรงกับแอตทริบิวต์ของกฎ เช่น หากคุณส่ง outputs = _my_func พร้อมคำจำกัดความ def _my_func(srcs, deps): ... ฟังก์ชันจะมีสิทธิ์เข้าถึงแอตทริบิวต์ srcs และ deps ไม่ว่าจะระบุพจนานุกรมโดยตรงหรือผ่านฟังก์ชัน ระบบจะตีความพจนานุกรมดังนี้

แต่ละรายการในพจนานุกรมจะสร้างเอาต์พุตที่ประกาศไว้ล่วงหน้า โดยที่คีย์คือตัวระบุ และค่าคือเทมเพลตสตริงที่กำหนดป้ายกำกับของเอาต์พุต ในฟังก์ชันการใช้งานของกฎ ตัวระบุจะกลายเป็นชื่อฟิลด์ที่ใช้เพื่อเข้าถึง File ของเอาต์พุตใน ctx.outputs ป้ายกำกับของเอาต์พุตมีแพ็กเกจเดียวกับกฎ และส่วนหลังจากแพ็กเกจจะสร้างขึ้นโดยการแทนที่ตัวยึดตำแหน่งแต่ละรายการในรูปแบบ "%{ATTR}" ด้วยสตริงที่สร้างจากค่าของแอตทริบิวต์ ATTR

  • ระบบจะแทนที่แอตทริบิวต์ประเภทสตริงตามตัวอักษร
  • แอตทริบิวต์ประเภทป้ายกำกับจะกลายเป็นส่วนหนึ่งของป้ายกำกับหลังจากแพ็กเกจ โดยไม่รวมนามสกุลไฟล์ เช่น ป้ายกำกับ "//pkg:a/b.c" จะกลายเป็น "a/b"
  • แอตทริบิวต์ที่พิมพ์เอาต์พุตจะกลายเป็นส่วนหนึ่งของป้ายกำกับหลังจากแพ็กเกจ รวมถึงนามสกุลไฟล์ (สำหรับตัวอย่างด้านบนคือ "a/b.c")
  • แอตทริบิวต์ประเภทรายการทั้งหมด (เช่น attr.label_list) ที่ใช้ในตัวยึดตำแหน่งจะต้องมีองค์ประกอบเดียวเท่านั้น Conversion ของแคมเปญจะเหมือนกับเวอร์ชันที่ไม่ใช่รายการ (attr.label)
  • แอตทริบิวต์ประเภทอื่นๆ อาจไม่ปรากฏในตัวยึดตำแหน่ง
  • ตัวยึดตำแหน่งพิเศษที่ไม่ใช่แอตทริบิวต์ %{dirname} และ %{basename} จะขยายเป็นส่วนต่างๆ ของป้ายกำกับของกฎ โดยไม่รวมแพ็กเกจ เช่น ใน "//pkg:a/b.c" dirname คือ a และ basename คือ b.c

ในทางปฏิบัติ ตัวยึดตำแหน่งการแทนที่ที่พบบ่อยที่สุดคือ "%{name}" เช่น สำหรับเป้าหมายที่ชื่อ "foo" พจนานุกรมเอาต์พุต {"bin": "%{name}.exe"} จะประกาศเอาต์พุตที่ชื่อ foo.exe ไว้ล่วงหน้า ซึ่งเข้าถึงได้ในฟังก์ชันการใช้งานเป็น ctx.outputs.bin

executable default = False
ไม่ว่ากฎนี้จะถือว่าเรียกใช้งานได้หรือไม่ นั่นคือ ไม่ว่ากฎนี้อาจเป็นเรื่องของคำสั่ง blaze run หรือไม่ ดูข้อมูลเพิ่มเติมได้ที่ หน้ากฎ
output_to_genfiles default = False
หากเป็นจริง ระบบจะสร้างไฟล์ในไดเรกทอรี genfiles แทนไดเรกทอรี bin อย่าตั้งค่าสถานะนี้ เว้นแต่คุณจะต้องใช้เพื่อความเข้ากันได้กับกฎที่มีอยู่ (เช่น เมื่อสร้างไฟล์ส่วนหัวสำหรับ C++)
fragments sequence of strings; default = []
รายการชื่อของส่วนการกำหนดค่าที่กฎกำหนดในการกำหนดค่าเป้าหมาย
host_fragments sequence of strings; default = []
List of names of configuration fragments that the rule requires in host configuration.
_skylark_testable default = False
(ทดลอง)

หากเป็นจริง กฎนี้จะแสดงการดำเนินการเพื่อให้กฎที่ขึ้นอยู่กับกฎนี้ตรวจสอบผ่านผู้ให้บริการ Actions ผู้ให้บริการยังพร้อมให้บริการกับกฎเองด้วยการเรียกใช้ ctx.created_actions()

ซึ่งควรใช้เพื่อทดสอบลักษณะการทำงานของกฎ Starlark ในเวลาวิเคราะห์เท่านั้น เราอาจนำฟีเจอร์นี้ออกในอนาคต
toolchains sequence; default = []
หากตั้งค่าไว้ ชุดเครื่องมือที่กฎนี้ต้องการ รายการอาจมีออบเจ็กต์ String, Label หรือ StarlarkToolchainTypeApi ในการผสมผสานใดก็ได้ ระบบจะค้นหา Toolchain โดยการตรวจสอบแพลตฟอร์มปัจจุบัน และส่งให้การติดตั้งใช้งานกฎผ่าน ctx.toolchain
incompatible_use_toolchain_transition default = False
เลิกใช้งานแล้ว ไม่ได้ใช้แล้วและควรนำออก
doc default = ''
คำอธิบายของกฎที่เครื่องมือสร้างเอกสารสามารถดึงข้อมูลได้
provides default = []
รายชื่อผู้ให้บริการที่ฟังก์ชันการติดตั้งใช้งานต้องส่งคืน

หากฟังก์ชันการใช้งานละเว้นประเภทผู้ให้บริการใดๆ ที่ระบุไว้ที่นี่จากค่าที่แสดงผล จะถือว่าเป็นข้อผิดพลาด อย่างไรก็ตาม ฟังก์ชันการติดตั้งใช้งานอาจแสดงผู้ให้บริการเพิ่มเติมที่ไม่ได้ระบุไว้ที่นี่

แต่ละองค์ประกอบของรายการคือออบเจ็กต์ *Info ที่ provider() ส่งคืน ยกเว้นผู้ให้บริการเดิมที่จะแสดงด้วยชื่อสตริงแทน

exec_compatible_with sequence of strings; default = []
รายการข้อจำกัดในแพลตฟอร์มการดำเนินการที่มีผลกับเป้าหมายทั้งหมดของกฎประเภทนี้
analysis_test default = False
หากเป็นจริง ระบบจะถือว่ากฎนี้เป็นการทดสอบการวิเคราะห์

หมายเหตุ: กฎการทดสอบการวิเคราะห์ได้รับการกำหนดโดยใช้โครงสร้างพื้นฐานที่ระบุไว้ในไลบรารี 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
Dict of execution group name (string) to exec_groups. หากตั้งค่าไว้ จะอนุญาตให้กฎเรียกใช้การดำเนินการในแพลตฟอร์มการเรียกใช้หลายแพลตฟอร์มภายในเป้าหมายเดียว ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับกลุ่มการดำเนินการ
compile_one_filetype sequence of strings; or None; default = None
Used by --compile_one_dependency: if multiple rules consume the specified file, should we choose this rule over others.
name string; or None; default = None
เลิกใช้งานแล้ว พารามิเตอร์นี้เลิกใช้งานแล้วและจะถูกนำออกเร็วๆ นี้ โปรดอย่าใช้ API นี้ ระบบจะปิด เมื่อใช้ Flag --+incompatible_remove_rule_name_parameter ใช้ Flag นี้เพื่อยืนยันว่าโค้ดของคุณทำงานได้โดยไม่พึ่งพา API ที่กำลังจะถูกนำออก
เลิกใช้งานแล้ว: อย่าใช้

ชื่อของกฎนี้ตามที่ Bazel เข้าใจและรายงานในบริบทต่างๆ เช่น การบันทึก native.existing_rule(...)[kind] และ bazel query โดยปกติแล้วจะเหมือนกับตัวระบุ Starlark ที่เชื่อมโยงกับกฎนี้ เช่น กฎที่ชื่อ foo_library มักจะประกาศเป็น foo_library = rule(...) และสร้างอินสแตนซ์ในไฟล์ BUILD เป็น foo_library(...)

หากไม่ระบุพารามิเตอร์นี้ ระบบจะตั้งชื่อกฎเป็นชื่อของตัวแปรส่วนกลาง Starlark ตัวแรกที่จะผูกกับกฎนี้ภายในโมดูล .bzl ที่ประกาศ ดังนั้น foo_library = rule(...) ไม่จำเป็นต้องระบุพารามิเตอร์นี้หากชื่อเป็น foo_library

การระบุชื่อที่ชัดเจนสำหรับกฎไม่ได้เปลี่ยนตำแหน่งที่คุณได้รับอนุญาตให้สร้างอินสแตนซ์ของกฎ

เลือก

unknown select(x, no_match_error='')

select() คือฟังก์ชันตัวช่วยที่ทำให้แอตทริบิวต์กฎกำหนดค่าได้ ดูรายละเอียดได้ที่สร้างสารานุกรม

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x ต้องระบุ
พจนานุกรมที่แมปเงื่อนไขการกำหนดค่ากับค่า แต่ละคีย์คือป้ายกำกับหรือสตริงป้ายกำกับที่ระบุอินสแตนซ์ 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)

ระบุว่าการขึ้นต่อกันควรมาจากรีจิสทรี แต่ควรปักหมุดเวอร์ชันของรีจิสทรี หรือแทนที่รีจิสทรี หรือใช้รายการแพตช์ คำสั่งนี้จะมีผลในโมดูลรูทเท่านั้น กล่าวคือ หากโมดูลอื่นใช้โมดูลหนึ่งเป็นทรัพยากร Dependency ระบบจะไม่สนใจการลบล้างของโมดูลนั้น

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
module_name ต้องระบุ
ชื่อของการอ้างอิงโมดูล Bazel ที่จะใช้การลบล้างนี้
version default = ''
ลบล้างเวอร์ชันที่ประกาศของโมดูลนี้ในกราฟการอ้างอิง กล่าวคือ ระบบจะ "ปักหมุด" โมดูลนี้ไว้กับเวอร์ชันการลบล้างนี้ คุณจะละเว้นแอตทริบิวต์นี้ได้หากต้องการลบล้างเฉพาะรีจิสทรีหรือแพตช์
registry default = ''
ลบล้างรีจิสทรีสำหรับโมดูลนี้ แทนที่จะค้นหาโมดูลนี้จากรายการรีจิสทรีเริ่มต้น ควรใช้รีจิสทรีที่ระบุ
patches Iterable of strings; default = []
A list of labels pointing to patch files to apply for this module. ไฟล์แพตช์ต้องอยู่ในโครงสร้างแหล่งที่มาของโปรเจ็กต์ระดับบนสุด ระบบจะใช้การตั้งค่าตามลำดับในรายการ
patch_cmds Iterable of strings; default = []
ลำดับของคำสั่ง Bash ที่จะใช้ใน Linux/Macos หลังจากใช้แพตช์แล้ว
patch_strip default = 0
เหมือนกับอาร์กิวเมนต์ --strip ของแพตช์ Unix

จัดเรียง

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

แสดงผลรายการที่จัดเรียงใหม่ซึ่งมีองค์ประกอบทั้งหมดของลำดับที่วนซ้ำที่ระบุ ข้อผิดพลาดอาจเกิดขึ้นหากคู่ขององค์ประกอบ x, y ไม่สามารถเปรียบเทียบโดยใช้ x < y ระบบจะจัดเรียงองค์ประกอบจากน้อยไปมาก เว้นแต่ว่าอาร์กิวเมนต์ reverse เป็น 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(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 required
ออบเจ็กต์ที่จะตรวจสอบประเภท

use_extension

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

แสดงผลออบเจ็กต์พร็อกซีที่แสดงส่วนขยายโมดูล โดยสามารถเรียกใช้เมธอดของออบเจ็กต์นี้เพื่อสร้างแท็กส่วนขยายโมดูลได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
extension_bzl_file ต้องระบุ
ป้ายกำกับของไฟล์ Starlark ที่กำหนดส่วนขยายของโมดูล
extension_name ต้องระบุ
ชื่อของส่วนขยายโมดูลที่จะใช้ ไฟล์ Starlark ต้องส่งออกสัญลักษณ์ที่มีชื่อนี้
dev_dependency default = False
หากเป็นจริง ระบบจะไม่สนใจการใช้งานส่วนขยายโมดูลนี้หากโมดูลปัจจุบันไม่ใช่โมดูลรูทหรือเปิดใช้ `--ignore_dev_dependency`
isolate default = False
เวอร์ชันทดลอง พารามิเตอร์นี้อยู่ในขั้นทดลองและอาจมีการเปลี่ยนแปลงได้ทุกเมื่อ โปรดอย่าใช้ API นี้ คุณอาจเปิดใช้ได้ในระดับทดลองโดยการตั้งค่า ---experimental_isolated_extension_usages
หากเป็นจริง การใช้งานส่วนขยายโมดูลนี้จะแยกจากการใช้งานอื่นๆ ทั้งหมด ทั้งในโมดูลนี้และโมดูลอื่นๆ แท็กที่สร้างขึ้นสำหรับการใช้งานนี้จะไม่ส่งผลต่อการใช้งานอื่นๆ และที่เก็บที่ส่วนขยายสร้างขึ้นสำหรับการใช้งานนี้จะแตกต่างจากที่เก็บอื่นๆ ทั้งหมดที่ส่วนขยายสร้างขึ้น

ปัจจุบันพารามิเตอร์นี้อยู่ในเวอร์ชันทดลองและใช้ได้กับแฟล็ก --experimental_isolated_extension_usages เท่านั้น

use_repo

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

นำเข้าที่เก็บอย่างน้อย 1 รายการที่สร้างโดยส่วนขยายโมดูลที่ระบุลงในขอบเขตของโมดูลปัจจุบัน

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
extension_proxy required
ออบเจ็กต์พร็อกซีส่วนขยายโมดูลที่เรียกใช้โดยการเรียก use_extension
args ต้องระบุ
ชื่อของที่เก็บที่จะนำเข้า
kwargs required
ระบุที่เก็บบางรายการที่จะนำเข้าไปยังขอบเขตของโมดูลปัจจุบันด้วยชื่อที่แตกต่างกัน คีย์ควรเป็นชื่อที่จะใช้ในขอบเขตปัจจุบัน ส่วนค่าควรเป็นชื่อเดิมที่ส่งออกจากส่วนขยายโมดูล

การเปิดเผย

None visibility(value)

ตั้งค่าระดับการเข้าถึงการโหลดของโมดูล .bzl ที่กำลังเริ่มต้น

ระดับการเข้าถึงการโหลดของโมดูลจะควบคุมว่าไฟล์ BUILD และ .bzl อื่นๆ จะโหลดโมดูลนั้นได้หรือไม่ (ซึ่งแตกต่างจากระดับการเข้าถึงเป้าหมายของไฟล์ต้นฉบับ .bzl พื้นฐาน ซึ่งควบคุมว่าไฟล์จะปรากฏเป็นทรัพยากร Dependency ของเป้าหมายอื่นๆ ได้หรือไม่) การโหลดการมองเห็นจะทำงานที่ระดับแพ็กเกจ กล่าวคือ หากต้องการโหลดโมดูล ไฟล์ที่ทำการโหลดจะต้องอยู่ในแพ็กเกจที่ได้รับสิทธิ์การมองเห็นโมดูล ระบบจะโหลดโมดูลภายในแพ็กเกจของโมดูลเองได้เสมอ ไม่ว่าการแสดงผลจะเป็นอย่างไรก็ตาม

visibility() จะเรียกได้เพียงครั้งเดียวต่อไฟล์ .bzl และที่ระดับบนสุดเท่านั้น ไม่ใช่ภายในฟังก์ชัน รูปแบบที่แนะนำคือการวางการเรียกนี้ไว้ใต้คำสั่ง load() ทันที และวางตรรกะสั้นๆ ที่จำเป็นต่อการกำหนดอาร์กิวเมนต์

หากตั้งค่า Flag --check_bzl_visibility เป็น "เท็จ" การละเมิดระดับการมองเห็นการโหลดจะแสดงคำเตือนแต่จะไม่ทำให้บิลด์ล้มเหลว

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
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') ไฟล์ที่เรียกใช้จะพร้อมใช้งานใน mytarget.runfiles/baz/foo/bar หากไม่ได้ระบุชื่อพื้นที่ทำงาน ระบบจะสร้างลิงก์สัญลักษณ์ของไฟล์ที่เรียกใช้ไปยัง bar.runfiles/foo/bar

ชื่อกฎที่เก็บข้อมูลระยะไกลต้องเป็นชื่อพื้นที่ทำงานที่ถูกต้อง เช่น คุณอาจมี maven_jar(name = 'foo') แต่ไม่มี maven_jar(name = 'foo%bar') เนื่องจาก Bazel จะพยายามเขียนไฟล์ WORKSPACE สำหรับ maven_jar ที่มี workspace(name = 'foo%bar')

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
name required
ชื่อของพื้นที่ทำงาน ชื่อต้องขึ้นต้นด้วยตัวอักษรและมีได้เฉพาะตัวอักษร ตัวเลข ขีดล่าง ขีดกลาง และจุดเท่านั้น

zip

list zip(*args)

แสดงผลlistของtuple โดยที่ทูเพิลที่ i มีองค์ประกอบที่ i จากแต่ละลำดับหรืออาร์เรย์ที่ส่งผ่านเป็นอาร์กิวเมนต์ รายการจะมีขนาดเท่ากับอินพุตที่สั้นที่สุด หากมีอาร์กิวเมนต์ที่วนซ้ำได้เพียงรายการเดียว ฟังก์ชันจะแสดงผลรายการของ 1-tuple หากไม่มีอาร์กิวเมนต์ ฟังก์ชันจะแสดงผลรายการว่าง ตัวอย่าง
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 ต้อง
ระบุรายการที่จะบีบอัดเป็น ZIP