From 527104a21f12909efba6c63ad35e3433ea679d86 Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Tue, 12 Nov 2024 13:42:28 +0100 Subject: [PATCH 1/2] Implement some missing remoting extensions Use new socket in `JavaScriptParser`. --- .../src/java/remote/remote_extensions.ts | 53 ++++++++++++++++--- .../javascript/JavaScriptParser.java | 7 ++- 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/openrewrite/src/java/remote/remote_extensions.ts b/openrewrite/src/java/remote/remote_extensions.ts index ea99c041..b06cadda 100644 --- a/openrewrite/src/java/remote/remote_extensions.ts +++ b/openrewrite/src/java/remote/remote_extensions.ts @@ -1,6 +1,6 @@ import {Comment, JContainer, JLeftPadded, JRightPadded, Space, TextComment} from "../tree"; import {DetailsReceiver, ReceiverContext, SenderContext, ValueType} from "@openrewrite/rewrite-remote"; -import {Tree} from "../../core"; +import {Markers, Tree} from "../../core"; export function sendSpace(space: Space, ctx: SenderContext) { ctx.sendNodes(space, v => v.comments, sendComment, x => x); @@ -68,13 +68,37 @@ export function sendRightPadded(type: ValueType): (rightPadded: JRightPadded< } export function receiveContainer(container: JContainer | null, type: string | null, ctx: ReceiverContext): JContainer { - // FIXME - throw new Error("Not implemented!"); + if (container != null) { + container = container.withBefore(ctx.receiveNode(container.before, receiveSpace)!); + container = container.padding.withElements( + ctx.receiveNodes(container.padding.elements, receiveRightPaddedTree)! + ); + container = container!.withMarkers(ctx.receiveNode(container.markers, ctx.receiveMarkers)!); + } else { + container = JContainer.build( + ctx.receiveNode(null, receiveSpace)!, + ctx.receiveNodes>(null, receiveRightPaddedTree)!, + ctx.receiveNode(null, ctx.receiveMarkers)! + ); + } + return container; } -export function leftPaddedValueReceiver(type: any): DetailsReceiver> { - // FIXME - throw new Error("Not implemented!"); +export function leftPaddedValueReceiver(valueType: any): DetailsReceiver> { + return (leftPadded, type, ctx): JLeftPadded => { + if (leftPadded != null) { + leftPadded = leftPadded.withBefore(ctx.receiveNode(leftPadded.before, receiveSpace)!); + leftPadded = leftPadded.withElement(ctx.receiveValue(leftPadded.element, valueType)!); + leftPadded = leftPadded.withMarkers(ctx.receiveNode(leftPadded.markers, ctx.receiveMarkers)!); + } else { + leftPadded = new JLeftPadded( + ctx.receiveNode(null, receiveSpace)!, + ctx.receiveValue(null, valueType)!, + ctx.receiveNode(null, ctx.receiveMarkers)! + ); + } + return leftPadded; + }; } export function leftPaddedNodeReceiver(type: any): DetailsReceiver> { @@ -130,7 +154,22 @@ export function rightPaddedValueReceiver(valueType: any): DetailsReceiver(type: any): DetailsReceiver> { - // FIXME + if (type === Space || type.name === 'Space') { + return function (rightPadded: JRightPadded, t: string | null, ctx: ReceiverContext): JRightPadded { + if (rightPadded !== null) { + rightPadded = rightPadded.withElement(ctx.receiveNode(rightPadded.element, receiveSpace)!); + rightPadded = rightPadded.withAfter(ctx.receiveNode(rightPadded.after, receiveSpace)!); + rightPadded = rightPadded.withMarkers(ctx.receiveNode(rightPadded.markers, ctx.receiveMarkers)!); + } else { + rightPadded = new JRightPadded( + ctx.receiveNode(null, receiveSpace)!, + ctx.receiveNode(null, receiveSpace)!, + ctx.receiveNode(null, ctx.receiveMarkers) + ); + } + return rightPadded; + } as unknown as DetailsReceiver>; + } throw new Error("Not implemented!"); } diff --git a/rewrite-javascript/src/main/java/org/openrewrite/javascript/JavaScriptParser.java b/rewrite-javascript/src/main/java/org/openrewrite/javascript/JavaScriptParser.java index 49fecbfd..7e10491a 100644 --- a/rewrite-javascript/src/main/java/org/openrewrite/javascript/JavaScriptParser.java +++ b/rewrite-javascript/src/main/java/org/openrewrite/javascript/JavaScriptParser.java @@ -92,8 +92,10 @@ public Stream parseInputs(Iterable inputs, @Nullable Path rel Path path = input.getRelativePath(relativeTo); parsingListener.startedParsing(input); + assert client != null; + assert remotingContext != null; try (EncodingDetectingInputStream is = input.getSource(ctx)) { - SourceFile parsed = client.runUsingSocket((socket, messenger) -> requireNonNull(messenger.sendRequest(generator -> { + SourceFile parsed = client.withNewSocket((socket, messenger) -> requireNonNull(messenger.sendRequest(generator -> { if (input.isSynthetic() || !Files.isRegularFile(input.getPath())) { generator.writeString("parse-source"); generator.writeString(is.readFully()); @@ -121,6 +123,9 @@ public Stream parseInputs(Iterable inputs, @Nullable Path rel } catch (Throwable t) { ctx.getOnError().accept(t); return ParseError.build(this, input, relativeTo, ctx, t); + } finally { + // NOTE: this is because we parse one source at the time + client.getContext().reset(); } }); } From 90d05005977229d586d6cc82a32eba7854ddc6bd Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Tue, 12 Nov 2024 14:01:34 +0100 Subject: [PATCH 2/2] Revert change in `JavaScriptParser` --- .../main/java/org/openrewrite/javascript/JavaScriptParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rewrite-javascript/src/main/java/org/openrewrite/javascript/JavaScriptParser.java b/rewrite-javascript/src/main/java/org/openrewrite/javascript/JavaScriptParser.java index 7e10491a..ebb8732b 100644 --- a/rewrite-javascript/src/main/java/org/openrewrite/javascript/JavaScriptParser.java +++ b/rewrite-javascript/src/main/java/org/openrewrite/javascript/JavaScriptParser.java @@ -95,7 +95,7 @@ public Stream parseInputs(Iterable inputs, @Nullable Path rel assert client != null; assert remotingContext != null; try (EncodingDetectingInputStream is = input.getSource(ctx)) { - SourceFile parsed = client.withNewSocket((socket, messenger) -> requireNonNull(messenger.sendRequest(generator -> { + SourceFile parsed = client.runUsingSocket((socket, messenger) -> requireNonNull(messenger.sendRequest(generator -> { if (input.isSynthetic() || !Files.isRegularFile(input.getPath())) { generator.writeString("parse-source"); generator.writeString(is.readFully());