antlr / antlr/stringtemplate4

Auto-indent with special characters, aka line-wrapping JavaDocs

Open
#265 3 comments 0 reactions 0 assignees View on GitHub
type:feature
Dominant language
Java
Stars
1k
Forks
234
PR merge metrics
No merged PRs in 30d

Description

## Description

I am looking for an elegant solution for generating JavaDocs, or in general, multi-line strings where each line begins with some characters that are not necessarily whitespace.

For example, if someone sets the description for something to be a multiline string:

```
This is a method.
It does cool things.
```

I want to generate the following doc comment:

```java
/**
* This is a method.
* It does cool things.
*/
```

## Workaround

My current solution looks like this:

```
javadoc(foo) ::= <<
/**
*
*/
>>
```

`foo` provides two getters, one for the plain description, the other is a helper for splitting that into lines:

```java
class Foo {
private String description;

public String getDescription() { return this.description; }

public List getDescriptionLines() { return Arrays.asList(this.description.split("\n"); }
}
```

There are two problems with this solution:

1. The `separator` in the template duplicates the indent. This is confusing and becomes worse when indenting more:

```
/**
* @param value
*
*/
```

2. The `getDescriptionLines` method needs to be `public`, despite technically being a helper method. Users of my library could start using the method and I can never get rid of it. It also needs to be documented.

3. Line wrapping would either look broken or needs to be implemented manually in `getDescriptionLines`.

## Possible Solutions

The first and third problem could be solved by somehow making `AutoIndentWriter` and friends aware of the fact that `*` should be treated as indentation in certain contexts.

The second problem could be solved by a new function, e.g. `lines`, or an option, e.g. `split`:

```

```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.