2017-06-29 1 views
2

Je travaille sur l'implémentation d'une fonctionnalité comme Strict Java Deps pour rules_scala.
Je voudrais vraiment avoir la possibilité de configurer en exécution si cela utilise warn ou error. Je semble me rappeler que les règles de Skylark ne peuvent pas créer et accéder à des drapeaux de ligne de commande, mais je ne me souviens pas si elles peuvent accéder à celles existantes?Bazel- une action skylark peut-elle lire un drapeau de ligne de commande (strict_java_deps)

La principale différence est que les existants sont déjà analysés, donc peut-être qu'ils sont également passés dans certains ctx.

Répondre

2

Le drapeau que vous souhaitez (strict_java_deps) n'est pas disponible chez Skylark pour le moment. Il n'y a aucune raison que nous ne puissions pas l'ajouter, cependant, a classé #3295 pour suivre.

Pour les autres indicateurs, le contexte peut accéder aux fragments de configuration, qui peuvent accéder à certains des indicateurs de ligne de commande analysés. Je pense que ce que vous voulez est ctx.fragments, puis utilisez le fragments pour obtenir le java fragments, puis obtenir les default_javac_flags de cette:

# rules.bzl 
def _impl(ctx): 
    print("flags: %s" % ctx.fragments.java.default_javac_flags) 
    ... 

frag = rule(
    implementation = _impl, 
    fragments = ["java"], # Declare that this rule uses java fragments 
) 

Puis:

$ bazel build --javacopt="-g:source,lines" :x 
WARNING: /home/kchodorow/test/a/tester.bzl:2:3: flags: ["-g:source,lines"]. 
+0

Merci! Le drapeau que je cherchais est 'strict_java_deps'. Je pense que cette solution ne m'aide pas puisque ce fragment est marqué comme 'SkylarkCallable' et' strict_java_deps' est marqué comme 'Option'. Ai-je raison? – Ittai

+0

Oh, oui, vous ne pouvez pas accéder à celui-là en ce moment, mais il n'y a aucune raison que nous ne puissions pas l'exposer. Classé https://github.com/bazelbuild/bazel/issues/3295. – kristina

+0

Merci! Pouvez-vous mettre à jour votre réponse? Je vais l'accepter puis – Ittai