ทั่วโลก

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

สมาชิก

ทั้งหมด

bool all(elements)

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

พารามิเตอร์

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

analysis_test_transition

transition analysis_test_transition(settings)

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

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

พารามิเตอร์

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

ใดๆ

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)

ระบุว่าทรัพยากร Dependency นี้ควรมาจากไฟล์ที่เก็บถาวร (zip, gzip ฯลฯ) ในตำแหน่งที่เจาะจง ไม่ใช่จากรีจิสทรี คำสั่งนี้ใช้ได้เฉพาะโดยโมดูลรูทเท่านั้น กล่าวคือ หากโมดูลระบุการลบล้างใดๆ ผู้อื่นจะใช้เป็นทรัพยากร Dependency ไม่ได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
module_name ต้องระบุ
ชื่อของโมดูล Bazel ที่จะนำการลบล้างนี้ไปใช้
urls string; or Iterable of strings; ต้องระบุ
URL ของที่เก็บถาวร อาจเป็น http(s):// หรือ URL file://
integrity ค่าเริ่มต้น = ''
checksum ของไฟล์ที่เก็บถาวรในรูปแบบ Subresource Integrity
strip_prefix ค่าเริ่มต้น = ''
คำนำหน้าไดเรกทอรีที่จะตัดออกจากไฟล์ที่แยก
patches Iterable of strings; ค่าเริ่มต้น = []
รายการป้ายกำกับที่ชี้ไปยังไฟล์แพตช์ที่จะใช้สำหรับโมดูลนี้ ไฟล์แพตช์ต้องอยู่ในโครงสร้างแหล่งที่มาของโปรเจ็กต์ระดับบนสุด ซึ่งจะใช้ตามลำดับรายการ
patch_cmds Iterable of strings; ค่าเริ่มต้น = []
ลำดับของคำสั่ง Bash ที่จะใช้กับ Linux/Macos หลังจากใช้แพตช์
patch_strip ค่าเริ่มต้น = 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)

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation ต้องระบุ
ฟังก์ชัน Starlark ที่ใช้ลักษณะนี้ โดยมีพารามิเตอร์ 2 ตัว ได้แก่ กำหนดเป้าหมาย (เป้าหมายที่ใช้ลักษณะนี้) และ ctx (บริบทของกฎที่ใช้สร้างเป้าหมาย) แอตทริบิวต์ของเป้าหมายจะแสดงผ่านช่อง ctx.rule ฟังก์ชันนี้จะได้รับการประเมินในช่วงการวิเคราะห์สำหรับการใช้งานแต่ละครั้งกับเป้าหมาย
attr_aspects sequence of strings; ค่าเริ่มต้น = []
รายการชื่อแอตทริบิวต์ ส่วนจะแผ่กระจายไปตามทรัพยากร Dependency ที่ระบุในแอตทริบิวต์ของเป้าหมายที่มีชื่อเหล่านี้ ค่าทั่วไปในที่นี้ได้แก่ deps และ exports รายการนี้อาจมีสตริงเดียว "*" เพื่อกระจายไปยังทรัพยากร Dependency ทั้งหมดของเป้าหมายด้วย
attrs dict; or None; ค่าเริ่มต้น = ไม่มี
พจนานุกรมที่ประกาศแอตทริบิวต์ทั้งหมดของลักษณะ โดยจะแมปจากชื่อแอตทริบิวต์กับออบเจ็กต์แอตทริบิวต์ เช่น "attr.label" หรือ "attr.string" (ดูโมดูล attr) แอตทริบิวต์ Aspect พร้อมใช้งานสําหรับฟังก์ชันการใช้งานเป็นช่องของพารามิเตอร์ ctx

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

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

required_providers ค่าเริ่มต้น = []
แอตทริบิวต์นี้ช่วยให้ลักษณะจำกัดการนำไปใช้งานเฉพาะกับเป้าหมายที่มีกฎที่โฆษณาผู้ให้บริการที่จำเป็นเท่านั้น ค่าต้องเป็นรายการที่มีผู้ให้บริการแต่ละรายหรือรายชื่อผู้ให้บริการอย่างใดอย่างหนึ่ง ไม่ใช่ทั้ง 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 ค่าเริ่มต้น = []
แอตทริบิวต์นี้ช่วยให้ลักษณะนี้ตรวจสอบด้านอื่นๆ ได้ ค่าต้องเป็นรายการที่มีผู้ให้บริการแต่ละรายหรือรายชื่อผู้ให้บริการอย่างใดอย่างหนึ่ง ไม่ใช่ทั้ง 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 ค่าเริ่มต้น = []
รายชื่อผู้ให้บริการที่ฟังก์ชันการใช้งานต้องแสดง

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

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

requires sequence of Aspects; ค่าเริ่มต้น = []
รายการด้านที่ต้องเผยแพร่ก่อนด้านนี้
fragments sequence of strings; ค่าเริ่มต้น = []
รายการของชื่อของส่วนย่อยการกำหนดค่าที่ด้านต้องการในการกำหนดค่าเป้าหมาย
host_fragments sequence of strings; ค่าเริ่มต้น = []
รายการของชื่อของส่วนย่อยการกำหนดค่าที่ด้านต้องการในการกำหนดค่าโฮสต์
toolchains sequence; ค่าเริ่มต้น = []
หากมีการตั้งค่า ชุดของ Toolchain ที่กฎนี้ต้องใช้ รายการอาจมีออบเจ็กต์ String, Label หรือ StarlarkToolchainTypeApi ผสมผสานกันอย่างไรก็ได้ คุณจะพบเครื่องมือเชนได้โดยการตรวจสอบแพลตฟอร์มปัจจุบัน และมอบให้กับการใช้งานกฎผ่าน ctx.toolchain
incompatible_use_toolchain_transition ค่าเริ่มต้น = เท็จ
เลิกใช้งานแล้ว เลิกใช้งานไปแล้วและควรนำออก
doc ค่าเริ่มต้น = ''
คำอธิบายของด้านที่ดึงมาได้ด้วยเครื่องมือสร้างเอกสาร
apply_to_generating_rules ค่าเริ่มต้น = เท็จ
หากเป็น "จริง" ระบบจะใช้ลักษณะดังกล่าวกับกฎการสร้างของไฟล์เอาต์พุตแทนเมื่อใช้กับไฟล์เอาต์พุต

ตัวอย่างเช่น สมมติว่าลักษณะกระจายผ่านแอตทริบิวต์ "deps" และถูกนำไปใช้กับเป้าหมาย "alpha" สมมติว่า "alpha" มี "deps = [":beta_output"]" โดยที่ "beta_output" คือเอาต์พุตที่ประกาศของเป้าหมาย "beta" สมมติว่า "เบต้า" มีเป้าหมายเป็น "ชาร์ลี" เป็นหนึ่งใน "deps" หากเป็น "apply_to_generating_rules=True" สำหรับด้านนี้ มุมมองจะเผยแพร่ผ่าน "อัลฟา" "เบต้า" และ "ชาร์ลี" หากเป็น "เท็จ" มุมมองจะเผยแพร่ไปที่ "อัลฟ่า" เท่านั้น

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

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

bazel_dep

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

ประกาศทรัพยากร Dependency โดยตรงในโมดูล Bazel อื่น

พารามิเตอร์

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

เชื่อมโยง

None bind(name, actual=None)

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

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

พารามิเตอร์

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

บูลีน

bool bool(x=False)

ตัวสร้างสำหรับประเภทบูลีน โดยจะแสดงผล False หากออบเจ็กต์คือ None, False, สตริงว่าง (""), หมายเลข 0 หรือคอลเล็กชันที่ว่างเปล่า (เช่น (), []) มิเช่นนั้น จะแสดงผล True

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x ค่าเริ่มต้น = เท็จ
ตัวแปรที่ต้องการแปลง

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)

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

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

เนื่องจากมีการใช้ชุดตามแฮชเพื่อกำจัดรายการที่ซ้ำระหว่างการทำซ้ำ องค์ประกอบทั้งหมดของ Depset จึงควรแฮชได้ อย่างไรก็ตาม ค่าแปรปรวนนี้ยังไม่ได้รับการตรวจสอบอย่างสอดคล้องกันในตัวสร้างทั้งหมดในขณะนี้ ใช้แฟล็ก --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; ค่าเริ่มต้น = ไม่มี
รายการเอลิเมนต์โดยตรงของช่วง
order ค่าเริ่มต้น = "ค่าเริ่มต้น"
กลยุทธ์การส่งผ่านสำหรับ Depset ใหม่ ดูค่าที่เป็นไปได้ที่นี่
transitive sequence of depsets; or None; ค่าเริ่มต้น = ไม่มี
รายการ Depset ที่มีเอลิเมนต์ที่จะกลายเป็นองค์ประกอบโดยอ้อมของ Depset

ดิด

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

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

พารามิเตอร์

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

dir

list dir(x)

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

พารามิเตอร์

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

แจกแจง

list enumerate(list, start=0)

แสดงรายการคู่ (Tuple 2 องค์ประกอบ) พร้อมดัชนี (int) และรายการจากลำดับอินพุต
enumerate([24, 21, 84]) == [(0, 24), (1, 21), (2, 84)]

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
list ต้องระบุ
ลำดับการป้อนข้อมูล
start ค่าเริ่มต้น = 0
ดัชนีเริ่มต้น

exec_group

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

สร้างกลุ่มการดำเนินการที่ใช้สร้างการดำเนินการสำหรับแพลตฟอร์มการดำเนินการที่เจาะจงระหว่างการใช้กฎได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
toolchains sequence; ค่าเริ่มต้น = []
ชุด Toolchains ที่กลุ่มการดำเนินการนี้ต้องใช้ รายการอาจมีออบเจ็กต์ String, Label หรือ StarlarkToolchainTypeApi ผสมผสานกันอย่างไรก็ได้
exec_compatible_with sequence of strings; ค่าเริ่มต้น = []
รายการข้อจำกัดในแพลตฟอร์มการดำเนินการ
copy_from_rule ค่าเริ่มต้น = เท็จ
หากตั้งค่าเป็น "จริง" กลุ่มผู้บริหารนี้จะรับค่า Toolchain และข้อจำกัดของกฎที่กลุ่มนี้แนบอยู่ หากตั้งค่าเป็นสตริงอื่น ระบบจะแสดงข้อผิดพลาด

ล้มเหลว

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

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

พารามิเตอร์

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

จำนวนลอยตัว

float float(x=unbound)

แสดง x เป็นค่าจำนวนลอยตัว
  • หาก x เป็นแบบลอยอยู่แล้ว float จะแสดงผลเป็นค่าที่ไม่เปลี่ยนแปลง
  • หาก x เป็นบูลีน float จะแสดงผล 1.0 สำหรับ "จริง" และ 0.0 สำหรับ "เท็จ"
  • หาก x เป็น Int ฟังก์ชัน float จะแสดงผลค่าจุดลอยตัวแบบจำกัดที่ใกล้ที่สุดเป็น x หรือจะแสดงผลข้อผิดพลาดหากขนาดมีขนาดใหญ่เกินไป
  • หาก x เป็นสตริง สตริงดังกล่าวจะต้องเป็นลิเทอรัลจุดลอยตัวที่ถูกต้อง หรือเท่ากับ (ไม่คำนึงถึงตัวพิมพ์ใหญ่/เล็ก) กับ NaN, Inf หรือ Infinity โดยจะนำหน้าด้วยสัญลักษณ์ + หรือ - หรือไม่ก็ได้
ค่าอื่นๆ จะทำให้เกิดข้อผิดพลาด หากไม่มีอาร์กิวเมนต์ float() จะแสดงผล 0.0

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x ค่าเริ่มต้น = ไม่เชื่อมโยง
ค่าที่จะแปลง

getattr

unknown getattr(x, name, default=unbound)

แสดงผลช่อง Struct ของชื่อที่ระบุ หากมี หากไม่ตรง ระบบจะแสดง default (หากระบุ) หรือทำให้เกิดข้อผิดพลาด getattr(x, "foobar") มีค่าเท่ากับ x.foobar
getattr(ctx.attr, "myattr")
getattr(ctx.attr, "myattr", "mydefault")

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x ต้องระบุ
โครงสร้างที่มีการเข้าถึงแอตทริบิวต์
name ต้องระบุ
ชื่อของแอตทริบิวต์โครงสร้าง
default ค่าเริ่มต้น = ไม่เชื่อมโยง
ค่าเริ่มต้นที่จะแสดงผลในกรณีที่โครงสร้างไม่มีแอตทริบิวต์ของชื่อที่ระบุ

git_override

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

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

พารามิเตอร์

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

hasattr

bool hasattr(x, name)

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

Len

int len(x)

แสดงผลความยาวของสตริง ลำดับ (เช่น รายการหรือ Tuple) dict หรืออื่นๆ ที่ทำซ้ำได้

พารามิเตอร์

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

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 ค่าเริ่มต้น = []
ออบเจ็กต์ที่จะแปลง

local_path_override

None local_path_override(module_name, path)

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

พารามิเตอร์

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

สูงสุด

unknown max(*args)

แสดงผลอาร์กิวเมนต์ที่ใหญ่ที่สุดของอาร์กิวเมนต์ทั้งหมดที่ระบุ หากระบุอาร์กิวเมนต์เพียง 1 รายการ อาร์กิวเมนต์นั้นต้องไม่ว่างเปล่า โดยเป็นข้อผิดพลาดหากองค์ประกอบไม่สามารถเปรียบเทียบได้ (เช่น int กับสตริง) หรือไม่ได้ระบุอาร์กิวเมนต์
max(2, 5, 4) == 5
max([5, 6, 3]) == 6

พารามิเตอร์

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

นาที

unknown min(*args)

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
name ค่าเริ่มต้น = ''
ชื่อของโมดูล สามารถละไว้ได้เฉพาะในกรณีที่โมดูลนี้เป็นโมดูลราก (เช่น ในกรณีของโมดูลอื่นจะไม่ขึ้นกับโมดูลอื่น) ชื่อโมดูลที่ถูกต้องต้องมีลักษณะดังนี้ 1) มีแต่ตัวอักษรพิมพ์เล็ก (a-z) ตัวเลข (0-9) จุด (.) ขีดกลาง (-) และขีดล่าง (_); 2) เริ่มต้นด้วยตัวอักษรพิมพ์เล็ก 3) ลงท้ายด้วยตัวอักษรพิมพ์เล็กหรือตัวเลข
version ค่าเริ่มต้น = ''
เวอร์ชันของโมดูล สามารถละไว้ได้เฉพาะในกรณีที่โมดูลนี้เป็นโมดูลราก (เช่น ในกรณีของโมดูลอื่นจะไม่ขึ้นกับโมดูลอื่น)
compatibility_level ค่าเริ่มต้น = 0
ระดับความเข้ากันได้ของโมดูล ควรเปลี่ยนข้อความนี้ทุกครั้งที่มีการทำการเปลี่ยนแปลงที่สำคัญซึ่งไม่สามารถทำงานร่วมกันได้ นี่คือ "เวอร์ชันหลัก" ของโมดูลในรูปของ SemVer เว้นแต่ว่า โมดูลดังกล่าวไม่ได้ฝังอยู่ในสตริงเวอร์ชัน แต่มีอยู่ในช่องแยกต่างหาก โมดูลที่มีระดับความเข้ากันได้แตกต่างกันจะมีส่วนร่วมในการแปลงเวอร์ชันเสมือนเป็นโมดูลที่ใช้ชื่อต่างกัน แต่กราฟทรัพยากร Dependency ไม่สามารถมีโมดูลหลายรายการที่มีชื่อเดียวกันแต่มีระดับความเข้ากันได้ต่างกัน (เว้นแต่ว่า multiple_version_override จะมีผล ดูรายละเอียดเพิ่มเติม)
repo_name ค่าเริ่มต้น = ''
ชื่อของที่เก็บที่แสดงถึงโมดูลนี้ ตามที่เห็นโดยโมดูลนั้นเอง โดยค่าเริ่มต้น ชื่อของที่เก็บจะเป็นชื่อของโมดูล คุณสามารถระบุเพื่อลดความซับซ้อนในการย้ายข้อมูลสำหรับโปรเจ็กต์ที่ใช้ชื่อที่เก็บของตัวเองซึ่งต่างจากชื่อโมดูล
bazel_compatibility Iterable of strings; ค่าเริ่มต้น = []
รายการเวอร์ชันของ Bazel ที่อนุญาตให้ผู้ใช้ประกาศว่าเวอร์ชัน Bazel ใดที่เข้ากันได้กับโมดูลนี้ การดำเนินการนี้จะไม่ส่งผลต่อความละเอียดของทรัพยากร Dependency แต่ 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='')

สร้างส่วนขยายโมดูลใหม่ จัดเก็บไว้ในค่าส่วนกลางเพื่อให้ส่งออกและใช้ในไฟล์ MODULE.bazel ได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation ต้องระบุ
ฟังก์ชันที่ใช้ส่วนขยายโมดูลนี้ ต้องใช้พารามิเตอร์เดียว module_ctx จะมีการเรียกใช้ฟังก์ชันครั้งเดียวเมื่อเริ่มต้นบิลด์เพื่อระบุชุดที่เก็บที่มีอยู่
tag_classes default = {}
พจนานุกรมเพื่อประกาศคลาสของแท็กทั้งหมดที่ส่วนขยายใช้ โดยจะแมปจากชื่อคลาสแท็กกับออบเจ็กต์ tag_class
doc ค่าเริ่มต้น = ''
คำอธิบายของส่วนขยายโมดูลที่ดึงมาได้ด้วยเครื่องมือสร้างเอกสาร

multiple_version_override

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

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

พารามิเตอร์

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

พิมพ์

None print(sep=" ", *args)

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

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

พารามิเตอร์

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

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 จะแสดงผล Tuple ที่มี 2 องค์ประกอบ ได้แก่ ค่าที่เรียกใช้ได้ Provider และค่าที่เรียกใช้ได้ของ raw Constructor โปรดดูรายละเอียดที่หัวข้อกฎ (การเริ่มต้นที่กำหนดเองของผู้ให้บริการที่กำหนดเอง) และการสนทนาเกี่ยวกับพารามิเตอร์ init ด้านล่าง

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
doc ค่าเริ่มต้น = ''
รายละเอียดของผู้ให้บริการที่ดึงข้อมูลได้ด้วยเครื่องมือสร้างเอกสาร
fields sequence of strings; or dict; or None; ค่าเริ่มต้น = ไม่มี
หากระบุ จะจำกัดชุดของช่องที่อนุญาต
ค่าที่เป็นไปได้มีดังนี้
  • รายการฟิลด์:
    provider(fields = ['a', 'b'])

  • ชื่อฟิลด์ในพจนานุกรม -> เอกสารประกอบ:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
ไม่จำเป็นต้องกรอกข้อมูลครบทุกช่อง
init callable; or None; ค่าเริ่มต้น = ไม่มี
การเรียกกลับแบบไม่บังคับสำหรับการประมวลผลล่วงหน้าและตรวจสอบค่าในช่องของผู้ให้บริการระหว่างการสร้างอินสแตนซ์ หากระบุ init แล้ว provider() จะแสดงผล Tuple ที่มี 2 องค์ประกอบ ได้แก่ สัญลักษณ์ผู้ให้บริการปกติและตัวสร้าง RAW

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

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

  • หาก args ไม่ใช่ค่าว่าง แสดงว่ามีข้อผิดพลาดเกิดขึ้น
  • หากระบุพารามิเตอร์ fields เมื่อมีการเรียก provider() และหาก kwargs มีคีย์ที่ไม่ได้ระบุไว้ใน fields ก็จะเกิดข้อผิดพลาดขึ้น
  • มิฉะนั้น c จะแสดงผลอินสแตนซ์ใหม่ที่มีฟิลด์ชื่อ k ที่มีค่า v สำหรับรายการ k: v แต่ละรายการใน kwargs
ในกรณีที่ไม่ได้ระบุ Callback init การเรียกสัญลักษณ์ 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 จะทำให้การสร้างผู้ให้บริการปกติกลายเป็นแบบทั่วไปโดยอนุญาตให้มีอาร์กิวเมนต์ตามตำแหน่งและตรรกะที่กำหนดเองสำหรับการประมวลผลและการตรวจสอบล่วงหน้า และไม่ได้เปิดใช้การหลบเลี่ยงรายการ fields ที่อนุญาต

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

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

พารามิเตอร์

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

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 ค่าเริ่มต้น = เท็จ
หากเป็นจริง ระบบจะไม่ลงทะเบียน Toolchain หากโมดูลปัจจุบันไม่ใช่โมดูลรูทหรือเปิดใช้ "--ignore_dev_dependency"
toolchain_labels sequence of strings; ต้องระบุ
ป้ายกำกับของ Toolchain ที่จะจดทะเบียน

Datastore_rule(ใช้งาน, attrs, ในเครื่อง, environ, กำหนดค่า, remotable, doc)

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

สร้างกฎที่เก็บใหม่ จัดเก็บไว้ในค่าส่วนกลางเพื่อให้โหลดและเรียกใช้งานจากไฟล์ WORKSPACE ได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation ต้องระบุ
ฟังก์ชันที่ใช้กฎนี้ ต้องมีพารามิเตอร์เดียว repository_ctx จะมีการเรียกฟังก์ชันนี้ในช่วงการโหลดสำหรับกฎแต่ละรายการ
attrs dict; or None; ค่าเริ่มต้น = ไม่มี
สำหรับประกาศแอตทริบิวต์ทั้งหมดของกฎ โดยจะแมปจากชื่อแอตทริบิวต์กับออบเจ็กต์แอตทริบิวต์ (ดูโมดูล attr) แอตทริบิวต์ที่ขึ้นต้นด้วย _ เป็นแบบส่วนตัวและใช้เพื่อเพิ่มทรัพยากร Dependency โดยนัยไปยังป้ายกำกับไปยังไฟล์ได้ (กฎที่เก็บต้องไม่อ้างอิงอาร์ติแฟกต์ที่สร้างขึ้น) มีการเพิ่มแอตทริบิวต์ name โดยปริยายและต้องไม่ระบุไว้
local ค่าเริ่มต้น = เท็จ
ระบุว่ากฎนี้ดึงข้อมูลทุกอย่างจากระบบภายในและควรมีการประเมินอีกครั้งทุกครั้งที่ดึงข้อมูล
environ sequence of strings; ค่าเริ่มต้น = []
แสดงรายการตัวแปรสภาพแวดล้อมที่กฎที่เก็บนี้อ้างอิงอยู่ หากตัวแปรสภาพแวดล้อมในรายการนั้นมีการเปลี่ยนแปลง ระบบจะดึงข้อมูลที่เก็บอีกครั้ง
configure ค่าเริ่มต้น = เท็จ
ระบุว่าที่เก็บจะตรวจสอบระบบเพื่อวัตถุประสงค์ในการกำหนดค่า
remotable ค่าเริ่มต้น = เท็จ
ทดลอง พารามิเตอร์นี้อยู่ในขั้นทดลองและอาจเปลี่ยนแปลงได้ตลอดเวลา โปรดอย่าพึ่งพา ซึ่งอาจเปิดใช้ในการทดสอบโดยการตั้งค่า ---experimental_repo_remote_exec
ใช้งานได้กับการดำเนินการจากระยะไกล
doc ค่าเริ่มต้น = ''
คำอธิบายของกฎที่เก็บที่สามารถดึงข้อมูลโดยเครื่องมือการสร้างเอกสาร

Datastore_rule(ใช้งาน, attrs, ในเครื่อง, environ, กำหนดค่า, remotable, doc)

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

สร้างกฎที่เก็บใหม่ จัดเก็บไว้ในค่าส่วนกลางเพื่อให้โหลดและเรียกใช้งานจากไฟล์ WORKSPACE ได้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation ต้องระบุ
ฟังก์ชันที่ใช้กฎนี้ ต้องมีพารามิเตอร์เดียว repository_ctx จะมีการเรียกฟังก์ชันนี้ในช่วงการโหลดสำหรับกฎแต่ละรายการ
attrs dict; or None; ค่าเริ่มต้น = ไม่มี
สำหรับประกาศแอตทริบิวต์ทั้งหมดของกฎ โดยจะแมปจากชื่อแอตทริบิวต์กับออบเจ็กต์แอตทริบิวต์ (ดูโมดูล attr) แอตทริบิวต์ที่ขึ้นต้นด้วย _ เป็นแบบส่วนตัวและใช้เพื่อเพิ่มทรัพยากร Dependency โดยนัยไปยังป้ายกำกับไปยังไฟล์ได้ (กฎที่เก็บต้องไม่อ้างอิงอาร์ติแฟกต์ที่สร้างขึ้น) มีการเพิ่มแอตทริบิวต์ name โดยปริยายและต้องไม่ระบุไว้
local ค่าเริ่มต้น = เท็จ
ระบุว่ากฎนี้ดึงข้อมูลทุกอย่างจากระบบภายในและควรมีการประเมินอีกครั้งทุกครั้งที่ดึงข้อมูล
environ sequence of strings; ค่าเริ่มต้น = []
แสดงรายการตัวแปรสภาพแวดล้อมที่กฎที่เก็บนี้อ้างอิงอยู่ หากตัวแปรสภาพแวดล้อมในรายการนั้นมีการเปลี่ยนแปลง ระบบจะดึงข้อมูลที่เก็บอีกครั้ง
configure ค่าเริ่มต้น = เท็จ
ระบุว่าที่เก็บจะตรวจสอบระบบเพื่อวัตถุประสงค์ในการกำหนดค่า
remotable ค่าเริ่มต้น = เท็จ
ทดลอง พารามิเตอร์นี้อยู่ในขั้นทดลองและอาจเปลี่ยนแปลงได้ตลอดเวลา โปรดอย่าพึ่งพา ซึ่งอาจเปิดใช้ในการทดสอบโดยการตั้งค่า ---experimental_repo_remote_exec
ใช้งานได้กับการดำเนินการจากระยะไกล
doc ค่าเริ่มต้น = ''
คำอธิบายของกฎที่เก็บที่สามารถดึงข้อมูลโดยเครื่องมือการสร้างเอกสาร

ตัวแทน

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 ค่าเริ่มต้น = เท็จ
กฎนี้เป็นกฎทดสอบหรือไม่ กล่าวคือ อาจเป็นหัวเรื่องของคำสั่ง blaze test หรือไม่ กฎการทดสอบทั้งหมดจะถือว่าเป็นปฏิบัติการโดยอัตโนมัติ ก็ไม่จำเป็น (และไม่สนับสนุน) ที่จะต้องตั้งค่า executable = True สำหรับกฎทดสอบอย่างชัดแจ้ง ดูข้อมูลเพิ่มเติมได้ที่ หน้ากฎ
attrs dict; or None; ค่าเริ่มต้น = ไม่มี
สำหรับประกาศแอตทริบิวต์ทั้งหมดของกฎ โดยจะแมปจากชื่อแอตทริบิวต์กับออบเจ็กต์แอตทริบิวต์ (ดูโมดูล attr) แอตทริบิวต์ที่ขึ้นต้นด้วย _ เป็นแบบส่วนตัว และใช้เพื่อเพิ่มการขึ้นต่อกันโดยนัยในป้ายกำกับได้ มีการเพิ่มแอตทริบิวต์ name โดยปริยายและต้องไม่ระบุไว้ ระบบจะเพิ่มแอตทริบิวต์ visibility, deprecation, tags, testonly และ features โดยปริยายและลบล้างไม่ได้ กฎส่วนใหญ่ต้องการแอตทริบิวต์เพียงไม่กี่อย่าง หากต้องการจำกัดการใช้งานหน่วยความจำ ฟังก์ชันของกฎจะกำหนดขีดจำกัดขนาดของแอตทริบิวต์
outputs dict; or None; or function; ค่าเริ่มต้น = ไม่มี
เลิกใช้งาน พารามิเตอร์นี้เลิกใช้งานแล้วและจะนำออกเร็วๆ นี้ โปรดอย่าพึ่งพา ถูกปิดใช้ด้วย ---incompatible_no_rule_outputs_param ใช้ธงนี้เพื่อยืนยันว่าโค้ดของคุณเข้ากันได้กับการนำออกในเร็วๆ นี้
เลิกใช้งานพารามิเตอร์นี้แล้ว โปรดย้ายข้อมูลกฎเพื่อใช้ OutputGroupInfo หรือ attr.output แทน

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

ค่าของอาร์กิวเมนต์นี้คือพจนานุกรมหรือฟังก์ชัน Callback ที่สร้างพจนานุกรม การเรียกกลับทำงานคล้ายกับแอตทริบิวต์ทรัพยากร Dependency ที่คำนวณแล้ว กล่าวคือ ชื่อพารามิเตอร์ของฟังก์ชันจะมีการจับคู่กับแอตทริบิวต์ของกฎ เช่น หากคุณส่ง 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" ชื่อไดเรกทอรีคือ a และชื่อฐานคือ b.c

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

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

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

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

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

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

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

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

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

  • เป้าหมายของกฎนี้ถูกจำกัดในจำนวนทรัพยากร Dependency แบบทรานซิทีฟที่อาจมี
  • กฎนี้ถือเป็นกฎทดสอบ (เหมือนกับว่ามีการตั้ง test=True) มีผลแทนค่าของ test
  • ฟังก์ชันการใช้งานกฎอาจไม่ลงทะเบียนการดำเนินการ แต่จะต้องลงทะเบียนผลผ่าน/ไม่ผ่านผ่านการระบุ AnalysisTestResultInfo
build_setting BuildSetting; or None; ค่าเริ่มต้น = ไม่มี
หากตั้งค่าไว้ ให้อธิบายประเภทของbuild settingกฎนี้ ดูโมดูล config หากตั้งค่าไว้ แอตทริบิวต์ที่จำเป็นซึ่งมีชื่อว่า "build_setting_default" จะเพิ่มในกฎนี้โดยอัตโนมัติ โดยมีประเภทที่สอดคล้องกับค่าที่ป้อนที่นี่
cfg ค่าเริ่มต้น = ไม่มี
หากตั้งค่าไว้ จะชี้ไปยังการเปลี่ยนการกำหนดค่าที่กฎจะมีผลกับการกำหนดค่าของตนเองก่อนการวิเคราะห์
exec_groups dict; or None; ค่าเริ่มต้น = ไม่มี
คำสั่งของชื่อกลุ่มการดำเนินการ (สตริง) ถึง exec_groups หากตั้งค่าไว้ จะอนุญาตให้กฎเรียกใช้การดำเนินการในแพลตฟอร์มการดำเนินการหลายแพลตฟอร์มภายในเป้าหมายเดียว ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของกลุ่มการดำเนินการ
compile_one_filetype sequence of strings; or None; ค่าเริ่มต้น = ไม่มี
ใช้โดย --compile_one_dependency: หากมีกฎหลายข้อที่ใช้ไฟล์ที่ระบุ เราควรจะเลือกกฎนี้มากกว่ากฎอื่นๆ
name string; or 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_library = rule(...) จึงไม่ต้องระบุพารามิเตอร์นี้หากชื่อคือ foo_library

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

เลือก

unknown select(x, no_match_error='')

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x ต้องระบุ
คำสั่งที่แมปเงื่อนไขการกำหนดค่ากับค่า แต่ละคีย์คือ Label หรือสตริงป้ายกํากับที่ระบุอินสแตนซ์ config_setting หรือrestrict_value ดูเอกสารประกอบเกี่ยวกับมาโครเพื่อดูว่าเมื่อใดควรใช้ป้ายกำกับแทนสตริง
no_match_error ค่าเริ่มต้น = ''
ข้อผิดพลาดที่กำหนดเองที่ไม่บังคับที่จะรายงานหากไม่มีเงื่อนไขที่ตรงกัน

single_version_override

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
module_name ต้องระบุ
ชื่อของโมดูล Bazel ที่จะนำการลบล้างนี้ไปใช้
version ค่าเริ่มต้น = ''
ลบล้างเวอร์ชันที่ประกาศของโมดูลนี้ในกราฟทรัพยากร Dependency กล่าวคือ โมดูลนี้จะถูก "ปักหมุด" กับเวอร์ชันการลบล้างนี้ คุณละเว้นแอตทริบิวต์นี้ได้หากทุกแอตทริบิวต์ต้องการลบล้างรีจิสทรีหรือแพตช์
registry ค่าเริ่มต้น = ''
ลบล้างรีจิสทรีสำหรับโมดูลนี้ ควรใช้รีจิสทรีที่ระบุแทนการค้นหาโมดูลนี้จากรายการรีจิสทรีเริ่มต้น
patches Iterable of strings; ค่าเริ่มต้น = []
รายการป้ายกำกับที่ชี้ไปยังไฟล์แพตช์ที่จะใช้สำหรับโมดูลนี้ ไฟล์แพตช์ต้องอยู่ในโครงสร้างแหล่งที่มาของโปรเจ็กต์ระดับบนสุด ซึ่งจะใช้ตามลำดับรายการ
patch_cmds Iterable of strings; ค่าเริ่มต้น = []
ลำดับของคำสั่ง Bash ที่จะใช้กับ Linux/Macos หลังจากใช้แพตช์
patch_strip ค่าเริ่มต้น = 0
เหมือนกับ --strip ของแพตช์ Unix

จัดเรียงแล้ว

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

แสดงรายการที่จัดเรียงใหม่ซึ่งมีองค์ประกอบทั้งหมดของลำดับที่ทำซ้ำได้ที่ระบุ เกิดข้อผิดพลาดหากมีคู่ขององค์ประกอบ x, y ไม่สามารถเปรียบเทียบโดยใช้ x < ป. ระบบจะจัดเรียงองค์ประกอบตามลำดับจากน้อยไปมาก เว้นแต่อาร์กิวเมนต์ย้อนกลับเป็น "จริง" ซึ่งในกรณีนี้ลำดับจากมากไปน้อย การจัดเรียงมีความเสถียร: องค์ประกอบที่เปรียบเทียบเท่ากันจะคงลำดับเดิมที่เกี่ยวข้องไว้
sorted([3, 5, 4]) == [3, 4, 5]

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
iterable ต้องระบุ
ลำดับที่ทำซ้ำได้เพื่อจัดเรียง
key ค่าเริ่มต้น = ไม่มี
ฟังก์ชันที่ไม่บังคับที่ใช้กับองค์ประกอบแต่ละรายการก่อนการเปรียบเทียบ
reverse ค่าเริ่มต้น = เท็จ
แสดงผลลัพธ์ในลำดับจากมากไปน้อย

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 ค่าเริ่มต้น = ''
คำอธิบายของคลาสแท็กที่ดึงมาได้ด้วยเครื่องมือสร้างเอกสาร

Tuple

tuple tuple(x=())

แสดงผล Tuple ที่มีองค์ประกอบเดียวกันกับค่า "ทำซ้ำ" ที่กำหนด
tuple([1, 2]) == (1, 2)
tuple((2, 3, 2)) == (2, 3, 2)
tuple({5: "a", 2: "b", 4: "c"}) == (5, 2, 4)

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x ค่าเริ่มต้น = ()
ออบเจ็กต์ที่จะแปลง

ประเภท

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)

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

พารามิเตอร์

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

use_repo

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

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

พารามิเตอร์

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

การเปิดเผย

None visibility(value)

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

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

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

หากตั้งค่าการทำเครื่องหมาย --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 ต้องระบุ
ชื่อพื้นที่ทำงาน ชื่อต้องขึ้นต้นด้วยตัวอักษรและมีได้เฉพาะตัวอักษร ตัวเลข ขีดล่าง ขีดกลาง และจุดเท่านั้น

zip

list zip(*args)

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