From 35c24cc213df1e1ba1725fb669b7ba2fcc83936e Mon Sep 17 00:00:00 2001 From: Akash Manna Date: Tue, 14 Apr 2026 15:01:46 +0530 Subject: [PATCH 1/3] Wrong language for syntax highlighting --- .../jenkins/plugins/prism/SourcePrinter.java | 21 ++++++++++-- .../plugins/prism/SourcePrinterTest.java | 32 +++++++++++++++++++ 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java b/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java index 96f4682b..a645e69c 100644 --- a/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java +++ b/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java @@ -69,7 +69,7 @@ String render(final String fileName, final Stream lines, final Marker ma StringBuilder marked = readBlockUntilLine(stream, end); StringBuilder after = readBlockUntilLine(stream, Integer.MAX_VALUE); - String language = selectLanguageClass(fileName); + String language = selectLanguageClass(fileName, before, marked, after); String code = asCode(before, language, LINE_NUMBERS, MATCH_BRACES) + asMarkedCode(marked, marker, language, LINE_NUMBERS, "highlight", MATCH_BRACES) + createInfoPanel(marker) @@ -150,8 +150,15 @@ private UnescapedText unescape(final String message) { } @SuppressWarnings({"javancss", "PMD.CyclomaticComplexity"}) - private String selectLanguageClass(final String fileName) { - return switch (StringUtils.substringAfterLast(fileName, ".")) { + private String selectLanguageClass(final String fileName, + final StringBuilder before, final StringBuilder marked, final StringBuilder after) { + String extension = StringUtils.substringAfterLast(fileName, "."); + + if ("ts".equals(extension) && looksLikeMarkup(before, marked, after)) { + return "language-markup"; + } + + return switch (extension) { case "htm", "html", "xml", "xsd" -> "language-markup"; case "css" -> "language-css"; case "js" -> "language-javascript"; @@ -180,6 +187,14 @@ private String selectLanguageClass(final String fileName) { }; } + private boolean looksLikeMarkup( + final StringBuilder before, final StringBuilder marked, final StringBuilder after) { + String content = before.toString() + marked + after; + String trimmed = StringUtils.stripStart(content, null); + + return trimmed.startsWith("<") || trimmed.startsWith("", + "MainWindow"), issue)); + + assertThat(document.getElementsByTag("code").first()) + .isNotNull(); + assertThat(document.getElementsByTag("code").first().classNames()) + .contains("language-markup"); + } + private JenkinsFacade createJenkinsFacade() { JenkinsFacade jenkinsFacade = mock(JenkinsFacade.class); when(jenkinsFacade.getImagePath(anyString())).thenReturn("/path/to/icon"); From 4f041b7d24248123c5bdb85531d2fb53cb318222 Mon Sep 17 00:00:00 2001 From: Akash Manna Date: Sat, 25 Apr 2026 10:28:48 +0530 Subject: [PATCH 2/3] Enhance SourcePrinter to recognize Qt translation files and update tests accordingly --- .../io/jenkins/plugins/prism/SourcePrinter.java | 16 ++++------------ .../plugins/prism/SourcePrinterTest.java | 17 +++++++++++++++-- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java b/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java index a645e69c..715900ed 100644 --- a/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java +++ b/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java @@ -29,6 +29,7 @@ class SourcePrinter { private static final Sanitizer SANITIZER = new Sanitizer(); private static final ColumnMarker COLUMN_MARKER = new ColumnMarker("-n/a-"); + private static final String QT_LINGUIST_PATTERN = ""; private static final String LINE_NUMBERS = "line-numbers"; private static final String MATCH_BRACES = "match-braces"; private static final String ICON_MD = "icon-md"; @@ -69,7 +70,7 @@ String render(final String fileName, final Stream lines, final Marker ma StringBuilder marked = readBlockUntilLine(stream, end); StringBuilder after = readBlockUntilLine(stream, Integer.MAX_VALUE); - String language = selectLanguageClass(fileName, before, marked, after); + String language = selectLanguageClass(fileName, before); String code = asCode(before, language, LINE_NUMBERS, MATCH_BRACES) + asMarkedCode(marked, marker, language, LINE_NUMBERS, "highlight", MATCH_BRACES) + createInfoPanel(marker) @@ -150,11 +151,10 @@ private UnescapedText unescape(final String message) { } @SuppressWarnings({"javancss", "PMD.CyclomaticComplexity"}) - private String selectLanguageClass(final String fileName, - final StringBuilder before, final StringBuilder marked, final StringBuilder after) { + private String selectLanguageClass(final String fileName, final StringBuilder before) { String extension = StringUtils.substringAfterLast(fileName, "."); - if ("ts".equals(extension) && looksLikeMarkup(before, marked, after)) { + if ("ts".equals(extension) && StringUtils.contains(before, QT_LINGUIST_PATTERN)) { return "language-markup"; } @@ -187,14 +187,6 @@ private String selectLanguageClass(final String fileName, }; } - private boolean looksLikeMarkup( - final StringBuilder before, final StringBuilder marked, final StringBuilder after) { - String content = before.toString() + marked + after; - String trimmed = StringUtils.stripStart(content, null); - - return trimmed.startsWith("<") || trimmed.startsWith("", - "MainWindow"), issue)); + "", + "", + " ", + " MainWindow", + " ", + " Hello, world!", + " Hello, world!", + " ", + " ", + " File not found", + " File not found", + " ", + " ", + ""), issue)); assertThat(document.getElementsByTag("code").first()) .isNotNull(); From b7b57a47e8470553a17ef75b4d1ac83424754d3f Mon Sep 17 00:00:00 2001 From: Akash Manna Date: Sat, 25 Apr 2026 11:11:38 +0530 Subject: [PATCH 3/3] Replace deprecated StringUtils.contains with Strings.CS.contains --- src/main/java/io/jenkins/plugins/prism/SourcePrinter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java b/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java index 715900ed..5549e8c5 100644 --- a/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java +++ b/src/main/java/io/jenkins/plugins/prism/SourcePrinter.java @@ -5,6 +5,7 @@ import org.jenkins.ui.symbol.Symbol; import org.jenkins.ui.symbol.SymbolRequest; import org.jenkins.ui.symbol.SymbolRequest.Builder; +import org.apache.commons.lang3.Strings; import edu.hm.hafner.util.LookaheadStream; import edu.hm.hafner.util.VisibleForTesting; @@ -154,7 +155,7 @@ private UnescapedText unescape(final String message) { private String selectLanguageClass(final String fileName, final StringBuilder before) { String extension = StringUtils.substringAfterLast(fileName, "."); - if ("ts".equals(extension) && StringUtils.contains(before, QT_LINGUIST_PATTERN)) { + if ("ts".equals(extension) && Strings.CS.contains(before, QT_LINGUIST_PATTERN)) { return "language-markup"; }