.bzl dosyaları

Sorun bildirin

Tüm .bzl dosyalarında kullanılabilen genel yöntemler.

Üyeler

analysis_test_transition

transition analysis_test_transition(settings)

Analiz-test kuralının bağımlılıklarına uygulanacak bir yapılandırma geçişi oluşturur. Bu geçiş yalnızca analysis_test = True içeren kuralların özelliklerine uygulanabilir. Bu tür kuralların özellikleri kısıtlıdır (örneğin, bağımlılık ağaçlarının boyutu sınırlıdır). Bu nedenle, bu işlevi kullanarak oluşturulan geçişler, transition() kullanılarak oluşturulan geçişlerle karşılaştırıldığında potansiyel kapsam açısından sınırlıdır.

Bu işlev, temel olarak Analysis Test Çerçevesi çekirdek kitaplığını kolaylaştırmak amacıyla tasarlanmıştır. En iyi uygulamalar için ürünün dokümanlarına (veya uygulamasına) bakın.

Parametreler

Parametre Açıklama
settings gerekli
Bu yapılandırma geçişi tarafından ayarlanması gereken yapılandırma ayarları hakkında bilgi içeren bir sözlük. Anahtarlar, derleme ayarı etiketleridir ve değerler, geçiş sonrası yeni değerlerdir. Diğer ayarların hiçbiri değişmez. Bir analiz testinin geçmesi için ayarlanması gereken belirli yapılandırma ayarlarını tanımlamak için bunu kullanın.

ilişkili program

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=[])

Yeni bir özellik oluşturur. Bu işlevin sonucu global bir değerde depolanmalıdır. Daha fazla ayrıntı için lütfen Özellikler'e giriş bölümünü inceleyin.

Parametreler

Parametre Açıklama
implementation gerekli
Tam olarak iki parametreyle bu özelliği uygulayan bir Starlark işlevi: Target (özelliğin uygulandığı hedef) ve ctx (hedefin oluşturulduğu kural bağlamı). Hedefin özelliklerine ctx.rule alanı üzerinden ulaşabilirsiniz. Bu işlev, analiz aşamasında bir unsurun hedefe her bir uygulaması için değerlendirilir.
attr_aspects dize'nin sequence; varsayılan değeri []
Özellik adlarının listesi. En boy, bu adlara sahip bir hedefin özelliklerinde belirtilen bağımlılıklar boyunca yayılır. Buradaki genel değerler arasında deps ve exports yer alır. Liste, bir hedefin tüm bağımlılıkları boyunca yayılacak tek bir "*" dizesi de içerebilir.
attrs dict; varsayılan {}'dir
Özelliğin tüm özelliklerini belirten bir sözlük. Bir özellik adından "attr.label" veya "attr.string" gibi bir özellik nesnesine eşlenir (attr modülüne bakın). En boy özellikleri, ctx parametresinin alanları olarak uygulama işlevi için kullanılabilir.

_ ile başlayan dolaylı özelliklerin varsayılan değerleri ve label veya label_list türünde olması gerekir.

Açık özellikler string türünde olmalı ve values kısıtlamasını kullanmalıdır. Açık özellikler, en boy özelliğinin yalnızca kısıtlamaya göre aynı ada, türe ve geçerli değerlere sahip özelliklere sahip kurallarla kullanılmasını kısıtlar.

required_providers varsayılan değer [] şeklindedir.
Bu özellik, ilgili öğenin yayılımını yalnızca kuralları gerekli sağlayıcıları tanıtan hedeflerle sınırlandırmasına olanak tanır. Değer, tek tek sağlayıcıları veya sağlayıcı listelerini içeren bir liste olmalıdır, ancak her ikisini birden içeremez. Örneğin, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] geçerli bir değerdir ancak [FooInfo, BarInfo, [BazInfo, QuxInfo]] geçerli değildir.

İç içe aktarılmamış sağlayıcılar listesi otomatik olarak bir sağlayıcı listesi içeren bir listeye dönüştürülecek. Yani [FooInfo, BarInfo], otomatik olarak [[FooInfo, BarInfo]] biçimine dönüştürülecektir.

Bazı kural (ör. some_rule) hedeflerin bir özellik tarafından görülebilmesi için some_rule, gerekli sağlayıcı listelerinden en az birindeki tüm sağlayıcıların reklamını yapmalıdır. Örneğin, bir boyutun required_providers değeri [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] ise bu özellik yalnızca some_rule FooInfo, veya BarInfo ya da BazInfo ve QuxInfo sağlarsa some_rule hedeflerini görebilir.

required_aspect_providers varsayılan değer: []
Bu özellik, bu özelliğin diğer yönleri incelemesine olanak tanır. Değer, tek tek sağlayıcıları veya sağlayıcı listelerini içeren bir liste olmalıdır, ancak her ikisini birden içeremez. Örneğin, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] geçerli bir değerdir ancak [FooInfo, BarInfo, [BazInfo, QuxInfo]] geçerli değildir.

İç içe aktarılmamış sağlayıcılar listesi otomatik olarak bir sağlayıcı listesi içeren bir listeye dönüştürülecek. Yani [FooInfo, BarInfo], otomatik olarak [[FooInfo, BarInfo]] biçimine dönüştürülecektir.

Başka bir özelliği (ör. other_aspect) bu özellik açısından görünür hale getirmek için other_aspect, listelerden en az birindeki tüm sağlayıcıları sağlamalıdır. [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] örneğinde bu özellik, yalnızca other_aspect tarafından FooInfo, veya BarInfo ya da BazInfo ve QuxInfo sağlandığında other_aspect görülebilir.

provides varsayılan değer: []
Uygulama işlevinin döndürmesi gereken sağlayıcıların listesi.

Uygulama işlevi, burada listelenen sağlayıcı türlerinden herhangi birini döndürdüğü değerden çıkarırsa bir hata oluşur. Ancak, uygulama işlevi burada listelenmeyen ek sağlayıcılar döndürebilir.

Listenin her öğesi, provider() tarafından döndürülen bir *Info nesnesidir ancak eski sağlayıcı, kendi dize adıyla temsil edilir.Bir kuralın hedefi, gerekli sağlayıcıyı bildiren bir hedef için bağımlılık olarak kullanıldığında söz konusu sağlayıcının burada belirtilmesi gerekmez. Uygulama işlevinin bunu döndürmesi yeterlidir. Bununla birlikte, zorunlu olmamakla birlikte, bu parametrenin belirtilmesi en iyi uygulama olarak kabul edilir. Ancak boyutun required_providers alanı, sağlayıcıların burada belirtilmesini gerektirir.

requires En boyların sırası; varsayılan olarak []
Bu taraftan önce dağıtılması gereken özelliklerin listesi.
fragments dize sequence; varsayılan olarak [] şeklindedir
Özelliğin hedef yapılandırmada gerektirdiği yapılandırma parçası adlarının listesi.
host_fragments dize'nin sequence; varsayılan olarak [] şeklindedir
Özelliğin ana makine yapılandırmasında gerektirdiği yapılandırma parçası adlarının listesi.
toolchains sequence; varsayılan değer: []
Ayarlanırsa bu kuralın gerektirdiği araç zinciri grubu. Liste, herhangi bir kombinasyonda String, Label veya StarlarkToolchainTypeApi nesnelerini içerebilir. Araç zincirleri, mevcut platform kontrol edilerek bulunur ve kural uygulamasına ctx.toolchain üzerinden sağlanır.
incompatible_use_toolchain_transition varsayılan: False
Kullanımdan kaldırıldı, artık kullanılmıyor ve kaldırılması gerekiyor.
doc string; veya None; varsayılan olarak None şeklindedir
Belge oluşturma araçları tarafından çıkarılabilecek özelliğin açıklamasıdır.
apply_to_generating_rules varsayılan değer False şeklindedir.
True (doğru) değerine ayarlanırsa en boy, çıkış dosyasına uygulandığında çıkış dosyasının oluşturma kuralına uygulanır.

Örneğin, bir özelliğin "True" özelliği üzerinden geçişli olarak yayıldığını ve "False" (Yanlış) özelliği üzerinden yayıldığını ve "alpha" hedefine yayıldığını varsayalım. "alpha"nın "deps = [":beta_output"]" değerine sahip olduğunu ve burada "beta_output"un, bir hedef "beta" hedef çıkışı olduğunu varsayalım. "beta"nın "alfa" en boylarından biri için hedef "charlie" olduğunu varsayın ve "alfa" en boylarından biri olarak "charlie"yi hedef alır ve ardından "alfa" en boy oranına uygulayacağını varsayalım.

Varsayılan olarak yanlış değerini alır.

exec_compatible_with dize sequence; varsayılan olarak [] şeklindedir
Yürütme platformunda bu yönün tüm örnekleri için geçerli olan kısıtlamaların listesidir.
exec_groups dict veya None; varsayılan olarak None
Yürütme grubu adının (dize) dikte değeri exec_groups'dir. Ayarlanırsa özelliklerin tek bir örnek içinde birden fazla yürütme platformunda işlem çalıştırmasına izin verir. Daha fazla bilgi için yürütme grupları dokümanlarına göz atın.
subrules Alt kuralların dizisi; varsayılan değeri []
Deneysel: Bu özellik tarafından kullanılan alt kuralların listesi.

configuration_field

LateBoundDefault configuration_field(fragment, name)

label türündeki bir özellik için geç sınır varsayılan bir değere başvuruda bulunur. Değer, değer belirlenmeden önce yapılandırmanın oluşturulmasını gerektiriyorsa "gecikme sınırı"dır. Bunu değer olarak kullanan tüm özellikler gizli olmalıdır.

Örnek kullanım:

Kural özelliği tanımlanıyor:

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

Kural uygulamasında erişim:

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

Parametreler

Parametre Açıklama
fragment gerekli
Geç sınır değeri içeren bir yapılandırma parçasının adı.
name gerekli
Yapılandırma parçasından alınacak değerin adı.

bitirmek

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

Bir dpset oluşturur. direct parametresi, depset öğesinin doğrudan öğelerinin listesidir. transitive parametresi ise öğeleri oluşturulan desteğin dolaylı öğeleri haline gelen alt kaynakların listesidir. Depset bir listeye dönüştürüldüğünde öğelerin döndürülme sırası order parametresi ile belirtilir. Daha fazla bilgi için Derinlere genel bakış konusuna bakın.

Depset'in tüm öğeleri (doğrudan ve dolaylı), type(x) ifadesiyle elde edilen aynı türde olmalıdır.

Yineleme sırasında yinelemeleri ortadan kaldırmak için karma tabanlı bir küme kullanıldığından, depset kümesinin tüm öğelerine karma oluşturma işlemi uygulanabilir. Ancak bu değişmez değer, şu anda tüm oluşturucularda tutarlı bir şekilde kontrol edilmemektedir. Tutarlı kontrol sağlamak için --incompatible_always_check_depset_elements işaretini kullanın. Bu, gelecekteki sürümlerde varsayılan davranış olacaktır. Sorun 10313'e bakın.

Ayrıca, öğeler şu anda sabit olmalıdır, ancak bu kısıtlama gelecekte gevşetilecektir.

Oluşturulan dep kümesinin sırası, transitive alt kümelerinin sıralamasıyla uyumlu olmalıdır. "default" siparişi diğer tüm siparişlerle uyumludur, diğer tüm siparişler yalnızca kendileriyle uyumludur.

Parametreler

Parametre Açıklama
direct sequence veya None; varsayılan olarak None değerine sahiptir.
Bir kullanımdan kaldırma işleminin doğrudan öğelerinin listesi.
order varsayılan değer: "default"
Yeni erişim grubunun geçiş stratejisi. Olası değerler için buraya bakın.
transitive depset'lerin dizisi veya None; varsayılan olarak None değerine sahiptir
Öğeleri kullanımdan kaldırma işleminin dolaylı öğeleri olacak alt kümelerin listesi.

exec_group

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

Kural uygulama sırasında belirli bir yürütme platformu için işlemler oluşturmak amacıyla kullanılabilecek bir yürütme grubu oluşturur.

Parametreler

Parametre Açıklama
toolchains sequence; varsayılan değer: []
Bu yürütme grubunun gerektirdiği araç zinciri grubu. Liste, herhangi bir kombinasyonda String, Label veya StarlarkToolchainTypeApi nesnelerini içerebilir.
exec_compatible_with dize sequence; varsayılan olarak []
Yürütme platformundaki kısıtlamalar listesidir.

module_extension

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

Yeni bir modül uzantısı oluşturur. MODULE.bazel dosyasında dışa aktarılıp kullanılabilmesi için global bir değerde depolayın.

Parametreler

Parametre Açıklama
implementation gerekli
Bu modül uzantısını uygulayan işlev. Tek bir parametre (module_ctx) alınmalıdır. İşlev, kullanılabilir depo kümesini belirlemek için derlemenin başında bir kez çağrılır.
tag_classes varsayılan değer: {}
Uzantı tarafından kullanılan tüm etiket sınıflarını tanımlayan bir sözlük. Etiket sınıfı adından bir tag_class nesnesine eşlenir.
doc string; veya None; varsayılan değer: None
Doküman oluşturma araçları tarafından çıkarılabilen modül uzantısının bir açıklamasıdır.
environ sequence of string; varsayılan değer: []
Bu modül uzantısının bağımlı olduğu ortam değişkeninin listesini sağlar. Bu listedeki bir ortam değişkeni değişirse uzantı yeniden değerlendirilir.
os_dependent varsayılan: False
Bu uzantının işletim sistemine bağlı olup olmadığını belirtir
arch_dependent varsayılan: False
Bu uzantının mimariye bağlı olup olmadığını belirtir

sağlayıcı

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

Sağlayıcı simgesi tanımlar. Sağlayıcı, çağrı yapılarak örneklenebilir veya bir hedeften söz konusu sağlayıcının bir örneğini almak için doğrudan bir anahtar olarak kullanılabilir. Örnek:
MyInfo = provider()
...
def _my_library_impl(ctx):
    ...
    my_info = MyInfo(x = 2, y = 3)
    # my_info.x == 2
    # my_info.y == 3
    ...

Sağlayıcıların nasıl kullanılacağıyla ilgili kapsamlı bir kılavuz için Kurallar (Sağlayıcılar) bölümüne bakın.

init belirtilmezse Provider çağrılabilir bir değer döndürür.

init belirtilirse 2 öğeden oluşan bir çift döndürür: Provider çağrılabilir değeri ve ham oluşturucu çağrılabilir değeri. Ayrıntılar için Kurallar (Özel sağlayıcıların özelleştirmesi) bölümüne ve aşağıdaki init parametresine ilişkin açıklamalara bakın.

Parametreler

Parametre Açıklama
doc string; veya None; varsayılan değer: None
Doküman oluşturma araçları tarafından çıkarılabilen, sağlayıcının açıklaması.
fields sequence of strings veya dict; None; varsayılan olarak None değerine ayarlanır
Belirtilirse izin verilen alanlar grubunu kısıtlar.
Olası değerler:
  • alan listesi:
    provider(fields = ['a', 'b'])

  • sözlük alanı adı -> dokümanlar:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
Tüm alanlar isteğe bağlıdır.
init çağrılabilir; veya None; varsayılan None değeridir
Örnekleme sırasında sağlayıcının alan değerlerini önceden işlemek ve doğrulamak için kullanılan isteğe bağlı bir geri çağırma. init belirtilirse provider(), 2 öğeden oluşan bir unsur döndürür: normal sağlayıcı simgesi ve ham kurucu.

Kesin bir açıklama aşağıda verilmiştir. Pratik bir tartışma ve kullanım alanları için Kurallar (Sağlayıcıların özel başlatma) bölümüne bakın.

provider() çağrısı yapılarak oluşturulan sağlayıcı simgesi P olsun. Kavramsal olarak P örneği, aşağıdaki işlemleri yapan bir varsayılan oluşturucu işlevi c(*args, **kwargs) çağırılarak oluşturulur:

  • args boş değilse bir hata oluşur.
  • provider() çağrıldığında fields parametresi belirtildiyse ve kwargs, fields içinde listelenmeyen bir anahtar içeriyorsa bir hata oluşur.
  • Aksi takdirde c, kwargs içindeki her k: v girişi için v değerine sahip k adlı bir alana sahip yeni bir örnek döndürür.
Bir init geri çağırmasının verilmediği durumda, P simgesine yapılan bir çağrı, c varsayılan oluşturucu işlevine bir çağrı olarak hareket eder; diğer bir deyişle, P(*args, **kwargs) c(*args, **kwargs) değerini döndürür. Örneğin,
MyInfo = provider()
m = MyInfo(foo = 1)
, m öğesini m.foo == 1 içeren bir MyInfo örneği olacak şekilde doğrudan yapar.

Ancak init belirtildiğinde P(*args, **kwargs) çağrısı şu adımları gerçekleştirir:

  1. Geri çağırma init(*args, **kwargs) olarak çağrılır. Yani P öğesine aktarılanların aynı konum ve anahtar kelime bağımsız değişkenleriyle çağrılır.
  2. init işlevinin döndürdüğü değerin, anahtarları alan adı dizeleri olan bir sözlük (d) olması beklenir. Aksi takdirde, bir hata oluşur.
  3. c(**d) gibi anahtar kelime bağımsız değişkenleri olarak d girişlerine sahip varsayılan oluşturucu çağırarak yeni bir P örneği oluşturulur.

Not: Yukarıdaki adımlarda, *args veya **kwargs, init imzasıyla eşleşmezse ya da init gövdesinin değerlendirmesi (bilerek fail() aracılığıyla yapılan bir çağrı aracılığıyla) başarısız olursa ya da init döndürülen değer beklenen şemaya sahip bir sözlük değilse bir hata oluştuğu anlamına gelir.

Bu şekilde init geri çağırması, ön işleme ve doğrulama için konumsal bağımsız değişkenlere ve rastgele mantığa izin vererek normal sağlayıcı yapısını genelleştirir. Ancak, izin verilen fields listesinin atlatılmasına izin verilmez.

init belirtildiğinde provider(), döndürülen değer (P, r) haline gelir. Burada r, ham oluşturucudur. Aslında r işlevi, tam olarak yukarıda açıklanan varsayılan oluşturucu fonksiyonunun c davranışıyla aynıdır. r, genellikle adının önüne alt çizgi eklenmiş bir değişkene bağlıdır. Böylece, yalnızca geçerli .bzl dosyası ona doğrudan erişebilir:

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

repository_rule

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

Yeni bir depo kuralı oluşturur. WORKSPACE dosyasından yüklenip çağrılabilmesi için genel bir değerde depolayın.

Parametreler

Parametre Açıklama
implementation gerekli
bu kuralı uygulayan işlev. Tek bir parametre olmalıdır, repository_ctx. İşlev, kuralın her bir örneği için yükleme aşamasında çağrılır.
attrs dict veya None; varsayılan olarak, kuralın tüm özelliklerini tanımlamak için kullanılan None
sözlüğü. Bir özellik adından özellik nesnesine eşlenir (bkz. attr modülü). _ ile başlayan özellikler gizlidir ve bir dosyaya dolaylı bağımlılık eklemek için kullanılabilir (depo kuralı, oluşturulan bir yapıya bağlı olamaz). name özelliği dolaylı yoldan eklenmiştir ve belirtilmemelidir.
local False varsayılandır
Bu kuralın yerel sistemden her şeyi getirdiğini ve her getirmede yeniden değerlendirilmesi gerektiğini belirtin.
environ sequence of strings; varsayılan değer: []
Bu depo kuralının bağlı olduğu ortam değişkeninin listesini sağlar. Bu listedeki bir ortam değişkeni değişirse depo yeniden getirilir.
configure False varsayılandır
Deponun yapılandırma amacıyla sistemi incelediğini belirtin
remotable varsayılan ayar False
Deneysel'dir. Bu parametre deneme amaçlıdır ve herhangi bir zamanda değiştirilebilir. Lütfen bu özelliğe güvenmeyin. ---experimental_repo_remote_exec ayarıyla
Uzaktan yürütmeyle uyumlu
doc string; veya None; varsayılan değer: None
Belge oluşturma araçları tarafından çıkarılabilen depo kuralının açıklaması.

kural

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=[])

Hedef oluşturmak için BUILD dosyasından veya makrodan çağrılabilecek yeni bir kural oluşturur.

Kurallar, .bzl dosyası içindeki genel değişkenlere atanmalıdır. Genel değişkenin adı, kuralın adıdır.

Test kurallarının adı _test ile bitmelidir. Diğer kurallarda bu son ek bulunmamalıdır. (Bu kısıtlama yalnızca kurallar için geçerlidir, hedefleri için geçerli değildir.)

Parametreler

Parametre Açıklama
implementation gerekli
Bu kuralı uygulayan Starlark işlevi, tam olarak bir parametreye sahip olmalıdır: ctx. İşlev, kuralın her bir örneği için analiz aşamasında çağrılır. Kullanıcı tarafından sağlanan özelliklere erişebilir. Belirtilen tüm çıkışları oluşturacak işlemler oluşturmalıdır.
test bool; varsayılan değer: unbound
Bu kuralın bir test kuralı olup olmadığı, yani blaze test komutunun konusu olup olmadığı. Tüm test kuralları otomatik olarak yürütülebilir olarak kabul edilir; bir test kuralı için executable = True değerinin açıkça ayarlanması gerekmez (ve önerilmez). Değer varsayılan olarak False değerine ayarlanır. Daha fazla bilgi için Kurallar sayfasına göz atın.
attrs dict; kuralın tüm özelliklerini tanımlamak için varsayılan olarak {}
sözlüğü kullanılır. Bir özellik adından özellik nesnesine eşlenir (bkz. attr modülü). _ ile başlayan özellikler gizlidir ve bir etikete dolaylı bağımlılık eklemek için kullanılabilir. name özelliği dolaylı yoldan eklenmiştir ve belirtilmemelidir. visibility, deprecation, tags, testonly ve features özellikleri dolaylı yoldan eklenir ve geçersiz kılınamaz. Çoğu kural yalnızca birkaç özelliğe ihtiyaç duyar. Kural işlevi, bellek kullanımını sınırlamak için attr'lerin boyutuna bir sınır uygular.
outputs dict veya None; veya function; varsayılan None
Desteği sonlandırılmış'tır. Bu parametre artık kullanılmamaktadır ve yakında kaldırılacaktır. Lütfen bu özelliğe güvenmeyin. ---incompatible_no_rule_outputs_param ile devre dışı bırakılır. Kodunuzun, hemen kaldırılmak üzere uygun olduğunu doğrulamak için bu işareti kullanın.
Bu parametre kullanımdan kaldırıldı. Bunun yerine OutputGroupInfo veya attr.output kullanacak şekilde kuralları taşıyın.

Önceden tanımlanmış çıkışları tanımlayan bir şema. output ve output_list özelliklerinden farklı olarak kullanıcı, bu dosyalar için etiket belirtmez. Önceden tanımlanmış çıkışlar hakkında daha fazla bilgi için Kurallar sayfasını inceleyin.

Bu bağımsız değişkenin değeri, bir sözlük veya sözlük oluşturan bir geri çağırma işlevidir. Geri çağırma, hesaplanan bağımlılık özelliklerine benzer şekilde çalışır: İşlevin parametre adları, kuralın özellikleriyle eşleştirilir. Örneğin, outputs = _my_func öğesini def _my_func(srcs, deps): ... tanımıyla geçirirseniz işlev, srcs ve deps özelliklerine erişebilir. Sözlük ister doğrudan ister bir işlev aracılığıyla belirtilsin, aşağıdaki gibi yorumlanır.

Sözlükte her giriş, anahtarın bir tanımlayıcı, değerin ise çıkışın etiketini belirleyen bir dize şablonu olduğu önceden tanımlanmış bir çıkış oluşturur. Kuralın uygulama işlevinde tanımlayıcı, ctx.outputs'te çıkışın File değerine erişmek için kullanılan alan adı olur. Çıkışın etiketi kuralla aynı pakete sahiptir ve "%{ATTR}" formunun her bir yer tutucusu, ATTR özelliğinin değerinden oluşturulmuş bir dizeyle değiştirilerek paketten sonraki bölüm oluşturulur:

  • Dize türünde özellikler kelimesi kelimesine değiştirilir.
  • Etiketle belirtilen özellikler, dosya uzantısı çıkarılarak paketten sonraki etiketin parçası haline gelir. Örneğin, "//pkg:a/b.c" etiketi "a/b" olur.
  • Çıkış türü özellikler, dosya uzantısı da dahil olmak üzere paketten sonra etiketin parçası haline gelir (yukarıdaki örnekte "a/b.c").
  • Yer tutucularda kullanılan tüm liste türünde özellikler (örneğin, attr.label_list) tam olarak bir öğeye sahip olmalıdır. Bu kullanıcının dönüşümü, liste dışı sürümüyle (attr.label) aynı.
  • Diğer özellik türleri yer tutucularda görünmeyebilir.
  • Özellik dışı özel yer tutucular %{dirname} ve %{basename}, paketi hariç olmak üzere kural etiketinin bu bölümlerine genişler. Örneğin "//pkg:a/b.c" içinde dirname a, temel ad ise b.c olur.

Pratikte en yaygın değiştirme yer tutucusu "%{name}" şeklindedir. Örneğin, "foo" adlı bir hedef için {"bin": "%{name}.exe"} çıktıları, uygulama işlevinde ctx.outputs.bin olarak erişilebilen foo.exe adlı bir çıkışı önceden tanımlar.

executable bool; varsayılan değer: unbound
Bu kuralın yürütülebilir olarak kabul edilip edilmediği, yani bir blaze run komutunun konusu olup olmadığı. Varsayılan olarak False değerine ayarlanır. Daha fazla bilgi için Kurallar sayfasına göz atın.
output_to_genfiles varsayılan değer False şeklindedir.
Doğru değerine ayarlanırsa dosyalar bin dizini yerine genfiles dizininde oluşturulur. Mevcut kurallarla uyumluluk açısından gerekli olmadığı sürece (ör. C++ için üstbilgi dosyaları oluştururken) bu işareti ayarlamayın.
fragments dize sequence; varsayılan olarak [] şeklindedir
Kuralın hedef yapılandırmada gerektirdiği yapılandırma parçası adlarının listesi.
host_fragments dize sequence; varsayılan olarak [] şeklindedir
Kuralın ana makine yapılandırmasında gerektirdiği yapılandırma parçası adlarının listesi.
_skylark_testable varsayılan değer şudur: False
(Deneysel)

Doğru ise bu kural, Actions sağlayıcısı aracılığıyla kendisine dayalı kurallara göre yaptığı işlemleri inceleme için gösterir. Sağlayıcı, ctx.created_actions() işlevini çağırarak kuralın kendisi için de kullanılabilir.

Bu, yalnızca Starlark kurallarının analiz zamanı davranışını test etmek için kullanılmalıdır. Bu işaret gelecekte kaldırılabilir.
toolchains sequence; varsayılan değer: []
Ayarlanırsa bu kuralın gerektirdiği araç zinciri grubu. Liste, herhangi bir kombinasyonda String, Label veya StarlarkToolchainTypeApi nesnelerini içerebilir. Araç zincirleri, mevcut platform kontrol edilerek bulunur ve kural uygulamasına ctx.toolchain üzerinden sağlanır.
incompatible_use_toolchain_transition varsayılan: False
Kullanımdan kaldırıldı, artık kullanılmıyor ve kaldırılması gerekiyor.
doc string; veya None; varsayılan olarak None şeklindedir
Doküman oluşturma araçları tarafından çıkarılabilen bir kuralın açıklamasıdır.
provides varsayılan değer: []
Uygulama işlevinin döndürmesi gereken sağlayıcıların listesi.

Uygulama işlevi, burada listelenen sağlayıcı türlerinden herhangi birini döndürdüğü değerden çıkarırsa bir hata oluşur. Ancak, uygulama işlevi burada listelenmeyen ek sağlayıcılar döndürebilir.

Listenin her öğesi, provider() tarafından döndürülen bir *Info nesnesidir ancak eski sağlayıcı, kendi dize adıyla temsil edilir.Bir kuralın hedefi, gerekli sağlayıcıyı bildiren bir hedef için bağımlılık olarak kullanıldığında söz konusu sağlayıcının burada belirtilmesi gerekmez. Uygulama işlevinin bunu döndürmesi yeterlidir. Bununla birlikte, zorunlu olmamakla birlikte, bu parametrenin belirtilmesi en iyi uygulama olarak kabul edilir. Ancak boyutun required_providers alanı, sağlayıcıların burada belirtilmesini gerektirir.

exec_compatible_with dize sekanası; varsayılan değer []
Yürütme platformunda bu kural türünün tüm hedefleri için geçerli olan kısıtlamalar listesidir.
analysis_test varsayılandır: False
Doğru ise bu kural analiz testi olarak değerlendirilir.

Not: Analysis test kuralları, temel Starlark kitaplıklarında sağlanan altyapı kullanılarak tanımlanır. Yol gösterici bilgiler için Test konusuna bakın.

Bir kural analiz testi kuralı olarak tanımlanırsa kuralın özelliklerinde analysis_test_transition kullanılarak tanımlanan yapılandırma geçişlerinin kullanılmasına izin verilir, ancak bazı kısıtlamalar uygulanır:

  • Bu kuralın hedefleri, sahip olabilecekleri geçişli bağımlılıkların sayısı ile sınırlıdır.
  • Kural, test kuralı olarak kabul edilir (test=True ayarlanmış gibi). Bu, test değerinin yerini alır
  • Kural uygulama işlevi, işlemleri kaydedemez. Bunun yerine, AnalysisTestResultInfo öğesini sağlayarak bir başarılı/başarısız sonucu kaydetmelidir.
build_setting BuildSetting veya None; varsayılan olarak None değerine sahiptir.
Ayarlanırsa bu kuralın ne tür bir build setting olduğunu tanımlar. config modülüne bakın. Ayarlanırsa bu kurala, buraya iletilen değere karşılık gelen bir türle birlikte "build_setting_default" adlı zorunlu bir özellik otomatik olarak eklenir.
cfg varsayılan değer: None
Bu ayarlanırsa, yapılandırma geçişinin işaret ettiği noktalar, kural analizden önce kendi yapılandırmasına uygulanır.
exec_groups dict veya None; varsayılan olarak None
Yürütme grubu adının (dize) dikte değeri exec_groups'dir. Ayarlanırsa kuralların tek bir hedef içinde birden çok yürütme platformunda işlem çalıştırmasına izin verir. Daha fazla bilgi için yürütme grupları dokümanlarına göz atın.
initializer varsayılan değer: None
Deneysel: Kuralın özelliklerini başlatan Stalark işlevi.

İşlev, kuralın her örneği için yükleme zamanında çağrılır. Kural tarafından tanımlanan herkese açık özelliklerin değerleriyle çağrılır (örneğin, name veya tags gibi genel özelliklerle değil).

Özellik adlarından istenen değerlere bir sözlük döndürmelidir. Döndürülmeyen özellikler etkilenmez. None öğesinin değer olarak döndürülmesi, özellik tanımında belirtilen varsayılan değerin kullanılmasını sağlar.

Başlatıcılar, özellik tanımında belirtilen varsayılan değerlerden önce değerlendirilir. Sonuç olarak, başlatıcının imzasındaki bir parametre varsayılan bir değer içeriyorsa özellik tanımındaki varsayılan değerin üzerine yazar (None değerini döndürdüğü durumlar hariç).

Benzer şekilde, başlatıcının imzasındaki bir parametrenin varsayılan değeri yoksa parametre zorunlu hale gelir. Bu gibi durumlarda bir özellik tanımına varsayılan/zorunlu ayarları atlamanız önerilir.

İşlenmeyen özellikler için **kwargs kullanılması önerilir.

Genişletilmiş kurallar söz konusu olduğunda tüm başlatıcılar alt öğeden üst öğelere ilerleme olarak adlandırılır. Her başlatıcıya yalnızca bildiği herkese açık özellikler iletilir.

parent varsayılan değer: None
Deneysel: Genişletilmiş Stalark kuralı. Ayarlandığında, herkese açık özellikler ile reklamı yapılan sağlayıcılar birleştirilir. Kural, üst öğedeki executable ve test ile eşleşiyor. fragments, toolchains, exec_compatible_with ve exec_groups değerleri birleştirilir. Eski veya kullanımdan kaldırılan parametreler ayarlanamaz.
extendable bool; veya Label; veya string ya da None; varsayılan olarak None şeklindedir
Deneysel: Bu kuralın kapsamını hangi kuralların genişletebileceğini tanımlayan bir izin verilenler listesi etiketi. Ayrıca, genişletmeye her zaman izin vermek/vermemek için Doğru/Yanlış değerine de ayarlanabilir. Bazel varsayılan olarak uzantılara her zaman izin verir.
subrules Alt kural dizisi; varsayılan değer: []
Deneysel: Bu kural tarafından kullanılan alt kuralların listesi.

seçer

unknown select(x, no_match_error='')

select(), kural özelliğini yapılandırılabilir hale getiren yardımcı işlevdir. Ayrıntılı bilgi için ansiklopedi oluşturma bölümünü inceleyin.

Parametreler

Parametre Açıklama
x gerekli
Yapılandırma koşullarını değerlerle eşleştiren bir komut. Her anahtar, config_setting veya restricted_value örneğini tanımlayan bir Label ya da etiket dizesidir. Dize yerine Etiketin ne zaman kullanılacağını öğrenmek için makrolarla ilgili dokümanlara bakın.
no_match_error varsayılan değer: ''
Hiçbir koşul eşleşmediğinde raporlanacak isteğe bağlı özel hata.

alt kural

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

Alt kuralın yeni bir örneğini oluşturur. Bu işlevin sonucu, kullanılabilmesi için bir genel değişkende depolanmalıdır.

Parametreler

Parametre Açıklama
implementation function; gerekli
Bu alt kuralı uygulayan Starlark işlevi
attrs dict; varsayılan {}'dir
Alt kuralın tüm (gizli) özelliklerini tanımlayan bir sözlük.

Alt kuralların yalnızca etiket türünde (ör. etiket veya etiket listesi) gizli özellikleri olabilir. Bu etiketlere karşılık gelen çözümlenmiş değerler Bazel tarafından otomatik olarak alt kuralın uygulama işlevine adlandırılmış bağımsız değişkenler olarak aktarılır (dolayısıyla uygulama işlevinin özellik adlarıyla eşleşen adlandırılmış parametreleri kabul etmek için kullanılması gerekir). Bu değerlerin türleri şu şekildedir:

  • executable=True olan etiket özellikleri için FilesToRunProvider
  • allow_single_file=True olan etiket özellikleri için File
  • Diğer tüm etiket özellikleri için Target
  • Tüm label-list özellikleri için [Target]
toolchains sequence; varsayılan değer: []
Ayarlanırsa bu alt kural için gereken araç zinciri grubu. Liste, herhangi bir kombinasyonda String, Label veya StarlarkToolchainTypeApi nesnelerini içerebilir. Araç zincirleri, mevcut platform kontrol edilerek bulunur ve alt kural uygulamasına ctx.toolchains üzerinden sağlanır.
fragments dize'nin sequence; varsayılan olarak [] şeklindedir
Alt kuralın hedef yapılandırmada gerektirdiği yapılandırma parçası adlarının listesi.
subrules Alt kuralların dizisi; varsayılan olarak []
Bu alt kuralın gerektirdiği diğer alt kuralların listesi.

tag_class

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

Modül uzantısı tarafından kullanılabilen veri nesneleri olan etiket sınıfı için özellik şeması tanımlayan yeni bir tag_class nesnesi oluşturur.

Parametreler

Parametre Açıklama
attrs varsayılan değer: {}
Bu etiket sınıfının tüm özelliklerini tanımlamak için kullanılan bir sözlük. Bir özellik adından özellik nesnesine eşlenir (bkz. attr modülü).
doc string; veya None; varsayılan değer: None
Doküman oluşturma araçları tarafından çıkarılabilen etiket sınıfının bir açıklamasıdır.

görünürlük

None visibility(value)

Başlatılmakta olan .bzl modülünün yükleme görünürlüğünü ayarlar.

Bir modülün yük görünürlüğü, diğer BUILD ve .bzl dosyalarının onu yükleyip yükleyemeyeceğini belirler. (Bu, temel .bzl kaynak dosyasının hedef görünürlüğünden farklıdır. Bu kaynak, dosyanın diğer hedeflerin bağımlılığı olarak görünüp görünemeyeceğini belirler.) Yük görünürlüğü, paket düzeyinde çalışır: Bir modül yüklemek için, yüklemeyi yapan dosyanın, modülün görünürlüğüne izin verilen bir pakette bulunması gerekir. Bir modül, görünürlüğü ne olursa olsun her zaman kendi paketi içinde yüklenebilir.

visibility(), her .bzl dosyası için yalnızca bir kez ve yalnızca üst düzeyde çağrılabilir, bir işlevin içinde çağırılamaz. Tercih edilen stil, bu çağrının load() ifadelerinin ve bağımsız değişkeni belirlemek için gereken kısa mantığın hemen altına yerleştirilmesidir.

--check_bzl_visibility işareti false (yanlış) değerine ayarlanırsa yük görünürlüğü ihlalleri uyarı verir ancak derlemede başarısız olmaz.

Parametreler

Parametre Açıklama
value gerekli
Paket spesifikasyonu dizeleri listesi veya tek bir paket spesifikasyonu dizesi.

Paket özellikleri, package_group ile aynı biçime sahiptir, ancak negatif paket özelliklerine izin verilmez. Yani bir spesifikasyon şu şekillerde olabilir:

  • "//foo": //foo paketi
  • "//foo/...": //foo paketi ve tüm alt paketleri.
  • "public" veya "private": sırasıyla tüm paketler veya paket yok

"@" söz dizimine izin verilmez; tüm spesifikasyonlar geçerli modülün deposuna göre yorumlanır.

value bir dize listesiyse bu modüle görünürlük izni verilen paket kümesi, her spesifikasyonun temsil ettiği paketlerin birleşimidir. (Boş liste private ile aynı etkiye sahiptir.) value tek bir dizeyse [value] tekil listesi gibi ele alınır.

--incompatible_package_group_has_public_syntax ve --incompatible_fix_package_group_reporoot_syntax işaretlerinin bu bağımsız değişken üzerinde etkisi olmadığını unutmayın. "public" ve "private" değerleri her zaman kullanılabilir ve "//..." her zaman "mevcut depodaki tüm paketler" olarak yorumlanır.