ไฟล์ .bzl

รายงานปัญหา รุ่น Nightly · 7.4

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

สมาชิก

analysis_test_transition

transition analysis_test_transition(settings)

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

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

พารามิเตอร์

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

เฉพาะด้าน

Aspect aspect(implementation, attr_aspects=[], toolchains_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=[])

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

พารามิเตอร์

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

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

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

แอตทริบิวต์ที่ประกาศจะแปลง None เป็นค่าเริ่มต้น

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

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

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

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

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

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

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 string; required
ชื่อของค่าที่จะรับจากส่วนย่อยการกำหนดค่า

Depset

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

สร้าง depset พารามิเตอร์ direct คือรายการองค์ประกอบโดยตรงของชุดข้อมูล ที่พารามิเตอร์ transitive คือรายการชุดข้อมูลที่มีองค์ประกอบกลายเป็นองค์ประกอบโดยอ้อมของชุดข้อมูลที่สร้างขึ้น ลำดับที่ระบบจะแสดงองค์ประกอบเมื่อแปลงชุดข้อมูล 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 sequence ของ depset หรือ None; ค่าเริ่มต้นคือ None
รายการของ Depset ที่มีเอลิเมนต์ที่จะกลายเป็นองค์ประกอบโดยอ้อมของ Depset

exec_group

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

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

พารามิเตอร์

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

exec_transition

transition exec_transition(implementation, inputs, outputs)

transition() เวอร์ชันพิเศษที่ใช้กำหนดการเปลี่ยนผู้บริหาร ดูแนวทางปฏิบัติแนะนำได้ในเอกสารประกอบ (หรือการใช้งาน) ใช้ได้จาก Bazel ในตัวเท่านั้น

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation สามารถโทรได้ ต้องระบุ
inputs ลําดับสตริง ต้องระบุ
outputs ลําดับสตริง ต้องระบุ

module_extension

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
implementation callable; required
ฟังก์ชันที่ใช้ส่วนขยายโมดูลนี้ ต้องรับพารามิเตอร์เดียว module_ctx ระบบจะเรียกใช้ฟังก์ชันนี้ 1 ครั้งในช่วงเริ่มต้นของการสร้างเพื่อระบุชุดที่เก็บที่มีอยู่
tag_classes dict; ค่าเริ่มต้นคือ {}
พจนานุกรมเพื่อประกาศคลาสแท็กทั้งหมดที่ใช้โดยส่วนขยาย โดยแมปจากชื่อคลาสแท็กไปยังออบเจ็กต์ tag_class
doc สตริง หรือ None ค่าเริ่มต้นคือ None
คำอธิบายส่วนขยายของโมดูลที่เครื่องมือสร้างเอกสารประกอบสามารถดึงข้อมูลได้
environ ลําดับสตริง ค่าเริ่มต้นคือ []
ให้รายการตัวแปรสภาพแวดล้อมที่ส่วนขยายโมดูลนี้ใช้ หากตัวแปรสภาพแวดล้อมในรายการมีการเปลี่ยนแปลง ระบบจะประเมินส่วนขยายอีกครั้ง
os_dependent bool; default is False
Indicates whether this extension is OS-dependent or not
arch_dependent bool; default is False
Indicates whether this extension is architecture-dependent or not

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
การเรียกกลับที่ไม่บังคับสําหรับการประมวลผลก่อนการทํางานและตรวจสอบค่าช่องของผู้ให้บริการระหว่างการสร้างอินสแตนซ์ หากระบุ 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 callable; required
ฟังก์ชันที่ใช้กฎนี้ ต้องมีพารามิเตอร์เดียว repository_ctx ระบบจะเรียกใช้ฟังก์ชันนี้ในระหว่างระยะการโหลดสําหรับอินสแตนซ์แต่ละรายการของกฎ
attrs dict หรือ None ค่าเริ่มต้นคือ None
พจนานุกรมสำหรับประกาศแอตทริบิวต์ทั้งหมดของกฎที่เก็บ โดยจะแมปจากชื่อแอตทริบิวต์กับออบเจ็กต์แอตทริบิวต์ (ดูโมดูล attr) แอตทริบิวต์ที่ขึ้นต้นด้วย _ เป็นแอตทริบิวต์ส่วนตัว และใช้เพื่อเพิ่มการพึ่งพาโดยนัยในป้ายกำกับลงในไฟล์ได้ (กฎของที่เก็บข้อมูลต้องไม่ขึ้นอยู่กับอาร์ติแฟกต์ที่สร้างขึ้น) ระบบจะเพิ่มแอตทริบิวต์ name โดยปริยายและไม่จำเป็นต้องระบุ

แอตทริบิวต์ที่ประกาศจะแปลง None เป็นค่าเริ่มต้น

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

แอตทริบิวต์ที่ประกาศจะแปลง None เป็นค่าเริ่มต้น

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

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

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

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

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

dependency_resolution_rule bool; ค่าเริ่มต้นคือ False
หากตั้งค่า กฎอาจเป็นข้อกำหนดผ่านแอตทริบิวต์ที่ทําเครื่องหมายว่าพร้อมใช้งานใน Materializer ด้วย แอตทริบิวต์ทั้งหมดของกฎที่มีชุดธงนี้ต้องทำเครื่องหมายเป็นมีอยู่ใน Materializer ด้วย การทำเครื่องหมายนี้เพื่อให้กฎที่ทำเครื่องหมายไว้ไม่สามารถใช้กฎที่ไม่ได้ทำเครื่องหมายไว้
exec_compatible_with ลําดับของ สตริง ค่าเริ่มต้นคือ []
นี่คือรายการข้อจํากัดในแพลตฟอร์มการดําเนินการที่ใช้กับเป้าหมายทั้งหมดของกฎประเภทนี้
analysis_test bool; ค่าเริ่มต้นคือ 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
การทดลอง: ป้ายกำกับของรายการที่อนุญาตซึ่งกําหนดว่ากฎใดสามารถขยายกฎนี้ได้ และยังตั้งค่าเป็น "จริง/เท็จ" เพื่ออนุญาต/ไม่อนุญาตให้ขยายเสมอได้อีกด้วย โดยค่าเริ่มต้น Bazel จะอนุญาตส่วนขยายเสมอ
subrules ลําดับกฎย่อย ค่าเริ่มต้นคือ []
การทดลอง: รายการกฎย่อยที่กฎนี้ใช้

เลือก

unknown select(x, no_match_error='')

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
x 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 ที่กฎย่อยนี้ต้องใช้ รายการอาจมีออบเจ็กต์สตริง ป้ายกำกับ หรือ StarlarkToolchainTypeApi ผสมกันก็ได้ ระบบจะค้นหา Toolchain โดยตรวจสอบแพลตฟอร์มปัจจุบัน และส่งไปยังการใช้งานกฎย่อยผ่าน ctx.toolchains โปรดทราบว่าต้องเปิดใช้ AEG ในกฎที่ใช้หากตั้งค่าพารามิเตอร์นี้ ในกรณีที่ยังไม่ได้ย้ายข้อมูลไปยัง AEG โปรดดู https://bazel.build/extending/auto-exec-groups#migration-aegs
fragments ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการชื่อของส่วนย่อยการกำหนดค่าที่กฎย่อยต้องใช้ในการกำหนดค่าเป้าหมาย
subrules ลําดับกฎย่อย ค่าเริ่มต้นคือ []
ลิสต์กฎย่อยอื่นๆ ที่จําเป็นต่อกฎย่อยนี้

tag_class

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

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

พารามิเตอร์

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

โปรดทราบว่าแอตทริบิวต์ที่ประกาศจะไม่แปลง None เป็นค่าเริ่มต้น ต่างจาก rule(), aspect() และ repository_rule() หากต้องการให้ระบบใช้ค่าเริ่มต้น ผู้เรียกต้องไม่ระบุแอตทริบิวต์นี้เลย

doc สตริง หรือ None ค่าเริ่มต้นคือ None
คำอธิบายคลาสแท็กที่เครื่องมือสร้างเอกสารประกอบสามารถดึงข้อมูลได้

การเปิดเผย

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]

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