Adding new fields is useful when you are already using a target type, but need to store additional metadata for your plugin.
For example, if you're writing a codegen plugin to convert a
protobuf_library into Java source files, you may want to add a
jdk_version field to
If you are instead adding support for a new language, create a new target type.
If you want to reduce boilerplate in BUILD files, such as changing default values, use macros.
First, define the field. Then, register it by using
OriginalTarget.register_plugin_field(CustomField), like this:
from pants.backend.codegen.protobuf.target_types import ProtobufLibrary from pants.engine.target import BoolField class ProtobufJdkVersion(IntField): """Which JDK protobuf should target.""" alias = "jdk_version" default = 11 def rules(): return [ProtobufLibrary.register_plugin_field(ProtobufJdkVersion)]
To confirm this worked, run
./pants help protobuf_library, and you should see your new field.
Updated about a month ago