ไฟล์ .bzl

7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

สมาชิก

analysis_test_transition

transition analysis_test_transition(settings)

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

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

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

required_providers ค่าเริ่มต้นคือ []
แอตทริบิวต์นี้ช่วยให้แง่มุมจำกัดการนำไปใช้ในเป้าหมายที่มีกฎโฆษณาผู้ให้บริการที่จำเป็นเท่านั้น ค่าต้องเป็นรายการที่มีผู้ให้บริการรายเดียวหรือรายการผู้ให้บริการ แต่ต้องไม่ใช่ทั้ง 2 อย่าง ตัวอย่างเช่น [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] เป็นค่าที่ถูกต้อง แต่ [FooInfo, BarInfo, [BazInfo, QuxInfo]] ไม่ถูกต้อง

ระบบจะแปลงรายการผู้ให้บริการแบบไม่ฝังเป็นรายการที่มีรายการผู้ให้บริการรายการเดียวโดยอัตโนมัติ กล่าวคือ [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]] ไม่ถูกต้อง

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

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

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

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

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

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

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

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

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

configuration_field

LateBoundDefault configuration_field(fragment, name)

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

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

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

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

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

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

พารามิเตอร์

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

Depset

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

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

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

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

นอกจากนี้ ขณะนี้องค์ประกอบต้องเป็นแบบคงที่ แต่เราจะผ่อนปรนข้อจำกัดนี้ในอนาคต

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

พารามิเตอร์

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

exec_group

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

สร้างกลุ่มการดําเนินการซึ่งสามารถใช้ในการสร้างการดําเนินการสําหรับแพลตฟอร์มการดําเนินการหนึ่งๆ ระหว่างการติดตั้งใช้งานกฎ

พารามิเตอร์

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

module_extension

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

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

พารามิเตอร์

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

provider

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

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

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

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

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

พารามิเตอร์

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

  • ชื่อฟิลด์พจนานุกรม -> เอกสารประกอบ:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
ไม่จำเป็นต้องกรอกข้อมูลครบทุกช่อง
init Callable หรือ None ค่าเริ่มต้นคือ None
Callback ที่ไม่บังคับสำหรับการประมวลผลล่วงหน้าและตรวจสอบความถูกต้องของค่าในช่องของผู้ให้บริการในระหว่างการสร้างอินสแตนซ์ หากระบุ init provider() จะแสดงผล tupple ที่มี 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() จะกลายเป็นทูเปิล (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)

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

พารามิเตอร์

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

เลือก

unknown select(x, no_match_error='')

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x required
Dict ที่แมปเงื่อนไขการกําหนดค่ากับค่า คีย์แต่ละรายการคือป้ายกํากับหรือสตริงป้ายกํากับที่ระบุอินสแตนซ์ config_setting หรือ constraint_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 sequence; ค่าเริ่มต้นคือ []
หากมีการตั้งค่า ชุดของ Toolchain ที่กฎย่อยนี้ต้องใช้ รายการอาจมีออบเจ็กต์ String, Label หรือ StarlarkToolchainTypeApi ผสมผสานกันอย่างไรก็ได้ ระบบจะค้นหา Toolchain โดยตรวจสอบแพลตฟอร์มปัจจุบัน และส่งไปยังการใช้งานกฎย่อยผ่าน ctx.toolchains
fragments ลําดับของ สตริง ค่าเริ่มต้นคือ []
ชื่อรายการของข้อมูลโค้ดการกําหนดค่าที่กฎย่อยต้องการในการกําหนดค่าเป้าหมาย
subrules ลําดับกฎย่อย ค่าเริ่มต้นคือ []
ลิสต์กฎย่อยอื่นๆ ที่จําเป็นต่อกฎย่อยนี้

tag_class

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

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

พารามิเตอร์

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

การเปิดเผย

None visibility(value)

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

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

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
value ต้องระบุ
รายการสตริงข้อมูลจำเพาะของแพ็กเกจหรือสตริงข้อมูลจำเพาะของแพ็กเกจเดียว

ข้อกำหนดเฉพาะของแพ็กเกจมีรูปแบบเดียวกับ package_group ยกเว้นข้อกำหนดเฉพาะด้านลบของแพ็กเกจ กล่าวคือ ข้อกำหนดจำเพาะอาจมีรูปแบบดังนี้

  • "//foo": แพ็กเกจ //foo
  • "//foo/...": แพ็กเกจ //foo และแพ็กเกจย่อยทั้งหมดของแพ็กเกจนั้น
  • "public" หรือ "private": แพ็กเกจทั้งหมดหรือไม่มีแพ็กเกจตามลำดับ

ไม่สามารถใช้ไวยากรณ์ "@" ได้ ระบบจะแปลข้อกำหนดทั้งหมดซึ่งเกี่ยวข้องกับที่เก็บของโมดูลปัจจุบัน

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

โปรดทราบว่า Flag --incompatible_package_group_has_public_syntax และ --incompatible_fix_package_group_reporoot_syntax ไม่มีผลกับอาร์กิวเมนต์นี้ ค่า "public" และ "private" จะพร้อมใช้งานเสมอ และ "//..." จะตีความเป็น "แพ็กเกจทั้งหมดในที่เก็บปัจจุบัน" เสมอ