| // Copyright 2022 The Bazel Authors. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| package com.google.devtools.build.lib.starlarkbuildapi; |
| |
| import com.google.devtools.build.docgen.annot.DocCategory; |
| import com.google.devtools.build.lib.collect.nestedset.Depset; |
| import net.starlark.java.annot.Param; |
| import net.starlark.java.annot.ParamType; |
| import net.starlark.java.annot.StarlarkBuiltin; |
| import net.starlark.java.annot.StarlarkMethod; |
| import net.starlark.java.eval.EvalException; |
| import net.starlark.java.eval.NoneType; |
| import net.starlark.java.eval.StarlarkCallable; |
| import net.starlark.java.eval.StarlarkThread; |
| import net.starlark.java.eval.StarlarkValue; |
| |
| /** Template expansion dict module. */ |
| @StarlarkBuiltin( |
| name = "TemplateDict", |
| category = DocCategory.BUILTIN, |
| doc = |
| "An Args-like structure for use in ctx.actions.expand_template(), which allows for" |
| + " deferring evaluation of values till the execution phase.") |
| public interface TemplateDictApi extends StarlarkValue { |
| |
| @StarlarkMethod( |
| name = "add", |
| doc = "Add a String value", |
| parameters = { |
| @Param(name = "key", doc = "A String key"), |
| @Param(name = "value", doc = "A String value") |
| }, |
| useStarlarkThread = true) |
| TemplateDictApi addArgument(String key, String value, StarlarkThread thread) throws EvalException; |
| |
| @StarlarkMethod( |
| name = "add_joined", |
| doc = "Add depset of values", |
| parameters = { |
| @Param(name = "key", doc = "A String key"), |
| @Param( |
| name = "values", |
| allowedTypes = { |
| @ParamType(type = Depset.class), |
| }, |
| doc = "The depset whose items will be joined."), |
| @Param( |
| name = "join_with", |
| named = true, |
| positional = false, |
| doc = |
| "A delimiter string used to join together the strings obtained from applying " |
| + "<code>map_each</code>, in the same manner as " |
| + "<a href='../core/string.html#join'><code>string.join()</code></a>."), |
| @Param( |
| name = "map_each", |
| allowedTypes = { |
| @ParamType(type = StarlarkCallable.class), |
| }, |
| named = true, |
| positional = false, |
| doc = |
| "A Starlark function accepting a single argument and returning either a string, " |
| + "<code>None</code>, or a list of strings. This function is applied to each " |
| + "item of the depset specified in the <code>values</code> parameter"), |
| @Param( |
| name = "uniquify", |
| named = true, |
| positional = false, |
| defaultValue = "False", |
| doc = |
| "If true, duplicate strings derived from <code>values</code> will be omitted. Only " |
| + "the first occurrence of each string will remain. Usually this feature is " |
| + "not needed because depsets already omit duplicates, but it can be useful " |
| + "if <code>map_each</code> emits the same string for multiple items."), |
| @Param( |
| name = "format_joined", |
| allowedTypes = { |
| @ParamType(type = String.class), |
| @ParamType(type = NoneType.class), |
| }, |
| named = true, |
| positional = false, |
| defaultValue = "None", |
| doc = |
| "An optional format string pattern applied to the joined string. " |
| + "The format string must have exactly one '%s' placeholder."), |
| @Param( |
| name = "allow_closure", |
| named = true, |
| positional = false, |
| defaultValue = "False", |
| doc = |
| "If true, allows the use of closures in function parameters like " |
| + "<code>map_each</code>. Usually this isn't necessary and it risks retaining " |
| + "large analysis-phase data structures into the execution phase."), |
| }, |
| useStarlarkThread = true) |
| TemplateDictApi addJoined( |
| String key, |
| Depset values, |
| String joinWith, |
| StarlarkCallable mapEach, |
| Boolean uniquify, |
| Object formatJoined, |
| Boolean allowClosure, |
| StarlarkThread thread) |
| throws EvalException; |
| } |