gốc

Báo cáo vấn đề Xem nguồn Nightly · 7.4 .

Một mô-đun tích hợp sẵn để hỗ trợ các quy tắc gốc và các chức năng trợ giúp gói khác. Tất 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à cho các macro, chứ không phải để triển khai quy tắc). Các thuộc tính sẽ bỏ qua các giá trị None và coi như các thuộc tính đó chưa được đặt.
Các hàm sau đây cũng có sẵn:

Hội viên

existing_rule

unknown native.existing_rule(name)

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

Ở đây, đối tượng giống như tập hợp không thể thay đổi có nghĩa là một đối tượng x không thể thay đổi sâu sắc hỗ trợ hoạt động lặp lại giống như tập hợp, len(x), name in x, x[name], x.get(name), x.items(), x.keys()x.values().

Kết quả chứa một mục nhập cho mỗi 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 chữ cái) và một số loại thuộc tính cũ không thể biểu thị. Ngoài ra, tập hợp này chứa các mục nhập cho namekind của thực thể quy tắc (ví dụ: 'cc_binary').

Các giá trị của kết quả đại diện cho các 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ị như hiện có.
  • 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 các bộ dữ liệu và các từ điển được chuyển đổi thành các 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ề cùng với nội dung của các giá trị đó đã biến đổi như mô tả ở trên.
  • Các thuộc tính không có giá trị nào được chỉ định trong quá trình tạo quy tắc và có giá trị mặc định được tính 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 chỉ sử dụng hàm này trong các hàm triển khai của macro tượng trưng cho trình hoàn tất quy tắc. Bạn không nên sử dụng hàm này trong các ngữ cảnh khác và hàm này sẽ bị vô hiệu hoá trong bản phát hành Bazel trong tương lai; hàm này khiến tệp BUILD trở nên dễ hỏng và phụ thuộc vào thứ tự. Ngoài ra, hãy lưu ý rằng cách chuyển đổi này khác một chút so với hai cách chuyển đổi khác của giá trị thuộc tính quy tắc từ dạng nội bộ sang Starlark: một cách được sử dụng bởi giá trị mặc định được tính toán, cách còn lại được sử dụng bởi ctx.attr.foo.

Thông số

Thông số Mô tả
name string; 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 giống như tập hợp không thể thay đổi mô tả các quy tắc đã được tạo bản sao trong gói của luồng này. Mỗi mục của đối tượng giống như tập hợp từ điển sẽ liên kết tên của thực thể quy tắc với kết quả mà existing_rule(name) trả về.

Ở đây, đối tượng giống như tập hợp không thể thay đổi có nghĩa là một đối tượng x không thể thay đổi sâu sắc hỗ trợ hoạt động lặp lại giống như tập hợp, len(x), name in x, x[name], x.get(name), x.items(), x.keys()x.values().

Nếu có thể, hãy chỉ sử dụng hàm này trong các hàm triển khai của macro tượng trưng cho trình hoàn tất quy tắc. Bạn không nên sử dụng hàm này trong các ngữ cảnh khác và sẽ bị tắt trong bản phát hành Bazel sau này; điều này làm cho các tệp BUILD dễ vỡ và phụ thuộc vào thứ tự.

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.

Thông số

Thông số Mô tả
srcs trình tự các chuỗi; bắt buộc
Danh sách tệp cần xuất.
visibility trình tự; hoặc None; mặc định là None
Bạn có thể chỉ định nội dung khai báo chế độ hiển thị. Các tệp sẽ hiển thị cho các mục tiêu đã chỉ định. Nếu bạn không chỉ định chế độ hiển thị, thì mọi gói đều có thể thấy các tệp đó.
licenses trình tự của chuỗi; hoặc None; giá trị mặc định là None
Giấy phép cần 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, đượ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 bạn bật đối số exclude_directories (đặ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).

Thông số

Thông số Mô tả
include trình tự của chuỗi; mặc định là []
Danh sách các mẫu glob cần đưa vào.
exclude trình tự của chuỗi; mặc định là []
Danh sách các mẫu glob cần loại trừ.
exclude_directories int; 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 bất kỳ giá trị nào hay không. Nếu "allow_empty" là False, thì mỗi mẫu bao gồm 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 không rỗng (sau khi loại trừ các kết quả khớp với mẫu "exclude").

module_name

string native.module_name()

Tên của mô-đun Bazel liên kết với kho lưu trữ chứa gói này. Nếu gói này là từ 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 repos được tạo bởi tiện ích mô-đun, đây là tên của mô-đun lưu trữ tiện ích. Trường này giống với trường module.name mà bạn thấy 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ữ chứa gói này. Nếu gói này là từ 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. Trường này giống với trường module.version 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 nhóm gói và gán nhãn cho nhóm đó. Bạn có thể tham chiếu nhãn trong các thuộc tính visibility.

Thông số

Thông số Mô tả
name string; bắt buộc
Tên duy nhất của quy tắc này.
packages trình tự của chuỗi; mặc định là []
Liệt kê đầy đủ các gói trong nhóm này.
includes trình tự của 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 bao gồm 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, thì package_name() sẽ khớp với gói tệp BUILD của phương thức gọi.

package_relative_label

Label native.package_relative_label(input)

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

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

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

Lưu ý về cách sử dụng: Điểm khác biệt giữa hàm này và Label()Label() sử dụng ngữ cảnh của gói tệp .bzl đã gọi hàm này, chứ không phải gói 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á chuỗi nhãn mà tệp BUILD cung cấp cho đối tượng Label. (Không có cách nào để chuyển đổi một chuỗi thành Label trong ngữ cảnh của một gói ngoài tệp BUILD hoặc tệp .bzl gọi. Do đó, các macro bên ngoài phải luôn ưu tiên truyền đối tượng Nhãn đến các macro bên trong thay vì chuỗi nhãn.)

Thông số

Thông số Mô tả
input string; hoặc Label; 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, đối tượng đó sẽ được trả về nguyên trạng.

repo_name

string native.repo_name()

Tên chuẩn của kho lưu trữ chứa gói đ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 tính năng này. Bạn có thể bật tính năng 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. Thay vào đó, hãy sử dụng repo_name. Kiểu này không chứa dấu @ dẫn đầu giả mạo nhưng hoạt động giống hệt như vậy.

Tên chuẩn của kho lưu trữ chứa gói đang được đánh giá, có một dấu @ (@) ở đầu. Ví dụ: trong các gói được tạo bởi khổ WORKSPACE local_repository(name='local', path=...), giá trị này sẽ được đặt thành @local. Trong các gói trong kho lưu trữ chính, giá trị này sẽ được đặt thành @.

gói con

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ể chiều sâu thư mục hệ thống tệp. Danh sách trả về được sắp xếp và chứa tên của các gói con tương ứng với gói hiện tại. Bạn nê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.

Thông số

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