ग्लोबल

अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है ग्लोबल एनवायरमेंट में रजिस्टर किए गए ऑब्जेक्ट, फ़ंक्शन, और मॉड्यूल.

सदस्य

सभी

bool all(elements)

अगर सभी एलिमेंट 'सही' के तौर पर रेट करते हैं या कलेक्शन खाली होता है, तो 'सही' दिखाता है. बूल फ़ंक्शन का इस्तेमाल करके एलिमेंट को बूलियन में बदला जाता है.
all(["hello", 3, True]) == True
all([-1, 0, 1]) == False

पैरामीटर

पैरामीटर ब्यौरा
elements ज़रूरी है
स्ट्रिंग या एलिमेंट का कलेक्शन.

analysis_test_transition

transition analysis_test_transition(settings)

विश्लेषण-टेस्ट नियम की डिपेंडेंसी पर लागू होने वाले कॉन्फ़िगरेशन ट्रांज़िशन को बनाता है. यह ट्रांज़िशन, सिर्फ़ analysis_test = True वाले नियमों के एट्रिब्यूट पर लागू हो सकता है. इस तरह के नियमों की क्षमताओं (उदाहरण के लिए, उनकी डिपेंडेंसी ट्री का साइज़ सीमित होता है) पर पाबंदी होती है. इसलिए, ट्रांज़िशन की मदद से किए गए ट्रांज़िशन की तुलना में, इस फ़ंक्शन का इस्तेमाल करके बनाए गए ट्रांज़िशन सीमित होते हैं.

इस फ़ंक्शन को मुख्य रूप से विश्लेषण टेस्ट फ़्रेमवर्क बनाने के लिए डिज़ाइन किया गया है. सबसे सही तरीकों के बारे में जानने के लिए, इसके दस्तावेज़ या इसे लागू करने का तरीका देखें.

पैरामीटर

पैरामीटर ब्यौरा
settings ज़रूरी है
एक डिक्शनरी जिसमें कॉन्फ़िगरेशन सेटिंग के बारे में जानकारी है, जिसे इस कॉन्फ़िगरेशन ट्रांज़िशन के ज़रिए सेट किया जाना चाहिए. कुंजियां, बिल्ड सेटिंग लेबल हैं और वैल्यू उनके नए पोस्ट-ट्रांज़िशन वैल्यू हैं. अन्य सभी सेटिंग में कोई बदलाव नहीं होगा. इसका इस्तेमाल करके खास कॉन्फ़िगरेशन सेटिंग के बारे में बताएं. इसे पास करने के लिए, विश्लेषण जांच को सेट करना ज़रूरी है.

कोई

bool any(elements)

अगर कम से कम एक एलिमेंट का आकलन 'सही' के तौर पर होता है, तो 'सही' दिखाता है. बूल फ़ंक्शन का इस्तेमाल करके एलिमेंट को बूलियन में बदला जाता है.
any([-1, 0, 1]) == True
any([False, 0, ""]) == False

पैरामीटर

पैरामीटर ब्यौरा
elements ज़रूरी है
स्ट्रिंग या एलिमेंट का कलेक्शन.

archive_override

None archive_override(module_name, urls, integrity='', strip_prefix='', patches=[], patch_cmds=[], patch_strip=0)

इससे पता चलता है कि यह डिपेंडेंसी किसी रजिस्ट्री के बजाय, किसी खास जगह की संग्रह फ़ाइल (zip, gzip वगैरह) से आनी चाहिए. यह डायरेक्टिव सिर्फ़ रूट मॉड्यूल में लागू होता है; दूसरे शब्दों में, अगर किसी मॉड्यूल का इस्तेमाल डिपेंडेंसी के तौर पर दूसरे लोग करते हैं, तो उसके खुद के ओवरराइड को अनदेखा कर दिया जाता है.

पैरामीटर

पैरामीटर ब्यौरा
module_name ज़रूरी है
यह बदलाव लागू करने के लिए, Baze मॉड्यूल की डिपेंडेंसी का नाम.
urls string; or Iterable of strings; ज़रूरी है
संग्रह के यूआरएल; http(s):// या file:// URLs हो सकते हैं.
integrity डिफ़ॉल्ट = ''
सबरिसॉर्स इंटेग्रिटी फ़ॉर्मैट में, संग्रहित फ़ाइल का अनुमानित चेकसम.
strip_prefix डिफ़ॉल्ट = ''
निकाली गई फ़ाइलों से निकालने के लिए एक डायरेक्ट्री प्रीफ़िक्स.
patches Iterable of strings; डिफ़ॉल्ट = []
इस मॉड्यूल पर लागू करने के लिए, पैच फ़ाइलों की ओर पॉइंट करने वाले लेबल की सूची. पैच फ़ाइलें टॉप लेवल प्रोजेक्ट के सोर्स ट्री में मौजूद होनी चाहिए. ये सूची के क्रम में लागू किए जाते हैं.
patch_cmds Iterable of strings; डिफ़ॉल्ट = []
पैच लागू होने के बाद, Linux/Macos पर Bash कमांड का क्रम.
patch_strip डिफ़ॉल्ट = 0
Unix पैच के --strip तर्क की तरह ही.

आसपेक्ट

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

एक नया पहलू बनाता है. इस फ़ंक्शन के नतीजे को ग्लोबल वैल्यू में स्टोर किया जाना चाहिए. ज़्यादा जानकारी के लिए, आसपेक्ट के बारे में जानकारी देखें.

पैरामीटर

पैरामीटर ब्यौरा
implementation ज़रूरी है
एक Starlark फ़ंक्शन, जो इस पहलू को लागू करता है. इसमें सिर्फ़ दो पैरामीटर होते हैं: टारगेट (वह टारगेट जिस पर यह पहलू लागू किया जाता है) और ctx (वह नियम कॉन्टेक्स्ट जिससे टारगेट बनाया गया है). टारगेट के एट्रिब्यूट, ctx.rule फ़ील्ड के ज़रिए उपलब्ध होते हैं. इस फ़ंक्शन का आकलन, विश्लेषण के दौरान हर पहलू को लागू करने के लिए किया जाता है.
attr_aspects sequence of strings; डिफ़ॉल्ट = []
एट्रिब्यूट के नामों की सूची. यह पहलू इन नामों वाले टारगेट के एट्रिब्यूट में बताई गई डिपेंडेंसी के हिसाब से लागू होता है. यहां सामान्य वैल्यू में deps और exports शामिल हैं. टारगेट की सभी डिपेंडेंसी के साथ लागू करने के लिए, सूची में एक स्ट्रिंग "*" भी हो सकती है.
attrs dict; or None; डिफ़ॉल्ट = कोई नहीं
शब्दकोश, जो पहलू की सभी विशेषताओं के बारे में बताता है. यह एट्रिब्यूट के नाम से, एट्रिब्यूट ऑब्जेक्ट पर मैप होता है, जैसे कि `attr.label` या `attr.string` (attr मॉड्यूल देखें). सेक्शन एट्रिब्यूट को लागू करने के लिए, आसपेक्ट एट्रिब्यूट ctx पैरामीटर के फ़ील्ड के तौर पर उपलब्ध हैं.

_ से शुरू होने वाले इंप्लिसिट एट्रिब्यूट की डिफ़ॉल्ट वैल्यू होनी चाहिए. साथ ही, उनका टाइप label या label_list होना चाहिए.

अश्लील एट्रिब्यूट का टाइप string होना चाहिए. साथ ही, इनके लिए values की पाबंदी का इस्तेमाल किया जाना चाहिए. एक्सप्लिसिट एट्रिब्यूट, आसपेक्ट रेशियो का इस्तेमाल सिर्फ़ उन नियमों के साथ करते हैं जिनमें पाबंदी के मुताबिक एक जैसे नाम, टाइप, और मान्य वैल्यू वाले एट्रिब्यूट होते हैं.

required_providers डिफ़ॉल्ट = []
यह एट्रिब्यूट, सिर्फ़ उन टारगेट को लागू करने की अनुमति देता है जिनके नियम, सेवा देने वाली ज़रूरी कंपनियों के लिए विज्ञापन दिखाते हैं. वैल्यू ऐसी सूची होनी चाहिए जिसमें अलग-अलग कंपनियों या कंपनियों की सूचियां हों, लेकिन दोनों नहीं. उदाहरण के लिए, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] एक मान्य वैल्यू है, जबकि [FooInfo, BarInfo, [BazInfo, QuxInfo]] मान्य नहीं है.

बिना नेस्ट की गई सेवा देने वाली कंपनियों की सूची, अपने-आप सूची में बदल जाएगी. इसमें, सेवा देने वाली कंपनियों की एक सूची होगी. इसका मतलब है कि [FooInfo, BarInfo] अपने-आप [[FooInfo, BarInfo]] में बदल जाएगा.

किसी पहलू के लिए कुछ नियम (जैसे कि some_rule) टारगेट को दिखाने के लिए, some_rule को सेवा देने वाली कंपनियों की कम से कम एक ज़रूरी सूची में से, सेवा देने वाली सभी कंपनियों के विज्ञापन दिखाने होंगे. उदाहरण के लिए, अगर किसी आसपेक्ट का required_providers [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] है, तो यह पहलू सिर्फ़ some_rule टारगेट देख सकता है. ऐसा सिर्फ़ तब हो सकता है, जब some_rule, FooInfo *या* BarInfo *या* BazInfo *और* दोनों उपलब्ध कराता हो.QuxInfo

required_aspect_providers डिफ़ॉल्ट = []
इस एट्रिब्यूट की मदद से, इस पहलू को दूसरे पहलुओं की जांच की जा सकती है. वैल्यू ऐसी सूची होनी चाहिए जिसमें अलग-अलग कंपनियों या कंपनियों की सूचियां हों, लेकिन दोनों नहीं. उदाहरण के लिए, [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] एक मान्य वैल्यू है, जबकि [FooInfo, BarInfo, [BazInfo, QuxInfo]] मान्य नहीं है.

बिना नेस्ट की गई सेवा देने वाली कंपनियों की सूची, अपने-आप सूची में बदल जाएगी. इसमें, सेवा देने वाली कंपनियों की एक सूची होगी. इसका मतलब है कि [FooInfo, BarInfo] अपने-आप [[FooInfo, BarInfo]] में बदल जाएगा.

इस पहलू के किसी दूसरे पहलू (जैसे कि other_aspect) को दिखाने के लिए, other_aspect को कम से कम एक सूची में से सेवा देने वाली सभी कंपनियों की जानकारी देनी होगी. [[FooInfo], [BarInfo], [BazInfo, QuxInfo]] के उदाहरण में, यह पहलू other_aspect को सिर्फ़ तब देख सकता है, जब other_aspect ने FooInfo *या* BarInfo *या* BazInfo *और* QuxInfo, दोनों उपलब्ध कराए हों.

provides डिफ़ॉल्ट = []
उन कंपनियों की सूची जिन्हें लागू करने वाले फ़ंक्शन को दिखाना ज़रूरी है.

अगर लागू करने वाला फ़ंक्शन, यहां दी गई सूची में शामिल किसी भी तरह की सेवा देने वाली कंपनी को उसकी रिटर्न वैल्यू से हटा देता है, तो यह गड़बड़ी होती है. हालांकि, लागू करने का फ़ंक्शन ऐसी अतिरिक्त कंपनियां दिखा सकता है जो यहां नहीं दी गई हैं.

सूची का हर एलिमेंट एक *Info ऑब्जेक्ट है, जो provider() से मिलता है. हालांकि, लेगसी प्रोवाइडर को उसके स्ट्रिंग नाम से दिखाया जाता है.

requires sequence of Aspects; डिफ़ॉल्ट = []
इस पहलू से पहले लागू किए जाने वाले ज़रूरी पहलुओं की सूची.
fragments sequence of strings; डिफ़ॉल्ट = []
उन कॉन्फ़िगरेशन फ़्रैगमेंट के नाम की सूची जिन्हें टारगेट कॉन्फ़िगरेशन में उस पहलू के लिए ज़रूरी है.
host_fragments sequence of strings; डिफ़ॉल्ट = []
उन कॉन्फ़िगरेशन फ़्रैगमेंट के नाम की सूची जिनकी होस्ट कॉन्फ़िगरेशन में उस पहलू के लिए ज़रूरत होती है.
toolchains sequence; डिफ़ॉल्ट = []
अगर सेट हो, तो इस नियम के लिए टूलचेन के सेट की ज़रूरत होती है. सूची में किसी भी कॉम्बिनेशन में स्ट्रिंग, लेबल या StarlarkToolchainTypeApi ऑब्जेक्ट शामिल हो सकते हैं. टूलचेन की पहचान, मौजूदा प्लैटफ़ॉर्म की जांच करके की जाएगी. साथ ही, इसे ctx.toolchain के ज़रिए नियम लागू करने के लिए उपलब्ध कराया जाएगा.
incompatible_use_toolchain_transition डिफ़ॉल्ट = गलत
अब यह इस्तेमाल में नहीं है और इसे हटा दिया जाना चाहिए. अब यह काम नहीं कर रहा है.
doc डिफ़ॉल्ट = ''
उस पहलू के बारे में जानकारी जिसे दस्तावेज़ जनरेट करने वाले टूल की मदद से हासिल किया जा सकता है.
apply_to_generating_rules डिफ़ॉल्ट = गलत
अगर सही है, तो आउटपुट फ़ाइल पर लागू किया जाएगा. इसके बजाय, उस आसपेक्ट को आउटपुट फ़ाइल के जनरेट करने के नियम पर लागू किया जाएगा.

उदाहरण के लिए, मान लें कि कोई पहलू `deps` के ज़रिए ट्रांज़िट तरीके से फैलता है और इसे `ऐल्फ़ा` को टारगेट करने पर लागू किया जाता है. मान लीजिए कि `अल्फ़ा` में `deps = [':beta_Output']` है. इसमें `beta_Output` किसी टारगेट `बीटा` का एलान किया गया आउटपुट है. मान लीजिए कि `बीटा` का लक्ष्य `चार्ली` अपने एक `डेप्स` के रूप में है. अगर पहलू के लिए `apply_to_generting_rules=True` लागू होता है, तो पक्ष `अल्फ़ा`, `बीटा` और `चार्ली` के ज़रिए फैल जाएगा. अगर गलत है, तो आसपेक्ट रेशियो सिर्फ़ `ऐल्फ़ा` में चलेगा.

डिफ़ॉल्ट रूप से 'गलत'.

exec_compatible_with sequence of strings; डिफ़ॉल्ट = []
एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर लागू होने वाली पाबंदियों की सूची, जो इस पहलू के सभी इंस्टेंस पर लागू होती है.
exec_groups dict; or None; डिफ़ॉल्ट = कोई नहीं
ग्रुप का नाम (स्ट्रिंग) से exec_groups तक एक्ज़ीक्यूशन करने का टेक्स्ट. अगर नीति सेट की जाती है, तो इससे डाइमेंशन को एक ही इंस्टेंस में, इसे लागू करने वाले कई प्लैटफ़ॉर्म पर कार्रवाइयां करने की अनुमति मिलती है. ज़्यादा जानकारी के लिए, लागू किए जाने वाले ग्रुप का दस्तावेज़ देखें.

bazel_dep

None bazel_dep(name, version='', max_compatibility_level=-1, repo_name='', dev_dependency=False)

यह एलान करता है कि किसी दूसरे Basel मॉड्यूल पर सीधे तौर पर डिपेंडेंसी दी जाती है.

पैरामीटर

पैरामीटर ब्यौरा
name ज़रूरी है
डायरेक्ट डिपेंडेंसी के तौर पर जोड़े जाने वाले मॉड्यूल का नाम.
version डिफ़ॉल्ट = ''
मॉड्यूल का वह वर्शन जिसे डायरेक्ट डिपेंडेंसी के तौर पर जोड़ा जाना है.
max_compatibility_level डिफ़ॉल्ट = -1
मॉड्यूल के लिए, ज़्यादा से ज़्यादा compatibility_level को डायरेक्ट डिपेंडेंसी के तौर पर जोड़ा जा सकता है. मॉड्यूल के वर्शन का मतलब है कि कम से कम क्षमता का इस्तेमाल किया जाना चाहिए या नहीं. साथ ही, अगर इस एट्रिब्यूट की वैल्यू नहीं बताई गई है, तो ज़्यादा से ज़्यादा वैल्यू का भी पता चलता है.
repo_name डिफ़ॉल्ट = ''
इस डिपेंडेंसी को दिखाने वाले बाहरी रेपो का नाम. डिफ़ॉल्ट रूप से यह मॉड्यूल का नाम होता है.
dev_dependency डिफ़ॉल्ट = गलत
सही होने पर, अगर मौजूदा मॉड्यूल रूट मॉड्यूल नहीं है या `--ignore_dev_dependency` चालू है, तो इस डिपेंडेंसी को अनदेखा कर दिया जाएगा.

बाइंड

None bind(name, actual=None)

चेतावनी: bind() का इस्तेमाल करने का सुझाव नहीं दिया जाता. बाइंड से जुड़ी समस्याओं और उनके विकल्पों के बारे में ज़्यादा जानने के लिए, बाइंड हटाने का तरीका लेख पढ़ें.

टारगेट को //external पैकेज में एक उपनाम देता है.

पैरामीटर

पैरामीटर ब्यौरा
name ज़रूरी है
'//external' के तहत दिया गया लेबल अन्य नाम के रूप में काम करने के लिए
actual string; or None; डिफ़ॉल्ट = कोई नहीं
एलियास किया जाने वाला वास्तविक लेबल

बूल

bool bool(x=False)

बूल टाइप का कंस्ट्रक्टर. अगर ऑब्जेक्ट None, False, कोई खाली स्ट्रिंग (""), संख्या 0 या कोई खाली कलेक्शन (जैसे कि (), []) है, तो यह False दिखाता है. अगर ऐसा नहीं है, तो यह True दिखाता है.

पैरामीटर

पैरामीटर ब्यौरा
x डिफ़ॉल्ट = गलत
वह वैरिएबल जिसे बदलना है.

configuration_field

LateBoundDefault configuration_field(fragment, name)

label टाइप के एट्रिब्यूट के लिए, देर से तय की गई डिफ़ॉल्ट वैल्यू का रेफ़रंस देता है. मान 'लेट-बाउंड' है अगर इसके लिए वैल्यू तय करने से पहले कॉन्फ़िगरेशन बनाने की ज़रूरत हो. वैल्यू के तौर पर इसका इस्तेमाल करने वाला कोई भी एट्रिब्यूट निजी होना चाहिए.

इस्तेमाल का उदाहरण:

नियम के एट्रिब्यूट तय करें:

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

नियम लागू करने में ऐक्सेस करना:

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

पैरामीटर

पैरामीटर ब्यौरा
fragment ज़रूरी है
कॉन्फ़िगरेशन फ़्रैगमेंट का नाम, जिसमें लेट-बाउंड वैल्यू शामिल है.
name ज़रूरी है
कॉन्फ़िगरेशन फ़्रैगमेंट से मिलने वाली वैल्यू का नाम.

Depset

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

डिप्सेट बनाता है. direct पैरामीटर, डेप्सेट के डायरेक्ट एलिमेंट की सूची है. वहीं, transitive पैरामीटर उन डिपसेट की सूची है जिनके एलिमेंट, बनाए गए डिप्सेट के इनडायरेक्ट एलिमेंट बन जाते हैं. डिप्सेट को सूची में बदलने के बाद एलिमेंट के दिखाए जाने का क्रम order पैरामीटर से तय होता है. ज़्यादा जानकारी के लिए, डिपसेट से जुड़ी खास जानकारी देखें.

किसी डिप्सेट के सभी एलिमेंट (डायरेक्ट और इनडायरेक्ट) एक ही तरह के होने चाहिए, जैसा कि type(x) एक्सप्रेशन से मिला है.

हैश पर आधारित सेट का इस्तेमाल, इटरेशन के दौरान डुप्लीकेट को हटाने के लिए किया जाता है. इसलिए, डिप्सेट के सभी एलिमेंट हैश होने चाहिए. हालांकि, फ़िलहाल सभी कंस्ट्रक्टर में, इस इन्वैरिएंट की लगातार जांच नहीं की जाती. लगातार जांच चालू करने के लिए, --instatic_always_check_depset_elements फ़्लैग का इस्तेमाल करें; यह बदलाव, आगे आने वाली रिलीज़ में डिफ़ॉल्ट तौर पर लागू होगा; समस्या 10313 देखें.

साथ ही, यह ज़रूरी है कि मौजूदा समय में एलिमेंट में बदलाव न किया जा सके. हालांकि, आने वाले समय में यह पाबंदी हट जाएगी.

बनाए गए डिप्सेट का क्रम इसके transitive डिप्सेट के क्रम के साथ काम करने वाला होना चाहिए. "default" ऑर्डर किसी भी दूसरे ऑर्डर के साथ काम करता है. अन्य सभी ऑर्डर सिर्फ़ अपने ऑर्डर के साथ काम करते हैं.

बैकवर्ड/फ़ॉरवर्ड के साथ काम करने की सुविधा के बारे में जानकारी. फ़िलहाल, इस फ़ंक्शन में पोज़िशनल items पैरामीटर स्वीकार किया जाता है. इस नीति के इस्तेमाल पर रोक लगा दी गई है और आने वाले समय में इसे हटा दिया जाएगा. इसके हटाए जाने के बाद, direct, depset फ़ंक्शन का एकमात्र पोज़िशनल पैरामीटर बन जाएगा. इस तरह, नीचे दिए गए दोनों कॉल एक जैसे हैं और आने वाले समय के हिसाब से सही हैं:

depset(['a', 'b'], transitive = [...])
depset(direct = ['a', 'b'], transitive = [...])

पैरामीटर

पैरामीटर ब्यौरा
direct sequence; or None; डिफ़ॉल्ट = कोई नहीं
डिपसेट के डायरेक्ट एलिमेंट की सूची.
order डिफ़ॉल्ट = "डिफ़ॉल्ट"
नए डिपसेट के लिए ट्रैवर्सल रणनीति. संभावित वैल्यू के लिए यहां देखें.
transitive sequence of depsets; or None; डिफ़ॉल्ट = कोई नहीं
ऐसे डेपसेट की सूची जिनके एलिमेंट, डिप्सेट के इनडायरेक्ट एलिमेंट बन जाएंगे.

डिक्शनरी

dict dict(pairs=[], **kwargs)

किसी वैकल्पिक पोज़िशनल आर्ग्युमेंट और कीवर्ड आर्ग्युमेंट के सेट से, एक शब्दकोश बनाता है. ऐसे मामले में जहां एक ही कुंजी को कई बार दिया गया है, वहां आखिरी वैल्यू का इस्तेमाल किया जाएगा. कीवर्ड आर्ग्युमेंट के ज़रिए दी गई एंट्री, पोज़िशनल आर्ग्युमेंट के ज़रिए दी गई एंट्री के बाद मानी जाती हैं.

पैरामीटर

पैरामीटर ब्यौरा
pairs डिफ़ॉल्ट = []
डिक्शनरी या बार-बार इस्तेमाल होने वाला ऐसा एलिमेंट जिसके एलिमेंट की लंबाई 2 (कुंजी, वैल्यू) से शुरू होती है.
kwargs ज़रूरी है
अतिरिक्त एंट्री का शब्दकोश.

dir

list dir(x)

स्ट्रिंग की सूची दिखाता है: इसमें पैरामीटर ऑब्जेक्ट के एट्रिब्यूट और तरीकों के नाम होते हैं.

पैरामीटर

पैरामीटर ब्यौरा
x ज़रूरी है
वह ऑब्जेक्ट जिसकी जांच करनी है.

गिनती करें

list enumerate(list, start=0)

इंडेक्स (int) और इनपुट अनुक्रम से आइटम के साथ, युग्मों (दो-एलिमेंट ट्यूपल) की सूची देता है.
enumerate([24, 21, 84]) == [(0, 24), (1, 21), (2, 84)]

पैरामीटर

पैरामीटर ब्यौरा
list ज़रूरी है
इनपुट का क्रम.
start डिफ़ॉल्ट = 0
शुरुआती इंडेक्स

exec_group

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

एक एक्ज़िक्यूशन ग्रुप बनाता है. इसका इस्तेमाल नियम लागू करने के दौरान, किसी खास एक्ज़ीक्यूशन प्लैटफ़ॉर्म से जुड़ी कार्रवाइयां बनाने के लिए किया जा सकता है.

पैरामीटर

पैरामीटर ब्यौरा
toolchains sequence; डिफ़ॉल्ट = []
इस एक्ज़ीक्यूशन ग्रुप के लिए ज़रूरी टूलचेन के सेट. सूची में किसी भी कॉम्बिनेशन में स्ट्रिंग, लेबल या StarlarkToolchainTypeApi ऑब्जेक्ट शामिल हो सकते हैं.
exec_compatible_with sequence of strings; डिफ़ॉल्ट = []
एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर कंस्ट्रेंट की सूची.
copy_from_rule डिफ़ॉल्ट = गलत
अगर सही पर सेट किया जाता है, तो यह exec ग्रुप, उस नियम की टूलचेन और कंस्ट्रेंट को इनहेरिट करता है जिससे यह ग्रुप अटैच किया गया है. अगर इसे किसी दूसरी स्ट्रिंग पर सेट किया जाता है, तो आपको गड़बड़ी दिखेगी.

असफल

None fail(msg=None, attr=None, *args)

गड़बड़ी की वजह से एक्ज़ीक्यूशन नहीं हो पाता.

पैरामीटर

पैरामीटर ब्यौरा
msg डिफ़ॉल्ट = कोई नहीं
अब काम नहीं करता: इसके बजाय, पोज़िशनल आर्ग्युमेंट का इस्तेमाल करें. यह आर्ग्युमेंट, इंप्लिसिट लीडर पोज़िशनल आर्ग्युमेंट की तरह काम करता है.
attr string; or None; डिफ़ॉल्ट = कोई नहीं
अब काम नहीं करता. इससे गड़बड़ी के मैसेज में इस स्ट्रिंग वाला एक वैकल्पिक प्रीफ़िक्स जुड़ जाता है.
args ज़रूरी है
वैल्यू की सूची, जो डीबगप्रिंट (जो डिफ़ॉल्ट रूप से str के बराबर होती है) के साथ फ़ॉर्मैट की गई हो और जिसे गड़बड़ी के मैसेज में स्पेस के साथ जोड़ा गया हो.

फ़्लोट

float float(x=unbound)

x को फ़्लोट वैल्यू के रूप में दिखाता है.
  • अगर x पहले से ही फ़्लोट है, तो float इसे बिना किसी बदलाव के दिखाता है.
  • अगर x बूल है, तो float सही के लिए 1.0 और गलत के लिए 0.0 लौटाता है.
  • अगर x कोई पूर्णांक है, तो float x पर सबसे पास की सीमित फ़्लोटिंग-पॉइंट वैल्यू दिखाता है या साइज़ बहुत बड़ा होने पर गड़बड़ी की जानकारी देता है.
  • अगर x कोई स्ट्रिंग है, तो यह एक मान्य फ़्लोटिंग-पॉइंट लिटरल होना चाहिए या NaN, Inf या Infinity के बराबर (छोटे-बड़े अक्षर को अनदेखा करते हुए) होना चाहिए. इसके पहले + या - का निशान होना ज़रूरी नहीं है.
कोई दूसरी वैल्यू इस्तेमाल करने पर गड़बड़ी होती है. बिना किसी तर्क के, float() 0.0 दिखाता है.

पैरामीटर

पैरामीटर ब्यौरा
x डिफ़ॉल्ट = अनबाउंड
वह वैल्यू जिसे बदलना है.

getattr

unknown getattr(x, name, default=unbound)

अगर दिए गए नाम का स्ट्रक्चर मौजूद है, तो यह फ़ील्ड दिखाता है. अगर ऐसा नहीं है, तो यह default (अगर बताई गई है) दिखाता है या गड़बड़ी की सूचना देता है. getattr(x, "foobar"), x.foobar के बराबर है.
getattr(ctx.attr, "myattr")
getattr(ctx.attr, "myattr", "mydefault")

पैरामीटर

पैरामीटर ब्यौरा
x ज़रूरी है
वह संरचना जिसकी विशेषता को ऐक्सेस किया जाता है.
name ज़रूरी है
स्ट्रक्ट एट्रिब्यूट का नाम.
default डिफ़ॉल्ट = अनबाउंड
दिए गए नाम का एट्रिब्यूट न होने पर, यह डिफ़ॉल्ट वैल्यू होती है.

git_override

None git_override(module_name, remote, commit='', patches=[], patch_cmds=[], patch_strip=0)

इससे पता चलता है कि डिपेंडेंसी, Git रिपॉज़िटरी की किसी तय सीमा से आनी चाहिए. यह डायरेक्टिव सिर्फ़ रूट मॉड्यूल में लागू होता है; दूसरे शब्दों में, अगर किसी मॉड्यूल का इस्तेमाल डिपेंडेंसी के तौर पर दूसरे लोग करते हैं, तो उसके खुद के ओवरराइड को अनदेखा कर दिया जाता है.

पैरामीटर

पैरामीटर ब्यौरा
module_name ज़रूरी है
यह बदलाव लागू करने के लिए, Baze मॉड्यूल की डिपेंडेंसी का नाम.
remote ज़रूरी है
रिमोट Git रिपॉज़िटरी का यूआरएल.
commit डिफ़ॉल्ट = ''
तय की गई वह पुष्टि जिसकी जांच की जानी चाहिए.
patches Iterable of strings; डिफ़ॉल्ट = []
इस मॉड्यूल पर लागू करने के लिए, पैच फ़ाइलों की ओर पॉइंट करने वाले लेबल की सूची. पैच फ़ाइलें टॉप लेवल प्रोजेक्ट के सोर्स ट्री में मौजूद होनी चाहिए. ये सूची के क्रम में लागू किए जाते हैं.
patch_cmds Iterable of strings; डिफ़ॉल्ट = []
पैच लागू होने के बाद, Linux/Macos पर Bash कमांड का क्रम.
patch_strip डिफ़ॉल्ट = 0
Unix पैच के --strip तर्क की तरह ही.

hasattr

bool hasattr(x, name)

अगर ऑब्जेक्ट x में, दिए गए name का एट्रिब्यूट या तरीका है, तो 'सही' दिखाता है. ऐसा नहीं होने पर 'गलत' दिखाता है. उदाहरण:
hasattr(ctx.attr, "myattr")

पैरामीटर

पैरामीटर ब्यौरा
x ज़रूरी है
वह ऑब्जेक्ट जिसकी जांच करनी है.
name ज़रूरी है
एट्रिब्यूट का नाम.

हैश

int hash(value)

किसी स्ट्रिंग के लिए हैश वैल्यू दिखाता है. इसका हिसाब लगाने के लिए, उसी एल्गोरिदम का इस्तेमाल किया जाता है जिसका इस्तेमाल Java के String.hashCode() वाले एल्गोरिदम का इस्तेमाल करके किया जाता है. इसका मतलब है:
s[0] * (31^(n-1)) + s[1] * (31^(n-2)) + ... + s[n-1]
फ़िलहाल, स्ट्रिंग के अलावा वैल्यू को हैश करने की सुविधा उपलब्ध नहीं है.

पैरामीटर

पैरामीटर ब्यौरा
value ज़रूरी है
हैश करने के लिए स्ट्रिंग मान.

int

int int(x, base=unbound)

x को int वैल्यू के रूप में दिखाता है.
  • अगर x पहले से ही एक पूर्णांक है, तो int इसे बिना किसी बदलाव के दिखाता है.
  • अगर x बूल है, तो int सही के लिए 1 और गलत के लिए 0 लौटाता है.
  • अगर x एक स्ट्रिंग है, तो उसका फ़ॉर्मैट <sign><prefix><digits> होना चाहिए. <sign>, "+", "-" या खाली है (इसे पॉज़िटिव समझा जाता है). <digits> 0 से लेकर base - 1 तक के अंकों का क्रम होता है, जहां a-z तक अक्षरों (या A-Z के बराबर) का इस्तेमाल 10 से 35 तक के अंकों के रूप में किया जाता है. ऐसे मामले में जहां base, 2/8/16 है, <prefix> ज़रूरी नहीं है और यह 0b/0o/0x (या इसके बराबर 0B/0O/0X) हो सकता है; अगर base, इन बेस या खास वैल्यू 0 के अलावा कोई अन्य वैल्यू है, तो प्रीफ़िक्स खाली होना चाहिए. जहां base 0 है, वहां स्ट्रिंग को एक इंटीजर लिटरल के तौर पर दिखाया जाता है. यहां यह माना जाता है कि किसी एक बेस 2/8/10/16 को इस आधार पर चुना जाता है कि अगर किसी प्रीफ़िक्स का इस्तेमाल किया गया है, तो किस आधार को चुना जाएगा. अगर base 0 है, तो किसी भी प्रीफ़िक्स का इस्तेमाल नहीं किया जाता और एक से ज़्यादा अंक हैं. ऐसे में, सबसे पहले आने वाला अंक 0 नहीं हो सकता; यह ऑक्टल और दशमलव के बीच भ्रम से बचने के लिए है. स्ट्रिंग के ज़रिए दिखाई गई संख्या का मान, int टाइप के लिए तय की गई सीमा के अंदर होना चाहिए.
  • अगर x एक फ़्लोट है, तो int फ़्लोट की पूर्णांक वैल्यू को शून्य की ओर पूर्णांक बनाता है. अगर x नॉन-फ़ाइनाइट (NaN या इनफ़िनिटी) है, तो यह एक गड़बड़ी होती है.
अगर x किसी दूसरी तरह का है या मान कोई ऐसी स्ट्रिंग है जो ऊपर दिए गए फ़ॉर्मैट के मुताबिक नहीं है, तो यह फ़ंक्शन काम नहीं करता. Python के int फ़ंक्शन से अलग, यह फ़ंक्शन शून्य आर्ग्युमेंट की अनुमति नहीं देता. साथ ही, यह स्ट्रिंग आर्ग्युमेंट के लिए बाहरी खाली सफ़ेद जगह की अनुमति भी नहीं देता.

उदाहरण:

int("123") == 123
int("-123") == -123
int("+123") == 123
int("FF", 16) == 255
int("0xFF", 16) == 255
int("10", 0) == 10
int("-0x10", 0) == -16
int("-0x10", 0) == -16
int("123.456") == 123

पैरामीटर

पैरामीटर ब्यौरा
x ज़रूरी है
बदली जाने वाली स्ट्रिंग.
base डिफ़ॉल्ट = अनबाउंड
किसी स्ट्रिंग की वैल्यू को समझने के लिए इस्तेमाल किया जाने वाला बेस; डिफ़ॉल्ट रूप से 10 होता है. बेस का पता लगाने के लिए, वैल्यू 2 से 36 के बीच होनी चाहिए. इसमें 0 भी हो सकती है. ऐसा तब होता है, जब x, लिटरल वैल्यू हो. अगर वैल्यू कोई स्ट्रिंग नहीं है, तो यह पैरामीटर नहीं दिया जाना चाहिए.

लेंस

int len(x)

यह फ़ंक्शन किसी स्ट्रिंग, क्रम (जैसे कि लिस्ट या टपल), डिक्शनरी या अन्य एलिमेंट की लंबाई दिखाता है.

पैरामीटर

पैरामीटर ब्यौरा
x ज़रूरी है
वह वैल्यू जिसकी लंबाई रिपोर्ट करनी है.

सूची

list list(x=[])

नई सूची दिखाता है, जिसमें वही एलिमेंट मौजूद होते हैं जो बार-बार दी जाने वाली वैल्यू में होते हैं.
list([1, 2]) == [1, 2]
list((2, 3, 2)) == [2, 3, 2]
list({5: "a", 2: "b", 4: "c"}) == [5, 2, 4]

पैरामीटर

पैरामीटर ब्यौरा
x डिफ़ॉल्ट = []
वह ऑब्जेक्ट जिसे बदलना है.

local_path_override

None local_path_override(module_name, path)

इससे पता चलता है कि लोकल डिस्क पर किसी खास डायरेक्ट्री से डिपेंडेंसी होनी चाहिए. यह डायरेक्टिव सिर्फ़ रूट मॉड्यूल में लागू होता है; दूसरे शब्दों में, अगर किसी मॉड्यूल का इस्तेमाल डिपेंडेंसी के तौर पर दूसरे लोग करते हैं, तो उसके खुद के ओवरराइड को अनदेखा कर दिया जाता है.

पैरामीटर

पैरामीटर ब्यौरा
module_name ज़रूरी है
यह बदलाव लागू करने के लिए, Baze मॉड्यूल की डिपेंडेंसी का नाम.
path ज़रूरी है
उस डायरेक्ट्री का पाथ जहां यह मॉड्यूल है.

अधिकतम

unknown max(*args)

सभी दिए गए तर्कों में से सबसे बड़ा देता है. अगर सिर्फ़ एक तर्क दिया गया है, तो वह ऐसा होना चाहिए जिसे बार-बार दोहराया जा सके.यह एक गड़बड़ी होती है, जब एलिमेंट की तुलना नहीं की जा सकती (उदाहरण के लिए, स्ट्रिंग के साथ पूर्णांक) या अगर कोई तर्क नहीं दिया जाता है.
max(2, 5, 4) == 5
max([5, 6, 3]) == 6

पैरामीटर

पैरामीटर ब्यौरा
args ज़रूरी है
वे एलिमेंट जिनकी जांच की जानी है.

कम से कम

unknown min(*args)

दिए गए सभी तर्कों में से सबसे छोटा दिखाता है. अगर सिर्फ़ एक आर्ग्युमेंट दिया जाता है, तो वह ऐसा होना चाहिए जिसे बार-बार इस्तेमाल किया जा सके. अगर एलिमेंट की तुलना नहीं की जा सकती (उदाहरण के लिए, स्ट्रिंग के साथ पूर्णांक) या कोई आर्ग्युमेंट नहीं दिया गया है, तो यह गड़बड़ी होती है.
min(2, 5, 4) == 2
min([5, 6, 3]) == 3

पैरामीटर

पैरामीटर ब्यौरा
args ज़रूरी है
वे एलिमेंट जिनकी जांच की जानी है.

मॉड्यूल

None module(name='', version='', compatibility_level=0, repo_name='', bazel_compatibility=[])

यह बेज़ल मॉड्यूल की कुछ प्रॉपर्टी के बारे में बताता है, जो मौजूदा बेज़ल रेपो से पता चलता है. ये प्रॉपर्टी, मॉड्यूल के ज़रूरी मेटाडेटा (जैसे कि नाम और वर्शन) होती हैं या फिर मौजूदा मॉड्यूल और इससे जुड़े सभी लोगों के काम करने के तरीके पर असर डालती हैं.

इसे ज़्यादा से ज़्यादा एक बार कॉल किया जाना चाहिए. इसे सिर्फ़ तब छोड़ा जा सकता है, जब यह मॉड्यूल रूट मॉड्यूल हो. जैसे, अगर यह किसी दूसरे मॉड्यूल पर निर्भर न हो.

पैरामीटर

पैरामीटर ब्यौरा
name डिफ़ॉल्ट = ''
मॉड्यूल का नाम. इसे सिर्फ़ तब छोड़ा जा सकता है, जब यह मॉड्यूल रूट मॉड्यूल हो. अगर यह किसी दूसरे मॉड्यूल पर निर्भर नहीं है, तो इसे छोड़ा जा सकता है. मॉड्यूल का मान्य नाम: 1) सिर्फ़ अंग्रेज़ी के छोटे अक्षर (a-z), अंक (0-9), बिंदु (.), हाइफ़न (-), और अंडरस्कोर (_) ही होने चाहिए; 2) अंग्रेज़ी के छोटे अक्षर से शुरू करें; 3) अंग्रेज़ी के छोटे अक्षर या अंक से खत्म करें.
version डिफ़ॉल्ट = ''
मॉड्यूल का वर्शन. इसे सिर्फ़ तब छोड़ा जा सकता है, जब यह मॉड्यूल रूट मॉड्यूल हो. अगर यह किसी दूसरे मॉड्यूल पर निर्भर नहीं है, तो इसे छोड़ा जा सकता है.
compatibility_level डिफ़ॉल्ट = 0
मॉड्यूल के साथ काम करने का लेवल; हर बार जब कोई ऐसा बड़ा बदलाव किया जाता है जो काम नहीं करता, तो इसे बदलना चाहिए. यह मुख्य रूप से "मुख्य वर्शन" है SemVer के संदर्भ में मॉड्यूल का इस्तेमाल किया जा सकता है. हालांकि, उसे वर्शन स्ट्रिंग में एम्बेड नहीं किया गया है, बल्कि यह एक अलग फ़ील्ड के तौर पर मौजूद है. साथ काम करने के अलग-अलग लेवल वाले मॉड्यूल, वर्शन रिज़ॉल्यूशन में इस तरह से काम करते हैं जैसे कि वे अलग-अलग नाम वाले मॉड्यूल हों. हालांकि, आखिरी डिपेंडेंसी ग्राफ़ में एक ही नाम वाले कई मॉड्यूल नहीं हो सकते. हालांकि, कॉम्पोनेंट के साथ काम करने के अलग-अलग लेवल शामिल नहीं किए जा सकते. ऐसा तब तक होता है, जब तक multiple_version_override लागू न हो. ज़्यादा जानकारी के लिए यहां देखें.
repo_name डिफ़ॉल्ट = ''
इस मॉड्यूल को दिखाने वाली रिपॉज़िटरी का नाम, जैसा कि मॉड्यूल में देखा जा सकता है. डिफ़ॉल्ट रूप से, रेपो का नाम ही मॉड्यूल का नाम होता है. इसका इस्तेमाल उन प्रोजेक्ट के लिए, माइग्रेशन को आसान बनाने के लिए किया जा सकता है जो अपने लिए ऐसे रेपो नाम का इस्तेमाल कर रहे हैं जो अपने मॉड्यूल के नाम से अलग है.
bazel_compatibility Iterable of strings; डिफ़ॉल्ट = []
बेज़ल वर्शन की ऐसी सूची जिससे लोग यह बता सकते हैं कि इस मॉड्यूल के साथ Baज़र के कौनसे वर्शन काम करते हैं. इससे डिपेंडेंसी रिज़ॉल्यूशन पर कोई असर नहीं पड़ता. हालांकि, bzlmod इस जानकारी का इस्तेमाल यह जांचने के लिए करेगा कि आपका मौजूदा Basel वर्शन काम करता है या नहीं. इस वैल्यू का फ़ॉर्मैट, कुछ कंस्ट्रेंट वैल्यू की एक स्ट्रिंग है, जिन्हें कॉमा लगाकर अलग किया गया है. तीन कंस्ट्रेंट का इस्तेमाल किया जा सकता है: <=X.X.X: Basel का वर्शन X.X.X के बराबर या उससे पुराना होना चाहिए. इसका इस्तेमाल तब किया जाता है जब किसी नए वर्शन में कोई ऐसा बदलाव होता है जो काम नहीं करता. >=X.X.X: Basel का वर्शन X.X.X के बराबर या उससे नया होना चाहिए.इसका इस्तेमाल सिर्फ़ तब किया जाता है, जब आपके डिवाइस में ऐसी सुविधाएं हों जो सिर्फ़ X.X.X के बाद उपलब्ध हैं. -X.X.X: Baज़र का वर्शन X.X.X, इस डिवाइस के साथ काम नहीं करता है. इसका इस्तेमाल तब किया जाता है, जब X.X.X में कोई ऐसा गड़बड़ी हो जिसकी वजह से आपको ब्रेक मिल रहा हो, लेकिन बाद के वर्शन में इसे ठीक कर दिया गया हो.

module_extension

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

एक नया मॉड्यूल एक्सटेंशन बनाता है. इसे ग्लोबल वैल्यू में सेव करें, ताकि इसे MODULE.baकोई फ़ाइल में एक्सपोर्ट और इस्तेमाल किया जा सके.

पैरामीटर

पैरामीटर ब्यौरा
implementation ज़रूरी है
इस मॉड्यूल एक्सटेंशन को लागू करने वाला फ़ंक्शन. एक पैरामीटर होना ज़रूरी है, module_ctx. बिल्ड की शुरुआत में इस फ़ंक्शन को एक बार कॉल किया जाता है, ताकि उपलब्ध डेटा स्टोर करने की जगहों का सेट तय किया जा सके.
tag_classes default = {}
एक्सटेंशन में इस्तेमाल की जाने वाली सभी टैग क्लास के बारे में जानकारी देने के लिए डिक्शनरी. यह टैग क्लास के नाम से tag_class ऑब्जेक्ट पर मैप होता है.
doc डिफ़ॉल्ट = ''
मॉड्यूल एक्सटेंशन की जानकारी, जिसे दस्तावेज़ जनरेट करने वाले टूल की मदद से निकाला जा सकता है.
environ sequence of strings; डिफ़ॉल्ट = []
एनवायरमेंट वैरिएबल की सूची देता है जिस पर यह मॉड्यूल एक्सटेंशन निर्भर करता है. अगर उस सूची में किसी एनवायरमेंट वैरिएबल में बदलाव होता है, तो एक्सटेंशन का फिर से आकलन किया जाएगा.
os_dependent डिफ़ॉल्ट = गलत
इससे पता चलता है कि यह एक्सटेंशन, ओएस पर निर्भर है या नहीं
arch_dependent डिफ़ॉल्ट = गलत
इससे पता चलता है कि यह एक्सटेंशन आर्किटेक्चर पर निर्भर है या नहीं

multiple_version_override

None multiple_version_override(module_name, versions, registry='')

इस नीति से पता चलता है कि किसी रजिस्ट्री से डिपेंडेंसी अब भी ली जानी चाहिए. हालांकि, इसके कई वर्शन एक साथ मौजूद होने चाहिए. ज़्यादा जानकारी के लिए दस्तावेज़ देखें. यह डायरेक्टिव सिर्फ़ रूट मॉड्यूल में लागू होता है; दूसरे शब्दों में, अगर किसी मॉड्यूल का इस्तेमाल डिपेंडेंसी के तौर पर दूसरे लोग करते हैं, तो उसके खुद के ओवरराइड को अनदेखा कर दिया जाता है.

पैरामीटर

पैरामीटर ब्यौरा
module_name ज़रूरी है
यह बदलाव लागू करने के लिए, Baze मॉड्यूल की डिपेंडेंसी का नाम.
versions Iterable of strings; ज़रूरी है
साफ़ तौर पर उन वर्शन की जानकारी देता है जिन्हें एक साथ मौजूद होने की अनुमति है. ये वर्शन, चुनाव से पहले डिपेंडेंसी ग्राफ़ में पहले से मौजूद होने चाहिए. इस मॉड्यूल की डिपेंडेंसी "अपग्रेड" की जाएगी एक ही कंपैटबिलिटी लेवल पर, अनुमति वाले सबसे पास के वर्शन से अपडेट हो सकता है. वहीं, जिन डिपेंडेंसी में किसी दूसरे वर्शन के साथ काम करने के एक ही लेवल पर अनुमति वाले वर्शन से नया वर्शन होता है, उनकी वजह से गड़बड़ी हो सकती है.
registry डिफ़ॉल्ट = ''
इस मॉड्यूल के लिए रजिस्ट्री को बदलता है; रजिस्ट्री की डिफ़ॉल्ट सूची से इस मॉड्यूल को ढूंढने के बजाय, दी गई रजिस्ट्री का इस्तेमाल किया जाना चाहिए.

प्रिंट करें

None print(sep=" ", *args)

args को डीबग आउटपुट के तौर पर प्रिंट करता है. इसे "DEBUG" स्ट्रिंग और इस कॉल की जगह (फ़ाइल और लाइन नंबर) के आगे लगाया जाएगा. आर्ग्युमेंट को स्ट्रिंग में बदलने का सटीक तरीका नहीं बताया गया है और यह किसी भी समय बदल सकता है. खास तौर पर, यह str() और repr() के फ़ॉर्मैट से अलग और ज़्यादा जानकारी वाली हो सकती है.

लोगों के लिए स्पैम वाला स्पैम होने की वजह से, प्रोडक्शन कोड में print का इस्तेमाल करने की सलाह नहीं दी जाती. बंद करने के लिए, जब भी हो सके fail() का इस्तेमाल करके मुश्किल गड़बड़ी को प्राथमिकता दें.

पैरामीटर

पैरामीटर ब्यौरा
sep डिफ़ॉल्ट = " ''
ऑब्जेक्ट के बीच सेपरेटर स्ट्रिंग, डिफ़ॉल्ट स्पेस (" ") होती है.
args ज़रूरी है
प्रिंट किए जाने वाले ऑब्जेक्ट.

provider

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

सेवा देने वाली कंपनी का निशान बताता है. सेवा देने वाली कंपनी को कॉल करके इंस्टैंशिएट किया जा सकता है या टारगेट से उस कंपनी के इंस्टेंस को वापस पाने के लिए, सीधे कुंजी के तौर पर इस्तेमाल किया जा सकता है. उदाहरण:
MyInfo = provider()
...
def _my_library_impl(ctx):
    ...
    my_info = MyInfo(x = 2, y = 3)
    # my_info.x == 2
    # my_info.y == 3
    ...

सेवा देने वाली कंपनियों के इस्तेमाल के तरीके के बारे में पूरी जानकारी देने वाली गाइड के लिए, नियम (सेवा देने वाली कंपनियां) देखें.

अगर init नहीं बताया गया है, तो Provider कॉल करने लायक वैल्यू दिखाता है.

अगर init बताया गया है, तो दो एलिमेंट का टपल दिखाता है: Provider कॉल की जा सकने वाली वैल्यू और रॉ कंस्ट्रक्टर, कॉल की जा सकने वाली वैल्यू. नियम (पसंद के मुताबिक सेवा देने वाली कंपनियों को अपने हिसाब से शुरू करने की सुविधा) और ज़्यादा जानकारी के लिए, नीचे दिए गए init पैरामीटर के बारे में ज़्यादा जानकारी देखें.

पैरामीटर

पैरामीटर ब्यौरा
doc डिफ़ॉल्ट = ''
दस्तावेज़ जनरेट करने वाले टूल की मदद से, सेवा देने वाली कंपनी के बारे में जानकारी.
fields sequence of strings; or dict; or None; डिफ़ॉल्ट = कोई नहीं
अगर तय किया गया है, तो अनुमति वाले फ़ील्ड के सेट को सीमित करता है.
संभावित मान ये हैं:
  • फ़ील्ड की सूची:
    provider(fields = ['a', 'b'])

  • शब्दकोश फ़ील्ड का नाम -> दस्तावेज़:
    provider(
           fields = { 'a' : 'Documentation for a', 'b' : 'Documentation for b' })
सभी फ़ील्ड ज़रूरी नहीं हैं.
init callable; or None; डिफ़ॉल्ट = कोई नहीं
इंस्टैंशिएट करने के दौरान, सेवा देने वाली कंपनी की फ़ील्ड वैल्यू की प्री-प्रोसेस और पुष्टि करने के लिए एक वैकल्पिक कॉलबैक. अगर init बताया गया है, तो provider() दो एलिमेंट का टपल दिखाता है: सामान्य प्रोवाइडर का सिंबल और रॉ कंस्ट्रक्टर.

इसके बाद, कॉन्टेंट के बारे में सटीक जानकारी दी जाती है; आसान चर्चा और इस्तेमाल के उदाहरणों के लिए, नियम (सेवा देने वाली कंपनियों को अपने हिसाब से शुरू करने की सुविधा) देखें.

P को provider() को कॉल करके बनाया गया, सेवा देने वाली कंपनी का सिंबल बनाएं. सैद्धांतिक तौर पर, P का इंस्टेंस, डिफ़ॉल्ट कंस्ट्रक्टर फ़ंक्शन c(*args, **kwargs) को कॉल करके जनरेट किया जाता है. यह फ़ंक्शन ये काम करता है:

  • अगर args खाली नहीं है, तो कोई गड़बड़ी होगी.
  • अगर provider() को कॉल करते समय fields पैरामीटर बताया गया था और kwargs में कोई ऐसी कुंजी मौजूद है जो fields में नहीं दी गई है, तो गड़बड़ी होती है.
  • ऐसा नहीं करने पर, c एक नया इंस्टेंस दिखाता है, जिसमें kwargs में हर k: v एंट्री के लिए, v वैल्यू वाली k फ़ील्ड होती है.
ऐसे मामले में जहां init कॉलबैक नहीं दिया जाता है, वहां सिंबल P को किया जाने वाला कॉल, अपने-आप डिफ़ॉल्ट कंस्ट्रक्टर फ़ंक्शन c को कॉल के तौर पर काम करता है; दूसरे शब्दों में, P(*args, **kwargs), c(*args, **kwargs) दिखाता है. उदाहरण के लिए,
MyInfo = provider()
m = MyInfo(foo = 1)
इसे सीधे तौर पर ऐसे बना देगा कि m, m.foo == 1 के साथ एक MyInfo इंस्टेंस हो.

हालांकि, जहां init बताया गया है, वहां कॉल P(*args, **kwargs) इसके बजाय नीचे दिए गए चरणों को पूरा करेगा:

  1. कॉलबैक को init(*args, **kwargs) के तौर पर शुरू किया जाता है. इसका मतलब है कि वह ठीक उसी पोज़िशनल और कीवर्ड आर्ग्युमेंट के साथ होता है जो P को पास किए गए थे.
  2. init की रिटर्न वैल्यू एक डिक्शनरी, d होनी चाहिए जिसकी कुंजियां, फ़ील्ड के नाम वाली स्ट्रिंग हैं. अगर ऐसा नहीं है, तो एक गड़बड़ी होती है.
  3. d की एंट्री वाले डिफ़ॉल्ट कंस्ट्रक्टर को कीवर्ड आर्ग्युमेंट के तौर पर कॉल करने पर, P का नया इंस्टेंस जनरेट होता है, जैसा कि c(**d) में होता है.

ध्यान दें: ऊपर दिए गए चरण बताते हैं कि *args या **kwargs, init के हस्ताक्षर से मेल नहीं खाता या init के मुख्य हिस्से की जांच नहीं हो पाई (ऐसा जान-बूझकर fail() पर कॉल करके किया गया) या init की रिटर्न वैल्यू सही स्कीमा वाली डिक्शनरी नहीं है.

इस तरह init कॉलबैक, सेवा देने वाली कंपनी के सामान्य तरीके को सामान्य बनाता है. इसके लिए, प्री-प्रोसेसिंग और पुष्टि करने के लिए पोज़िशनल आर्ग्युमेंट और आर्बिट्रेरी लॉजिक की अनुमति दी जाती है. इस नीति से, मंज़ूर किए गए fields की सूची को गच्चा देने की सुविधा चालू नहीं होती है.

init के बारे में बताने पर, provider() की रिटर्न वैल्यू ट्यूपल (P, r) बन जाती है. यहां r, रॉ कंस्ट्रक्टर है. असल में, r का व्यवहार ठीक ऊपर बताए गए डिफ़ॉल्ट कंस्ट्रक्टर फ़ंक्शन c जैसा ही है. आम तौर पर, r ऐसे वैरिएबल से जुड़ा होता है जिसके नाम से पहले अंडरस्कोर लगा होता है. ऐसा इसलिए है, ताकि सिर्फ़ मौजूदा .bzl फ़ाइल के पास उसका सीधा ऐक्सेस हो:

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

सीमा

sequence range(start_or_stop, stop_or_none=None, step=1)

इस नीति से ऐसी सूची बनती है जिसमें आइटम को step की बढ़ोतरी का इस्तेमाल करके, start से stop पर ले जाया जाता है. अगर एक एलिमेंट दिया जाता है, तो आइटम 0 से लेकर उस एलिमेंट तक होंगे.
range(4) == [0, 1, 2, 3]
range(3, 9, 2) == [3, 5, 7]
range(3, 0, -1) == [3, 2, 1]

पैरामीटर

पैरामीटर ब्यौरा
start_or_stop ज़रूरी है
अगर स्टॉप दिया गया है, तो शुरुआती एलिमेंट का मान. अगर ऐसा नहीं है, तो स्टॉप और असली शुरुआत की वैल्यू 0 होगी
stop_or_none int; or None; डिफ़ॉल्ट = कोई नहीं
पहले आइटम का वैकल्पिक इंडेक्स, जिसे नतीजे की सूची में शामिल नहीं किया जाना चाहिए; सूची बनाने की प्रोसेस, stop तक पहुंचने से पहले रुक जाती है.
step डिफ़ॉल्ट = 1
बढ़ोतरी (डिफ़ॉल्ट रूप से यह संख्या एक होती है). यह नकारात्मक हो सकता है.

register_execution_platforms()

None register_execution_platforms(*platform_labels)

पहले से तय किया गया प्लैटफ़ॉर्म रजिस्टर करें, ताकि Basel का इस्तेमाल टूलचेन रिज़ॉल्यूशन के दौरान एक्ज़िक्यूशन प्लैटफ़ॉर्म के तौर पर किया जा सके.

पैरामीटर

पैरामीटर ब्यौरा
platform_labels sequence of strings; ज़रूरी है
रजिस्टर किए जाने वाले प्लैटफ़ॉर्म के लेबल.

register_execution_platforms(dev_dependency)

None register_execution_platforms(dev_dependency=False, *platform_labels)

यह मॉड्यूल चुने जाने पर, रजिस्टर किए जाने वाले पहले से तय एक्ज़ीक्यूशन प्लैटफ़ॉर्म के बारे में बताता है. यह कुल टारगेट पैटर्न होना चाहिए (जैसे, @ या // से शुरू होना चाहिए). ज़्यादा जानकारी के लिए, टूलचेन रिज़ॉल्यूशन पर जाएं.

पैरामीटर

पैरामीटर ब्यौरा
dev_dependency डिफ़ॉल्ट = गलत
सही होने पर, अगर मौजूदा मॉड्यूल रूट मॉड्यूल नहीं है या `--ignore_dev_dependency` चालू है, तो एक्ज़ीक्यूशन प्लैटफ़ॉर्म रजिस्टर नहीं किए जाएंगे.
platform_labels sequence of strings; ज़रूरी है
रजिस्टर किए जाने वाले प्लैटफ़ॉर्म के लेबल.

register_toolchains()

None register_toolchains(*toolchain_labels)

पहले से तय किया गया टूलचेन रजिस्टर करें, ताकि Basel का इस्तेमाल टूलचेन रिज़ॉल्यूशन के दौरान किया जा सके. टूल चेन तय करने और टूलचेन रजिस्टर करने के उदाहरण देखें.

पैरामीटर

पैरामीटर ब्यौरा
toolchain_labels sequence of strings; ज़रूरी है
रजिस्टर किए जाने वाले टूलचेन के लेबल.

register_toolchains(dev_dependency)

None register_toolchains(dev_dependency=False, *toolchain_labels)

यह मॉड्यूल चुने जाने पर, रजिस्टर किए जाने वाले पहले से तय टूलचेन के बारे में बताता है. यह कुल टारगेट पैटर्न होना चाहिए (जैसे, @ या // से शुरू होना चाहिए). ज़्यादा जानकारी के लिए, टूलचेन रिज़ॉल्यूशन पर जाएं.

पैरामीटर

पैरामीटर ब्यौरा
dev_dependency डिफ़ॉल्ट = गलत
सही होने पर, अगर मौजूदा मॉड्यूल रूट मॉड्यूल नहीं है या `--ignore_dev_dependency` चालू है, तो टूलचेन रजिस्टर नहीं किए जाएंगे.
toolchain_labels sequence of strings; ज़रूरी है
रजिस्टर किए जाने वाले टूलचेन के लेबल.

repository_rule

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

नया डेटा स्टोर करने की जगह का नियम बनाता है. इसे ग्लोबल वैल्यू में सेव करें, ताकि इसे वर्कस्पेस फ़ाइल से लोड करके कॉल किया जा सके.

पैरामीटर

पैरामीटर ब्यौरा
implementation ज़रूरी है
वह फ़ंक्शन जो इस नियम को लागू करता है. एक ही पैरामीटर होना चाहिए, repository_ctx. नियम के हर इंस्टेंस के लिए, फ़ंक्शन को लोड होने के दौरान कॉल किया जाता है.
attrs dict; or None; डिफ़ॉल्ट = कोई नहीं
शब्दकोश का इस्तेमाल करें. यह एक एट्रिब्यूट के नाम से किसी एट्रिब्यूट ऑब्जेक्ट पर मैप होता है (attr मॉड्यूल देखें). _ से शुरू होने वाले एट्रिब्यूट निजी होते हैं. इनका इस्तेमाल, किसी फ़ाइल के लेबल पर इंप्लिसिट डिपेंडेंसी जोड़ने के लिए किया जा सकता है. डेटा स्टोर करने का नियम, जनरेट किए गए आर्टफ़ैक्ट पर निर्भर नहीं कर सकता. name विशेषता को निहित रूप से जोड़ा गया है और उसे बताया नहीं जाना चाहिए.
local डिफ़ॉल्ट = गलत
इससे पता चलता है कि इस नियम के तहत लोकल सिस्टम से सब कुछ फ़ेच किया जाता है. साथ ही, हर बार फ़ेच करने पर इसका फिर से आकलन किया जाना चाहिए.
environ sequence of strings; डिफ़ॉल्ट = []
ऐसे एनवायरमेंट वैरिएबल की सूची देता है जिस पर डेटा स्टोर करने का यह नियम निर्भर करता है. अगर उस सूची में कोई एनवायरमेंट वैरिएबल बदलता है, तो रिपॉज़िटरी को फिर से लाया जाएगा.
configure डिफ़ॉल्ट = गलत
इससे पता चलता है कि डेटा स्टोर करने की जगह, कॉन्फ़िगरेशन के लिए सिस्टम की जांच करती है
remotable डिफ़ॉल्ट = गलत
प्रयोग के तौर पर. इस पैरामीटर को अभी आज़माया जा रहा है और इसमें किसी भी समय बदलाव किया जा सकता है. कृपया इस पर निर्भर न रहें. इसे एक्सपेरिमेंट के तौर पर चालू किया जा सकता है. इसके लिए, ---experimental_repo_remote_exec
रिमोट से एक्ज़ीक्यूट करने की सुविधा के साथ काम करता है
doc डिफ़ॉल्ट = ''
रिपॉज़िटरी के नियम के बारे में जानकारी, जिसे दस्तावेज़ जनरेट करने वाले टूल की मदद से हासिल किया जा सकता है.

आरईपीआर

string repr(x)

यह किसी भी ऑब्जेक्ट को स्ट्रिंग के तौर पर दिखाता है. यह डीबग करने में मदद करता है.
repr("ab") == '"ab"'

पैरामीटर

पैरामीटर ब्यौरा
x ज़रूरी है
वह ऑब्जेक्ट जिसे बदलना है.

उल्टा

list reversed(sequence)

नई, बिना फ़्रीज़ की गई सूची दिखाता है जिसमें फिर से क्रम में लगाए जा सकने वाले मूल क्रम के एलिमेंट उलटे क्रम में शामिल होते हैं.
reversed([3, 5, 4]) == [4, 5, 3]

पैरामीटर

पैरामीटर ब्यौरा
sequence ज़रूरी है
बार-बार होने वाला क्रम (जैसे कि सूची), जिसे उलटा जाना है.

नियम

callable rule(implementation, test=False, attrs=None, outputs=None, executable=False, output_to_genfiles=False, fragments=[], host_fragments=[], _skylark_testable=False, toolchains=[], incompatible_use_toolchain_transition=False, doc='', *, provides=[], exec_compatible_with=[], analysis_test=False, build_setting=None, cfg=None, exec_groups=None, compile_one_filetype=None, name=None)

एक नया नियम बनाता है, जिसे लक्ष्य बनाने के लिए किसी बिल्ड फ़ाइल या मैक्रो से कॉल किया जा सकता है.

.bzl फ़ाइल में, ग्लोबल वैरिएबल के लिए नियम असाइन होने चाहिए; ग्लोबल वैरिएबल का नाम, नियम का नाम होता है.

टेस्ट के नियमों का नाम _test पर खत्म होना ज़रूरी है, जबकि बाकी सभी नियमों में यह सफ़िक्स नहीं होना चाहिए. (यह पाबंदी सिर्फ़ नियमों पर लागू होती है, उनके टारगेट पर नहीं.)

पैरामीटर

पैरामीटर ब्यौरा
implementation ज़रूरी है
इस नियम को लागू करने वाले Starlark फ़ंक्शन में सिर्फ़ एक पैरामीटर होना चाहिए: ctx. नियम के हर इंस्टेंस के लिए, विश्लेषण के दौरान फ़ंक्शन को कॉल किया जाता है. यह उपयोगकर्ता की ओर से दिए गए एट्रिब्यूट को ऐक्सेस कर सकता है. इसके लिए, एलान किए गए सभी आउटपुट जनरेट करने के लिए कार्रवाइयां तय करनी होंगी.
test डिफ़ॉल्ट = गलत
क्या यह नियम एक जांच नियम है, यानी कि क्या यह blaze test निर्देश का विषय हो सकता है. जांच के सभी नियमों को अपने-आप लागू किया जा सकने वाला मान लिया जाता है; जाँच के नियम के लिए साफ़ तौर पर executable = True सेट करना ज़रूरी नहीं है (और ऐसा करने की सलाह नहीं दी जाती). ज़्यादा जानकारी के लिए, नियमों वाला पेज देखें.
attrs dict; or None; डिफ़ॉल्ट = कोई नहीं
शब्दकोश का इस्तेमाल करें. यह एक एट्रिब्यूट के नाम से किसी एट्रिब्यूट ऑब्जेक्ट पर मैप होता है (attr मॉड्यूल देखें). _ से शुरू होने वाले एट्रिब्यूट निजी होते हैं. इनका इस्तेमाल किसी लेबल पर इंप्लिसिट डिपेंडेंसी जोड़ने के लिए किया जा सकता है. name विशेषता को निहित रूप से जोड़ा गया है और उसे बताया नहीं जाना चाहिए. visibility, deprecation, tags, testonly, और features एट्रिब्यूट को किसी और तरीके से जोड़ा गया है और इन्हें बदला नहीं जा सकता. ज़्यादातर नियमों के लिए, सिर्फ़ कुछ एट्रिब्यूट की ज़रूरत होती है. मेमोरी के इस्तेमाल को सीमित करने के लिए, नियम फ़ंक्शन attr की वैल्यू की सीमा तय करता है.
outputs dict; or None; or function; डिफ़ॉल्ट = कोई नहीं
अब काम नहीं करता. इस पैरामीटर के इस्तेमाल पर रोक लगा दी गई है और इसे जल्द ही हटा दिया जाएगा. कृपया इस पर निर्भर न रहें. यह ---incompatible_no_rule_outputs_param के साथ बंद है. इस फ़्लैग का इस्तेमाल करके, पुष्टि करें कि आपका कोड जल्द ही हटाए जाने के साथ काम करता है.
यह पैरामीटर अब काम नहीं करता. इसके बजाय, OutputGroupInfo या attr.output का इस्तेमाल करने के लिए, नियमों को माइग्रेट करें.

पहले से तय किए गए आउटपुट को तय करने के लिए स्कीमा. उपयोगकर्ता इन फ़ाइलों के लिए लेबल नहीं बताता है, जबकि output और output_list एट्रिब्यूट की वैल्यू नहीं दी जाती. पहले से तय किए गए आउटपुट के बारे में ज़्यादा जानने के लिए, नियम पेज देखें.

इस आर्ग्युमेंट की वैल्यू, डिक्शनरी या कॉलबैक फ़ंक्शन है, जो डिक्शनरी तैयार करता है. कॉलबैक, कंप्यूट किए गए डिपेंडेंसी एट्रिब्यूट की तरह काम करता है: फ़ंक्शन के पैरामीटर के नाम, नियम के एट्रिब्यूट से मैच करते हैं. उदाहरण के लिए, अगर outputs = _my_func को def _my_func(srcs, deps): ... डेफ़िनिशन के साथ पास किया जाता है, तो फ़ंक्शन के पास srcs और deps एट्रिब्यूट का ऐक्सेस होता है. शब्दकोश को सीधे तौर पर बताया गया हो या फ़ंक्शन के ज़रिए, इसकी व्याख्या इस तरह की जाती है.

शब्दकोश में मौजूद हर एंट्री, पहले से तय किया गया एक आउटपुट बनाती है, जिसमें कुंजी एक आइडेंटिफ़ायर होती है और वैल्यू एक स्ट्रिंग टेंप्लेट होती है, जो आउटपुट का लेबल तय करती है. नियम के लागू करने वाले फ़ंक्शन में, आइडेंटिफ़ायर उस फ़ील्ड का नाम बन जाता है जिसका इस्तेमाल ctx.outputs में आउटपुट के File को ऐक्सेस करने के लिए किया जाता है. आउटपुट का लेबल, नियम के जैसा ही पैकेज होता है और पैकेज बनाने के बाद का हिस्सा "%{ATTR}" फ़ॉर्म के हर प्लेसहोल्डर को एट्रिब्यूट ATTR की वैल्यू से बनाई गई स्ट्रिंग से बदलता है:

  • स्ट्रिंग के टाइप किए गए एट्रिब्यूट को शब्दों के हूबहू इस्तेमाल किया जाता है.
  • लेबल-टाइप किए गए एट्रिब्यूट, पैकेज के बाद लेबल का हिस्सा बन जाते हैं. इसमें फ़ाइल एक्सटेंशन शामिल नहीं होता है. उदाहरण के लिए, "//pkg:a/b.c" लेबल "a/b" हो जाता है.
  • आउटपुट-टाइप किए गए एट्रिब्यूट, पैकेज के बाद लेबल का हिस्सा बन जाते हैं. इनमें फ़ाइल एक्सटेंशन भी शामिल है (ऊपर दिए गए उदाहरण के लिए, "a/b.c").
  • प्लेसहोल्डर में इस्तेमाल की जाने वाली सूची के टाइप (जैसे कि attr.label_list) वाले सभी एट्रिब्यूट में सिर्फ़ एक एलिमेंट होना चाहिए. इनका कन्वर्ज़न, बिना सूची वाले वर्शन (attr.label) की तरह ही होता है.
  • अन्य तरह के एट्रिब्यूट शायद प्लेसहोल्डर में न दिखें.
  • बिना एट्रिब्यूट वाले खास प्लेसहोल्डर %{dirname} और %{basename} नियम के लेबल के उन हिस्सों में बड़े हो जाते हैं. हालांकि, इसमें पैकेज को शामिल नहीं किया जाता. उदाहरण के लिए, "//pkg:a/b.c" में, डायरनेम a है और बेसनाम b.c है.

व्यावहारिक रूप से, सबसे आम प्रतिस्थापन प्लेसहोल्डर "%{name}" है. उदाहरण के लिए, "foo" नाम के टारगेट के लिए, आउटपुट निर्देश {"bin": "%{name}.exe"}, foo.exe नाम के ऐसे आउटपुट का पहले से एलान करता है जिसे लागू करने के फ़ंक्शन में ctx.outputs.bin के तौर पर ऐक्सेस किया जा सकता है.

executable डिफ़ॉल्ट = गलत
क्या इस नियम को लागू किया जा सकता है या नहीं, इसका मतलब है कि क्या इस पर blaze run निर्देश लागू हो सकता है. ज़्यादा जानकारी के लिए, नियमों वाला पेज देखें.
output_to_genfiles डिफ़ॉल्ट = गलत
अगर सही है, तो फ़ाइलें बिन डायरेक्ट्री के बजाय genfile की डायरेक्ट्री में जनरेट की जाएंगी. जब तक आपको मौजूदा नियमों के साथ काम करने के लिए इसकी ज़रूरत न हो (जैसे, C++ के लिए हेडर फ़ाइलें जनरेट करते समय), तब तक इस फ़्लैग को सेट न करें.
fragments sequence of strings; डिफ़ॉल्ट = []
उन कॉन्फ़िगरेशन फ़्रैगमेंट के नाम की सूची जिनकी टारगेट कॉन्फ़िगरेशन में नियम के लिए ज़रूरत होती है.
host_fragments sequence of strings; डिफ़ॉल्ट = []
उन कॉन्फ़िगरेशन फ़्रैगमेंट के नामों की सूची जिनकी नियम के लिए होस्ट कॉन्फ़िगरेशन में ज़रूरत होती है.
_skylark_testable डिफ़ॉल्ट = गलत
(प्रयोग के तौर पर उपलब्ध)

अगर यह नियम सही है, तो यह नियम जांच के लिए अपनी कार्रवाइयों को ऐसे नियमों के आधार पर दिखाएगा जो इस पर निर्भर कार्रवाइयां से जुड़े होते हैं. सेवा देने वाली कंपनी, ctx.created_actions() को कॉल करके अपने नियम खुद भी उपलब्ध करा सकती है.

इसका इस्तेमाल सिर्फ़ Starlark के नियमों के विश्लेषण के समय के व्यवहार की जांच करने के लिए किया जाना चाहिए. आने वाले समय में इस फ़्लैग को हटाया जा सकता है.
toolchains sequence; डिफ़ॉल्ट = []
अगर सेट हो, तो इस नियम के लिए टूलचेन के सेट की ज़रूरत होती है. सूची में किसी भी कॉम्बिनेशन में स्ट्रिंग, लेबल या StarlarkToolchainTypeApi ऑब्जेक्ट शामिल हो सकते हैं. टूलचेन की पहचान, मौजूदा प्लैटफ़ॉर्म की जांच करके की जाएगी. साथ ही, इसे ctx.toolchain के ज़रिए नियम लागू करने के लिए उपलब्ध कराया जाएगा.
incompatible_use_toolchain_transition डिफ़ॉल्ट = गलत
अब यह इस्तेमाल में नहीं है और इसे हटा दिया जाना चाहिए. अब यह काम नहीं कर रहा है.
doc डिफ़ॉल्ट = ''
नियम के बारे में जानकारी, जिसे दस्तावेज़ जनरेट करने वाले टूल की मदद से हासिल किया जा सकता है.
provides डिफ़ॉल्ट = []
उन कंपनियों की सूची जिन्हें लागू करने वाले फ़ंक्शन को दिखाना ज़रूरी है.

अगर लागू करने वाला फ़ंक्शन, यहां दी गई सूची में शामिल किसी भी तरह की सेवा देने वाली कंपनी को उसकी रिटर्न वैल्यू से हटा देता है, तो यह गड़बड़ी होती है. हालांकि, लागू करने का फ़ंक्शन ऐसी अतिरिक्त कंपनियां दिखा सकता है जो यहां नहीं दी गई हैं.

सूची का हर एलिमेंट एक *Info ऑब्जेक्ट है, जो provider() से मिलता है. हालांकि, लेगसी प्रोवाइडर को उसके स्ट्रिंग नाम से दिखाया जाता है.

exec_compatible_with sequence of strings; डिफ़ॉल्ट = []
एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर लागू होने वाली पाबंदियों की सूची, जो इस नियम के टाइप के सभी टारगेट पर लागू होती है.
analysis_test डिफ़ॉल्ट = गलत
अगर सही है, तो इस नियम को विश्लेषण वाला टेस्ट माना जाता है.

ध्यान दें: विश्लेषण की जांच के नियम मुख्य रूप से Starlark की मुख्य लाइब्रेरी में मौजूद इन्फ़्रास्ट्रक्चर का इस्तेमाल करके तय किए जाते हैं. दिशा-निर्देशों के लिए टेस्टिंग देखें.

अगर कोई नियम, विश्लेषण की जांच करने के नियम के तौर पर तय किया गया है, तो वह अपने एट्रिब्यूट पर analysis_test_transition का इस्तेमाल करके तय किए गए कॉन्फ़िगरेशन ट्रांज़िशन का इस्तेमाल कर सकता है. हालांकि, यह कुछ पाबंदियों में शामिल हो जाता है:

  • इस नियम के टारगेट, ट्रांज़िटिव डिपेंडेंसी की संख्या तक सीमित हैं.
  • नियम को जांच का नियम माना जाता है (जैसे कि test=True सेट किया गया हो). यह test की वैल्यू की जगह लागू होगा
  • नियम लागू करने का फ़ंक्शन, कार्रवाइयां रजिस्टर नहीं कर सकता. इसके बजाय, उसे AnalysisTestResultInfo देकर पास/फ़ेल नतीजे रजिस्टर करना होगा.
build_setting BuildSetting; or None; डिफ़ॉल्ट = कोई नहीं
अगर सेट हो, तो इससे पता चलता है कि यह नियम किस तरह का build setting है. config मॉड्यूल देखें. अगर यह नीति सेट है, तो "build_setting_default" नाम का एक ज़रूरी एट्रिब्यूट है इस नियम में अपने आप जुड़ जाता है, जिसका प्रकार यहां दी गई वैल्यू से मेल खाता है.
cfg डिफ़ॉल्ट = कोई नहीं
अगर यह नीति सेट की जाती है, तो कॉन्फ़िगरेशन ट्रांज़िशन पर ले जाने वाला नियम, विश्लेषण से पहले अपने खुद के कॉन्फ़िगरेशन पर लागू होगा.
exec_groups dict; or None; डिफ़ॉल्ट = कोई नहीं
ग्रुप का नाम (स्ट्रिंग) से exec_groups तक एक्ज़ीक्यूशन करने का टेक्स्ट. अगर यह नीति सेट की जाती है, तो इससे नियमों को किसी एक टारगेट में कई एक्ज़ीक्यूशन प्लैटफ़ॉर्म पर कार्रवाइयां करने की अनुमति मिलती है. ज़्यादा जानकारी के लिए, लागू किए जाने वाले ग्रुप का दस्तावेज़ देखें.
compile_one_filetype sequence of strings; or None; डिफ़ॉल्ट = कोई नहीं
--compile_one_dependency से इस्तेमाल किया जाता है: अगर एक से ज़्यादा नियम तय फ़ाइल का इस्तेमाल करते हैं, तो क्या हमें दूसरे नियम के बजाय यह नियम चुनना चाहिए.
name string; or None; डिफ़ॉल्ट = कोई नहीं
अब काम नहीं करता. इस पैरामीटर के इस्तेमाल पर रोक लगा दी गई है और इसे जल्द ही हटा दिया जाएगा. कृपया इस पर निर्भर न रहें. यह --+incompatible_remove_rule_name_parameter के साथ बंद है. इस फ़्लैग का इस्तेमाल करके, पुष्टि करें कि आपका कोड जल्द ही हटाए जाने के साथ काम करता है.
अब काम नहीं करता: इस्तेमाल न करें.

इस नियम का नाम, जैसा कि बेज़ल ने समझा और लॉगिंग, native.existing_rule(...)[kind], और bazel query जैसे कॉन्टेक्स्ट में रिपोर्ट किया गया. आम तौर पर, यह स्टारलार्क आइडेंटिफ़ायर के जैसा ही होता है, जो इस नियम के दायरे में आता है; उदाहरण के लिए, foo_library नाम के नियम को आम तौर पर foo_library = rule(...) के तौर पर बताया जाएगा और बिल्ड फ़ाइल में foo_library(...) के तौर पर इंस्टैंशिएट किया जाएगा.

अगर इस पैरामीटर को शामिल नहीं किया जाता है, तो नियम का नाम पहले Starlark ग्लोबल वैरिएबल के नाम पर सेट कर दिया जाएगा. ऐसा इसलिए किया जाएगा, ताकि तय किए गए .bzl मॉड्यूल में ही इस नियम का पालन किया जा सके. इसलिए, अगर नाम foo_library है, तो foo_library = rule(...) में इस पैरामीटर को तय करने की ज़रूरत नहीं है.

किसी नियम के लिए साफ़ तौर पर नाम तय करने से, वह जगह नहीं बदलती है जहां आपको नियम को इंस्टैंशिएट करने की अनुमति होती है.

चुनें

unknown select(x, no_match_error='')

select() एक हेल्पर फ़ंक्शन है, जो नियम एट्रिब्यूट को कॉन्फ़िगर करने लायक बनाता है. ज़्यादा जानकारी के लिए, बिल्ड एनसाइक्लोपीडिया देखें.

पैरामीटर

पैरामीटर ब्यौरा
x ज़रूरी है
ऐसा डिक्शनरी जो कॉन्फ़िगरेशन की शर्तों को वैल्यू पर मैप करता है. हर कुंजी एक लेबल या लेबल स्ट्रिंग होती है, जो config_setting या programt_value इंस्टेंस की पहचान करती है. किसी स्ट्रिंग के बजाय लेबल का उपयोग कब करना है, इसके लिए मैक्रो से संबंधित दस्तावेज़ देखें.
no_match_error डिफ़ॉल्ट = ''
अगर कोई शर्त मेल नहीं खाती है, तो रिपोर्ट करने के लिए वैकल्पिक कस्टम गड़बड़ी.

single_version_override

None single_version_override(module_name, version='', registry='', patches=[], patch_cmds=[], patch_strip=0)

इससे पता चलता है कि कोई डिपेंडेंसी अब भी रजिस्ट्री से आना चाहिए, लेकिन उसके वर्शन को पिन किया जाना चाहिए या उसकी रजिस्ट्री को ओवरराइड किया जाना चाहिए या लागू किए गए पैच की सूची होनी चाहिए. यह डायरेक्टिव सिर्फ़ रूट मॉड्यूल में लागू होता है; दूसरे शब्दों में, अगर किसी मॉड्यूल का इस्तेमाल डिपेंडेंसी के तौर पर दूसरे लोग करते हैं, तो उसके खुद के ओवरराइड को अनदेखा कर दिया जाता है.

पैरामीटर

पैरामीटर ब्यौरा
module_name ज़रूरी है
यह बदलाव लागू करने के लिए, Baze मॉड्यूल की डिपेंडेंसी का नाम.
version डिफ़ॉल्ट = ''
डिपेंडेंसी ग्राफ़ में इस मॉड्यूल के घोषित वर्शन को बदल देता है. दूसरे शब्दों में, यह मॉड्यूल "पिन किया गया" होगा इन बदलावों को लागू कर दें. अगर कोई व्यक्ति रजिस्ट्री या पैच को ओवरराइड करना चाहता है, तो इस एट्रिब्यूट को छोड़ा जा सकता है.
registry डिफ़ॉल्ट = ''
इस मॉड्यूल के लिए रजिस्ट्री को बदलता है; रजिस्ट्री की डिफ़ॉल्ट सूची से इस मॉड्यूल को ढूंढने के बजाय, दी गई रजिस्ट्री का इस्तेमाल किया जाना चाहिए.
patches Iterable of strings; डिफ़ॉल्ट = []
इस मॉड्यूल पर लागू करने के लिए, पैच फ़ाइलों की ओर पॉइंट करने वाले लेबल की सूची. पैच फ़ाइलें टॉप लेवल प्रोजेक्ट के सोर्स ट्री में मौजूद होनी चाहिए. ये सूची के क्रम में लागू किए जाते हैं.
patch_cmds Iterable of strings; डिफ़ॉल्ट = []
पैच लागू होने के बाद, Linux/Macos पर Bash कमांड का क्रम.
patch_strip डिफ़ॉल्ट = 0
Unix पैच के --strip तर्क की तरह ही.

क्रम से लगाया गया

list sorted(iterable, *, key=None, reverse=False)

दी गई, क्रम से लगाई गई नई सूची दिखाता है जिसमें दिए गए बार-बार दिए जा सकने वाले क्रम के सभी एलिमेंट शामिल होते हैं. अगर एलिमेंट x, y के किसी भी जोड़े की तुलना x < का इस्तेमाल करके नहीं की जा सकती, तो हो सकता है कि कोई गड़बड़ी हो वाई. एलिमेंट को बढ़ते क्रम में लगाया जाता है, जब तक कि रिवर्स तर्क सही न हो. इस मामले में, क्रम घटते क्रम में होता है. क्रम से लगाने की प्रोसेस एक जैसी होती है: एक जैसी तुलना करने वाले एलिमेंट में, वे अपने मूल रिलेटिव ऑर्डर में ही दिखते हैं.
sorted([3, 5, 4]) == [3, 4, 5]

पैरामीटर

पैरामीटर ब्यौरा
iterable ज़रूरी है
क्रम से लगाने के लिए, बार-बार इस्तेमाल होने वाला क्रम.
key डिफ़ॉल्ट = कोई नहीं
तुलना से पहले हर एलिमेंट पर एक वैकल्पिक फ़ंक्शन लागू किया जाता है.
reverse डिफ़ॉल्ट = गलत
नतीजों को घटते क्रम में दिखाएं.

str

string str(x)

यह किसी भी ऑब्जेक्ट को स्ट्रिंग में बदलता है. यह डीबग करने में मदद करता है.
str("ab") == "ab"
str(8) == "8"

पैरामीटर

पैरामीटर ब्यौरा
x ज़रूरी है
वह ऑब्जेक्ट जिसे बदलना है.

tag_class

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

एक नया Tag_class ऑब्जेक्ट बनाता है, जो टैग की क्लास के लिए एट्रिब्यूट स्कीमा को तय करता है. ये ऐसे डेटा ऑब्जेक्ट होते हैं जिनका इस्तेमाल मॉड्यूल एक्सटेंशन के ज़रिए किया जा सकता है.

पैरामीटर

पैरामीटर ब्यौरा
attrs default = {}
इस टैग क्लास के सभी एट्रिब्यूट के बारे में जानकारी देने के लिए डिक्शनरी. यह एक एट्रिब्यूट के नाम से किसी एट्रिब्यूट ऑब्जेक्ट पर मैप होता है (attr मॉड्यूल देखें).
doc डिफ़ॉल्ट = ''
टैग क्लास की जानकारी, जिसे दस्तावेज़ जनरेट करने वाले टूल की मदद से हासिल किया जा सकता है.

टपल

tuple tuple(x=())

दिए गए दोहराए जा सकने वाले मान के जैसे एलिमेंट वाला टपल दिखाता है.
tuple([1, 2]) == (1, 2)
tuple((2, 3, 2)) == (2, 3, 2)
tuple({5: "a", 2: "b", 4: "c"}) == (5, 2, 4)

पैरामीटर

पैरामीटर ब्यौरा
x डिफ़ॉल्ट = ()
वह ऑब्जेक्ट जिसे बदलना है.

टाइप

string type(x)

इसके आर्ग्युमेंट के टाइप का नाम दिखाता है. यह डीबग करने और टाइप-चेकिंग करने में मदद करता है. उदाहरण:
type(2) == "int"
type([1]) == "list"
type(struct(a = 2)) == "struct"
आने वाले समय में यह फ़ंक्शन बदल सकता है. Python के साथ काम करने वाला कोड लिखने और उसे आने वाले समय में इस्तेमाल न करने लायक बनाने के लिए, इसका इस्तेमाल सिर्फ़ रिटर्न वैल्यू की तुलना करने के लिए करें:
if type(x) == type([]):  # if x is a list

पैरामीटर

पैरामीटर ब्यौरा
x ज़रूरी है
वह ऑब्जेक्ट जिसके टाइप की जांच करनी है.

use_extension

module_extension_proxy use_extension(extension_bzl_file, extension_name, *, dev_dependency=False, isolate=False)

मॉड्यूल एक्सटेंशन दिखाने वाला प्रॉक्सी ऑब्जेक्ट दिखाता है; मॉड्यूल एक्सटेंशन टैग बनाने के लिए, इसके तरीकों का इस्तेमाल किया जा सकता है.

पैरामीटर

पैरामीटर ब्यौरा
extension_bzl_file ज़रूरी है
Starlark फ़ाइल का मॉड्यूल, जो मॉड्यूल के एक्सटेंशन को बताता है.
extension_name ज़रूरी है
इस्तेमाल किए जाने वाले मॉड्यूल एक्सटेंशन का नाम. इस नाम के चिह्न को Starlark फ़ाइल से एक्सपोर्ट करना ज़रूरी है.
dev_dependency डिफ़ॉल्ट = गलत
अगर सही है, तो मॉड्यूल एक्सटेंशन के इस्तेमाल को अनदेखा कर दिया जाएगा. ऐसा तब होगा, जब मौजूदा मॉड्यूल, रूट मॉड्यूल न हो या `--ignore_dev_dependency` चालू हो.
isolate डिफ़ॉल्ट = गलत
प्रयोग के तौर पर. इस पैरामीटर को अभी आज़माया जा रहा है और इसमें किसी भी समय बदलाव किया जा सकता है. कृपया इस पर निर्भर न रहें. इसे ---experimental_isolated_extension_usages सेट करके प्रयोग के आधार पर चालू किया जा सकता है
अगर सही है, तो मॉड्यूल एक्सटेंशन के इस इस्तेमाल को इस और दूसरे मॉड्यूल, दोनों में इस्तेमाल किए जाने वाले दूसरे सभी इस्तेमाल से अलग कर दिया जाएगा. इस इस्तेमाल के लिए बनाए गए टैग, अन्य इस्तेमाल पर असर नहीं डालते. साथ ही, इस इस्तेमाल के लिए एक्सटेंशन के जनरेट किए गए डेटा स्टोर करने की जगह, एक्सटेंशन से जनरेट किए गए सभी डेटा स्टोर करने की जगहों से अलग होंगे.

फ़िलहाल, यह पैरामीटर एक्सपेरिमेंट के तौर पर उपलब्ध है और सिर्फ़ --experimental_isolated_extension_usages फ़्लैग के साथ उपलब्ध है.

use_repo

None use_repo(extension_proxy, *args, **kwargs)

यह मौजूदा मॉड्यूल के स्कोप में, दिए गए मॉड्यूल एक्सटेंशन से जनरेट किए गए एक या एक से ज़्यादा रेपो को इंपोर्ट करता है.

पैरामीटर

पैरामीटर ब्यौरा
extension_proxy ज़रूरी है
use_extension कॉल से लौटाया गया मॉड्यूल एक्सटेंशन प्रॉक्सी ऑब्जेक्ट.
args ज़रूरी है
इंपोर्ट किए जाने वाले डेटा स्टोर के नाम.
kwargs ज़रूरी है
मौजूदा मॉड्यूल के स्कोप में अलग-अलग नामों से इंपोर्ट करने के लिए, कुछ डेटा संग्रह स्थान तय करता है. कुंजियों का नाम वही होना चाहिए जिसका इस्तेमाल मौजूदा दायरे में करना है, जबकि वैल्यू वे मूल नाम होनी चाहिए जिन्हें मॉड्यूल एक्सटेंशन से एक्सपोर्ट किया गया हो.

कैसा दिखाई दे

None visibility(value)

यह नीति, फ़िलहाल शुरू किए जा रहे .bzl मॉड्यूल के लोड होने की जानकारी को सेट करती है.

मॉड्यूल के लोड होने की सेटिंग से यह तय होता है कि अन्य बिल्ड और .bzl फ़ाइलों को लोड किया जा सकता है या नहीं. (यह मौजूदा .bzl सोर्स फ़ाइल के टारगेट के हिसाब से दिखने की सेटिंग से अलग है. इससे यह कंट्रोल किया जाता है कि फ़ाइल, अन्य टारगेट की डिपेंडेंसी के तौर पर दिख सकती है या नहीं.) लोड करने की सेटिंग, पैकेज के लेवल पर काम करती है: लोड हो रही फ़ाइल के लिए, किसी मॉड्यूल को लोड करने के लिए उस पैकेज में लाइव होना ज़रूरी है जिसे मॉड्यूल को दिखाने की अनुमति दी गई हो. मॉड्यूल को हमेशा उसके अपने पैकेज में लोड किया जा सकता है, भले ही वह किसको दिखे.

visibility() को हर .bzl फ़ाइल के लिए सिर्फ़ एक बार कॉल किया जा सकता है. यह सिर्फ़ ऊपर के लेवल पर कॉल किया जा सकता है, किसी फ़ंक्शन के अंदर नहीं. हमारा सुझाव है कि इस कॉल को load() स्टेटमेंट के ठीक नीचे रखें और तर्क तय करने के लिए कोई छोटा सा लॉजिक हो.

अगर --check_bzl_visibility फ़्लैग को 'गलत है' पर सेट किया जाता है, तो कॉन्टेंट लोड होने के दौरान आने वाली सूचनाओं का उल्लंघन होगा. इससे चेतावनी मिलेगी, लेकिन बिल्ड पूरा नहीं होगा.

पैरामीटर

पैरामीटर ब्यौरा
value ज़रूरी है
पैकेज की खास बातों वाली स्ट्रिंग या एक पैकेज की खास जानकारी वाली स्ट्रिंग.

पैकेज की जानकारी, package_group के फ़ॉर्मैट के हिसाब से ही होती है. हालांकि, पैकेज की नेगेटिव जानकारी की अनुमति नहीं है. इसका मतलब है कि किसी स्पेसिफ़िकेशन के ये फ़ॉर्म हो सकते हैं:

  • "//foo": पैकेज //foo
  • "//foo/...": //foo पैकेज और इसके सभी सबपैकेज.
  • "public" या "private": क्रम के हिसाब से, सभी पैकेज या कोई पैकेज नहीं

"@" सिंटैक्स की अनुमति नहीं है; सभी स्पेसिफ़िकेशन को मौजूदा मॉड्यूल की रिपॉज़िटरी के आधार पर समझा जाता है.

अगर value स्ट्रिंग की एक सूची है, तो इस मॉड्यूल को दिखाए जाने वाले पैकेज का सेट, हर स्पेसिफ़िकेशन के मुताबिक दिखाए जाने वाले पैकेज का कॉम्बिनेशन होता है. (खाली सूची का असर private जैसा ही होता है.) अगर value एक स्ट्रिंग है, तो इसे सिंगलटन सूची [value] के तौर पर माना जाता है.

ध्यान दें कि --incompatible_package_group_has_public_syntax और --incompatible_fix_package_group_reporoot_syntax फ़्लैग का इस तर्क पर कोई असर नहीं पड़ता. "public" और "private" वैल्यू हमेशा उपलब्ध होती हैं. साथ ही, "//..." को हमेशा "मौजूदा रिपॉज़िटरी में मौजूद सभी पैकेज" के तौर पर समझा जाता है.

कार्यस्थान

None workspace(name)

इस फ़ंक्शन का इस्तेमाल सिर्फ़ WORKSPACE फ़ाइल में किया जा सकता है. साथ ही, इसका एलान WORKSPACE फ़ाइल में मौजूद दूसरे सभी फ़ंक्शन से पहले किया जाना चाहिए. हर WORKSPACE फ़ाइल में workspace फ़ंक्शन होना चाहिए.

इस फ़ाइल फ़ोल्डर के लिए नाम सेट करता है. फ़ाइल फ़ोल्डर के नाम, प्रोजेक्ट की जानकारी देने के लिए Java-पैकेज-स्टाइल के होने चाहिए.साथ ही, अंडरस्कोर का इस्तेमाल सेपरेटर के तौर पर किया जाना चाहिए. उदाहरण के लिए, github.com/batzbuild/baकोई आपको com_github_baZZbuild_baकोई इस्तेमाल करना चाहिए.

इस नाम का इस्तेमाल उस डायरेक्ट्री के लिए किया जाता है जिसमें रिपॉज़िटरी की रनफ़ाइल सेव की जाती हैं. उदाहरण के लिए, अगर लोकल रिपॉज़िटरी में रनफ़ाइल foo/bar है और वर्कस्पेस फ़ाइल में workspace(name = 'baz') है, तो रनफ़ाइल mytarget.runfiles/baz/foo/bar में उपलब्ध होगी. अगर फ़ाइल फ़ोल्डर का कोई नाम नहीं दिया गया है, तो रनफ़ाइल को bar.runfiles/foo/bar से सिमलिंक कर दिया जाएगा.

रिमोट रिपॉज़िटरी नियम के नाम, वर्कस्पेस के मान्य नाम होने चाहिए. उदाहरण के लिए, आपके पास maven_jar(name = 'foo') हो सकता है, लेकिन maven_jar(name = 'foo%bar') नहीं. इसकी वजह यह है कि Basel, workspace(name = 'foo%bar') वाले maven_jar के लिए एक WorkSPACE फ़ाइल लिखने की कोशिश करेगा.

पैरामीटर

पैरामीटर ब्यौरा
name ज़रूरी है
फ़ाइल फ़ोल्डर का नाम डालें. नाम किसी अक्षर से शुरू होने चाहिए और इनमें सिर्फ़ अक्षर, संख्याएं, अंडरस्कोर, डैश, और बिंदु हो सकते हैं.

zip

list zip(*args)

tuple का list दिखाता है, जहां i-th ट्यूपल में हर तर्क क्रम या बार-बार लागू होने वाले क्रम से i-th एलिमेंट शामिल होता है. इस सूची में सबसे छोटे इनपुट का साइज़ होता है. बार-बार दोहराए जा सकने वाले एक आर्ग्युमेंट की मदद से, यह 1-टूपल की सूची दिखाता है. बिना आर्ग्युमेंट के, यह खाली सूची दिखाता है. उदाहरण:
zip()  # == []
zip([1, 2])  # == [(1,), (2,)]
zip([1, 2], [3, 4])  # == [(1, 3), (2, 4)]
zip([1, 2], [3, 4, 5])  # == [(1, 3), (2, 4)]

पैरामीटर

पैरामीटर ब्यौरा
args ज़रूरी है
ज़िप करने के लिए सूचियां.