From ea53e0a85df701c679be2a96afa9fa6592f7af32 Mon Sep 17 00:00:00 2001 From: Nacy Dev Date: Fri, 30 Oct 2026 01:09:44 +0700 Subject: [PATCH] fix: treat comment-like tokens inside text blocks as string fragments --- src/parser.ts | 18 ++++++++++++++---- test/unit-test/text-blocks/_input.java | 7 +++++++ test/unit-test/text-blocks/_output.java | 7 +++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/parser.ts b/src/parser.ts index d1a4cc1c..6801b939 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -62,9 +62,16 @@ const isParenthesizedParent = createTypeCheckFunction([ function processTree( node: Node, fieldName: string | null = null, - comments?: CommentNode[] + comments?: CommentNode[], + parentType?: string ) { - const { type, isNamed, text: value, startPosition, endPosition } = node; + const type = + parentType === SyntaxType.StringLiteral && + (node.type === SyntaxType.BlockComment || + node.type === SyntaxType.LineComment) + ? SyntaxType.MultilineStringFragment + : node.type; + const { isNamed, text: value, startPosition, endPosition } = node; const javaNode = { type, isNamed, @@ -109,7 +116,10 @@ function processTree( : [child]; children.forEach(child => { const { type, text: value, startPosition, endPosition } = child; - if (type === SyntaxType.BlockComment || type === SyntaxType.LineComment) { + if ( + node.type !== SyntaxType.StringLiteral && + (type === SyntaxType.BlockComment || type === SyntaxType.LineComment) + ) { comments.push({ type, value, @@ -128,7 +138,7 @@ function processTree( printed: false }); } else { - const javaChild = processTree(child, fieldName, comments); + const javaChild = processTree(child, fieldName, comments, node.type); javaNode.children.push(javaChild); if (javaChild.isNamed) { diff --git a/test/unit-test/text-blocks/_input.java b/test/unit-test/text-blocks/_input.java index 9f474a22..c8b62409 100644 --- a/test/unit-test/text-blocks/_input.java +++ b/test/unit-test/text-blocks/_input.java @@ -69,6 +69,13 @@ public void print(%s object) { \077 \u0041"""; + String comments = """ + /* a "b" c */ + // a "b" c + /* a \n c */ + // a \n c + """; + void json() { // language = json String someJson = """ diff --git a/test/unit-test/text-blocks/_output.java b/test/unit-test/text-blocks/_output.java index 02b6608b..808cf9eb 100644 --- a/test/unit-test/text-blocks/_output.java +++ b/test/unit-test/text-blocks/_output.java @@ -67,6 +67,13 @@ public void print(%s object) { \077 \u0041"""; + String comments = """ + /* a "b" c */ + // a "b" c + /* a \n c */ + // a \n c + """; + void json() { // language = json String someJson = """