/* * 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.
*/
import {Option, Recipe} from "../../../recipe";
import {TreeVisitor} from "../../../visitor";
import {ExecutionContext} from "../../../execution";
import {JavaScriptVisitor} from "../../visitor";
import {J} from "../../../java";
import {create as produce} from "mutative";
export class ModernizeOctalEscapeSequences extends Recipe {
name = "org.openrewrite.javascript.migrate.es6.modernize-octal-escape-sequences";
displayName = "Modernize octal escape sequences";
description = "Convert old-style octal escape sequences (e.g., `\\0`, `\\123`) to modern hex escape sequences (e.g., `\\x00`, `\\x53`) or Unicode escape sequences (e.g., `\\u0000`, `\\u0053`).";
@Option({
displayName: "Use Unicode escapes",
description: "Use Unicode escape sequences (`\\uXXXX`) instead of hex escape sequences (`\\xXX`). Default is `false`.",
required: false,
example: "true"
})
useUnicodeEscapes: boolean;
constructor(options?: { useUnicodeEscapes?: boolean }) {
super(options);
this.useUnicodeEscapes ??= false;
}
async editor(): Promise