highlightjs / highlight.js

JavaScript syntax highlighter with language auto-detection and zero dependencies.
https://highlightjs.org/
BSD 3-Clause "New" or "Revised" License
23.3k stars 3.52k forks source link

(Java) Generic type variable not highlighted #4017

Open amichair opened 3 months ago

amichair commented 3 months ago

Describe the issue In a Java statement that declares and assigns a variable with a generic type, the type and variable don't get highlighted. Without the generic type they are properly highlighted.

Which language seems to have the issue? java

Are you using highlight or highlightAuto? highlightElement ...

Sample Code to Reproduce

Map<String, String> params = request.getParams();

Expected behavior Without the generic type, the type (Map) and variable (params) get highlighted. They should be similarly highlighted also when the generic type is present (and the generic type itself should be highlighted as well).

Additional context The example shows two generic types, but the issue also occurs with a single type such as List. This is the proper way of defining such collections.

joshgoebel commented 3 months ago

Are all types in Java CamelCase?

amichair commented 3 months ago

As the example shows, types in this case are all a capitalized single words, and variables are lowercase single words.

amichair commented 3 months ago

Here it is on the demo site: https://highlightjs.org/demo#lang=java&v=1&theme=atom-one-dark&code=TGlzdDxTdHJpbmc%2BIGxpc3QgPSBuZXcgQXJyYXnFHT4oKTsgLy8gbm90IGhpZ2hsaWdodGVkCsQdxTIy2TPML01hcMdoLCDIcG1hcMc8SGFzaMQi2G1NYXDELshr0C%2FMKwo%3D

joshgoebel commented 3 months ago

Are all types in Java CamelCase?

The question was about Java, not your example. Are types always CamelCase in the Java language?

amichair commented 3 months ago

Sorry, I misunderstood. By convention, types/classes are PascalCase, while variables/parameters/fields/methods are camelCase. Constructors are PascalCase because they are equal to the class name. Constants are all uppercase SNAKE_CASE. And a generic type can also be specified as a question mark, as in List<?>, and can be recursive as in List<Map<String, Integer>>, or use two special hierarchy tokens as in List<? extends Something> or List<? super Something>, though you probably don't get into such resolution for highlighting. I hope this helps...

joshgoebel commented 3 months ago

So if we just chose to highlight every occurrence of PascalCase as title.class, where would that leave us?

amichair commented 3 months ago

Probably ok, as long as it's not in strings or comments etc.