เนทีฟ

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

สมาชิก

existing_rule

unknown native.existing_rule(name)

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

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

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

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

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

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

หากเป็นไปได้ ให้หลีกเลี่ยงการใช้ฟังก์ชันนี้ ซึ่งทำให้ไฟล์ BUILD เปราะบางและขึ้นอยู่กับลำดับ นอกจากนี้ โปรดระวังว่า Conversion นี้แตกต่างจาก Conversion อีก 2 รายการของค่าแอตทริบิวต์กฎจากแบบฟอร์มภายในเป็น Starlark โดย Conversion แรกใช้โดยค่าเริ่มต้นที่คํานวณ ส่วนอีกรายการใช้โดย 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()

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

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

exports_files

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

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

พารามิเตอร์

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

โลก

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
include sequence of strings; ค่าเริ่มต้น = []
รายการรูปแบบ glob ที่จะรวม
exclude sequence of strings; ค่าเริ่มต้น = []
รายการรูปแบบ glob ที่จะยกเว้น
exclude_directories ค่าเริ่มต้น = 1
แฟล็กว่าจะยกเว้นไดเรกทอรีหรือไม่
allow_empty ค่าเริ่มต้น = ไม่เชื่อมโยง
เราอนุญาตให้รูปแบบ glob ไม่จับคู่กับข้อมูลใดๆ เลยหรือไม่ หาก "allow_เว้นว่าง" เป็น "เท็จ" รูปแบบที่รวมแต่ละรายการจะต้องตรงกับบางอย่าง และผลลัพธ์สุดท้ายต้องไม่ว่างเปล่า (หลังจากการจับคู่ของรูปแบบ "ยกเว้น" จะถูกยกเว้น)

package_group

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

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

พารามิเตอร์

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

package_name

string native.package_name()

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

repository_name

string native.repository_name()

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

แพ็กเกจย่อย

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

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

พารามิเตอร์

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