เนทีฟ

7.3 · 7.2 · 7.1 · 7.0 · 6.5

โมดูลในตัวเพื่อรองรับกฎเนทีฟและฟังก์ชันตัวช่วยแพ็กเกจอื่นๆ กฎเนทีฟทั้งหมดจะปรากฏเป็นฟังก์ชันในโมดูลนี้ เช่น 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()

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

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

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

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

พารามิเตอร์

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

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()

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

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 ลําดับสตริง ค่าเริ่มต้นคือ []
โดยจะเป็นรายการรูปแบบทั่วไปที่จะยกเว้น
exclude_directories int; ค่าเริ่มต้นคือ 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 string; ต้องระบุ
ชื่อที่ไม่ซ้ำกันของกฎนี้
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()

Canonical Name ของที่เก็บซึ่งมีแพ็กเกจที่กำลังประเมินอยู่ในปัจจุบัน โดยไม่มีเครื่องหมาย @ นำหน้า

repository_name

string native.repository_name()

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

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

แพ็กเกจย่อย

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

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

พารามิเตอร์

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