gốc

Một mô-đun tích hợp sẵn để hỗ trợ các quy tắc gốc và các hàm trợ giúp gói khác. Tất cả các quy tắc gốc đều xuất hiện dưới dạng hàm trong mô-đun này, ví dụ: native.cc_library. Xin lưu ý rằng mô-đun gốc chỉ có trong giai đoạn tải (tức là đối với macro, không phải đối với việc triển khai quy tắc). Các thuộc tính sẽ bỏ qua None giá trị và coi như thuộc tính đó chưa được đặt.
Bạn cũng có thể sử dụng các hàm sau:

Thành phần

existing_rule

unknown native.existing_rule(name)

Trả về một đối tượng bất biến giống từ điển, mô tả các thuộc tính của một quy tắc được tạo thực thể trong gói của luồng này hoặc None nếu không có thực thể quy tắc nào có tên đó.

Ở đây, một đối tượng bất biến giống từ điển có nghĩa là một đối tượng bất biến sâu x hỗ trợ hoạt động lặp lại giống từ điển, len(x), name in x, x[name], x.get(name), x.items(), x.keys(), và x.values().

Nếu cờ --noincompatible_existing_rules_immutable_view được đặt, thì thay vào đó, hàm này sẽ trả về một từ điển mới có thể thay đổi với cùng nội dung.

Kết quả chứa một mục cho từng thuộc tính, ngoại trừ các thuộc tính riêng tư (tên không bắt đầu bằng một chữ cái) và một số loại thuộc tính cũ không thể biểu thị. Ngoài ra, từ điển này còn chứa các mục nhập cho namekind của thực thể quy tắc (ví dụ: 'cc_binary').

Giá trị của kết quả biểu thị giá trị thuộc tính như sau:

  • Các thuộc tính thuộc loại str, int và bool được biểu thị nguyên trạng.
  • Nhãn được chuyển đổi thành chuỗi có dạng ':foo' cho các mục tiêu trong cùng một gói hoặc '//pkg:name' cho các mục tiêu trong một gói khác.
  • Danh sách được biểu thị dưới dạng bộ và từ điển được chuyển đổi thành từ điển mới, có thể thay đổi. Các phần tử của chúng được chuyển đổi đệ quy theo cùng một cách.
  • Giá trị select được trả về với nội dung được chuyển đổi như mô tả ở trên.
  • Các thuộc tính mà không có giá trị nào được chỉ định trong quá trình tạo thực thể quy tắc và có giá trị mặc định được tính toán sẽ bị loại trừ khỏi kết quả. (Không thể tính toán giá trị mặc định được tính toán cho đến giai đoạn phân tích.).

Nếu có thể, hãy tránh sử dụng hàm này. Hàm này khiến các tệp BUILD trở nên dễ bị lỗi và phụ thuộc vào thứ tự. Ngoài ra, hãy lưu ý rằng hàm này khác biệt một chút so với 2 lần chuyển đổi khác của các giá trị thuộc tính quy tắc từ dạng nội bộ sang Starlark: một lần được sử dụng bởi các giá trị mặc định được tính toán, lần còn lại được sử dụng bởi ctx.attr.foo.

Tham số

Tham số Mô tả
name bắt buộc
Tên của mục tiêu.

existing_rules

unknown native.existing_rules()

Trả về một đối tượng bất biến giống từ điển, mô tả các quy tắc cho đến nay được tạo thực thể trong gói của luồng này. Mỗi mục trong đối tượng giống từ điển này sẽ liên kết tên của thực thể quy tắc với kết quả mà existing_rule(name) sẽ trả về.

Ở đây, một đối tượng bất biến giống từ điển có nghĩa là một đối tượng bất biến sâu x hỗ trợ hoạt động lặp lại giống từ điển, len(x), name in x, x[name], x.get(name), x.items(), x.keys(), và x.values().

Nếu cờ --noincompatible_existing_rules_immutable_view được đặt, thì thay vào đó, hàm này sẽ trả về một từ điển mới có thể thay đổi với cùng nội dung.

Lưu ý: Nếu có thể, hãy tránh sử dụng hàm này. Hàm này khiến các tệp BUILD trở nên dễ bị lỗi và phụ thuộc vào thứ tự. Hơn nữa, nếu cờ --noincompatible_existing_rules_immutable_view được đặt, thì hàm này có thể rất tốn kém, đặc biệt là nếu được gọi trong một vòng lặp.

exports_files

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

Chỉ định danh sách các tệp thuộc gói này được xuất sang các gói khác.

Tham số

Tham số Mô tả
srcs thứ tự của các chuỗi; bắt buộc
Danh sách các tệp cần xuất.
visibility thứ tự; hoặc None; mặc định là None
Bạn có thể chỉ định một khai báo về khả năng hiển thị. Các tệp sẽ hiển thị cho những mục tiêu được chỉ định. Nếu bạn không chỉ định chế độ hiển thị, thì mọi gói đều có thể nhìn thấy các tệp.
licenses thứ tự của chuỗi; hoặc None; mặc định là None
. Giấy phép cần được chỉ định.

glob

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

Glob trả về một danh sách mới, có thể thay đổi và được sắp xếp, của mọi tệp trong gói hiện tại:
  • Khớp với ít nhất một mẫu trong include.
  • Không khớp với mẫu nào trong exclude (mặc định là []).
Nếu đối số exclude_directories được bật (đặt thành 1), thì các tệp thuộc loại thư mục sẽ bị bỏ qua khỏi kết quả (mặc định là 1).

Tham số

Tham số Mô tả
include thứ tự của các chuỗi; mặc định là []
Danh sách các mẫu glob cần đưa vào.
exclude thứ tự của các chuỗi; mặc định là []
Danh sách các mẫu glob cần loại trừ.
exclude_directories mặc định là 1
Cờ cho biết có loại trừ thư mục hay không.
allow_empty mặc định là unbound
Liệu chúng ta có cho phép các mẫu glob không khớp với nội dung nào hay không. Nếu "allow_empty" là False, thì mỗi mẫu "include" riêng lẻ phải khớp với một nội dung nào đó và kết quả cuối cùng cũng phải có nội dung (sau khi các kết quả khớp của mẫu "exclude" bị loại trừ).

module_name

string native.module_name()

Tên của mô-đun Bazel liên kết với kho lưu trữ mà gói này nằm trong đó. Nếu gói này thuộc một kho lưu trữ được xác định trong WORKSPACE thay vì MODULE.bazel, thì gói này sẽ trống. Đối với các kho lưu trữ do tiện ích mô-đun tạo, đây là tên của mô-đun lưu trữ tiện ích. Tên này giống với trường module.name xuất hiện trong module_ctx.modules. Có thể trả về None.

module_version

string native.module_version()

Phiên bản của mô-đun Bazel liên kết với kho lưu trữ mà gói này nằm trong đó. Nếu gói này thuộc một kho lưu trữ được xác định trong WORKSPACE thay vì MODULE.bazel, thì gói này sẽ trống. Đối với các kho lưu trữ do tiện ích mô-đun tạo, đây là phiên bản của mô-đun lưu trữ tiện ích. Phiên bản này giống với trường module.version xuất hiện trong module_ctx.modules. Có thể trả về None.

package_group

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

Hàm này xác định một tập hợp các gói và chỉ định một nhãn cho nhóm. Bạn có thể tham chiếu nhãn trong các thuộc tính visibility.

Tham số

Tham số Mô tả
name bắt buộc
Tên duy nhất cho quy tắc này.
packages thứ tự của chuỗis; mặc định là []
Một danh sách đầy đủ các gói trong nhóm này.
includes thứ tự của các chuỗi; mặc định là []
Các nhóm gói khác có trong nhóm này.

package_name

string native.package_name()

Tên của gói đang được đánh giá, không có tên kho lưu trữ. Ví dụ: trong tệp BUILD some/package/BUILD, giá trị của tệp này sẽ là some/package. Nếu tệp BUILD gọi một hàm được xác định trong tệp .bzl, package_name() sẽ khớp với gói tệp BUILD của trình gọi.

package_relative_label

Label native.package_relative_label(input)

Chuyển đổi chuỗi đầu vào thành một đối tượng Nhãn, trong bối cảnh của gói hiện đang được khởi chạy (tức là tệp BUILD mà macro hiện tại đang thực thi). Nếu đầu vào đã là một Label, thì đầu vào đó sẽ được trả về mà không thay đổi.

Bạn chỉ có thể gọi hàm này trong khi đánh giá tệp BUILD và các macro mà hàm này gọi trực tiếp hoặc gián tiếp; bạn không thể gọi hàm này trong (ví dụ) hàm triển khai quy tắc.

Kết quả của hàm này là cùng một giá trị Label như giá trị được tạo bằng cách truyền chuỗi đã cho vào một thuộc tính có giá trị nhãn của một mục tiêu được khai báo trong tệp BUILD.

Lưu ý về cách sử dụng: Sự khác biệt giữa hàm này và Label()Label() sử dụng bối cảnh của gói tệp .bzl đã gọi hàm này, chứ không phải gói của tệp BUILD. Sử dụng Label() khi bạn cần tham chiếu đến một mục tiêu cố định được mã hoá cứng vào macro, chẳng hạn như trình biên dịch. Sử dụng package_relative_label() khi bạn cần chuẩn hoá một chuỗi nhãn do tệp BUILD cung cấp thành một đối tượng Label. (Không có cách nào để chuyển đổi một chuỗi thành Label trong bối cảnh của một gói khác ngoài tệp BUILD hoặc tệp .bzl gọi. Vì lý do đó, các macro bên ngoài luôn nên ưu tiên truyền các đối tượng Nhãn đến các macro bên trong thay vì các chuỗi nhãn.)

Tham số

Tham số Mô tả
input chuỗi; hoặc Nhãn; bắt buộc
Chuỗi nhãn đầu vào hoặc đối tượng Nhãn. Nếu một đối tượng Nhãn được truyền, thì đối tượng đó sẽ được trả về nguyên trạng.

repo_name

string native.repo_name()

Tên chính tắc của kho lưu trữ chứa gói hiện đang được đánh giá, không có dấu @ ở đầu.

repository_name

string native.repository_name()

Thử nghiệm. API này đang trong giai đoạn thử nghiệm và có thể thay đổi bất cứ lúc nào. Vui lòng không phụ thuộc vào API này. Bạn có thể bật API này trên cơ sở thử nghiệm bằng cách đặt --+incompatible_enable_deprecated_label_apis
Không dùng nữa. Bạn nên sử dụng repo_name thay thế. Tên này không chứa dấu @ ở đầu không cần thiết, nhưng hoạt động giống hệt như vậy.

Tên chính tắc của kho lưu trữ chứa gói hiện đang được đánh giá, có một dấu @ (@) ở đầu. Ví dụ: trong các gói được gọi để tồn tại bằng câu lệnh WORKSPACE local_repository(name='local', path=...) tên này sẽ được đặt thành @local. Trong các gói trong kho lưu trữ chính, tên này sẽ được đặt thành @.

subpackages

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

Trả về một danh sách mới có thể thay đổi của mọi gói con trực tiếp của gói hiện tại, bất kể độ sâu của thư mục hệ thống tệp. Danh sách được trả về được sắp xếp và chứa tên của các gói con liên quan đến gói hiện tại. Bạn nên ưu tiên sử dụng các phương thức trong mô-đun bazel_skylib.subpackages thay vì gọi trực tiếp hàm này.

Tham số

Tham số Mô tả
include thứ tự của các chuỗi; bắt buộc
Danh sách các mẫu glob cần đưa vào quá trình quét gói con.
exclude thứ tự của chuỗis; mặc định là []
Danh sách các mẫu glob cần loại trừ khỏi quá trình quét gói con.
allow_empty mặc định là False
Liệu chúng ta có gặp lỗi nếu lệnh gọi trả về một danh sách trống hay không. Theo mặc định, danh sách trống cho biết có thể xảy ra lỗi trong tệp BUILD, trong đó lệnh gọi đến subpackages() là không cần thiết. Việc đặt thành true cho phép hàm này thành công trong trường hợp đó.