เนทีฟ

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

สมาชิก

existing_rule

unknown native.existing_rule(name)

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

ในที่นี้ ออบเจ็กต์ที่คล้ายกับ dict ที่เปลี่ยนแปลงไม่ได้ หมายถึงออบเจ็กต์ที่เปลี่ยนแปลงไม่ได้อย่างลึกซึ้ง x ซึ่งรองรับการวนซ้ำที่คล้ายกับ dict, len(x), name in x, x[name], x.get(name), x.items(), x.keys() และ x.values()

หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view ฟังก์ชันนี้จะแสดงผล dict ใหม่ที่เปลี่ยนแปลงได้ซึ่งมีเนื้อหาเดียวกันแทน

ผลลัพธ์จะมีรายการสำหรับแอตทริบิวต์แต่ละรายการ ยกเว้นแอตทริบิวต์ส่วนตัว (ชื่อไม่ขึ้นต้นด้วยตัวอักษร) และประเภทแอตทริบิวต์เดิมบางประเภทที่แสดงไม่ได้ นอกจากนี้ dict ยังมีรายการสำหรับ name และ kind ของอินสแตนซ์กฎ (เช่น 'cc_binary')

ค่าของผลลัพธ์จะแสดงค่าแอตทริบิวต์ดังนี้

  • แอตทริบิวต์ประเภทสตริง จำนวนเต็ม และบูลีนจะแสดงตามที่เป็นอยู่
  • ระบบจะแปลงป้ายกำกับเป็นสตริงในรูปแบบ ':foo' สำหรับเป้าหมายในแพ็กเกจเดียวกัน หรือ '//pkg:name' สำหรับเป้าหมายในแพ็กเกจอื่น
  • รายการจะแสดงเป็นทูเพิล และ dict จะแปลงเป็น dict ใหม่ที่เปลี่ยนแปลงได้ โดยองค์ประกอบของรายการและ dict จะได้รับการแปลงแบบเรียกซ้ำในลักษณะเดียวกัน
  • ระบบจะแสดงผลค่า select พร้อมเนื้อหาที่แปลงแล้วตามที่อธิบายไว้ข้างต้น
  • ระบบจะยกเว้นแอตทริบิวต์ที่ไม่ได้ระบุค่าระหว่างการสร้างอินสแตนซ์กฎและแอตทริบิวต์ที่มีการคำนวณค่าเริ่มต้นจากผลลัพธ์ (ระบบจะคำนวณค่าเริ่มต้นที่คำนวณได้ก็ต่อเมื่ออยู่ในระยะการวิเคราะห์)

หลีกเลี่ยงการใช้ฟังก์ชันนี้หากเป็นไปได้ เนื่องจากฟังก์ชันนี้จะทำให้ไฟล์ BUILD เปราะบางและขึ้นอยู่กับลำดับ นอกจากนี้ โปรดทราบว่าฟังก์ชันนี้แตกต่างจากการแปลงค่าแอตทริบิวต์กฎอีก 2 รายการจากรูปแบบภายในเป็น Starlark เล็กน้อย โดยการแปลงรายการหนึ่งใช้โดยค่าเริ่มต้นที่คำนวณได้ ส่วนอีกรายการใช้โดย ctx.attr.foo

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
name ต้องระบุ
ชื่อของเป้าหมาย

existing_rules

unknown native.existing_rules()

แสดงผลออบเจ็กต์ที่คล้ายกับ dict ที่เปลี่ยนแปลงไม่ได้ ซึ่งอธิบายกฎที่สร้างขึ้นในแพ็กเกจของเธรดนี้จนถึงตอนนี้ แต่ละรายการของออบเจ็กต์ที่คล้ายกับ dict จะจับคู่ชื่อของอินสแตนซ์กฎกับผลลัพธ์ที่ฟังก์ชัน existing_rule(name) จะแสดงผล

ในที่นี้ ออบเจ็กต์ที่คล้ายกับ dict ที่เปลี่ยนแปลงไม่ได้ หมายถึงออบเจ็กต์ที่เปลี่ยนแปลงไม่ได้อย่างลึกซึ้ง x ซึ่งรองรับการวนซ้ำที่คล้ายกับ dict, len(x), name in x, x[name], x.get(name), x.items(), x.keys() และ x.values()

หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view ฟังก์ชันนี้จะแสดงผล dict ใหม่ที่เปลี่ยนแปลงได้ซึ่งมีเนื้อหาเดียวกันแทน

หมายเหตุ: หลีกเลี่ยงการใช้ฟังก์ชันนี้หากเป็นไปได้ เนื่องจากฟังก์ชันนี้จะทำให้ไฟล์ BUILD เปราะบางและขึ้นอยู่กับลำดับ นอกจากนี้ หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view ฟังก์ชันนี้อาจใช้ทรัพยากรมาก โดยเฉพาะอย่างยิ่งหากเรียกใช้ภายในลูป

exports_files

None native.exports_files(srcs, visibility=None, licenses=None)

ระบุรายการไฟล์ที่เป็นของแพ็กเกจนี้ซึ่งส่งออกไปยังแพ็กเกจอื่นๆ

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
srcs ลำดับของสตริงs; ต้องระบุ
รายการไฟล์ที่จะส่งออก
visibility ลำดับ หรือ None; ค่าเริ่มต้นคือ None
สามารถระบุการประกาศการมองเห็นได้ ไฟล์จะมองเห็นได้สำหรับเป้าหมายที่ระบุ หากไม่ได้ระบุการมองเห็น ไฟล์จะมองเห็นได้สำหรับทุกแพ็กเกจ
licenses ลำดับของสตริงs; หรือNone; ค่าเริ่มต้นคือNone
ใบอนุญาตที่จะระบุ

glob

sequence native.glob(include=[], exclude=[], exclude_directories=1, allow_empty=unbound)

ฟังก์ชัน Glob จะแสดงผลรายการใหม่ที่เปลี่ยนแปลงได้และจัดเรียงแล้วของทุกไฟล์ในแพ็กเกจปัจจุบันที่มีลักษณะดังนี้
  • ตรงกับรูปแบบอย่างน้อย 1 รูปแบบใน include
  • ไม่ตรงกับรูปแบบใดๆ ใน exclude (ค่าเริ่มต้น [])
หากเปิดใช้อาร์กิวเมนต์ exclude_directories (ตั้งค่าเป็น 1) ระบบจะละเว้นไฟล์ประเภทไดเรกทอรีจากผลลัพธ์ (ค่าเริ่มต้น 1)

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
include ลำดับของสตริงs; ค่าเริ่มต้นคือ[]
รายการรูปแบบ glob ที่จะรวม
exclude ลำดับของสตริงs; ค่าเริ่มต้นคือ[]
รายการรูปแบบ glob ที่จะยกเว้น
exclude_directories ค่าเริ่มต้นคือ 1
แฟล็กที่ระบุว่าจะยกเว้นไดเรกทอรีหรือไม่
allow_empty ค่าเริ่มต้นคือ unbound
ระบุว่าจะอนุญาตให้รูปแบบ glob ไม่ตรงกับอะไรเลยหรือไม่ หาก `allow_empty` เป็น False รูปแบบการรวมแต่ละรูปแบบต้องตรงกับบางอย่าง และผลลัพธ์สุดท้ายต้องไม่ว่างเปล่า (หลังจากยกเว้นรายการที่ตรงกับรูปแบบ `exclude` แล้ว)

module_name

string native.module_name()

ชื่อของโมดูล Bazel ที่เชื่อมโยงกับ repo ที่แพ็กเกจนี้อยู่ หากแพ็กเกจนี้มาจาก repo ที่กำหนดไว้ใน WORKSPACE แทนที่จะเป็น MODULE.bazel ค่านี้จะเป็นค่าว่าง สำหรับ repo ที่สร้างโดยส่วนขยายโมดูล ค่านี้จะเป็นชื่อของโมดูลที่โฮสต์ส่วนขยาย ซึ่งจะเหมือนกับฟิลด์ module.name ที่เห็นใน module_ctx.modules อาจแสดงผล None

module_version

string native.module_version()

เวอร์ชันของโมดูล Bazel ที่เชื่อมโยงกับ repo ที่แพ็กเกจนี้อยู่ หากแพ็กเกจนี้มาจาก repo ที่กำหนดไว้ใน WORKSPACE แทนที่จะเป็น MODULE.bazel ค่านี้จะเป็นค่าว่าง สำหรับ repo ที่สร้างโดยส่วนขยายโมดูล ค่านี้จะเป็นเวอร์ชันของโมดูลที่โฮสต์ส่วนขยาย ซึ่งจะเหมือนกับฟิลด์ module.version ที่เห็นใน module_ctx.modules อาจแสดงผล None

package_group

None native.package_group(name, packages=[], includes=[])

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
name ต้องระบุ
ชื่อที่ไม่ซ้ำกันสำหรับกฎนี้
packages ลำดับของสตริงs; ค่าเริ่มต้นคือ[]
การแจกแจงแพ็กเกจทั้งหมดในกลุ่มนี้
includes ลำดับของสตริงs; ค่าเริ่มต้นคือ[]
กลุ่มแพ็กเกจอื่นๆ ที่รวมอยู่ในกลุ่มนี้

package_name

string native.package_name()

ชื่อของแพ็กเกจที่กำลังประเมินโดยไม่มีชื่อที่เก็บ เช่น ในไฟล์ BUILD some/package/BUILD ค่าจะเป็น some/package หากไฟล์ BUILD เรียกใช้ฟังก์ชันที่กำหนดไว้ในไฟล์ .bzl ฟังก์ชัน package_name() จะตรงกับแพ็กเกจไฟล์ BUILD ของผู้เรียก

package_relative_label

Label native.package_relative_label(input)

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

ฟังก์ชันนี้จะเรียกใช้ได้เฉพาะขณะประเมินไฟล์ BUILD และมาโครที่ไฟล์ BUILD เรียกใช้โดยตรงหรือโดยอ้อมเท่านั้น แต่จะเรียกใช้ในฟังก์ชันการใช้งานกฎ (เช่น) ไม่ได้

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
input สตริง หรือ ป้ายกำกับ; ต้องระบุ
สตริงป้ายกำกับหรือออบเจ็กต์ป้ายกำกับอินพุต หากมีการส่งออบเจ็กต์ป้ายกำกับ ระบบจะแสดงผลออบเจ็กต์นั้นตามที่เป็นอยู่

repo_name

string native.repo_name()

ชื่อมาตรฐานของที่เก็บที่มีแพ็กเกจที่กำลังประเมินโดยไม่มีเครื่องหมาย @ นำหน้า

repository_name

string native.repository_name()

ทดลอง API นี้ยังอยู่ในขั้นทดลองและอาจมีการเปลี่ยนแปลงได้ทุกเมื่อ โปรดอย่าใช้ API นี้ โดยอาจเปิดใช้แบบทดลองได้โดยการตั้งค่า --+incompatible_enable_deprecated_label_apis
เลิกใช้งานแล้ว ขอแนะนำให้ใช้ repo_name แทน ซึ่งไม่มีเครื่องหมาย @ นำหน้าที่ไม่จำเป็น แต่ทำงานเหมือนกันในส่วนอื่นๆ

ชื่อมาตรฐานของที่เก็บที่มีแพ็กเกจที่กำลังประเมินโดยมีเครื่องหมาย @ (@) นำหน้า 1 ตัว เช่น ในแพ็กเกจที่สร้างขึ้นโดยส่วน WORKSPACE local_repository(name='local', path=...) ค่านี้จะตั้งค่าเป็น @local ส่วนในแพ็กเกจในที่เก็บหลัก ค่านี้จะตั้งค่าเป็น @

subpackages

sequence native.subpackages(include, exclude=[], allow_empty=False)

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
include ลำดับของสตริงs; ต้องระบุ
รายการรูปแบบ glob ที่จะรวมในการสแกนแพ็กเกจย่อย
exclude ลำดับของสตริงs; ค่าเริ่มต้นคือ[]
รายการรูปแบบ glob ที่จะยกเว้นจากการสแกนแพ็กเกจย่อย
allow_empty ค่าเริ่มต้นคือ False
ระบุว่าจะแสดงข้อผิดพลาดหรือไม่หากการเรียกใช้แสดงผลรายการว่างเปล่า โดยค่าเริ่มต้น รายการว่างเปล่าจะบ่งบอกถึงข้อผิดพลาดที่อาจเกิดขึ้นในไฟล์ BUILD ซึ่งการเรียกใช้ subpackages() ไม่จำเป็น การตั้งค่าเป็น "จริง" จะทำให้ฟังก์ชันนี้ทำงานได้ในกรณีดังกล่าว