From e9451617180f3a36de119291bc36ed9b63e12489 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Mon, 10 Nov 2025 12:04:39 +0100 Subject: [PATCH 1/2] Preserve shebang --- .../RemoveTrailingWhitespaceVisitor.java | 3 +- .../RemoveTrailingWhitespaceTest.java | 57 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 rewrite-javascript/src/integTest/java/org/openrewrite/javascript/RemoveTrailingWhitespaceTest.java diff --git a/rewrite-java/src/main/java/org/openrewrite/java/format/RemoveTrailingWhitespaceVisitor.java b/rewrite-java/src/main/java/org/openrewrite/java/format/RemoveTrailingWhitespaceVisitor.java index 872381ea97..68a4d7a54a 100644 --- a/rewrite-java/src/main/java/org/openrewrite/java/format/RemoveTrailingWhitespaceVisitor.java +++ b/rewrite-java/src/main/java/org/openrewrite/java/format/RemoveTrailingWhitespaceVisitor.java @@ -57,7 +57,8 @@ public Space visitSpace(Space space, Space.Location loc, P p) { String whitespace = s.getWhitespace(); int lastNewline = whitespace.lastIndexOf('\n'); // Skip import prefixes, leave those up to OrderImports which better understands that domain - if (lastNewline > 0 && loc != Space.Location.IMPORT_PREFIX) { + // Skip compilation unit prefix to preserve shebangs and other file-level prefixes + if (lastNewline > 0 && loc != Space.Location.IMPORT_PREFIX && loc != Space.Location.COMPILATION_UNIT_PREFIX) { StringBuilder ws = new StringBuilder(); for (int i = 0; i < whitespace.length(); i++) { char c = whitespace.charAt(i); diff --git a/rewrite-javascript/src/integTest/java/org/openrewrite/javascript/RemoveTrailingWhitespaceTest.java b/rewrite-javascript/src/integTest/java/org/openrewrite/javascript/RemoveTrailingWhitespaceTest.java new file mode 100644 index 0000000000..228e8b51be --- /dev/null +++ b/rewrite-javascript/src/integTest/java/org/openrewrite/javascript/RemoveTrailingWhitespaceTest.java @@ -0,0 +1,57 @@ +/* + * Copyright 2025 the original author or authors. + *

+ * Licensed under the Moderne Source Available License (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * https://docs.moderne.io/licensing/moderne-source-available-license + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.javascript; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; +import org.openrewrite.Issue; +import org.openrewrite.java.format.RemoveTrailingWhitespace; +import org.openrewrite.javascript.rpc.JavaScriptRewriteRpc; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; +import org.openrewrite.test.TypeValidation; + +import static org.openrewrite.javascript.Assertions.javascript; + +class RemoveTrailingWhitespaceTest implements RewriteTest { + + @Override + public void defaults(RecipeSpec spec) { + spec.recipe(new RemoveTrailingWhitespace()) + .typeValidationOptions(TypeValidation.builder().allowNonWhitespaceInWhitespace(true).build()); + } + + @AfterEach + void after() { + JavaScriptRewriteRpc.shutdownCurrent(); + } + + @Issue("https://github.com/openrewrite/rewrite/issues/6274") + @Test + void doNotRemoveShebang() { + rewriteRun( + javascript( + """ + #!/usr/bin/env node + + /** + * Generate llms.txt and llms-full.txt for OpenRewrite documentation + */ + """ + ) + ); + } +} From f5ff26797f60c5dc372141bfccae79c02f6fc576 Mon Sep 17 00:00:00 2001 From: Greg Oledzki Date: Thu, 27 Nov 2025 14:20:17 +0100 Subject: [PATCH 2/2] Remove allowNonWhitespaceInWhitespace --- .../openrewrite/javascript/RemoveTrailingWhitespaceTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rewrite-javascript/src/integTest/java/org/openrewrite/javascript/RemoveTrailingWhitespaceTest.java b/rewrite-javascript/src/integTest/java/org/openrewrite/javascript/RemoveTrailingWhitespaceTest.java index 228e8b51be..03272f766a 100644 --- a/rewrite-javascript/src/integTest/java/org/openrewrite/javascript/RemoveTrailingWhitespaceTest.java +++ b/rewrite-javascript/src/integTest/java/org/openrewrite/javascript/RemoveTrailingWhitespaceTest.java @@ -30,8 +30,7 @@ class RemoveTrailingWhitespaceTest implements RewriteTest { @Override public void defaults(RecipeSpec spec) { - spec.recipe(new RemoveTrailingWhitespace()) - .typeValidationOptions(TypeValidation.builder().allowNonWhitespaceInWhitespace(true).build()); + spec.recipe(new RemoveTrailingWhitespace()); } @AfterEach