On Mon, 22 Nov 2021 17:43:08 GMT, Pavel Rappo <pra...@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

Reply via email to