Tệp .bzl

Báo cáo vấn đề Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Các phương thức chung có trong tất cả các tệp .bzl.

Hội viên

analysis_test_transition

transition analysis_test_transition(settings)

Tạo một quá trình chuyển đổi cấu hình sẽ được áp dụng cho các phần phụ thuộc của quy tắc kiểm thử phân tích. Bạn chỉ có thể áp dụng quá trình chuyển đổi này cho các thuộc tính của quy tắc có analysis_test = True. Các quy tắc như vậy bị hạn chế về khả năng (ví dụ: kích thước của cây phần phụ thuộc bị giới hạn), vì vậy, các hiệu ứng chuyển đổi được tạo bằng hàm này bị hạn chế về phạm vi tiềm năng so với các hiệu ứng chuyển đổi được tạo bằng transition().

Hàm này chủ yếu được thiết kế để hỗ trợ thư viện cốt lõi Analysis Test Framework. Hãy xem tài liệu (hoặc cách triển khai) của công cụ này để biết các phương pháp hay nhất.

Thông số

Thông số Mô tả
settings required
Từ điển chứa thông tin về các chế độ cài đặt cấu hình mà quá trình chuyển đổi cấu hình này sẽ đặt. Khoá là nhãn cài đặt bản dựng và giá trị là giá trị mới sau khi chuyển đổi. Tất cả các chế độ cài đặt khác đều không thay đổi. Sử dụng phương thức này để khai báo các chế độ cài đặt cấu hình cụ thể mà một kiểm thử phân tích cần được thiết lập để vượt qua.

chương trình thành phần

Aspect aspect(implementation, attr_aspects=[], attrs={}, required_providers=[], required_aspect_providers=[], provides=[], requires=[], fragments=[], host_fragments=[], toolchains=[], incompatible_use_toolchain_transition=False, doc=None, *, apply_to_generating_rules=False, exec_compatible_with=[], exec_groups=None, subrules=[])

Tạo một khía cạnh mới. Kết quả của hàm này phải được lưu trữ trong một giá trị chung. Vui lòng xem giới thiệu về Khía cạnh để biết thêm thông tin chi tiết.

Thông số

Thông số Mô tả
implementation bắt buộc
Một hàm Starlark triển khai khía cạnh này, có đúng hai tham số: Target (mục tiêu mà khía cạnh được áp dụng) và ctx (ngữ cảnh quy tắc mà mục tiêu được tạo). Các thuộc tính của mục tiêu có sẵn thông qua trường ctx.rule. Hàm này được đánh giá trong giai đoạn phân tích cho từng ứng dụng của một khía cạnh đối với một mục tiêu.
attr_aspects sequence của strings; giá trị mặc định là []
Danh sách tên thuộc tính. Khía cạnh này sẽ lan truyền theo các phần phụ thuộc được chỉ định trong thuộc tính của một mục tiêu có những tên này. Các giá trị phổ biến ở đây bao gồm depsexports. Danh sách này cũng có thể chứa một chuỗi duy nhất "*" để truyền dọc theo tất cả các phần phụ thuộc của một mục tiêu.
attrs dict; default is {}
Từ điển khai báo tất cả các thuộc tính của khía cạnh. Nó liên kết từ tên thuộc tính đến đối tượng thuộc tính, chẳng hạn như `attr.label` hoặc `attr.string` (xem mô-đun attr). Các thuộc tính khía cạnh có sẵn cho hàm triển khai dưới dạng các trường của tham số ctx.

Các thuộc tính ngầm định bắt đầu bằng _ phải có giá trị mặc định và có kiểu label hoặc label_list.

Thuộc tính rõ ràng phải có loại string và phải sử dụng hạn chế values. Các thuộc tính rõ ràng hạn chế khía cạnh chỉ được dùng với những quy tắc có các thuộc tính cùng tên, loại và giá trị hợp lệ theo quy tắc hạn chế.

required_providers mặc định là []
Thuộc tính này cho phép khía cạnh giới hạn việc truyền dữ liệu chỉ đến những mục tiêu có quy tắc quảng cáo nhà cung cấp bắt buộc. Giá trị này phải là một danh sách chứa các nhà cung cấp riêng lẻ hoặc danh sách nhà cung cấp, nhưng không được chứa cả hai. Ví dụ: [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] là giá trị hợp lệ, còn [FooInfo, BarInfo, [BazInfo, QuxInfo]] thì không.

Danh sách nhà cung cấp không lồng nhau sẽ tự động được chuyển đổi thành danh sách chứa một danh sách nhà cung cấp. Tức là [FooInfo, BarInfo] sẽ tự động được chuyển đổi thành [[FooInfo, BarInfo]].

Để một số quy tắc (ví dụ: some_rule) nhắm đến một khía cạnh, some_rule phải quảng cáo tất cả nhà cung cấp trong ít nhất một danh sách nhà cung cấp bắt buộc. Ví dụ: nếu required_providers của một khía cạnh là [[FooInfo], [BarInfo], [BazInfo, QuxInfo]], thì khía cạnh này có thể thấy các mục tiêu some_rule nếu và chỉ khi some_rule cung cấp FooInfo, hoặc BarInfo, hoặc cả BazInfo QuxInfo.

required_aspect_providers mặc định là []
Thuộc tính này cho phép khía cạnh này kiểm tra các khía cạnh khác. Giá trị này phải là một danh sách chứa các nhà cung cấp riêng lẻ hoặc danh sách nhà cung cấp, nhưng không được chứa cả hai. Ví dụ: [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] là giá trị hợp lệ, còn [FooInfo, BarInfo, [BazInfo, QuxInfo]] thì không.

Danh sách nhà cung cấp không lồng nhau sẽ tự động được chuyển đổi thành danh sách chứa một danh sách nhà cung cấp. Tức là [FooInfo, BarInfo] sẽ tự động được chuyển đổi thành [[FooInfo, BarInfo]].

Để hiển thị một khía cạnh khác (ví dụ: other_aspect) cho khía cạnh này, other_aspect phải cung cấp tất cả các nhà cung cấp từ ít nhất một trong các danh sách. Trong ví dụ về [[FooInfo], [BarInfo], [BazInfo, QuxInfo]], khía cạnh này có thể thấy other_aspect nếu và chỉ khi other_aspect cung cấp FooInfo, hoặc BarInfo, hoặc cả BazInfo QuxInfo.

provides mặc định là []
Danh sách các nhà cung cấp mà hàm triển khai phải trả về.

Sẽ xảy ra lỗi nếu hàm triển khai bỏ qua bất kỳ loại trình cung cấp nào được liệt kê ở đây trong giá trị trả về. Tuy nhiên, hàm triển khai có thể trả về các trình cung cấp bổ sung không có trong danh sách tại đây.

Mỗi phần tử của danh sách là một đối tượng *Info do provider() trả về, ngoại trừ việc nhà cung cấp cũ được biểu thị bằng tên chuỗi của nhà cung cấp đó.Khi mục tiêu của quy tắc được dùng làm phần phụ thuộc cho mục tiêu khai báo nhà cung cấp bắt buộc, bạn không cần chỉ định nhà cung cấp đó ở đây. Hàm triển khai trả về là đủ. Tuy nhiên, bạn nên chỉ định tham số này (mặc dù không bắt buộc). Tuy nhiên, trường required_providers của khía cạnh yêu cầu bạn phải chỉ định nhà cung cấp tại đây.

requires sequence của Aspects; giá trị mặc định là []
Danh sách các khía cạnh cần được truyền trước khía cạnh này.
fragments sequence của strings; mặc định là []
Danh sách tên của các mảnh cấu hình mà khía cạnh yêu cầu trong cấu hình mục tiêu.
host_fragments sequence của strings; mặc định là []
Danh sách tên của các đoạn cấu hình mà khía cạnh yêu cầu trong cấu hình máy chủ lưu trữ.
toolchains sequence; default is []
Nếu được đặt, tập hợp các chuỗi công cụ mà quy tắc này yêu cầu. Danh sách này có thể chứa các đối tượng String, Label hoặc StarlarkToolchainTypeApi, theo bất kỳ tổ hợp nào. Các chuỗi công cụ sẽ được tìm thấy bằng cách kiểm tra nền tảng hiện tại và được cung cấp cho việc triển khai quy tắc thông qua ctx.toolchain.
incompatible_use_toolchain_transition mặc định là False
Không dùng nữa, tham số này không còn được sử dụng và cần bị xoá.
doc string; hoặc None; mặc định là None
Nội dung mô tả về khía cạnh mà các công cụ tạo tài liệu có thể trích xuất.
apply_to_generating_rules mặc định là False
Nếu đúng, khi được áp dụng cho một tệp đầu ra, khía cạnh này sẽ áp dụng cho quy tắc tạo của tệp đầu ra.

Ví dụ: giả sử một khía cạnh truyền bá một cách bắc cầu thông qua thuộc tính "deps" và được áp dụng cho mục tiêu "alpha". Giả sử "alpha" có "deps = [':beta_output']", trong đó "beta_output" là một đầu ra đã khai báo của mục tiêu "beta". Giả sử "beta" có mục tiêu "charlie" là một trong các "deps". Nếu "apply_to_generating_rules=True" cho khía cạnh, thì khía cạnh sẽ truyền bá thông qua "alpha", "beta" và "charlie". Nếu là False, thì khía cạnh sẽ chỉ truyền bá đến "alpha".

Theo mặc định là False.

exec_compatible_with sequence của strings; giá trị mặc định là []
Một danh sách các ràng buộc trên nền tảng thực thi áp dụng cho tất cả các phiên bản của khía cạnh này.
exec_groups dict; hoặc None; mặc định là None
Từ điển tên nhóm thực thi (chuỗi) thành exec_groups. Nếu được đặt, cho phép các khía cạnh chạy các thao tác trên nhiều nền tảng thực thi trong một phiên bản duy nhất. Hãy xem tài liệu về nhóm thực thi để biết thêm thông tin.
subrules sequence của Subrules; mặc định là []
Thử nghiệm: danh sách các quy tắc phụ mà khía cạnh này sử dụng.

configuration_field

LateBoundDefault configuration_field(fragment, name)

Tham chiếu đến giá trị mặc định được liên kết muộn cho một thuộc tính thuộc loại label. Một giá trị được "liên kết muộn" nếu giá trị đó yêu cầu cấu hình được tạo trước khi xác định giá trị. Mọi thuộc tính sử dụng giá trị này đều phải là thuộc tính riêng tư.

Ví dụ về cách sử dụng:

Xác định thuộc tính quy tắc:

'_foo': attr.label(default=configuration_field(fragment='java', name='toolchain'))

Truy cập vào quá trình triển khai quy tắc:

  def _rule_impl(ctx):
    foo_info = ctx.attr._foo
    ...

Thông số

Thông số Mô tả
fragment bắt buộc
Tên của một đoạn cấu hình chứa giá trị liên kết muộn.
name bắt buộc
Tên của giá trị cần lấy từ đoạn cấu hình.

depsset

depset depset(direct=None, order="default", *, transitive=None)

Tạo một depset. Tham số direct là danh sách các phần tử trực tiếp của depset, còn tham số transitive là danh sách các depset mà phần tử của chúng trở thành phần tử gián tiếp của depset được tạo. Thứ tự mà các phần tử được trả về khi depset được chuyển đổi thành danh sách được chỉ định bằng tham số order. Hãy xem bài viết Tổng quan về Depset để biết thêm thông tin.

Tất cả các phần tử (trực tiếp và gián tiếp) của một depset phải thuộc cùng một loại, như được biểu thị bằng biểu thức type(x).

Vì một tập hợp dựa trên hàm băm được dùng để loại bỏ các phần tử trùng lặp trong quá trình lặp lại, nên tất cả các phần tử của depset đều phải có thể băm. Tuy nhiên, bất biến này hiện không được kiểm tra nhất quán trong tất cả các hàm khởi tạo. Sử dụng cờ --incompatible_always_check_depset_elements để bật tính năng kiểm tra nhất quán; đây sẽ là hành vi mặc định trong các bản phát hành sau này; hãy xem Vấn đề 10313.

Ngoài ra, các phần tử hiện phải là bất biến, mặc dù hạn chế này sẽ được nới lỏng trong tương lai.

Thứ tự của depset được tạo phải tương thích với thứ tự của các depset transitive. Thứ tự "default" tương thích với mọi thứ tự khác, tất cả các thứ tự khác chỉ tương thích với chính chúng.

Thông số

Thông số Mô tả
direct sequence; hoặc None; mặc định là None
Một danh sách các phần tử trực tiếp của một depset.
order mặc định là "default"
Chiến lược duyệt qua cho depset mới. Hãy xem tại đây để biết các giá trị có thể có.
transitive sequence của depset; hoặc None; mặc định là None
Danh sách các depset mà các phần tử sẽ trở thành phần tử gián tiếp của depset.

exec_group

exec_group exec_group(toolchains=[], exec_compatible_with=[])

Tạo một nhóm thực thi có thể dùng để tạo các hành động cho một nền tảng thực thi cụ thể trong quá trình triển khai quy tắc.

Thông số

Thông số Mô tả
toolchains sequence; mặc định là []
Bộ công cụ mà nhóm thực thi này yêu cầu. Danh sách này có thể chứa các đối tượng String, Label hoặc StarlarkToolchainTypeApi, theo bất kỳ tổ hợp nào.
exec_compatible_with sequence của strings; giá trị mặc định là []
Danh sách các điều kiện ràng buộc trên nền tảng thực thi.

module_extension

unknown module_extension(implementation, *, tag_classes={}, doc=None, environ=[], os_dependent=False, arch_dependent=False)

Tạo một tiện ích mô-đun mới. Lưu trữ giá trị này trong một giá trị chung để có thể xuất và sử dụng trong tệp MODULE.bazel.

Thông số

Thông số Mô tả
implementation bắt buộc
Hàm triển khai tiện ích mô-đun này. Phải nhận một tham số duy nhất, module_ctx. Hàm này được gọi một lần khi bắt đầu quá trình tạo để xác định tập hợp các kho lưu trữ có sẵn.
tag_classes mặc định là {}
Từ điển để khai báo tất cả các lớp thẻ mà tiện ích sử dụng. Nó ánh xạ từ tên của lớp thẻ đến một đối tượng tag_class.
doc string; hoặc None; default is None
Nội dung mô tả về tiện ích mô-đun mà các công cụ tạo tài liệu có thể trích xuất.
environ sequence của strings; mặc định là []
Cung cấp danh sách các biến môi trường mà tiện ích mô-đun này phụ thuộc vào. Nếu một biến môi trường trong danh sách đó thay đổi, tiện ích sẽ được đánh giá lại.
os_dependent mặc định là False
Cho biết liệu tiện ích này có phụ thuộc vào hệ điều hành hay không
arch_dependent mặc định là False
Cho biết liệu tiện ích này có phụ thuộc vào cấu trúc hay không

provider

unknown provider(doc=None, *, fields=None, init=None)

Xác định một biểu tượng nhà cung cấp. Bạn có thể khởi tạo trình cung cấp bằng cách gọi trình cung cấp đó hoặc sử dụng trực tiếp làm khoá để truy xuất một phiên bản của trình cung cấp đó từ một đích đến. Ví dụ:
MyInfo = provider()
...
def _my_library_impl(ctx):
    ...
    my_info = MyInfo(x = 2, y = 3)
    # my_info.x == 2
    # my_info.y == 3
    ...

Hãy xem Quy tắc (Nhà cung cấp) để biết hướng dẫn toàn diện về cách sử dụng nhà cung cấp.

Trả về giá trị có thể gọi Provider nếu bạn không chỉ định init.

Nếu init được chỉ định, hàm sẽ trả về một bộ gồm 2 phần tử: giá trị có thể gọi Provider và giá trị có thể gọi hàm khởi tạo thô. Hãy xem Quy tắc (Khởi tạo tuỳ chỉnh của nhà cung cấp tuỳ chỉnh) và nội dung thảo luận về tham số init bên dưới để biết thông tin chi tiết.

Thông số

Thông số Mô tả
doc string; hoặc None; mặc định là None
Nội dung mô tả về nhà cung cấp mà các công cụ tạo tài liệu có thể trích xuất.
fields sequence của string; hoặc dict; hoặc None; mặc định là None
Nếu được chỉ định, sẽ hạn chế tập hợp các trường được phép.
Các giá trị có thể là:
  • danh sách các trường:
    provider(fields = ['a', 'b'])

  • tên trường từ điển -> tài liệu:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
Tất cả các trường đều không bắt buộc.
init có thể gọi; hoặc None; mặc định là None
Một lệnh gọi lại không bắt buộc để xử lý trước và xác thực các giá trị trường của nhà cung cấp trong quá trình tạo thực thể. Nếu bạn chỉ định init, provider() sẽ trả về một bộ gồm 2 phần tử: biểu tượng nhà cung cấp thông thường và một trình khởi tạo thô.

Sau đây là nội dung mô tả chính xác; hãy xem Quy tắc (Khởi tạo tuỳ chỉnh nhà cung cấp) để biết nội dung thảo luận và các trường hợp sử dụng trực quan.

Giả sử P là biểu tượng nhà cung cấp được tạo bằng cách gọi provider(). Về mặt khái niệm, một phiên bản của P được tạo bằng cách gọi hàm dựng mặc định c(*args, **kwargs), hàm này sẽ thực hiện những việc sau:

  • Nếu args không trống, thì sẽ xảy ra lỗi.
  • Nếu tham số fields được chỉ định khi provider() được gọi và nếu kwargs chứa bất kỳ khoá nào không có trong fields, thì sẽ xảy ra lỗi.
  • Nếu không, c sẽ trả về một phiên bản mới có, đối với mỗi mục k: v trong kwargs, một trường có tên là k với giá trị v.
Trong trường hợp không có lệnh gọi lại init, lệnh gọi đến biểu tượng P sẽ đóng vai trò là lệnh gọi đến hàm khởi tạo mặc định c; nói cách khác, P(*args, **kwargs) sẽ trả về c(*args, **kwargs). Ví dụ:
MyInfo = provider()
m = MyInfo(foo = 1)
sẽ giúp m trở thành một thực thể MyInfom.foo == 1.

Nhưng trong trường hợp init được chỉ định, lệnh gọi P(*args, **kwargs) sẽ thực hiện các bước sau:

  1. Hàm gọi lại được gọi là init(*args, **kwargs), tức là có cùng đối số vị trí và đối số từ khoá như đã được truyền đến P.
  2. Giá trị trả về của init dự kiến là một từ điển, d, có các khoá là chuỗi tên trường. Nếu không, lỗi sẽ xảy ra.
  3. Một phiên bản mới của P được tạo như thể bằng cách gọi hàm khởi tạo mặc định với các mục của d làm đối số từ khoá, như trong c(**d).

Lưu ý: các bước trên ngụ ý rằng lỗi sẽ xảy ra nếu *args hoặc **kwargs không khớp với chữ ký của init, hoặc quá trình đánh giá nội dung của init không thành công (có thể là cố ý thông qua lệnh gọi đến fail()), hoặc nếu giá trị trả về của init không phải là một từ điển có giản đồ dự kiến.

Bằng cách này, lệnh gọi lại init sẽ khái quát hoá quá trình tạo trình cung cấp thông thường bằng cách cho phép các đối số vị trí và logic tuỳ ý để xử lý trước và xác thực. Chế độ này không cho phép bạn lách danh sách fields được phép.

Khi init được chỉ định, giá trị trả về của provider() sẽ trở thành một bộ (P, r), trong đó rhàm khởi tạo thô. Trên thực tế, hành vi của r chính xác là hành vi của hàm khởi tạo mặc định c đã thảo luận ở trên. Thông thường, r được liên kết với một biến có tên bắt đầu bằng dấu gạch dưới, để chỉ tệp .bzl hiện tại có quyền truy cập trực tiếp vào biến đó:

MyInfo, _new_myinfo = provider(init = ...)

repository_rule

callable repository_rule(implementation, *, attrs=None, local=False, environ=[], configure=False, remotable=False, doc=None)

Tạo một quy tắc mới cho kho lưu trữ. Lưu trữ trong một giá trị toàn cục để có thể tải và gọi từ tệp WORKSPACE.

Thông số

Thông số Mô tả
implementation required
hàm triển khai quy tắc này. Phải có một tham số duy nhất, repository_ctx. Hàm này được gọi trong giai đoạn tải cho từng phiên bản của quy tắc.
attrs dict; hoặc None; mặc định là None
từ điển để khai báo tất cả các thuộc tính của quy tắc. Thư viện này liên kết từ tên thuộc tính đến đối tượng thuộc tính (xem mô-đun attr). Các thuộc tính bắt đầu bằng _ là riêng tư và có thể dùng để thêm một phần phụ thuộc ngầm trên nhãn vào một tệp (quy tắc kho lưu trữ không thể phụ thuộc vào một cấu phần phần mềm được tạo). Thuộc tính name được thêm một cách ngầm định và bạn không được chỉ định thuộc tính này.
local mặc định là False
Cho biết quy tắc này tìm nạp mọi thứ từ hệ thống cục bộ và cần được đánh giá lại ở mỗi lần tìm nạp.
environ sequence của strings; giá trị mặc định là []
Không được dùng nữa. Tham số này không còn được dùng nữa. Thay vào đó, hãy di chuyển sang repository_ctx.getenv.
Cung cấp danh sách các biến môi trường mà quy tắc kho lưu trữ này phụ thuộc vào. Nếu một biến môi trường trong danh sách đó thay đổi, kho lưu trữ sẽ được tìm nạp lại.
configure mặc định là False
Cho biết rằng kho lưu trữ kiểm tra hệ thống cho mục đích định cấu hình
remotable mặc định là False
Thử nghiệm. Đây là một thông số 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 thông tin 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 ---experimental_repo_remote_exec
Tương thích với việc thực thi từ xa
doc string; hoặc None; mặc định là None
Nội dung mô tả về quy tắc kho lưu trữ mà các công cụ tạo tài liệu có thể trích xuất.

quy tắc

callable rule(implementation, *, test=unbound, attrs={}, outputs=None, executable=unbound, output_to_genfiles=False, fragments=[], host_fragments=[], _skylark_testable=False, toolchains=[], incompatible_use_toolchain_transition=False, doc=None, provides=[], exec_compatible_with=[], analysis_test=False, build_setting=None, cfg=None, exec_groups=None, initializer=None, parent=None, extendable=None, subrules=[])

Tạo một quy tắc mới, có thể được gọi từ tệp BUILD hoặc macro để tạo mục tiêu.

Bạn phải chỉ định các quy tắc cho biến toàn cục trong tệp .bzl; tên của biến toàn cục là tên của quy tắc.

Các quy tắc kiểm thử phải có tên kết thúc bằng _test, trong khi tất cả các quy tắc khác không được có hậu tố này. (Quy định hạn chế này chỉ áp dụng cho các quy tắc, chứ không áp dụng cho mục tiêu của các quy tắc.)

Thông số

Thông số Mô tả
implementation bắt buộc
hàm Starlark triển khai quy tắc này, phải có đúng một tham số: ctx. Hàm này được gọi trong giai đoạn phân tích cho từng phiên bản của quy tắc. Nó có thể truy cập vào các thuộc tính do người dùng cung cấp. Thao tác này phải tạo ra các hành động để tạo tất cả đầu ra đã khai báo.
test bool; mặc định là unbound
Liệu quy tắc này có phải là quy tắc kiểm thử hay không, tức là liệu quy tắc này có thể là đối tượng của lệnh blaze test hay không. Tất cả các quy tắc kiểm thử đều tự động được coi là có thể thực thi; bạn không cần (và không nên) đặt executable = True một cách rõ ràng cho quy tắc kiểm thử. Giá trị mặc định là False. Hãy xem trang Quy tắc để biết thêm thông tin.
attrs dict; default is {}
dictionary to declare all the attributes of the rule. Thư viện này liên kết từ tên thuộc tính đến đối tượng thuộc tính (xem mô-đun attr). Các thuộc tính bắt đầu bằng _ là riêng tư và có thể dùng để thêm một phần phụ thuộc ngầm trên nhãn. Thuộc tính name được thêm một cách ngầm định và bạn không được chỉ định thuộc tính này. Các thuộc tính visibility, deprecation, tags, testonlyfeatures được thêm một cách ngầm định và không thể ghi đè. Hầu hết các quy tắc chỉ cần một số ít thuộc tính. Để giới hạn mức sử dụng bộ nhớ, hàm quy tắc sẽ áp đặt một giới hạn về kích thước của attrs.
outputs dict; hoặc None; hoặc function; mặc định là None
Không dùng nữa. Tham số này không được dùng nữa và sẽ sớm bị xoá. Vui lòng không phụ thuộc vào thông tin này. Tính năng này đã tắt bằng ---incompatible_no_rule_outputs_param. Hãy dùng cờ này để xác minh rằng mã của bạn tương thích với việc xoá sắp tới.
Tham số này không còn được dùng nữa. Di chuyển các quy tắc để sử dụng OutputGroupInfo hoặc attr.output.

Một giản đồ để xác định các đầu ra được khai báo trước. Không giống như các thuộc tính outputoutput_list, người dùng không chỉ định nhãn cho các tệp này. Hãy xem trang Quy tắc để biết thêm thông tin về các đầu ra được khai báo trước.

Giá trị của đối số này là một từ điển hoặc một hàm gọi lại tạo ra một từ điển. Callback hoạt động tương tự như các thuộc tính phụ thuộc được tính toán: Tên tham số của hàm được so khớp với các thuộc tính của quy tắc, vì vậy, ví dụ: nếu bạn truyền outputs = _my_func bằng định nghĩa def _my_func(srcs, deps): ..., hàm sẽ có quyền truy cập vào các thuộc tính srcsdeps. Cho dù từ điển được chỉ định trực tiếp hay thông qua một hàm, từ điển đó sẽ được diễn giải như sau.

Mỗi mục trong từ điển sẽ tạo ra một đầu ra được khai báo trước, trong đó khoá là một giá trị nhận dạng và giá trị là một mẫu chuỗi xác định nhãn của đầu ra. Trong hàm triển khai của quy tắc, giá trị nhận dạng sẽ trở thành tên trường dùng để truy cập vào File của đầu ra trong ctx.outputs. Nhãn của đầu ra có cùng gói với quy tắc và phần sau gói được tạo bằng cách thay thế từng phần giữ chỗ của biểu mẫu "%{ATTR}" bằng một chuỗi được tạo từ giá trị của thuộc tính ATTR:

  • Các thuộc tính có dạng chuỗi văn bản được thay thế nguyên văn.
  • Các thuộc tính được gắn nhãn sẽ trở thành một phần của nhãn sau gói, trừ phần đuôi tệp. Ví dụ: nhãn "//pkg:a/b.c" sẽ trở thành "a/b".
  • Các thuộc tính được nhập theo kiểu sẽ trở thành một phần của nhãn sau gói, bao gồm cả đuôi tệp (đối với ví dụ trên, "a/b.c").
  • Tất cả các thuộc tính có kiểu danh sách (ví dụ: attr.label_list) được dùng trong phần giữ chỗ đều phải có chính xác một phần tử. Lượt chuyển đổi của các phiên bản này giống với phiên bản không có danh sách (attr.label).
  • Các loại thuộc tính khác có thể không xuất hiện trong phần giữ chỗ.
  • Các phần giữ chỗ đặc biệt không phải thuộc tính %{dirname}%{basename} sẽ mở rộng thành những phần đó của nhãn trong quy tắc, ngoại trừ gói. Ví dụ: trong "//pkg:a/b.c", dirname là a và basename là b.c.

Trên thực tế, phần giữ chỗ thay thế phổ biến nhất là "%{name}". Ví dụ: đối với một mục tiêu có tên là "foo", từ điển đầu ra {"bin": "%{name}.exe"} sẽ khai báo trước một đầu ra có tên là foo.exe có thể truy cập trong hàm triển khai dưới dạng ctx.outputs.bin.

executable bool; default is unbound
Whether this rule is considered executable, that is, whether it may be the subject of a blaze run command. Giá trị mặc định là False. Hãy xem trang Quy tắc để biết thêm thông tin.
output_to_genfiles mặc định là False
Nếu là true, các tệp sẽ được tạo trong thư mục genfiles thay vì thư mục bin. Đừng đặt cờ này, trừ phi bạn cần để tương thích với các quy tắc hiện có (ví dụ: khi tạo tệp tiêu đề cho C++).
fragments sequence của strings; default is []
Danh sách tên của các mảnh cấu hình mà quy tắc yêu cầu trong cấu hình mục tiêu.
host_fragments sequence của strings; mặc định là []
Danh sách tên của các đoạn cấu hình mà quy tắc yêu cầu trong cấu hình máy chủ lưu trữ.
_skylark_testable mặc định là False
(Thử nghiệm)

Nếu đúng, quy tắc này sẽ hiển thị các thao tác của quy tắc để các quy tắc phụ thuộc vào quy tắc này kiểm tra thông qua trình cung cấp Actions. Bản thân quy tắc cũng có thể sử dụng nhà cung cấp bằng cách gọi ctx.created_actions().

Bạn chỉ nên dùng cách này để kiểm thử hành vi tại thời điểm phân tích của các quy tắc Starlark. Cờ này có thể bị xoá trong tương lai.
toolchains sequence; default is []
Nếu được đặt, tập hợp các chuỗi công cụ mà quy tắc này yêu cầu. Danh sách này có thể chứa các đối tượng String, Label hoặc StarlarkToolchainTypeApi, theo bất kỳ tổ hợp nào. Các chuỗi công cụ sẽ được tìm thấy bằng cách kiểm tra nền tảng hiện tại và được cung cấp cho việc triển khai quy tắc thông qua ctx.toolchain.
incompatible_use_toolchain_transition mặc định là False
Không dùng nữa, tham số này không còn được sử dụng và cần bị xoá.
doc string; hoặc None; mặc định là None
Nội dung mô tả về quy tắc mà các công cụ tạo tài liệu có thể trích xuất.
provides mặc định là []
Danh sách các nhà cung cấp mà hàm triển khai phải trả về.

Sẽ xảy ra lỗi nếu hàm triển khai bỏ qua bất kỳ loại trình cung cấp nào được liệt kê ở đây trong giá trị trả về. Tuy nhiên, hàm triển khai có thể trả về các trình cung cấp bổ sung không có trong danh sách tại đây.

Mỗi phần tử của danh sách là một đối tượng *Info do provider() trả về, ngoại trừ việc nhà cung cấp cũ được biểu thị bằng tên chuỗi của nhà cung cấp đó.Khi mục tiêu của quy tắc được dùng làm phần phụ thuộc cho mục tiêu khai báo nhà cung cấp bắt buộc, bạn không cần chỉ định nhà cung cấp đó ở đây. Hàm triển khai trả về là đủ. Tuy nhiên, bạn nên chỉ định tham số này (mặc dù không bắt buộc). Tuy nhiên, trường required_providers của khía cạnh yêu cầu bạn phải chỉ định nhà cung cấp tại đây.

exec_compatible_with sequence của strings; giá trị mặc định là []
Một danh sách các ràng buộc trên nền tảng thực thi áp dụng cho tất cả các mục tiêu của loại quy tắc này.
analysis_test mặc định là False
Nếu đúng, thì quy tắc này được coi là một kiểm thử phân tích.

Lưu ý: Các quy tắc kiểm thử phân tích chủ yếu được xác định bằng cách sử dụng cơ sở hạ tầng có trong các thư viện Starlark cốt lõi. Hãy xem phần Thử nghiệm để biết hướng dẫn.

Nếu được xác định là quy tắc kiểm thử phân tích, thì quy tắc sẽ được phép sử dụng các quá trình chuyển đổi cấu hình được xác định bằng analysis_test_transition trên các thuộc tính của quy tắc, nhưng sẽ chọn áp dụng một số hạn chế:

  • Số lượng phần phụ thuộc bắc cầu mà các mục tiêu của quy tắc này có thể có bị giới hạn.
  • Quy tắc này được coi là quy tắc kiểm thử (như thể bạn đã đặt test=True). Giá trị này sẽ thay thế giá trị của test
  • Hàm triển khai quy tắc có thể không đăng ký các thao tác. Thay vào đó, nó phải đăng ký kết quả đạt/không đạt thông qua việc cung cấp AnalysisTestResultInfo.
build_setting BuildSetting; hoặc None; mặc định là None
Nếu được đặt, hãy mô tả loại build setting của quy tắc này. Hãy xem mô-đun config. Nếu bạn đặt giá trị này, một thuộc tính bắt buộc có tên "build_setting_default" sẽ tự động được thêm vào quy tắc này, với một loại tương ứng với giá trị được truyền vào đây.
cfg mặc định là None
Nếu được đặt, hãy trỏ đến quá trình chuyển đổi cấu hình mà quy tắc sẽ áp dụng cho cấu hình của chính nó trước khi phân tích.
exec_groups dict; hoặc None; mặc định là None
Từ điển tên nhóm thực thi (chuỗi) thành exec_groups. Nếu được đặt, cho phép các quy tắc chạy hành động trên nhiều nền tảng thực thi trong một mục tiêu duy nhất. Hãy xem tài liệu về nhóm thực thi để biết thêm thông tin.
initializer mặc định là None
Thử nghiệm: hàm Stalark khởi tạo các thuộc tính của quy tắc.

Hàm này được gọi tại thời điểm tải cho mỗi phiên bản của quy tắc. Phương thức này được gọi bằng name và các giá trị của thuộc tính công khai do quy tắc xác định (không phải bằng các thuộc tính chung, ví dụ: tags).

Thao tác này phải trả về một từ điển từ tên thuộc tính đến các giá trị mong muốn. Những thuộc tính không được trả về sẽ không bị ảnh hưởng. Trả về None dưới dạng giá trị sẽ dẫn đến việc sử dụng giá trị mặc định được chỉ định trong định nghĩa thuộc tính.

Trình khởi tạo được đánh giá trước các giá trị mặc định được chỉ định trong một định nghĩa thuộc tính. Do đó, nếu một tham số trong chữ ký của trình khởi tạo chứa các giá trị mặc định, thì tham số đó sẽ ghi đè giá trị mặc định trong định nghĩa thuộc tính (trừ phi trả về None).

Tương tự, nếu một tham số trong chữ ký của trình khởi tạo không có giá trị mặc định, thì tham số đó sẽ trở thành tham số bắt buộc. Trong những trường hợp như vậy, bạn nên bỏ qua các chế độ cài đặt mặc định/bắt buộc trong định nghĩa thuộc tính.

Bạn nên dùng **kwargs cho những thuộc tính không được xử lý.

Trong trường hợp có các quy tắc mở rộng, tất cả các trình khởi tạo đều được gọi theo thứ tự từ phần tử con đến phần tử cấp trên. Mỗi trình khởi tạo chỉ được truyền các thuộc tính công khai mà trình khởi tạo đó biết.

parent mặc định là None
Thử nghiệm: quy tắc Stalark được mở rộng. Khi bạn đặt, các thuộc tính công khai sẽ được hợp nhất cũng như các nhà cung cấp được quảng cáo. Quy tắc này khớp với executabletest từ phần tử mẹ. Các giá trị fragments, toolchains, exec_compatible_withexec_groups được hợp nhất. Bạn không thể đặt các tham số cũ hoặc không dùng nữa. Quá trình chuyển đổi cấu hình đến cfg của thành phần mẹ được áp dụng sau cấu hình đến của quy tắc này.
extendable bool; hoặc Label; hoặc string; hoặc None; mặc định là None
Thử nghiệm: Nhãn của danh sách cho phép xác định những quy tắc có thể mở rộng quy tắc này. Bạn cũng có thể đặt chính sách này thành True/False để luôn cho phép/không cho phép kéo dài. Theo mặc định, Bazel luôn cho phép các tiện ích.
subrules sequence của Subrules; mặc định là []
Thử nghiệm: Danh sách các quy tắc phụ mà quy tắc này sử dụng.

chọn

unknown select(x, no_match_error='')

select() là hàm trợ giúp giúp thuộc tính quy tắc có thể định cấu hình. Hãy xem phần xây dựng bách khoa toàn thư để biết thông tin chi tiết.

Thông số

Thông số Mô tả
x required
Một từ điển ánh xạ các điều kiện cấu hình với các giá trị. Mỗi khoá là một Nhãn hoặc một chuỗi nhãn xác định một thực thể config_setting hoặc constraint_value. Hãy xem tài liệu về macro để biết thời điểm sử dụng Nhãn thay vì chuỗi.
no_match_error mặc định là ''
Lỗi tuỳ chỉnh không bắt buộc để báo cáo nếu không có điều kiện nào trùng khớp.

quy tắc phụ

Subrule subrule(implementation, attrs={}, toolchains=[], fragments=[], subrules=[])

Tạo một thực thể mới của quy tắc phụ. Kết quả của hàm này phải được lưu trữ trong một biến chung thì mới có thể sử dụng.

Thông số

Thông số Mô tả
implementation function; required
Hàm Starlark triển khai quy tắc phụ này
attrs dict; default is {}
A dictionary to declare all the (private) attributes of the subrule.

Các quy tắc phụ chỉ có thể có những thuộc tính riêng tư được nhập nhãn (tức là nhãn hoặc danh sách nhãn). Bazel sẽ tự động truyền các giá trị đã phân giải tương ứng với các nhãn này đến hàm triển khai của quy tắc phụ dưới dạng đối số có tên (do đó, hàm triển khai phải chấp nhận các tham số có tên khớp với tên thuộc tính). Các loại giá trị này sẽ là:

  • FilesToRunProvider cho các thuộc tính nhãn có executable=True
  • File cho các thuộc tính nhãn có allow_single_file=True
  • Target cho tất cả các thuộc tính nhãn khác
  • [Target] cho tất cả thuộc tính label-list
toolchains sequence; mặc định là []
Nếu được đặt, thì đây là tập hợp các chuỗi công cụ mà quy tắc phụ này yêu cầu. Danh sách này có thể chứa các đối tượng String, Label hoặc StarlarkToolchainTypeApi, theo bất kỳ tổ hợp nào. Các chuỗi công cụ sẽ được tìm thấy bằng cách kiểm tra nền tảng hiện tại và được cung cấp cho quá trình triển khai quy tắc phụ thông qua ctx.toolchains.
fragments sequence của strings; mặc định là []
Danh sách tên của các đoạn cấu hình mà quy tắc phụ yêu cầu trong cấu hình mục tiêu.
subrules sequence của Subrules; mặc định là []
Danh sách các quy tắc phụ khác mà quy tắc phụ này cần.

tag_class

tag_class tag_class(attrs={}, *, doc=None)

Tạo một đối tượng tag_class mới, xác định một giản đồ thuộc tính cho một lớp thẻ. Đây là các đối tượng dữ liệu mà một tiện ích mô-đun có thể sử dụng.

Thông số

Thông số Mô tả
attrs mặc định là {}
Từ điển để khai báo tất cả các thuộc tính của lớp thẻ này. Thư viện này liên kết từ tên thuộc tính đến đối tượng thuộc tính (xem mô-đun attr).
doc string; hoặc None; mặc định là None
Nội dung mô tả về lớp thẻ mà các công cụ tạo tài liệu có thể trích xuất.

mức hiển thị

None visibility(value)

Đặt chế độ hiển thị tải của mô-đun .bzl hiện đang được khởi chạy.

Khả năng hiển thị khi tải của một mô-đun sẽ chi phối việc các tệp BUILD và .bzl khác có thể tải mô-đun đó hay không. (Điều này khác với chế độ hiển thị mục tiêu của tệp nguồn .bzl cơ bản, quy định xem tệp có thể xuất hiện dưới dạng một phần phụ thuộc của các mục tiêu khác hay không.) Khả năng hiển thị khi tải hoạt động ở cấp độ gói: Để tải một mô-đun, tệp thực hiện việc tải phải nằm trong một gói đã được cấp quyền hiển thị cho mô-đun. Một mô-đun luôn có thể được tải trong gói riêng, bất kể khả năng hiển thị của mô-đun đó.

Bạn chỉ có thể gọi visibility() một lần cho mỗi tệp .bzl và chỉ ở cấp cao nhất, chứ không phải bên trong một hàm. Phong cách ưu tiên là đặt lệnh gọi này ngay bên dưới các câu lệnh load() và mọi logic ngắn gọn cần thiết để xác định đối số.

Nếu cờ --check_bzl_visibility được đặt thành false, thì các lỗi vi phạm về khả năng hiển thị khi tải sẽ phát ra cảnh báo nhưng không làm gián đoạn quá trình tạo.

Thông số

Thông số Mô tả
value bắt buộc
Một danh sách các chuỗi chỉ định gói hoặc một chuỗi chỉ định gói duy nhất.

Quy cách gói có cùng định dạng như đối với package_group, ngoại trừ việc không được phép sử dụng quy cách gói âm. Tức là một quy cách có thể có các dạng sau:

  • "//foo": gói //foo
  • "//foo/...": gói //foo và tất cả các gói con của gói đó.
  • "public" hoặc "private": tất cả các gói hoặc không có gói nào, tương ứng

Không được dùng cú pháp "@"; mọi thông số kỹ thuật đều được diễn giải tương ứng với kho lưu trữ của mô-đun hiện tại.

Nếu value là một danh sách các chuỗi, thì tập hợp các gói được cấp quyền hiển thị cho mô-đun này là hợp của các gói do từng quy cách đại diện. (Danh sách trống có tác dụng tương tự như private.) Nếu value là một chuỗi đơn, thì chuỗi đó sẽ được coi như thể là danh sách singleton [value].

Xin lưu ý rằng các cờ --incompatible_package_group_has_public_syntax--incompatible_fix_package_group_reporoot_syntax không ảnh hưởng đến đối số này. Các giá trị "public""private" luôn có sẵn, còn "//..." luôn được diễn giải là "tất cả các gói trong kho lưu trữ hiện tại".