เนทีฟ

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

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

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

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

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

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

พารามิเตอร์

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

existing_rules

unknown native.existing_rules()

แสดงผลออบเจ็กต์เหมือนคำสั่งที่เปลี่ยนแปลงไม่ได้ซึ่งอธิบายกฎจนถึงปัจจุบันในแพ็กเกจของเทรดนี้ แต่ละรายการของออบเจ็กต์ที่มีลักษณะเหมือนคำสั่งจะแมปชื่อของอินสแตนซ์กฎกับผลลัพธ์ที่ 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 ไม่เป็นระเบียบและขึ้นอยู่กับลำดับ นอกจากนี้ หากตั้งค่าแฟล็ก --noincompatible_existing_rules_immutable_view ฟังก์ชันนี้อาจมีค่าใช้จ่ายสูง โดยเฉพาะหากเรียกใช้ภายในลูป

exports_files

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

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

พารามิเตอร์

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

Glob

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 default = 1
การแจ้งว่าจะยกเว้นไดเรกทอรีหรือไม่
allow_empty default = unbound
เราอนุญาตให้รูปแบบ glob ไม่ตรงกันหรือไม่ หาก "allow_เว้นว่าง" เป็น "เท็จ" รูปแบบ "รวม" แต่ละรายการจะต้องตรงกับรายการ และผลลัพธ์สุดท้ายต้องไม่ว่างเปล่า (หลังจากยกเว้นรูปแบบ "ยกเว้น" ที่ตรงกันแล้ว)

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 ต้องระบุ
ชื่อที่ไม่ซ้ำกันสำหรับกฎนี้
packages sequence of strings; default = []
การแจกแจงแพ็กเกจทั้งหมดในกลุ่มนี้
includes sequence of strings; default = []
กลุ่มแพ็กเกจอื่นๆ ที่รวมอยู่ในกลุ่มนี้

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 และมาโครที่เรียกใช้โดยตรงหรือโดยอ้อมเท่านั้น และไม่สามารถเรียกใช้ในฟังก์ชันการใช้งานกฎ (ตัวอย่างเช่น)

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

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

พารามิเตอร์

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

repo_name

string native.repo_name()

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

repository_name

string native.repository_name()

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

Canonical Name ของที่เก็บที่มีแพ็กเกจที่กำลังประเมินอยู่ โดยมีสัญลักษณ์ @ เดี่ยว (@) นำหน้า เช่น ในแพ็กเกจที่เรียกใช้โดย stanza ของ WORKSPACE local_repository(name='local', path=...) ระบบจะตั้งค่าเป็น @local ในแพ็กเกจในที่เก็บหลัก ระบบจะตั้งค่าเป็น @

แพ็กเกจย่อย

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

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

พารามิเตอร์

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