เนทีฟ

รายงานปัญหา ดูแหล่งที่มา

โมดูลในตัวเพื่อรองรับกฎแบบเนทีฟและฟังก์ชันตัวช่วยแพ็กเกจอื่นๆ กฎเนทีฟทั้งหมดจะปรากฏเป็นฟังก์ชันในโมดูลนี้ เช่น 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 ของ strings ต้องระบุ
รายการไฟล์ที่จะส่งออก
visibility sequence หรือ None ค่าเริ่มต้นคือ None
สามารถระบุการประกาศระดับการเข้าถึงได้ ไฟล์จะปรากฏให้เป้าหมายที่ระบุ หากไม่ได้ระบุการเปิดเผย ไฟล์จะสามารถมองเห็นได้ในทุกแพ็กเกจ
licenses ลำดับ ของสตริง หรือ None ค่าเริ่มต้นคือ None
ใบอนุญาตที่จะระบุ

โลก

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

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

พารามิเตอร์

พารามิเตอร์ คำอธิบาย
include sequence ของ strings ค่าเริ่มต้นคือ []
รายการรูปแบบ glob ที่จะรวม
exclude sequence ของ strings ค่าเริ่มต้นคือ []
รายการรูปแบบ glob ที่จะยกเว้น
exclude_directories ค่าเริ่มต้นคือ 1
แฟล็กว่าจะยกเว้นไดเรกทอรีหรือไม่
allow_empty ค่าเริ่มต้นคือ 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 ของ string ค่าเริ่มต้นคือ []
การแจงนับแพ็กเกจทั้งหมดในกลุ่มนี้
includes sequence ของ strings ค่าเริ่มต้นคือ []
กลุ่มแพ็กเกจอื่นๆ ที่รวมอยู่ในกลุ่มนี้

package_name

string native.package_name()

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

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 หรือ Label ต้องระบุ
สตริงป้ายกำกับอินพุตหรือออบเจ็กต์ป้ายกำกับ หากมีการส่งผ่านออบเจ็กต์ป้ายกำกับ จะส่งกลับตามที่เป็น

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