ไฟล์ .bzl

รายงานปัญหา

เมธอดส่วนกลางที่มีอยู่ในไฟล์ .bzl ทั้งหมด

สมาชิก

analysis_test_transition

transition analysis_test_transition(settings)

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

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

พารามิเตอร์

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

เฉพาะด้าน

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation ต้องระบุ
ฟังก์ชัน Starlark ที่นำองค์ประกอบนี้ไปใช้โดยมีพารามิเตอร์ 2 ตัว ได้แก่ เป้าหมาย (เป้าหมายที่ใช้ด้านที่ระบุ) และ ctx (บริบทของกฎที่ใช้สร้างเป้าหมาย) แอตทริบิวต์ของเป้าหมายมีให้ใช้งานผ่านช่อง ctx.rule ฟังก์ชันนี้จะได้รับการประเมินในระหว่างช่วงการวิเคราะห์สำหรับการใช้แต่ละแง่มุมกับเป้าหมาย
attr_aspects ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการชื่อแอตทริบิวต์ ลักษณะเผยแพร่ไปพร้อมกับทรัพยากร Dependency ที่ระบุในแอตทริบิวต์ของเป้าหมายที่ใช้ชื่อเหล่านี้ ค่าทั่วไปในที่นี้ได้แก่ deps และ exports นอกจากนี้ รายการนี้ยังมีสตริง "*" เดียวเพื่อเผยแพร่ในทรัพยากร Dependency ทั้งหมดของเป้าหมาย
attrs dict; ค่าเริ่มต้นคือ {}
พจนานุกรมที่ประกาศแอตทริบิวต์ทั้งหมดของการแสดงผล โดยจะจับคู่จากชื่อแอตทริบิวต์กับออบเจ็กต์แอตทริบิวต์ เช่น "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() เว้นแต่ผู้ให้บริการเดิมจะแสดงด้วยชื่อสตริงแทน เมื่อมีการใช้เป้าหมายของกฎเป็นการอ้างอิงสำหรับเป้าหมายที่ประกาศผู้ให้บริการที่จำเป็น ก็ไม่จำเป็นต้องระบุผู้ให้บริการรายนั้นที่นี่ มากพอที่ฟังก์ชันการใช้งานแสดงผล แต่ก็ถือว่าเป็นแนวทางปฏิบัติแนะนำในการระบุรหัสดังกล่าว แม้จะไม่บังคับก็ตาม แต่ช่อง required_providers ของ Aspect ระบุผู้ให้บริการไว้ที่นี่

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

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

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

exec_compatible_with ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการข้อจำกัดในแพลตฟอร์มการดำเนินการที่ใช้กับอินสแตนซ์ทั้งหมดของส่วนนี้
exec_groups dict หรือ None ค่าเริ่มต้นคือ None
คำสั่งของกลุ่มการดำเนินการ (สตริง) เป็น exec_groups หากมีการตั้งค่า จะทำให้แง่มุมต่างๆ เรียกใช้การดำเนินการบนแพลตฟอร์มการดำเนินการหลายแพลตฟอร์มได้ภายในอินสแตนซ์เดียว โปรดดูข้อมูลเพิ่มเติมในเอกสารของกลุ่มการดำเนินการ
subrules ลำดับของกฎย่อย ค่าเริ่มต้นคือ []
ทดลอง: รายการกฎย่อยที่มุมมองนี้ใช้

configuration_field

LateBoundDefault configuration_field(fragment, name)

อ้างอิงค่าเริ่มต้นที่มีขอบเขตล่าช้าสำหรับแอตทริบิวต์ประเภท label ค่าจะเป็น 'late-bound' หากต้องมีการกำหนดค่าก่อนกำหนดค่า แอตทริบิวต์ที่ใช้ค่านี้เป็นค่าต้องเป็นแบบส่วนตัว

ตัวอย่างการใช้:

การกำหนดแอตทริบิวต์ของกฎ:

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

การเข้าถึงในการใช้งานกฎ:

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
fragment ต้องระบุ
ชื่อของส่วนย่อยการกำหนดค่าซึ่งมีค่าที่ขอบเขตส่งท้าย
name ต้องระบุ
ชื่อของค่าที่จะรับจาก Fragment การกำหนดค่า

Depset

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

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

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

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

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

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

พารามิเตอร์

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

exec_group

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
toolchains sequence; ค่าเริ่มต้นคือ []
ชุดเครื่องมือเชนที่กลุ่มการดำเนินการนี้ต้องการ รายการนี้อาจมีออบเจ็กต์ String, Label หรือ StarlarkToolchainTypeApi รวมกันแบบใดก็ได้
exec_compatible_with ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการข้อจำกัดในแพลตฟอร์มการดำเนินการ

module_extension

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation ต้องระบุ
ฟังก์ชันที่ใช้งานส่วนขยายโมดูลนี้ ต้องใช้พารามิเตอร์เดียว นั่นคือ module_ctx ระบบจะเรียกใช้ฟังก์ชันนี้ครั้งเดียวเมื่อเริ่มต้นบิลด์เพื่อกำหนดชุดของที่เก็บที่ใช้ได้
tag_classes ค่าเริ่มต้นคือ {}
พจนานุกรมสำหรับประกาศคลาสแท็กทั้งหมดที่ส่วนขยายใช้ โดยแมปจากชื่อคลาสแท็กกับออบเจ็กต์ tag_class
doc string หรือ None ค่าเริ่มต้นคือ None
คำอธิบายของส่วนขยายโมดูลที่แยกได้ด้วยเครื่องมือสร้างเอกสาร
environ ลำดับของสตริง ค่าเริ่มต้นคือ []
แสดงรายการตัวแปรสภาพแวดล้อมที่ส่วนขยายโมดูลนี้ใช้อ้างอิง หากตัวแปรสภาพแวดล้อมในรายการนั้นเปลี่ยนแปลง ระบบจะประเมินส่วนขยายอีกครั้ง
os_dependent ค่าเริ่มต้นคือ False
ระบุว่าส่วนขยายนี้ขึ้นอยู่กับระบบปฏิบัติการหรือไม่
arch_dependent ค่าเริ่มต้นคือ False
ระบุว่าส่วนขยายนี้ขึ้นอยู่กับสถาปัตยกรรมหรือไม่

ผู้ให้บริการ

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

กำหนดสัญลักษณ์ผู้ให้บริการ ผู้ให้บริการอาจสร้างอินสแตนซ์โดยการเรียกใช้ หรือใช้เป็นคีย์ในการเรียกอินสแตนซ์ของผู้ให้บริการนั้นจากเป้าหมายโดยตรง ตัวอย่าง:
MyInfo = provider()
...
def _my_library_impl(ctx):
    ...
    my_info = MyInfo(x = 2, y = 3)
    # my_info.x == 2
    # my_info.y == 3
    ...

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

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

หากระบุ init จะแสดง Tuple ของ 2 องค์ประกอบ ได้แก่ ค่าที่สามารถเรียกได้ของ Provider และค่าเรียกได้ของเครื่องมือสร้างดิบ ดูรายละเอียดได้ที่ กฎ (การเริ่มต้นที่กำหนดเองของผู้ให้บริการที่กำหนดเอง) และการสนทนาเกี่ยวกับพารามิเตอร์ init ด้านล่าง

พารามิเตอร์

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

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

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

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

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

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

repository_rule

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

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

พารามิเตอร์

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

กฎ

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

สร้างกฎใหม่ซึ่งสามารถเรียกจากไฟล์ BUILD หรือมาโครเพื่อสร้างเป้าหมาย

ต้องกำหนดกฎให้กับตัวแปรร่วมในไฟล์ .bzl ชื่อตัวแปรร่วมคือชื่อของกฎ

กฎการทดสอบต้องมีชื่อที่ลงท้ายด้วย _test ขณะที่กฎอื่นๆ ทั้งหมดต้องไม่มีคำต่อท้ายนี้ (ข้อจำกัดนี้มีผลกับกฎเท่านั้น ไม่ใช้กับเป้าหมายของกฎเท่านั้น)

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation จำเป็น
ฟังก์ชัน Starlark ที่ใช้กฎนี้จะต้องมีพารามิเตอร์ 1 รายการเท่านั้น: ctx ระบบจะเรียกใช้ฟังก์ชันนี้ในระหว่างขั้นตอนการวิเคราะห์สำหรับอินสแตนซ์แต่ละรายการของกฎ สามารถเข้าถึงแอตทริบิวต์ที่ผู้ใช้ให้ไว้ จะต้องสร้างการดำเนินการเพื่อสร้างเอาต์พุตที่ประกาศทั้งหมด
test bool; ค่าเริ่มต้นคือ unbound
ระบุว่ากฎนี้เป็นกฎทดสอบหรือไม่ กล่าวคือ ระบุว่ากฎนี้อาจอยู่ภายใต้คำสั่ง blaze test หรือไม่ กฎการทดสอบทั้งหมดจะถือว่าดำเนินการได้โดยอัตโนมัติ คุณไม่จำเป็นต้องตั้งค่า executable = True สำหรับกฎการทดสอบอย่างชัดแจ้ง ค่าเริ่มต้นจะเป็น False ดูข้อมูลเพิ่มเติมได้ที่ หน้ากฎ
attrs dict ค่าเริ่มต้นคือ {}
เพื่อประกาศแอตทริบิวต์ทั้งหมดของกฎ ซึ่งแมปจากชื่อแอตทริบิวต์ไปยังออบเจ็กต์แอตทริบิวต์ (ดูโมดูล attr) แอตทริบิวต์ที่ขึ้นต้นด้วย _ จะเป็นแบบส่วนตัว และใช้เพื่อเพิ่มทรัพยากร Dependency แบบโดยนัยในป้ายกำกับได้ มีการเพิ่มแอตทริบิวต์ name โดยนัยและต้องไม่ระบุ แอตทริบิวต์ visibility, deprecation, tags, testonly และ features มีการเพิ่มโดยนัยและลบล้างไม่ได้ กฎส่วนใหญ่ต้องการแอตทริบิวต์เพียงไม่กี่รายการ ฟังก์ชันของกฎจะกำหนดขนาดของแอตทริบิวต์เพื่อจำกัดการใช้งานหน่วยความจำ
outputs dict หรือ None หรือ function ค่าเริ่มต้นคือ None
เลิกใช้งาน พารามิเตอร์นี้เลิกใช้งานแล้วและจะถูกนำออกเร็วๆ นี้ โปรดอย่าพึ่งพาสิ่งนี้ ถูกปิดใช้กับ ---incompatible_no_rule_outputs_param ใช้แฟล็กนี้เพื่อยืนยันว่าโค้ดเข้ากันได้กับการนําออกที่กำลังจะเกิดขึ้น
เลิกใช้งานพารามิเตอร์นี้แล้ว ย้ายข้อมูลกฎเพื่อใช้ OutputGroupInfo หรือ attr.output แทน

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

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

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

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

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

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

องค์ประกอบแต่ละรายการของรายการคือออบเจ็กต์ *Info ที่แสดงผลโดย provider() เว้นแต่ผู้ให้บริการเดิมจะแสดงด้วยชื่อสตริงแทน เมื่อมีการใช้เป้าหมายของกฎเป็นการอ้างอิงสำหรับเป้าหมายที่ประกาศผู้ให้บริการที่จำเป็น ก็ไม่จำเป็นต้องระบุผู้ให้บริการรายนั้นที่นี่ มากพอที่ฟังก์ชันการใช้งานแสดงผล แต่ก็ถือว่าเป็นแนวทางปฏิบัติแนะนำในการระบุรหัสดังกล่าว แม้จะไม่บังคับก็ตาม แต่ช่อง required_providers ของ Aspect ระบุผู้ให้บริการไว้ที่นี่

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

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

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

  • เป้าหมายของกฎนี้มีการจำกัดจำนวนทรัพยากร Dependency ชั่วคราวที่อาจมี
  • ระบบจะถือว่ากฎนั้นเป็นกฎทดสอบ (เหมือนกับการตั้งค่า test=True) มีผลแทนค่าของ test
  • ฟังก์ชันการใช้งานกฎอาจไม่บันทึกการดำเนินการ แต่จะต้องลงทะเบียนผลลัพธ์ผ่าน/ไม่ผ่านผ่านการระบุ AnalysisTestResultInfo
build_setting BuildSetting หรือ None ค่าเริ่มต้นคือ None
หากตั้งค่าไว้ ให้อธิบายประเภทของbuild settingกฎนี้ ดูโมดูล config หากตั้งค่าไว้ ระบบจะเพิ่มแอตทริบิวต์ที่จำเป็นชื่อ "build_setting_default" ลงในกฎนี้โดยอัตโนมัติ โดยมีประเภทที่สอดคล้องกับค่าที่ส่งมาที่นี่
cfg ค่าเริ่มต้นคือ None
หากตั้งค่าไว้ ให้ชี้ไปที่การเปลี่ยนการกำหนดค่าที่กฎจะมีผลกับการกำหนดค่าเองก่อนการวิเคราะห์
exec_groups dict หรือ None ค่าเริ่มต้นคือ None
คำสั่งของกลุ่มการดำเนินการ (สตริง) เป็น exec_groups หากตั้งค่าไว้ อนุญาตให้กฎเรียกใช้การดำเนินการในแพลตฟอร์มการดำเนินการหลายแพลตฟอร์มภายในเป้าหมายเดียว โปรดดูข้อมูลเพิ่มเติมในเอกสารของกลุ่มการดำเนินการ
initializer ค่าเริ่มต้นคือ None
เป็นการทดลอง: ฟังก์ชัน Stalark จะเริ่มต้นแอตทริบิวต์ของกฎ

ระบบจะเรียกใช้ฟังก์ชันเมื่อมีการโหลดสำหรับอินสแตนซ์แต่ละรายการของกฎ ระบบจะเรียกใช้ด้วยค่าของแอตทริบิวต์สาธารณะที่กำหนดโดยกฎ (ไม่ใช่ด้วยแอตทริบิวต์ทั่วไป เช่น name หรือ tags)

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

ระบบจะประเมิน Initializer ก่อนค่าเริ่มต้นที่ระบุไว้ในการกำหนดแอตทริบิวต์ ดังนั้น หากพารามิเตอร์ในลายเซ็นของโปรแกรมเริ่มต้นมีค่าเริ่มต้น พารามิเตอร์จะแทนที่ค่าเริ่มต้นจากการกำหนดแอตทริบิวต์ (ยกเว้นหากแสดงผล None)

ในทำนองเดียวกัน หากพารามิเตอร์ในลายเซ็นของโปรแกรมเริ่มต้นไม่มีค่าเริ่มต้น ระบบจะบังคับใช้พารามิเตอร์ดังกล่าว การยกเว้นการตั้งค่าเริ่มต้น/ที่จําเป็นสําหรับการกำหนดแอตทริบิวต์ในกรณีที่เป็นแนวทางปฏิบัติที่ดี

แนวทางปฏิบัติที่ดีคือการใช้ **kwargs สำหรับแอตทริบิวต์ที่ไม่มีการจัดการ

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

parent ค่าเริ่มต้นคือ None
ทดลอง: กฎ Stalark ที่ขยายขึ้น เมื่อตั้งค่าแล้ว แอตทริบิวต์สาธารณะจะถูกรวมและผู้ให้บริการที่โฆษณา กฎตรงกับ executable และ test จากระดับบนสุด ค่า fragments, toolchains, exec_compatible_with และ exec_groups จะรวมกัน ไม่สามารถตั้งค่าพารามิเตอร์เดิมหรือพารามิเตอร์ที่เลิกใช้งานแล้วได้
extendable bool หรือ ป้ายกำกับ หรือ สตริง หรือ None ค่าเริ่มต้นคือ None
ทดลอง: ป้ายกำกับของรายการที่อนุญาตซึ่งกำหนดกฎที่จะขยายกฎนี้ได้ สามารถตั้งค่าเป็น "จริง/เท็จ" เพื่ออนุญาต/ไม่อนุญาตตลอดเวลาได้ด้วย โดยค่าเริ่มต้น Bazel จะอนุญาตส่วนขยายเสมอ
subrules ลำดับของกฎย่อย ค่าเริ่มต้นคือ []
ทดลอง: รายการกฎย่อยที่กฎนี้ใช้

เลือก

unknown select(x, no_match_error='')

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

พารามิเตอร์

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

กฎย่อย

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation function; จำเป็น
ฟังก์ชัน Starlark ที่นำกฎย่อยนี้ไปใช้
attrs dict; ค่าเริ่มต้นคือ {}
พจนานุกรมสำหรับประกาศแอตทริบิวต์ (ส่วนตัว) ทั้งหมดของกฎย่อย

กฎย่อยจะมีได้เฉพาะแอตทริบิวต์ส่วนตัวที่พิมพ์ด้วยป้ายกำกับ (เช่น ป้ายกำกับหรือรายการป้ายกำกับ) Bazel จะส่งค่าที่แก้ไขแล้วซึ่งเกี่ยวข้องกับป้ายกำกับเหล่านี้ไปยังฟังก์ชันการใช้งานของกฎย่อยโดยอัตโนมัติเป็นอาร์กิวเมนต์ที่มีชื่อ (ดังนั้นต้องมีฟังก์ชันการใช้งานเพื่อยอมรับพารามิเตอร์ที่มีชื่อซึ่งตรงกับชื่อแอตทริบิวต์) ประเภทของค่าเหล่านี้ได้แก่

  • FilesToRunProvider สำหรับแอตทริบิวต์ป้ายกำกับที่มี executable=True
  • File สำหรับแอตทริบิวต์ป้ายกำกับที่มี allow_single_file=True
  • Target สำหรับแอตทริบิวต์ป้ายกำกับอื่นๆ ทั้งหมด
  • [Target]สำหรับแอตทริบิวต์รายการป้ายกำกับทั้งหมด
toolchains ลำดับ ค่าเริ่มต้นคือ []
หากมีการตั้งค่า ชุดเครื่องมือที่กฎย่อยนี้ต้องใช้ รายการนี้อาจมีออบเจ็กต์ String, Label หรือ StarlarkToolchainTypeApi รวมกันแบบใดก็ได้ คุณจะพบเชนเครื่องมือได้โดยตรวจสอบแพลตฟอร์มปัจจุบัน และมอบให้กับการติดตั้งใช้งานกฎย่อยผ่าน ctx.toolchains
fragments ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการชื่อส่วนย่อยของการกำหนดค่าที่กฎย่อยต้องใช้ในการกำหนดค่าเป้าหมาย
subrules ลำดับของกฎย่อย ค่าเริ่มต้นคือ []
รายการกฎย่อยอื่นๆ ที่จำเป็นสำหรับกฎย่อยนี้

tag_class

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

สร้างออบเจ็กต์ tag_class ใหม่ซึ่งกำหนดสคีมาแอตทริบิวต์สำหรับคลาสของแท็ก ซึ่งเป็นออบเจ็กต์ข้อมูลที่ส่วนขยายโมดูลใช้

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
attrs ค่าเริ่มต้นคือ {}
พจนานุกรมสำหรับประกาศแอตทริบิวต์ทั้งหมดของคลาสแท็กนี้ ซึ่งแมปจากชื่อแอตทริบิวต์ไปยังออบเจ็กต์แอตทริบิวต์ (ดูโมดูล attr)
doc string หรือ None ค่าเริ่มต้นคือ None
คำอธิบายของคลาสแท็กที่แยกได้ด้วยเครื่องมือสร้างเอกสาร

การเปิดเผย

None visibility(value)

ตั้งค่าการเปิดเผยการโหลดของโมดูล .bzl ที่กำลังเริ่มต้นอยู่ในขณะนี้

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

สามารถเรียกใช้ 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" จะใช้ได้เสมอและระบบจะตีความ "//..." เป็น "แพ็กเกจทั้งหมดในที่เก็บปัจจุบัน" เสมอ