เนทีฟ

รายงานปัญหา ดูแหล่งที่มา Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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

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

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

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

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

พารามิเตอร์

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

existing_rules

unknown native.existing_rules()

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

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

หมายเหตุ: หลีกเลี่ยงการใช้ฟังก์ชันนี้หากเป็นไปได้ ซึ่งทำให้ไฟล์ 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 ลำดับของสตริง ค่าเริ่มต้นคือ []
รายการรูปแบบ Glob ที่จะยกเว้น
exclude_directories int; ค่าเริ่มต้นคือ 1
แฟล็กที่ระบุว่าจะยกเว้นไดเรกทอรีหรือไม่
allow_empty ค่าเริ่มต้นคือ unbound
เราอนุญาตให้รูปแบบ Glob ไม่ตรงกับอะไรเลยหรือไม่ หาก `allow_empty` เป็น False รูปแบบการรวมแต่ละรายการต้องตรงกับรายการใดรายการหนึ่ง และผลลัพธ์สุดท้ายต้องไม่ว่าง (หลังจากยกเว้นรายการที่ตรงกับรูปแบบ `exclude`)

module_name

string native.module_name()

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

module_version

string native.module_version()

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

package_group

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
name สตริง; ต้องระบุ
ชื่อที่ไม่ซ้ำกันสำหรับกฎนี้
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 สตริงหรือป้ายกำกับ ต้องระบุ
สตริงป้ายกำกับอินพุตหรือออบเจ็กต์ป้ายกำกับ หากมีการส่งออบเจ็กต์ป้ายกำกับ ระบบจะแสดงผลออบเจ็กต์ดังกล่าวตามที่ส่ง

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