.bzl dosyaları

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

Üyeler

analysis_test_transition

transition analysis_test_transition(settings)

Bir 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 (ör. bağımlılık ağaçlarının boyutu sınırlıdır). Bu nedenle, bu işlev kullanılarak oluşturulan geçişler, transition() kullanılarak oluşturulan geçişlere kıyasla potansiyel kapsam açısından sınırlıdır.

Bu işlev, öncelikle Analysis Test Framework temel kitaplığını kolaylaştırmak için tasarlanmıştır. En iyi uygulamalar için ilgili dokümanları (veya uygulamayı) inceleyin.

Parametreler

Parametre Açıklama
settings required
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ğerleridir. Diğer tüm ayarlar değişmez. Bir analiz testinin geçmesi için ayarlanması gereken belirli yapılandırma ayarlarını belirtmek amacıyla 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 unsur yaratır. Bu işlevin sonucu, genel bir değerde depolanmalıdır. Daha fazla bilgi için lütfen Yönler'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 (entenin uygulandığı hedef) ve ctx (hedefin oluşturulduğu kural bağlamı). Hedefin özellikleri ctx.rule alanı üzerinden kullanılabilir. Bu işlev, analiz aşamasında bir özelliğin hedefe her uygulanması için değerlendirilir.
attr_aspects Dize dizisi; varsayılan değer []
Özellik adlarının listesi. Görünüm, bu adlara sahip bir hedefin özelliklerinde belirtilen bağımlılıklar boyunca yayılır. Buradaki yaygın değerler arasında deps ve exports bulunur. Liste, bir hedefin tüm bağımlılıkları boyunca dağıtılacak tek bir dize "*" de içerebilir.
attrs dict; varsayılan değer {}
Özelliğin tüm özelliklerini açıklayan bir sözlük. Özellik adından "attr.label" veya "attr.string" gibi bir özellik nesnesiyle eşlenir (attr modülüne bakın). En boy özellikleri, uygulama işlevinde ctx parametresinin alanları olarak kullanılabilir.

_ ile başlayan örtülü özellikler varsayılan değerlere ve label veya label_list türüne sahip olmalıdır.

Açık atıf özellikleri string türüne sahip olmalı ve values kısıtlamasını kullanmalıdır. Belirli özellikler, görünümün yalnızca kısıtlamaya göre aynı ada, türe ve geçerli değerlere sahip özellikler içeren kurallarla kullanılmasını kısıtlar.

required_providers varsayılan değer []
Bu özellik, yönü yalnızca kurallarında gerekli sağlayıcılarının reklamını yapan 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 ikisini birden içermemelidir. Örneğin, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] geçerli bir değerdir ancak [FooInfo, BarInfo, [BazInfo, QuxInfo]] geçerli değildir.

İç içe yerleştirilmemiş bir sağlayıcı listesi, otomatik olarak tek bir sağlayıcı listesi içeren bir listeye dönüştürülür. Yani [FooInfo, BarInfo], otomatik olarak [[FooInfo, BarInfo]]'e dönüştürülecek.

Bazı kuralların (ör. some_rule) hedeflerinin bir görünüme görünür olması için some_rule'ün, gerekli sağlayıcı listelerinden en az birinde bulunan tüm sağlayıcıların reklamını yapması gerekir. Örneğin, bir özelliğin required_providers değeri [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] ise bu özellik, some_rule hedeflerini yalnızca some_rule FooInfo, veya BarInfo, veya hem BazInfo ve QuxInfo sağladığında görebilir.

required_aspect_providers varsayılan değer []
Bu özellik, bu yönün 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 ikisini birden içermemelidir. Örneğin, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] geçerli bir değerken [FooInfo, BarInfo, [BazInfo, QuxInfo]] geçerli değildir.

İç içe yerleştirilmemiş bir sağlayıcı listesi, otomatik olarak tek bir sağlayıcı listesi içeren bir listeye dönüştürülür. Yani [FooInfo, BarInfo], otomatik olarak [[FooInfo, BarInfo]]'e dönüştürülecek.

Başka bir yönü (ör. other_aspect) bu yönü tarafı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, other_aspect yalnızca FooInfo, veya BarInfo, veya hem BazInfo hem de QuxInfo sağladığında other_aspect'i görebilir.

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önüş değerinden çıkarırsa 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 nesnesi olmasına rağmen eski bir sağlayıcı, dize adıyla temsil edilir.Kuralın bir hedefi, zorunlu bir sağlayıcıyı açıklayan bir hedefin bağımlılığı olarak kullanıldığında bu sağlayıcıyı burada belirtmeniz gerekmez. Uygulama işlevinin bunu döndürmesi yeterlidir. Ancak zorunlu olmasa da bunu belirtmek en iyi uygulama olarak kabul edilir. Ancak bir yönün required_providers alanında, sağlayıcıların burada belirtilmesi gerekir.

requires Aspect sequence; varsayılan değer []
Bu özellikten önce dağıtılması gereken özelliklerin listesi.
fragments Dize dizisi; varsayılan değer []
Yönelinmenin hedef yapılandırmada gerektirdiği yapılandırma parçalarının adları.
host_fragments Dize dizisi; varsayılan değer []
Yönelinmenin ana makine yapılandırmasında gerektirdiği yapılandırma parçalarının adları.
toolchains sequence; varsayılan olarak [] şeklindedir
Ayarlanırsa bu kuralın gerektirdiği araç zincirleri grubu. Liste, herhangi bir kombinasyonda String, Label veya StarlarkToolchainTypeApi nesnelerini içerebilir. Araçlar zincirleri, mevcut platform kontrol edilerek bulunur ve ctx.toolchain aracılığıyla kural uygulamasına sağlanır.
incompatible_use_toolchain_transition varsayılan değer False
Desteği sonlandırıldı, artık kullanılmıyor ve kaldırılması gerekiyor.
doc dize veya None; varsayılan değer None
Belge oluşturma araçları tarafından ayıklanabilen yönün açıklaması.
apply_to_generating_rules varsayılan değer False şeklindedir
True (doğru) ise en boy değeri, çıkış dosyasına uygulandığında çıkış dosyasının oluşturma kuralına uygulanır.

Örneğin, bir özelliğin "deps" özelliği aracılığıyla aktarmalı olarak yayıldığını ve "alpha" hedefine uygulandığını varsayalım. "alpha"nın "deps = [':beta_output']" değerine sahip olduğunu varsayalım. Burada "beta_output", bir "beta" hedefinin tanımlanmış bir çıkışıdır. "beta"nın "deps" özelliklerinden biri olarak "charlie" hedefinin olduğunu varsayalım. Özellik için "apply_to_generating_rules=True" ise özellik "alpha", "beta" ve "charlie" aracılığıyla yayılır. Yanlış ise özellik yalnızca "alpha"ya yayılır.

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

exec_compatible_with Dize dizisi; varsayılan değer []
Yürütme platformundaki, bu özelliğin tüm örnekleri için geçerli olan kısıtlamaların listesi.
exec_groups dict veya None; varsayılan değer None
Yürütme grubu adının (dize) exec_groups olarak dize dizini. Ayarlanırsa yönlerin tek bir örnek içinde birden fazla yürütme platformunda işlemler çalıştırmasına olanak tanır. Daha fazla bilgi için yürütme grupları belgelerine göz atın.
subrules Alt kural dizini; varsayılan değer []
Deneysel: Bu yön tarafından kullanılan alt kuralların listesi.

configuration_field

LateBoundDefault configuration_field(fragment, name)

Etiket türündeki bir özellik için geç bağlanmış varsayılan değeri referans verir. Bir değer, değeri belirlemeden önce yapılandırmanın oluşturulmasını gerektiriyorsa "geç bağlanma" özelliğine sahiptir. Bu değeri kullanan tüm özellikler özel olmalıdır.

Örnek kullanım:

Kural özelliğini tanımlama:

'_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ğerini içeren bir yapılandırma parçasının adı.
name gerekli
Yapılandırma parçasından alınacak değerin adı.

depset

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

Bir depset oluşturur. direct parametresi, bağımlılık grubunun doğrudan öğelerinin bir listesi, transitive parametresi ise öğeleri oluşturulan bağımlılık grubunun dolaylı öğeleri haline gelen bağımlılık gruplarının bir listesidir. Depset bir listeye dönüştürüldüğünde öğelerin döndürülme sırası order parametresi tarafından belirtilir. Daha fazla bilgi için Depsise genel bakış başlıklı makaleyi inceleyin.

Bir depsetteki tüm öğeler (doğrudan ve dolaylı), type(x) ifadesiyle elde edilen türde olmalıdır.

Yineleme sırasında yinelemeleri ortadan kaldırmak için karma oluşturmaya dayalı bir küme kullanıldığından, depset'in tüm öğeleri karma oluşturmaya uygun olmalıdır. Ancak bu değişmez özellik şu anda tüm kurucularda tutarlı bir şekilde kontrol edilmemektedir. Tutarlı kontrolü etkinleştirmek için --incompatible_always_check_depset_elements işaretini kullanın. Bu, gelecekteki sürümlerde varsayılan davranış olacaktır. Sayı 10313 sorununa bakın.

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

Oluşturulan depo grubunun sırası, transitive depo gruplarının sırası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ğeridir
Bir kümenin doğrudan öğelerinin listesi.
order varsayılan değer "default"
Yeni depo kümesi için tarama stratejisi. Olası değerler için buraya bakın.
transitive Depset dizisi veya None; varsayılan değer None
Öğeleri, depsetin dolaylı öğeleri olacak depsetlerin 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şlem oluşturmak üzere 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 nesneleri içerebilir.
exec_compatible_with Dize dizisi; varsayılan değer []
Yürütme platformundaki kısıtlamaların listesi.

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. Dışa aktarılıp use_extension ile MODULE.bazel dosyasında kullanılabilmesi için global bir değerde saklayın.

Parametreler

Parametre Açıklama
implementation required
Bu modül uzantısını uygulayan işlev. Tek bir parametre (module_ctx) almalıdır. Bu işlev, kullanılabilir depo kümesini belirlemek için bir 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ı bildiren bir sözlük. Etiket sınıfının adından bir tag_class nesnesiyle eşlenir.
doc string; veya None; varsayılan olarak None şeklindedir
Belge oluşturma araçları tarafından çıkarılabilecek modül uzantısının bir açıklaması.
environ Dize dizisi; varsayılan değer []
Bu modül uzantısının bağlı olduğu ortam değişkenlerinin listesini sağlar. Bu listedeki bir ortam değişkeni değişirse uzantı yeniden değerlendirilir.
os_dependent varsayılan değer False
Bu uzantının işletim sistemine bağlı olup olmadığını belirtir
arch_dependent varsayılan değer False
Bu uzantının mimariye bağlı olup olmadığını belirtir

sağlayıcı

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

Bir sağlayıcı simgesini tanımlar. Sağlayıcı, çağrılarak örneklendirilebilir veya doğrudan bir hedeften ilgili sağlayıcının bir örneğini almak için 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) başlıklı makaleyi inceleyin.

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

init belirtilirse 2 öğeden oluşan bir öğe döndürür: bir Provider çağrılabilir değer ve ham oluşturucu çağrılabilir değer. Ayrıntılar için Kurallar (Özel sağlayıcıların özel başlatılması) bölümüne ve aşağıdaki init parametresi tartışmasına bakın.

Parametreler

Parametre Açıklama
doc dize veya None; varsayılan değer None
Sağlayıcının, doküman oluşturma araçları tarafından ayıklanabilen açıklaması.
fields dizelerin sequence; veya dict; None; varsayılan değer None
Belirtilirse izin verilen alan grubunu kısıtlar.
Olası değerler:
  • alan listesi:
    provider(fields = ['a', 'b'])

  • dictionary field name -> documentation:
    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 değer None
Oluşturma sırasında sağlayıcının alan değerlerini ön işleme ve doğrulamak için isteğe bağlı bir geri çağırma işlevi. init belirtilirse provider(), 2 öğeden oluşan bir öğe döndürür: normal sağlayıcı sembolü ve ham oluşturucu.

Net bir açıklama aşağıda verilmiştir. Kolay anlaşılır bir tartışma ve kullanım alanları için Kurallar (Sağlayıcıların özel başlatılması) bölümüne bakın.

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

  • args boş değilse hata oluşur.
  • provider() çağrılırken fields parametresi belirtilmişse ve kwargs, fields'te listelenmeyen bir anahtar içeriyorsa hata meydana gelir.
  • 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.
init geri çağırma işlevi verilmediği durumlarda, P simgesine yapılan çağrı, varsayılan yapıcı işlevi c'e yapılan çağrı gibi davranır. 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'ın m.foo == 1 içeren bir MyInfo örneği olmasını sağlar.

Ancak init belirtilirse P(*args, **kwargs) çağrısı bunun yerine aşağıdaki adımları gerçekleştirir:

  1. Geri çağırma işlevi init(*args, **kwargs) olarak çağrılır. Yani P'a iletilen konumsal ve anahtar kelime bağımsız değişkenleriyle aynı bağımsız değişkenler kullanılır.
  2. init işlevinin döndürdüğü değerin, anahtarları alan adı dizeleri olan bir sözlük (d) olması beklenir. Değilse bir hata oluşur.
  3. c(**d) örneğinde olduğu gibi, d girişleriyle varsayılan oluşturucu anahtar kelime bağımsız değişkenleri olarak çağrılarak yeni bir P örneği oluşturulur.

Not: Yukarıdaki adımlar, *args veya **kwargs, init'nin imzasıyla eşleşmezse, init'nin gövdesinin değerlendirilmesi başarısız olursa (belki de fail() çağrısı yoluyla kasıtlı olarak) veya init'nin döndürdüğü değer beklenen şemaya sahip bir sözlük değilse bir hata oluştuğunu gösterir.

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

init belirtildiğinde provider()'un döndürdüğü değer bir tuple (P, r) olur. Burada r, ham kurucu olur. Aslında r işlevinin davranışı, tam olarak yukarıda açıklanan c varsayılan oluşturucu işleviyle aynıdır. Genellikle r, adının önüne bir alt çizgi eklenen bir değişkene bağlıdır. Böylece, yalnızca geçerli .bzl dosyası 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. module extension uygulama işlevinden yüklenip çağrılabilmesi veya use_repo_rule tarafından kullanılabilmesi için genel bir değerde depolayın.

Parametreler

Parametre Açıklama
implementation required
Bu kuralı uygulayan işlev. Tek bir parametre (repository_ctx) içermelidir. İşlev, kuralın her örneği için yükleme aşamasında çağrılır.
attrs dict veya None; varsayılan değer None
kuralın tüm özelliklerini bildirmek için sözlük. Bir özellik adından özellik nesnesine eşleme yapar (attr modülüne bakın). _ ile başlayan özellikler gizlidir ve bir dosyaya etiket için örtülü bağımlılık eklemek için kullanılabilir (depo kuralı, oluşturulan bir yapıya bağlı olamaz). name özelliği dolaylı olarak eklenir ve belirtilmemelidir.
local varsayılan değer False
Bu kuralın her şeyi yerel sistemden getirdiğini ve her getirme işleminde yeniden değerlendirilmesi gerektiğini belirtir.
environ dizelerin sequence'ı; varsayılan []
Kullanımdan kaldırıldı. Bu parametrenin desteği sonlandırılmıştır. Bunun yerine repository_ctx.getenv ürününe geçiş yapın.
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 varsayılan değer False
Deponun, yapılandırma amacıyla sistemi incelediğini belirtir
remotable Varsayılan değer False
Deneysel. Bu parametre deneyseldir ve herhangi bir zamanda değişebilir. Lütfen bu yönteme güvenmeyin. ---experimental_repo_remote_exec
Uzaktan yürütmeyle uyumlu olarak ayarlanarak deneme amaçlı olarak etkinleştirilebilir.
doc dize veya None; varsayılan değer None
Depolama alanı kuralının, doküman oluşturma araçları tarafından ayıklanabilen 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, bir .bzl dosyasındaki genel değişkenlere atanmalıdır. Genel değişkenin adı, kuralın adıdır.

Test kurallarında adın _test ile bitmesi gerekir. Diğer hiçbir kuralda ise bu son ek bulunmamalıdır. (Bu kısıtlama yalnızca kurallar için geçerli olup hedeflerinin kapsamına girmez.)

Parametreler

Parametre Açıklama
implementation required
Bu kuralı uygulayan Starlark işlevi tam olarak bir parametreye sahip olmalıdır: ctx. İşlev, kuralın her örneği için analiz aşamasında çağrılır. Kullanıcı tarafından sağlanan özelliklere erişebilir. Bildirilen tüm çıkışları oluşturmak için işlemler oluşturmalıdır.
test bool; varsayılan değer unbound
Bu kuralın test kuralı olup olmadığı, yani blaze test komutuna tabi olup olamayacağı. Tüm test kuralları otomatik olarak yürütülebilir olarak kabul edilir. Test kuralları için executable = True değerini açıkça ayarlamak 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; varsayılan değer {}
kuralın tüm özelliklerini bildirmek için sözlük. Bir özellik adından özellik nesnesine eşleme yapar (attr modülüne bakın). _ ile başlayan özellikler gizlidir ve bir etikete dolaylı bağımlılık eklemek için kullanılabilir. name özelliği dolaylı olarak eklenir ve belirtilmemelidir. visibility, deprecation, tags, testonly ve features özellikleri dolaylı olarak eklenir ve geçersiz kılınamaz. Çoğu kural için yalnızca birkaç özellik gerekir. Kural işlevi, bellek kullanımını sınırlamak için attrs boyutuna bir sınır uygular.
outputs dict; veya None; veya function; varsayılan değer None
Kullanımdan kaldırıldı. Bu parametrenin desteği sonlandırıldı ve yakında kaldırılacak. Lütfen bu yönteme güvenmeyin. ---incompatible_no_rule_outputs_param ile devre dışı bırakılır. Kodunuzun, kaldırılma olasılığı yüksek olan içerikle uyumlu olduğunu doğrulamak için bu işareti kullanın.
Bu parametrenin desteği sonlandırılmıştır. Kuralları, OutputGroupInfo veya attr.output yerine kullanacak şekilde taşıyın.

Önceden beyan edilen çıkışları tanımlamak için kullanılan bir şema. output ve output_list özelliklerinden farklı olarak, kullanıcı bu dosyaların etiketlerini belirtmez. Önceden bildirilmiş çıkışlar hakkında daha fazla bilgi için Kurallar sayfasına bakın.

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 işlevi, hesaplanmış bağımlılık özelliklerine benzer şekilde çalışır: İşlevin parametre adları, kuralın özellikleriyle eşleştirilir. Örneğin, outputs = _my_func parametresini def _my_func(srcs, deps): ... tanımı ile iletirseniz işlev srcs ve deps özelliklerine erişebilir. Sözlük doğrudan veya bir işlev aracılığıyla belirtilmiş olsun, aşağıdaki şekilde yorumlanır.

Sözlükteki her giriş, anahtarın bir tanımlayıcı ve değerin, çıktının etiketini belirleyen bir dize şablonu olduğu önceden bildirilmiş bir çıktı oluşturur. Kuralın uygulama işlevinde tanımlayıcı, ctx.outputs içindeki çıkışın File alanına erişmek için kullanılan alan adı olur. Çıktının etiketi, kuralla aynı pakete sahiptir ve paketten sonraki kısım, "%{ATTR}" biçimindeki her yer tutucunun ATTR özelliğinin değerinden oluşturulan bir dizeyle değiştirilmesiyle oluşturulur:

  • Dize türündeki özellikler aynen değiştirilir.
  • Etiket türündeki özellikler, paketten sonra dosya uzantısı çıkarılarak etiketin bir parçası olur. Örneğin, "//pkg:a/b.c" etiketi "a/b" olur.
  • Çıkış türündeki özellikler, dosya uzantısı da dahil olmak üzere paketten sonra etiketin bir parçası olur (yukarıdaki örnekte "a/b.c").
  • Yer tutucularda kullanılan tüm liste türündeki özelliklerin (örneğin, attr.label_list) tam olarak bir öğeye sahip olması gerekir. Dönüşümleri, liste dışı sürümleriyle (attr.label) aynıdır.
  • Diğer özellik türleri yer tutucularda görünmeyebilir.
  • Özel olmayan %{dirname} ve %{basename} yer tutucuları, paketi hariç olmak üzere kuralın etiketinin bu bölümlerini genişletir. Örneğin, "//pkg:a/b.c" dosyasında dirname a, basename ise b.c olur.

Uygulamada en yaygın yer tutucu "%{name}"'tür. Örneğin, "foo" adlı bir hedef için çıkışlar sözlüğü {"bin": "%{name}.exe"}, uygulama işlevinde ctx.outputs.bin olarak erişilebilen foo.exe adlı bir çıkışı önceden bildirir.

executable bool; varsayılan değer unbound
Bu kuralın yürütülebilir olarak kabul edilip edilmeyeceğini, yani bir blaze run komutunun konusu olup olamayacağını belirtir. Varsayılan olarak False değerine ayarlanır. Daha fazla bilgi için Kurallar sayfasına bakın.
output_to_genfiles varsayılan olarak False şeklindedir
True (doğru) değerine ayarlanırsa dosyalar bin dizini yerine genfiles dizininde oluşturulur. Mevcut kurallarla uyumluluk için ihtiyacınız olmadığı sürece (ör. C++ için başlık dosyaları oluştururken) bu işareti ayarlamayınız.
fragments Dize dizisi; varsayılan değer []
Kuralın hedef yapılandırmada gerektirdiği yapılandırma parçalarının adları.
host_fragments Dize dizisi; varsayılan değer []
Kuralın ana makine yapılandırmasında gerektirdiği yapılandırma parçalarının adları.
_skylark_testable varsayılan değer False
(Deneysel)

Doğru ise bu kural, işlemlerini bir Actions sağlayıcı aracılığıyla kendisine bağlı kurallar tarafından incelenmek üzere gösterir. Sağlayıcı, ctx.created_actions() çağrısı yapılarak kuralın kendisi tarafından da kullanılabilir.

Bu, yalnızca Starlark kurallarının analiz sırasındaki 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 nesneleri içerebilir. Araçlar zincirleri, mevcut platform kontrol edilerek bulunur ve ctx.toolchain aracılığıyla kural uygulamasına sağlanır.
incompatible_use_toolchain_transition varsayılan değer False
Desteği sonlandırıldı, artık kullanılmıyor ve kaldırılması gerekiyor.
doc dize veya None; varsayılan değer None
Belge oluşturma araçları tarafından ayıklanabilen kural açıklaması.
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önüş değerinden çıkarırsa 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 nesnesi olmasına rağmen eski bir sağlayıcı, dize adıyla temsil edilir.Kuralın bir hedefi, zorunlu bir sağlayıcıyı açıklayan bir hedefin bağımlılığı olarak kullanıldığında bu sağlayıcıyı burada belirtmeniz gerekmez. Uygulama işlevinin bunu döndürmesi yeterlidir. Ancak zorunlu olmasa da bunu belirtmek en iyi uygulama olarak kabul edilir. Ancak bir yönün required_providers alanında, sağlayıcıların burada belirtilmesi gerekir.

exec_compatible_with Dize dizisi; varsayılan değer []
Yürütme platformundaki, bu kural türünün tüm hedefleri için geçerli olan kısıtlamaların listesi.
analysis_test varsayılan değeri False şeklindedir
True (doğru) ise bu kural bir analiz testi olarak değerlendirilir.

Not: Analiz testi kuralları, temel Starlark kitaplıklarında sağlanan altyapı kullanılarak tanımlanır. Yardım için Test bölümüne bakın.

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

  • Bu kuralın hedefleri, sahip olabileceği geçişli bağımlılıkların sayısı açısından 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 kaydedemeyebilir. Bunun yerine, AnalysisTestResultInfo sağlayarak başarılı/başarısız sonucunu kaydetmelidir.
build_setting BuildSetting veya None; varsayılan değer None
Ayarlanırsa bu kuralın ne tür bir build setting olduğunu açıklar. config modülüne bakın. Bu ayar belirlenirse bu kurala, burada iletilen değere karşılık gelen bir türde "build_setting_default" adlı zorunlu bir özellik otomatik olarak eklenir.
cfg varsayılan değer None
Ayarlanırsa kuralın analizden önce kendi yapılandırmasına uygulayacağı yapılandırma geçişini gösterir.
exec_groups dict veya None; varsayılan değer None
Yürütme grubu adının (dize) exec_groups olarak dize dizini. Ayarlanırsa kuralların tek bir hedef 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ı belgelerine bakı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 sırasında çağrılır. name ve kural tarafından tanımlanan herkese açık özelliklerin değerleriyle çağrılır (tags gibi genel özelliklerle değil).

Özellik adlarından istenen değerlere giden bir sözlük döndürmelidir. Döndürülmeyen özellikler bu durumdan etkilenmez. Değer olarak None döndürülmesi, özellik tanımında belirtilen varsayılan değerin kullanılmasına neden olur.

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

Benzer şekilde, başlatıcının imzasında varsayılan bir parametre yoksa parametre zorunlu hale gelir. Bu tür durumlarda bir özellik tanımında varsayılan/zorunlu ayarların kullanılmaması önerilir.

İşlenmeyen özellikler için **kwargs kullanmak iyi bir uygulamadır.

Genişletilmiş kurallar söz konusu olduğunda tüm başlatıcılar alt öğeden üst öğeye 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
Deneme: Uzatılmış Stalark kuralı. Ayarlandığında, reklamı yapılan sağlayıcıların yanı sıra herkese açık özellikler de birleştirilir. Kural, üst öğedeki executable ve test ile eşleşir. fragments, toolchains, exec_compatible_with ve exec_groups değerleri birleştirildi. Eski veya kullanımdan kaldırılmış parametreler ayarlanamaz. Üst öğenin gelen yapılandırma geçişi cfg, thisrule öğesinin gelen yapılandırmasından sonra uygulanır.
extendable bool; veya Label; veya string; veya None; varsayılan değer None
Deneysel: Bu kuralı hangi kuralların genişletebileceğini tanımlayan izin verilenler listesi etiketi. Uzatma işlemine her zaman izin vermek/vermemek için True/False olarak da ayarlanabilir. Bazel varsayılan olarak uzantılara her zaman izin verir.
subrules Alt kural dizisi; varsayılan değer []
Deneysel: Bu kuralın kullandığı alt kuralların listesi.

seç

unknown select(x, no_match_error='')

select(), kural özelliğini yapılandırılabilir hale getiren yardımcı işlevdir. Ayrıntılar için derleme ansiklopedisine bakın.

Parametreler

Parametre Açıklama
x required
Yapılandırma koşullarını değerlerle eşleyen bir sözlük. Her anahtar, config_setting veyarestriction_value örneğini tanımlayan bir Etiket veya etiket dizesidir. Dize yerine Etiket 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şmezse 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 genel bir değişkende saklanmalıdır.

Parametreler

Parametre Açıklama
implementation function; required
Bu alt kuralı uygulayan Starlark işlevi
attrs dict; varsayılan değer {}
Alt kuralın tüm (gizli) özelliklerini bildirmek için bir sözlük.

Alt kurallar yalnızca etiketle yazılmış (ör. etiket veya etiket listesi) gizli özelliklere sahip olabilir. Bu etiketlere karşılık gelen çözümlenmiş değerler, Bazel tarafından alt kuralın uygulama işlevine adlandırılmış bağımsız değişkenler olarak otomatik olarak iletilir (bu nedenle uygulama işlevinin, özellik adlarıyla eşleşen adlandırılmış parametreleri kabul etmesi gerekir). Bu değerlerin türleri şunlardır:

  • executable=True ile etiket özellikleri için FilesToRunProvider
  • allow_single_file=True ile etiket özellikleri için File
  • Diğer tüm etiket özellikleri için Target
  • Tüm etiket listesi özellikleri için [Target]
toolchains sequence; varsayılan değer []
Ayarlanırsa bu alt kuralın gerektirdiği araç zinciri grubu. Liste, herhangi bir kombinasyonda String, Label veya StarlarkToolchainTypeApi nesneleri içerebilir. Araç zincirleri, mevcut platform kontrol edilerek bulunur ve ctx.toolchains aracılığıyla alt kural uygulamasına sağlanır.
fragments Dize dizisi; varsayılan değer []
Alt kuralın hedef yapılandırmada gerektirdiği yapılandırma parçalarının adları.
subrules Alt kural sıralı listesi; varsayılan değer []
Bu alt kuralın ihtiyaç duyduğu diğer alt kuralların listesi.

tag_class

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

Bir modül uzantısı tarafından kullanılabilen veri nesneleri olan etiket sınıfı için bir özellik şemasını 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 bildiren bir sözlük. Bir özellik adından özellik nesnesine eşleme yapar (attr modülüne bakın).
doc dize veya None; varsayılan değer None
Belge oluşturma araçları tarafından ayıklanabilen etiket sınıfının açıklaması.

görünürlük

None visibility(value)

Şu anda başlatılmakta olan .bzl modülünün yük görünürlüğünü ayarlar.

Bir modülün yükleme görünürlüğü, diğer BUILD ve .bzl dosyalarının bu modülü yükleyip yükleyemeyeceğini belirler. (Bu, dosyanın diğer hedeflerin bağımlılığı olarak görünüp görünmeyeceğini yöneten temel .bzl kaynak dosyasının hedef görünürlüğünden farklıdır.) Yükleme görünürlüğü, paket düzeyinde çalışır: Bir modülü yüklemek için yüklemeyi yapan dosya, modüle görünürlüğü verilen bir pakette bulunmalıdır. Bir modül, görünürlüğünden bağımsız olarak her zaman kendi paketi içinde yüklenebilir.

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

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

Parametreler

Parametre Açıklama
value required
Paket spesifikasyonu dizelerinin listesi veya tek bir paket spesifikasyonu dizesi.

Paket özellikleri, negatif paket özelliklerine izin verilmemesi dışında package_group ile aynı biçimi izler. Yani bir spesifikasyon şu biçimlerde olabilir:

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

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

value bir dize listesiyse bu modüle görünürlüğü verilen paket grubu, her spesifikasyon tarafından temsil edilen paketlerin birleşimidir. (Boş liste, private ile aynı etkiye sahiptir.) value tek bir dize ise [value] tek öğeli liste gibi işlenir.

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