Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JVM BUILD file symbol help text isn't shown in help/help-all #20979

Open
huonw opened this issue May 30, 2024 · 0 comments
Open

JVM BUILD file symbol help text isn't shown in help/help-all #20979

huonw opened this issue May 30, 2024 · 0 comments

Comments

@huonw
Copy link
Contributor

huonw commented May 30, 2024

Describe the bug

There's a few "JVM shading rules" (and similar types) that set help as instructed by their ABC:

class JvmShadingRule(ABC):
"""Base class for defining JAR shading rules as valid aliases in BUILD files.
Subclasses need to provide with an `alias` and a `help` message. The `alias` represents
the name that will be used in BUILD files to instantiate the given subclass.
Set the `help` class property with a description, which will be used in `./pants help`. For the
best rendering, use soft wrapping (e.g. implicit string concatenation) within paragraphs, but
hard wrapping (`\n`) to separate distinct paragraphs and/or lists.
"""
alias: ClassVar[str]
help: ClassVar[str | Callable[[], str]]

However, it seems like this isn't hooked up right: these rules are BUILD file symbols and the help isn't obeyed: for instance, for

class JvmShadingZapRule(JvmShadingRule):
alias = "shading_zap"
help = "Removes from the final artifact the occurrences of the `pattern`."

PANTS_VERSION=2.22.0.dev3 pants --backend-packages=pants.backend.experimental.java help shading_zap
`shading_zap` BUILD file symbol
-------------------------------

Signature: shading_zap(pattern: 'str') -> None

JvmShadingZapRule(pattern: 'str')

The default JvmShadingZapRule(...) text appears to just be reiterating the dataclass definition.

I think these BUILD file symbols use the doc string, not help, so potentially the example above should be formatted as something like this:

class JvmShadingZapRule(JvmShadingRule): 
    "Removes from the final artifact the occurrences of the `pattern`." 

    alias = "shading_zap" 

This appears to affect:

  • shading_keep
  • shading_relocate
  • shading_rename
  • shading_zap
  • duplicate_rule
  • jvm_exclude
  • scala_exclude

(The last three aren't JvmShadingRule subclasses but follow a similar pattern.)

Pants version

2.22.0.dev3

OS
both

Additional info

huonw added a commit to pantsbuild/pantsbuild.org that referenced this issue May 30, 2024
This adds a new section to the reference docs:
`/2.x/reference/build-file-symbols/`. This renders all the known
non-target BUILD file symbols, as indicated by the
`name_to_build_file_info` key of the `help-all` output JSON.

This JSON looks like the following, and this generation basically just
mashes it up into documentation form:

```json
  "name_to_build_file_info": {
    "PANTS_VERSION": {
      "documentation": null,
      "is_target": false,
      "name": "PANTS_VERSION",
      "signature": null
    },
    "__defaults__": {
      "documentation": "Provide default field values.\n\nLearn more https://www.pantsbuild.org/2.22/docs/using-pants/key-concepts/targets-and-build-files#field-default-values",
      "is_target": false,
      "name": "__defaults__",
      "signature": "(*args: 'SetDefaultsT', ignore_unknown_fields: 'bool' = False, ignore_unknown_targets: 'bool' = False, **kwargs) -> 'None'"
    },
    "__dependencies_rules__": {
      "documentation": "Declare dependencies rules.",
      "is_target": false,
      "name": "__dependencies_rules__",
      "signature": "(*args, **kwargs) -> 'None'"
    },
    "__dependents_rules__": {
      "documentation": "Declare dependents rules.",
      "is_target": false,
      "name": "__dependents_rules__",
      "signature": "(*args, **kwargs) -> 'None'"
    },
    "_generator_sources_helper": {
      "documentation": null,
      "is_target": true,
      "name": "_generator_sources_helper",
      "signature": "(**kwargs: 'Any') -> 'TargetAdaptor'"
    },
    "_lockfile": {
      "documentation": null,
      "is_target": true,
      "name": "_lockfile",
      "signature": "(**kwargs: 'Any') -> 'TargetAdaptor'"
    },
...
```

This is a new sidebar option:


![image](https://github.com/pantsbuild/pantsbuild.org/assets/1203825/e1e1a27c-9cc2-47e1-ac07-644a1c019ae8)


Some of these have reasonable docs:


![image](https://github.com/pantsbuild/pantsbuild.org/assets/1203825/b453a0ad-055b-4ef9-b7b9-9528782f1d02)


![image](https://github.com/pantsbuild/pantsbuild.org/assets/1203825/3f11ca66-85a2-49cc-87f4-fe36ed75a960)


Others do not have good docs:


![image](https://github.com/pantsbuild/pantsbuild.org/assets/1203825/83df063c-2a59-434c-8d8e-878d6b57ac3e)


![image](https://github.com/pantsbuild/pantsbuild.org/assets/1203825/121f3c2e-10a3-491c-b836-f9cad0256d31)



![image](https://github.com/pantsbuild/pantsbuild.org/assets/1203825/76a07178-de41-4022-b29c-56a6f04f191e)


I think we should land this and then separately work to improve the
documentation of each BUILD file symbol:

- pantsbuild/pants#20976
- pantsbuild/pants#20977
- pantsbuild/pants#20978
- pantsbuild/pants#20979
- pantsbuild/pants#20980


To make this work, there's two other changes required, which are done as
separate commits:

- support for back-tick code blocks, to avoid mangling them
- explicit sidebar positions, so that `BUILD file symbols` is placed
last, rather than before `Global options` (thus becoming the default)

This generates back to the first version that include that (2.16) and
involves some other changes to the code-genned docs, hence this is
targeted `automation:sync-docs`.

Fixes #212
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant