เนทีฟ

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

สมาชิก

existing_rule

unknown native.existing_rule(name)

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

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

หากตั้งค่า Flag --noincompatible_existing_rules_immutable_view ระบบจะแสดงผล Dict แบบปรับเปลี่ยนใหม่ที่มีเนื้อหาเดียวกันแทน

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

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

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

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

พารามิเตอร์

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

existing_rules

unknown native.existing_rules()

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

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

หากตั้งค่า Flag --noincompatible_existing_rules_immutable_view ระบบจะแสดงผล Dict แบบปรับเปลี่ยนใหม่ที่มีเนื้อหาเดียวกันแทน

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

exports_files

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

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

พารามิเตอร์

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

glob

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

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

พารามิเตอร์

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

module_name

string native.module_name()

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

module_version

string native.module_version()

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

package_group

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

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

พารามิเตอร์

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

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)

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

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

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

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

พารามิเตอร์

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

repo_name

string native.repo_name()

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

repository_name

string native.repository_name()

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

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

แพ็กเกจย่อย

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

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

พารามิเตอร์

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