RFR: 8276124: Provide snippet support for properties files [v2]
Jonathan Gibbons
jjg at openjdk.java.net
Mon Nov 22 23:33:10 UTC 2021
On Mon, 22 Nov 2021 17:43:08 GMT, Pavel Rappo <prappo at openjdk.org> wrote:
>> src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/SnippetTaglet.java line 67:
>>
>>> 65: public class SnippetTaglet extends BaseTaglet {
>>> 66:
>>> 67: public enum Language {
>>
>> The idea of a `Language` object is good, but using an `enum` precludes easy extensibility.
>
> We'll figure out the extensibility when the need comes. The language of a snippet defines both the comment marker and the comment type. For now, an alternative to that enum would be a boolean flag, which is less readable.
All I'm suggesting is to make `Language` a class, with a public constructor and (for now) some standard static members. In other words, plan for the possibility of additional languages, by not limiting the code to an enum at this time.
>> src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/taglets/snippet/Parser.java line 87:
>>
>>> 85: int payloadEnd();
>>> 86: int markupStart();
>>> 87: }
>>
>> I'm surprised/disappointed that this may be necessary, although I accept there is a notable difference between "whole-line comments" and "end-of-line comments". Is it possible to reduce `CoarseParser` down to a language-specific regular expression with named groups for the payload and markup, such that the regular expression could be a property of the `Language` object?
>
> I'm going to answer both of your comments, this and that one above:
>
>> I think you can simplify the code by reducing `CoarseParser` down to a language-specific regular expression with "standard" named groups for the payload and markup.
>
> Regular expressions with named groups were the initial design. However, I changed it to `CoarseParser` halfway through the implementation, when saw how bulky the named regex were becoming. As you also note, "end-of-line comments" and "comment lines" differ. I couldn't quickly come up with a regex that accounts for both of them.
You may be somewhat missing the point I was trying to make.
You have two impls of `CoarseParser`, both of which contain a regular expression for the parsing, hidden inside their private matcher field.
The only other functionality of `CoarseParse` is `payloadEnd` and `markupStart`.
My suggestion is to start by updating each of the regex with named groups such that you can derive `payloadEnd` and `markupStart` from the appropriate named groups.
At that point, the only thing unique about the impls of `CoarseParser` is their regex, and that regex could become a property of the `Language` object.
> As you also note, "end-of-line comments" and "comment lines" differ. I couldn't quickly come up with a regex that accounts for both of them.
To be clear, I am _not_ suggesting a single regex. I am suggesting a regex per supported language.
-------------
PR: https://git.openjdk.java.net/jdk/pull/6397
More information about the javadoc-dev
mailing list